diff --git a/conduit.cabal b/conduit.cabal
--- a/conduit.cabal
+++ b/conduit.cabal
@@ -1,5 +1,5 @@
 Name:                conduit
-Version:             1.0.17
+Version:             1.0.17.1
 Synopsis:            Streaming data processing library.
 Description:
     @conduit@ is a solution to the streaming data problem, allowing for production, transformation, and consumption of streams of data in constant memory. It is an alternative to lazy I\/O which guarantees deterministic resource handling, and fits in the same general solution space as @enumerator@\/@iteratee@ and @pipes@. For a tutorial, please visit <https://haskell.fpcomplete.com/user/snoyberg/library-documentation/conduit-overview>.
@@ -68,6 +68,8 @@
 test-suite test
     hs-source-dirs: test
     main-is: main.hs
+    other-modules: Data.Conduit.Extra.ZipConduitSpec
+                   Data.Conduit.ExtraSpec
     type: exitcode-stdio-1.0
     cpp-options:   -DTEST
     build-depends:   conduit
diff --git a/test/Data/Conduit/Extra/ZipConduitSpec.hs b/test/Data/Conduit/Extra/ZipConduitSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/Data/Conduit/Extra/ZipConduitSpec.hs
@@ -0,0 +1,26 @@
+module Data.Conduit.Extra.ZipConduitSpec (spec) where
+import Test.Hspec
+import Data.Conduit
+import qualified Data.Conduit.List as CL
+import Control.Applicative ((<*))
+
+spec :: Spec
+spec = describe "Data.Conduit.Extra.ZipConduit" $ do
+    it "ZipConduit" $ do
+        let src = mapM_ yield [1..3 :: Int]
+            conduit1 = CL.map (+1)
+            conduit2 = CL.concatMap (replicate 2)
+            conduit = getZipConduit $ ZipConduit conduit1 <* ZipConduit conduit2
+            sink = CL.consume
+        res <- src $$ conduit =$ sink
+        res `shouldBe` [2, 1, 1, 3, 2, 2, 4, 3, 3]
+    it "sequenceConduits" $ do
+        let src = mapM_ yield [1..3 :: Int]
+            conduit1 = CL.map (+1)
+            conduit2 = CL.concatMap (replicate 2)
+            conduit = do
+                x <- sequenceConduits [conduit1, conduit2]
+                yield $ length x + 10
+            sink = CL.consume
+        res <- src $$ conduit =$ sink
+        res `shouldBe` [2, 1, 1, 3, 2, 2, 4, 3, 3, 12]
diff --git a/test/Data/Conduit/ExtraSpec.hs b/test/Data/Conduit/ExtraSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/Data/Conduit/ExtraSpec.hs
@@ -0,0 +1,71 @@
+module Data.Conduit.ExtraSpec where
+
+import Data.Conduit
+import Test.Hspec
+import Test.Hspec.QuickCheck
+import Data.Conduit.List (isolate, peek, consume)
+import qualified Data.Conduit.List as CL
+import qualified Data.Text as T
+import qualified Data.Text.Encoding as T
+import qualified Data.ByteString as S
+import qualified Data.Conduit.Text as CT
+
+spec :: Spec
+spec = describe "Data.Conduit.Extra" $ do
+    it "basic test" $ do
+        let sink2 :: Sink a IO (Maybe a, Maybe a)
+            sink2 = do
+                ma1 <- fuseLeftovers id (isolate 10) peek
+                ma2 <- peek
+                return (ma1, ma2)
+
+            source = yield 1 >> yield 2
+        res <- source $$ sink2
+        res `shouldBe` (Just 1, Just 1)
+
+    it "get leftovers" $ do
+        let sink2 :: Sink a IO ([a], [a], [a])
+            sink2 = do
+                (x, y) <- fuseReturnLeftovers (isolate 2) peek3
+                z <- CL.consume
+                return (x, y, z)
+
+            peek3 = do
+                x <- CL.take 3
+                mapM_ leftover $ reverse x
+                return x
+
+            source = mapM_ yield [1..5]
+        res <- source $$ sink2
+        res `shouldBe` ([1..2], [1..2], [3..5])
+
+    it "multiple values" $ do
+        let sink2 :: Sink a IO ([a], Maybe a)
+            sink2 = do
+                ma1 <- fuseLeftovers id (isolate 10) peek3
+                ma2 <- peek
+                return (ma1, ma2)
+
+            peek3 = do
+                x <- CL.take 3
+                mapM_ leftover $ reverse x
+                return x
+
+            source = mapM_ yield [1..5]
+        res <- source $$ sink2
+        res `shouldBe` ([1..3], Just 1)
+
+    prop "more complex" $ \ss cnt -> do
+        let ts = map T.pack ss
+            src = mapM_ (yield . T.encodeUtf8) ts
+            conduit = CL.map T.decodeUtf8
+            sink = CT.take cnt =$ consume
+            undo = return . T.encodeUtf8 . T.concat
+        res <- src $$ do
+            x <- fuseLeftovers undo conduit sink
+            y <- consume
+            return (T.concat x, T.decodeUtf8 $ S.concat y)
+        res `shouldBe` T.splitAt cnt (T.concat ts)
+
+main :: IO ()
+main = hspec spec
