Kas: I think you're right about two separate bugs (time goes backward, yield doesn't always yield), and I think this code makes it clearer: ==============pasted code below============== Event e; spork ~ costello(); abbot(); fun void abbot() { while (1) { now + 1.00001::second => time later; <<< "abbot(1):", now, later >>>; later => now; <<< "abbot(2):", now, later >>>; e.broadcast(); <<< "abbot(3):", now, later >>>; me.yield(); <<< "abbot(4):", now, later >>>; } } fun void costello() { while (1) { <<< "costello(1):", now >>>; e => now; <<< "costello(2):", now >>>; } } ==============annotated output below============== [poorbook15-8:~] r% chuck bar.ck abbot(1): 0.000000 44100.441000 // abbot about to block on later => now costello(1): 0.000000 // costello gets a chance to run abbot(2): 44100.441000 44100.441000 // abbot unblocks, about to broadcast abbot(3): 44100.441000 44100.441000 // abbot has broadcast, about to yield() costello(2): 44100.000000 // abbot yielded, costello runs BUT NOW IS TRUNCATED costello(1): 44100.000000 // costello is about to block on e => now abbot(4): 44100.441000 44100.441000 // abbot has yielded, about to loop. abbot(1): 44100.441000 88200.882000 // abbot about to block on later => now abbot(2): 88200.882000 88200.882000 // abbot unblocks, about to broadcast abbot(3): 88200.882000 88200.882000 // abbot has broadcast, about to yield abbot(4): 88200.882000 88200.882000 // abbot has yielded BUT COSTELLO DIDN'T RUN abbot(1): 88200.882000 132301.323000 // abbot about to block on later => now costello(2): 88201.000000 // costello runs, BUT NOW IS TRUNCATED costello(1): 88201.000000 // etc... abbot(2): 132301.323000 132301.323000 abbot(3): 132301.323000 132301.323000 // abbot has broadcast, about to yield costello(2): 132301.000000 // aha! the yield worked! costello(1): 132301.000000 abbot(4): 132301.323000 132301.323000 abbot(1): 132301.323000 176401.764000 =========================== Note that yield() seems to take effect sometimes and not others. Ugh. If anyone asks me to, I can write this as a more automated test to check for both errors. Is there an official "test harness" for ChucK, i.e. using asserts() or the equivalent? - Rob