all done through main
separated classes with factory methods
class names changed
changed names