Domain objects master

Introduce various new domain objects and refactor the corresponding managers to uses these objects and be singletons.