refactored from "domain" to "model"