move guard/body/update to front of vtab
simplify template definitions