Add polymorphic models, bigin to refactor out some of the type stuff