finished TDD domain model