polymorphic enum!