Added a validation system
Fleshed out some classes a bit more