major refactoring to use dependency injection via guice