added some facts
restructured to use module mixins instead of senseless inheritance