Better tests and better written classes. Not a working version.