added full dependency injection