using templates, yay