refactor all this DI crap