Moved to case classes for factory methods