Lots of refactoring, added InjectableTrait and a bunch of interfaces