diff --git a/Conduit/Simple.hs b/Conduit/Simple.hs
--- a/Conduit/Simple.hs
+++ b/Conduit/Simple.hs
@@ -24,9 +24,10 @@
 import           Control.Monad.Trans.Class
 import           Control.Monad.Trans.Control
 import           Control.Monad.Trans.Either
+import           Control.Monad.Trans.State
 import           Data.Bifunctor
 import           Data.Builder
-import           Data.ByteString hiding (hPut)
+import           Data.ByteString hiding (hPut, putStrLn)
 import           Data.IOData
 import           Data.MonoTraversable
 import           Data.Monoid
@@ -767,11 +768,27 @@
 sequenceSources = getZipSource . sequenceA . fmap ZipSource
 
 zipSinks :: Monad m
-         => (Source m i rs  -> m r)
-         -> (Source m i rs' -> m r')
-         -> (forall s. Source m i s)
+         => (Source (StateT (r', s) m) i s  -> StateT (r', s) m r)
+         -> (Source (StateT (r', s) m) i s' -> StateT (r', s) m r')
+         -> (forall t. Source (StateT (r', s) m) i t)
          -> m (r, r')
-zipSinks x y await = liftM2 (,) (x await) (y await)
+zipSinks x y await = do
+    let i = (error "accessing r", error "accessing r'")
+    flip evalStateT i $ do
+        r <- x $ \rx yieldx -> do
+            r' <- lift $ y $ \ry yieldy -> EitherT $ do
+                    eres <- runEitherT $ await (rx, ry) $ \(rx', ry') u -> do
+                        x' <- rewrap (, ry') $ yieldx rx' u
+                        y' <- rewrap (rx' ,) $ yieldy ry' u
+                        return (fst x', snd y')
+                    let (s, s') = either id id eres
+                    modify (\(b, _) -> (b, s))
+                    return $ Right s'
+            lift $ do
+                modify (\(_, b) -> (r', b))
+                gets snd
+        r' <- gets fst
+        return (r, r')
 
 newtype ZipSink i m r s = ZipSink { getZipSink :: Source m i r -> m s }
 
diff --git a/simple-conduit.cabal b/simple-conduit.cabal
--- a/simple-conduit.cabal
+++ b/simple-conduit.cabal
@@ -1,5 +1,5 @@
 Name:                simple-conduit
-Version:             0.0.2
+Version:             0.1.0
 Synopsis:            A simple streaming library based on composing monadic folds.
 Description:
     @simple-conduit@ follows a similar UI to the more capable @conduit@ library, but reduces the scope of what it can solve donw to what can be expressed by chaining monadic folds that allow for early termination.  This allows for more predictable resource management behavior, at the cost of not allowing scenarios that @conduit@ is better designed.
