 <p>The Streams from the linked answer seem like an analog of core.async channels.</p> <p>Instead of removing all listeners each event maybe pass in a channel that has event details put to it. The same channel should go to the button's logic handler where it will repeatedly be taken from.</p>