sclass SimpleLiveValue extends LiveValue { Class type; volatile A value; transient L onChange = synchroList(); *(Class *type) {} *(Class *type, A *value) {} public Class getType() { ret type; } public A get() { ret value; } public void onChange(Runnable l) { onChange.add(l); } public void removeOnChangeListener(Runnable l) { onChange.remove(l); } void fireChanged() { pcallFAll(onChange); } void set(A a) { if (neq(value, a)) { value = a; fireChanged(); } } }