slightly refactored models