Re-Implemented everything, added new classes