initial domain model - untested!