Avoid starvation by finding the challenge functions outside a transaction
Save application state in its own thread
Stop and restart poller threads on every round