even more templating. *snore*