redo with mixin templates