switched from mixins to inheritance