Introduce factories
Overhaul of object structure
Object model redesign
Tests and fixes
Merge branch 'structure-design'