diff --git a/Network/IRC/Bot/Core.hs b/Network/IRC/Bot/Core.hs
--- a/Network/IRC/Bot/Core.hs
+++ b/Network/IRC/Bot/Core.hs
@@ -59,7 +59,11 @@
             }
 
 -- | connect to irc server and send NICK and USER commands
-ircConnect :: HostName -> PortID -> String -> User -> IO Handle
+ircConnect :: HostName
+           -> PortID
+           -> String
+           -> User
+           -> IO Handle
 ircConnect host port n u =
     do h <- connectTo host port
        hSetBuffering h LineBuffering
@@ -90,7 +94,6 @@
            (Just (burst, delay)) ->
                     do limiter <- newLimiter burst delay
                        return (limit limiter, Just $ limitsThreadId limiter)
-     doConnect logger host port nick user hTMVar connQSem
      outgoingTid  <- forkIO $ forever $
                       do msg <- readChan outgoingChan
                          writeMaybeChan logChan msg
@@ -99,7 +102,9 @@
                          hPutStrLn h (encode msg) `catch` (reconnect logger host port nick user hTMVar connQSem)
                          now <- getCurrentTime
                          atomically $ swapTMVar tmv now
-     incomingTid  <- forkIO $ forever $
+     incomingTid  <- forkIO $ do
+                      doConnect logger host port nick user hTMVar connQSem
+                      forever $
                        do h <- atomically $ readTMVar hTMVar
                           msgStr <- (hGetLine h) `catch` (\e -> reconnect logger host port nick user hTMVar connQSem e >> return "")
                           now <- getCurrentTime
@@ -111,14 +116,21 @@
                                  writeMaybeChan logChan msg
                                  writeChan incomingChan msg
      let forceReconnect =
-             do putStrLn "forceReconnect 1"
+             do putStrLn "forceReconnect: getting handle"
                 h <- atomically $ readTMVar hTMVar
-                putStrLn "forceReconnect 2"
+                putStrLn "forceReconnect: sending /quit"
                 writeChan outgoingChan (quit $ Just "restarting...")
+                putStrLn "forceReconnect: closing handle"
                 hClose h
-                putStrLn "forceReconnect 3"
+                putStrLn "done."
      return (outgoingTid, incomingTid, limitTid, forceReconnect)
 
+ircConnectLoop :: (LogLevel -> String -> IO a) -- ^ logging
+               -> HostName
+               -> PortID
+               -> String
+               -> User
+               -> IO Handle
 ircConnectLoop logger host port nick user =
         (ircConnect host port nick user) `catch`
         (\e ->
@@ -138,6 +150,12 @@
 reconnect :: Logger -> String -> PortID -> String -> User -> TMVar Handle -> QSem -> IOException -> IO ()
 reconnect logger host port nick user hTMVar connQSem e =
     do logger Normal $ "IRC Connection died: " ++ show e
+{-
+       atomically $ do empty <- isEmptyTMVar hTMVar
+                       if empty
+                          then return ()
+                          else takeTMVar hTMVar >> return ()
+-}
        doConnect logger host port nick user hTMVar connQSem
 
 onConnectLoop :: Logger -> String -> String -> Chan Message -> QSem -> BotPartT IO () -> IO ThreadId
diff --git a/ircbot.cabal b/ircbot.cabal
--- a/ircbot.cabal
+++ b/ircbot.cabal
@@ -1,7 +1,7 @@
 Name:                ircbot
-Version:             0.5.1
+Version:             0.5.2
 Synopsis:            A library for writing irc bots
-Homepage:            http://patch-tag.com/r/stepcut/ircbot
+Homepage:            http://hub.darcs.net/stepcut/ircbot
 License:             BSD3
 License-file:        LICENSE
 Author:              Jeremy Shaw, Eric Mertens
@@ -12,6 +12,10 @@
 Build-type:          Simple
 Cabal-version:       >=1.6
 
+source-repository head
+    type:     darcs
+    location: http://hub.darcs.net/stepcut/ircbot
+
 Library
   Exposed-modules:
                        Network.IRC.Bot
@@ -36,10 +40,10 @@
                   filepath   >= 1.2 && < 1.4,
                   irc        == 0.5.*,
                   mtl        >= 2.0 && < 2.2,
-                  network    == 2.3.*,
+                  network    >= 2.3 && < 2.5,
                   old-locale == 1.0.*,
                   parsec     == 3.1.*,
                   time       == 1.4.*,
                   unix       >= 2.4 && < 2.6,
                   random     == 1.0.*,
-                  stm        >= 2.2 && < 2.4
+                  stm        >= 2.2 && < 2.5
