persistable sclass TargetAndActual extends MetaWithChangeListeners { settableWithVar A target; settableWithVar A actual; *(A *target, A *actual) {} *(A *target) {} toString { ret commaCombine( target == null ?: "Target: " + target, actual == null ?: "Actual: " + actual); } A value aka get() { ret actual; } bool hasTarget() { ret target != null; } void set aka value(A actual) { actual(actual); } }