making abstract classes and cleaning up