Revert back to case class + companion object (temporarily?)