a whole bunch of templating
screw this