Added interfaces to all classes
Replaced abstract class with interface
Added more tests (TBC)
Added Mocking