Reduce implementation to the stric minimum
Rationalize patterns using factories instead of direct object constructors