Spent most of the past day moving the assistant into a monad of its own that encapsulates all the communications channels for its threads. This involved modifiying nearly every line of code in the whole assistant. Typical change: [[!format haskell """ handleConnection threadname st dstatus scanremotes pushnotifier = do reconnectRemotes threadname st dstatus scanremotes (Just pushnotifier) =<< networkRemotes st handleConnection = reconnectRemotes True =<< networkRemotes """]] So, it's getting more readable..