more abstract item model