added more classes and unit tests