adds template support for components
changes symantics to prevent overloading template name