start splitting out stuff into dependency injection patterns