why do we need to have the template id given by our caller ? could it be different over different calls ? otherwise we could just keep a single template instance in the closure and go