Architecture review

Making easier to use dependency injection (e.g. Spring)