Refactoring + added lots of Interfaces