explicitly combine guards, bodies, update methods
left out the module pointer to rules