almost only use abstract classes for items now