less fake singletons, added abstraction