Jason, have you ever trief something like this?
person.watch = { cond, action, elseAction -> def value = person.with(cond).clone() @groovy.transform.Field lastValue if (value != lastValue) action(lastValue, value) else elseAction() lastValue = value }
bye Jochen