diff --git a/src/Control/Concurrent/STM/TMapChan.hs b/src/Control/Concurrent/STM/TMapChan.hs
--- a/src/Control/Concurrent/STM/TMapChan.hs
+++ b/src/Control/Concurrent/STM/TMapChan.hs
@@ -8,6 +8,7 @@
   , -- * Utils
     getTChan
   , setTChan
+  , keys
   , broadcast
   , cloneAt, cloneAll, cloneAllUniquely
   ) where
@@ -23,6 +24,9 @@
 
 
 newtype TMapChan k a = TMapChan {runTMapChan :: TVar (Map k (TChan a))}
+
+keys :: TMapChan k a -> STM [k]
+keys (TMapChan m) = Map.keys <$> readTVar m
 
 newTMapChan :: STM (TMapChan k a)
 newTMapChan = TMapChan <$> newTVar Map.empty
diff --git a/src/Control/Concurrent/STM/TMapChan/Hash.hs b/src/Control/Concurrent/STM/TMapChan/Hash.hs
--- a/src/Control/Concurrent/STM/TMapChan/Hash.hs
+++ b/src/Control/Concurrent/STM/TMapChan/Hash.hs
@@ -79,6 +79,9 @@
 
 -- * Utils
 
+keys :: TMapChan k a -> STM [k]
+keys (TMapChan m) = HashMap.keys <$> readTVar m
+
 
 -- | Creates a new one if it doesn't already exist
 getTChan :: (Eq k, Hashable k) => TMapChan k a -> k -> STM (TChan a)
diff --git a/tmapchan.cabal b/tmapchan.cabal
--- a/tmapchan.cabal
+++ b/tmapchan.cabal
@@ -1,5 +1,5 @@
 name:                tmapchan
-version:             0.0.2
+version:             0.0.3
 synopsis:            An insert-ordered multimap (indexed FIFO) which consumes values as you lookup
 -- description:
 homepage:            https://github.com/athanclark/tmapchan#readme
