Lets overengineer with some dependency injection