classes for factory method