Finished implementing new domain model.
Merge branch 'new_domain_model'