breaking change: wait() now returns nil instead of :nop