refactoring; using di everywhere