implemented class factory methods