Reordered classes to follow a better OO hierarchy for ease when adding new subclasses
removed some commented code