move to a template-driven mechanism

pushing this out to a template means that users can extend at their leisure