I have no preference. can be changed to a trait with an `apply` method in companion object if you prefer