Maybe it's better to have multiple apply methods on the companion object, instead of multiple constructors.