Refactored Many things

All classes should now be (mostly) encapsulated