Added unit tests, better organization, better classes and more