refactoring to use DI