templates was the wrong approach - going back to simple inheritance