this is kind of tedious
starting to template