refactor domain object