would it make sense to make this a case class? Also `val length: Long"