Added interfaces and improved Dependency Injection