diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+Version 0.0.4.0 2017-09-12 by luispedro
+	* Fix bug in merge* conduits
+
 Version 0.0.3.0 2017-08-30 by luispedro
 	* Much improved mergeC2 function
 	* Add removeRepeatsC conduit
diff --git a/Data/Conduit/Algorithms.hs b/Data/Conduit/Algorithms.hs
--- a/Data/Conduit/Algorithms.hs
+++ b/Data/Conduit/Algorithms.hs
@@ -94,8 +94,9 @@
         go right@(CI.HaveOutput s1' f1 v1) left@(CI.HaveOutput s2' f2 v2)
             | compare v1 v2 /= GT = CI.HaveOutput (go s1' left) (f1 >> f2) v1
             | otherwise = CI.HaveOutput (go right s2') (f1 >> f2) v2
-        go right CI.Done{} = right
-        go CI.Done{} left = left
+        go right@CI.Done{} (CI.HaveOutput s f v) = CI.HaveOutput (go right s) f v
+        go (CI.HaveOutput s f v) left@CI.Done{}  = CI.HaveOutput (go s left)  f v
+        go CI.Done{} CI.Done{} = rest ()
         go (CI.PipeM p) left = do
             next <- lift p
             go next left
@@ -106,5 +107,5 @@
         go right (CI.NeedInput _ next) = go right (next ())
         go (CI.Leftover next ()) left = go next left
         go right (CI.Leftover next ()) = go right next
-    in go (s1 rest) (s2 rest)
+    in go (s1 CI.Done) (s2 CI.Done)
 
diff --git a/Data/Conduit/Algorithms/Tests.hs b/Data/Conduit/Algorithms/Tests.hs
--- a/Data/Conduit/Algorithms/Tests.hs
+++ b/Data/Conduit/Algorithms/Tests.hs
@@ -9,8 +9,11 @@
 import Test.Framework.Providers.HUnit
 
 import qualified Data.ByteString as B
+import qualified Data.ByteString.Char8 as B8
 import qualified Data.Conduit as C
 import qualified Data.Conduit.Combinators as CC
+import qualified Data.Conduit.Binary as CB
+import qualified Data.Conduit.List as CL
 import           Data.Conduit ((.|))
 import           Data.List (sort)
 import           System.Directory (removeFile)
@@ -24,12 +27,17 @@
 
 testingFileNameGZ :: FilePath
 testingFileNameGZ = "file_just_for_testing_delete_me_please.gz"
+testingFileNameGZ2 :: FilePath
+testingFileNameGZ2 = "file_just_for_testing_delete_me_please_2.gz"
 
 extract c = C.runConduitPure (c .| CC.sinkList)
 
 extractIO c = C.runConduitRes (c .| CC.sinkList)
 
 shouldProduce values cond = extract cond @?= values
+shouldProduceIO values cond = do
+    p <- extractIO cond
+    p @?= values
 
 case_uniqueC = extract (CC.yieldMany [1,2,3,1,1,2,3] .| CAlg.uniqueC) @=? [1,2,3 :: Int]
 case_mergeC = shouldProduce expected $
@@ -54,6 +62,13 @@
                                 (CC.yieldMany [0, 1, 2])
                                 (CC.yieldMany [0, 1, 2])
 
+case_mergeC2monad = shouldProduce [0, 1, 2, 2, 3, 4 :: Int] $ do
+                            CAlg.mergeC2
+                                (CC.yieldMany [0, 2])
+                                (CC.yieldMany [1, 2])
+                            CC.yieldMany [3]
+                            CC.yieldMany [4]
+
 case_groupC = shouldProduce [[0,1,2], [3,4,5], [6,7,8], [9, 10 :: Int]] $
                             CC.yieldMany [0..10] .| CAlg.groupC 3
 
@@ -72,3 +87,19 @@
     r @?= "Hello World"
     removeFile testingFileNameGZ
 
+
+case_async_gzip_to_from = do
+    let testdata = [0 :: Int .. 12]
+    C.runConduitRes $
+        CC.yieldMany testdata
+            .| CL.map (B8.pack . (\n -> show n ++ "\n"))
+            .| CAlg.asyncGzipToFile testingFileNameGZ
+    C.runConduitRes $
+        CAlg.asyncGzipFromFile testingFileNameGZ
+        .| CAlg.asyncGzipToFile testingFileNameGZ2
+    shouldProduceIO testdata $
+        CAlg.asyncGzipFromFile testingFileNameGZ2
+            .| CB.lines
+            .| CL.map (read . B8.unpack)
+    removeFile testingFileNameGZ
+    removeFile testingFileNameGZ2
diff --git a/Data/Conduit/Algorithms/Utils.hs b/Data/Conduit/Algorithms/Utils.hs
--- a/Data/Conduit/Algorithms/Utils.hs
+++ b/Data/Conduit/Algorithms/Utils.hs
@@ -40,6 +40,8 @@
 -- @
 --
 -- results in @[ [0,1,2], [3,4,5], [6,7,8], [9, 10] ]@
+--
+-- This function is deprecated; use 'Data.Conduit.List.chunksOf'
 groupC :: (Monad m) => Int -> C.Conduit a m [a]
 groupC n = loop n []
     where
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,5 +1,10 @@
 # Conduit Algorithms
 
+[![Hackage](https://img.shields.io/hackage/v/conduit-algorithms.svg)](https://hackage.haskell.org/package/conduit-algorithms)
+[![Hackage-Deps](https://img.shields.io/hackage-deps/v/conduit-algorithms.svg)](http://packdeps.haskellers.com/feed?needle=conduit-algorithms)
+[![Travis](https://api.travis-ci.org/luispedro/conduit-algorithms.png)](https://travis-ci.org/luispedro/conduit-algorithms)
+
+
 Some conduit-based algorithms.
 
 Much of this code was originally part of [NGLess](http://ngless.embl.de) and
diff --git a/conduit-algorithms.cabal b/conduit-algorithms.cabal
--- a/conduit-algorithms.cabal
+++ b/conduit-algorithms.cabal
@@ -1,5 +1,5 @@
 name:               conduit-algorithms
-version:            0.0.3.0
+version:            0.0.4.0
 synopsis:           Conduit-based algorithms
 description:        Algorithms on Conduits, including higher level asynchronous
                     processing and some other utilities.
