!7 sclass Prop { S text, module; Runnable action; long date = now(); [stdEq] } cmodule ProposedActions > DynObjectTable { transient int expiryTime = 10000; transient long timer; // When we began thinking transient int thinkTime = 2000; start { dontPersist(); // can't persist foreign Runnables //doEvery(1000, r cleanList); } void addProposition(S text, Runnable action, S module) { add(nu(Prop, +text, +action, +module)); } void cleanList { setField(data := objectsWhereFieldGreaterThan(cloneList(data), date := now()-expiryTime)); if (syncNempty(data)) { if (timer == 0) timer = now(); if (now() >= timer+thinkTime) { S out = getString(random(data), 'text); clear(); timer = 0; } } } }