looks like you always go back to receive from idle and gated, then you can use discardOld = false, and unbecome.
Don't know if that is more idiomatic or better in any way.