two types of recursive templater