refactored item model