Refactored into separate packages, converted all classes and constructors to public, if lesser access levels are needed they can be changed later