diff --git a/Data/Queue.hs b/Data/Queue.hs
--- a/Data/Queue.hs
+++ b/Data/Queue.hs
@@ -7,6 +7,9 @@
     , snoc
     , pop
     , cons
+    , append
+    , Data.Queue.foldr
+    , Data.Queue.map
     , send
     , recv
     , sendAtomic
@@ -41,6 +44,16 @@
 -- |Places an element at the front of the queue. O(1)
 cons :: a -> Queue d a -> Queue d a
 cons e (Q d n) = Q (D.cons e d) (n + 1)
+
+-- |Combine two queues.
+append :: Queue d a -> Queue d a -> Queue d a
+append (Q q i) (Q p j) = Q (D.append q p) (i + j)
+
+map :: (a -> b) -> Queue d a -> Queue d b
+map f (Q xs len) = Q (D.map f xs) len
+
+foldr :: (a -> b -> b) -> b -> Queue d a -> b
+foldr f z (Q xs len) = D.foldr f z xs
 
 -- |IO action for snoc on a TVar queue
 send :: TVar (Queue Output a) -> a -> IO ()
diff --git a/Test/recver.hs b/Test/recver.hs
new file mode 100644
--- /dev/null
+++ b/Test/recver.hs
@@ -0,0 +1,12 @@
+module Main where
+
+import System.IPC
+import Control.Concurrent.STM
+import Control.Concurrent (threadDelay)
+import Control.Monad 
+
+main = do
+    q <- channelAcceptSimple "Test"
+    forever (do x <- recv q
+                putStrLn x )
+    threadDelay 10000
diff --git a/Test/sender.hs b/Test/sender.hs
new file mode 100644
--- /dev/null
+++ b/Test/sender.hs
@@ -0,0 +1,11 @@
+module Main where
+
+import System.IPC
+import Control.Concurrent.STM
+import Control.Concurrent
+
+main = do
+    q <- channelConnectSimple "Test"
+    mapM_ (\x -> send q ("Hello: " ++ (show x))) [1..1000]
+    waitTillEmpty q
+    threadDelay 1000
diff --git a/ipc.cabal b/ipc.cabal
--- a/ipc.cabal
+++ b/ipc.cabal
@@ -1,5 +1,5 @@
 name:                ipc
-version:             0.0.2
+version:             0.0.3
 synopsis:            High level inter-process communication library
 description:         Provides inter-process communication at a high level
 Copyright:           2008, Thomas DuBuisson
