Add support for @Singleton, refactor the tests
Re-add