Added several new classes and changed alot of code