diff --git a/d-bus.cabal b/d-bus.cabal
--- a/d-bus.cabal
+++ b/d-bus.cabal
@@ -1,5 +1,5 @@
 name:                d-bus
-version:             0.1.3
+version:             0.1.3.1
 synopsis:            Permissively licensed D-Bus client library
 description:         This library uses modern extensions to the Haskell type system
                      (including GADTs, DataKinds and TypeFamilies) and the
diff --git a/src/DBus/MainLoop.hs b/src/DBus/MainLoop.hs
--- a/src/DBus/MainLoop.hs
+++ b/src/DBus/MainLoop.hs
@@ -276,17 +276,17 @@
     aliveRef <- newTVarIO True
     weakAliveRef <- mkWeakPtr aliveRef Nothing
     let kill = do
-        mbRef <- deRefWeak weakAliveRef
-        case mbRef of
-             Nothing -> return ()
-             Just ref -> atomically $ writeTVar ref False
-        hClose h
-        slots <- atomically $ do sls <- readTVar answerSlots
-                                 writeTVar answerSlots Map.empty
-                                 return sls
-        atomically $ writeTVar signalSlots []
-        atomically $ forM_ (Map.elems slots) $ \s -> s . Left $
-                                        [DBV $ DBVString "Connection Closed"]
+            mbRef <- deRefWeak weakAliveRef
+            case mbRef of
+                 Nothing -> return ()
+                 Just ref -> atomically $ writeTVar ref False
+            hClose h
+            slots <- atomically $ do sls <- readTVar answerSlots
+                                     writeTVar answerSlots Map.empty
+                                     return sls
+            atomically $ writeTVar signalSlots []
+            atomically $ forM_ (Map.elems slots) $ \s -> s . Left $
+                                            [DBV $ DBVString "Connection Closed"]
     mfix $ \conn' -> do
         debugM "DBus" $ "Forking"
         handlerThread <- forkIO $ Ex.catch (do
diff --git a/src/DBus/Signal.hs b/src/DBus/Signal.hs
--- a/src/DBus/Signal.hs
+++ b/src/DBus/Signal.hs
@@ -210,6 +210,17 @@
     addSignalHandler match mempty (atomically . writeTChan signalChan) dbc
     return signalChan
 
+signalChan' :: Representable a =>
+               SignalDescription (FlattenRepType (RepType a))
+            -> Maybe Text
+            -> MatchRule
+            -> DBusConnection
+            -> IO (TChan a)
+signalChan' desc sender rules con = do
+    signalChan <- newTChanIO
+    handleSignal desc sender rules (atomically . writeTChan signalChan) con
+    return signalChan
+
 createSignal desc x = Signal{ signalPath = signalDPath desc
                             , signalInterface = signalDInterface desc
                             , signalMember = signalDMember desc
