diff --git a/Network/IRC/Client/Internal.hs b/Network/IRC/Client/Internal.hs
--- a/Network/IRC/Client/Internal.hs
+++ b/Network/IRC/Client/Internal.hs
@@ -127,16 +127,17 @@
 -- | Block on receiving a message and invoke all matching handlers
 -- concurrently.
 eventSink :: MonadIO m => IRCState s -> Consumer IrcEvent m ()
-eventSink ircstate = await >>= maybe (return ()) (\event -> do
-  let event'  = decodeUtf8 <$> event
-  ignored <- isIgnored ircstate event'
-  unless ignored $ do
-    handlers <- getHandlersFor event' . _eventHandlers <$> getInstanceConfig' ircstate
-    liftIO $ mapM_ (\h -> forkIO $ runReaderT (h event') ircstate) handlers
+eventSink ircstate = go where
+  go = await >>= maybe (return ()) (\event -> do
+    let event'  = decodeUtf8 <$> event
+    ignored <- isIgnored ircstate event'
+    unless ignored $ do
+      handlers <- getHandlersFor event' . _eventHandlers <$> getInstanceConfig' ircstate
+      liftIO $ mapM_ (\h -> forkIO $ runReaderT (h event') ircstate) handlers
 
-  -- If disconnected, do not loop.
-  disconnected <- (==Disconnected) <$> getConnState ircstate
-  unless disconnected (eventSink ircstate))
+    -- If disconnected, do not loop.
+    disconnected <- (==Disconnected) <$> getConnState ircstate
+    unless disconnected go)
 
 -- | Check if an event is ignored or not.
 isIgnored :: MonadIO m => IRCState s -> UnicodeEvent -> m Bool
diff --git a/irc-client.cabal b/irc-client.cabal
--- a/irc-client.cabal
+++ b/irc-client.cabal
@@ -10,7 +10,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.4.4.0
+version:             0.4.4.1
 
 -- A short (one-line) description of the package.
 synopsis:            An IRC client library.
@@ -114,4 +114,4 @@
 source-repository this
   type:     git
   location: https://github.com/barrucadu/irc-client.git
-  tag:      0.4.4.0
+  tag:      0.4.4.1
