template logic