diff --git a/Data/Conduit/Extra/Utils.hs b/Data/Conduit/Extra/Utils.hs
new file mode 100644
--- /dev/null
+++ b/Data/Conduit/Extra/Utils.hs
@@ -0,0 +1,65 @@
+{- | Functions currently under development which have not been moved to their
+     final destination.
+-}
+
+module Data.Conduit.Extra.Utils where
+
+import           Control.Applicative
+import           Control.Monad.Loops
+import           Control.Monad.Primitive
+import           Control.Monad.Trans.Class
+import           Control.Monad.Trans.State
+import           Data.Conduit
+import           Data.Conduit.List as CL
+import           Data.Foldable
+import           Data.Sequence as Seq
+import           Data.Vector as Boxed (Vector, freeze)
+import           Data.Vector.Mutable as Boxed hiding (length)
+import qualified Data.Vector.Unboxed as Unboxed
+import qualified Data.Vector.Unboxed.Mutable as Unboxed
+
+takeWhile :: Monad m => (a -> Bool) -> Conduit a m a
+takeWhile f = loop where
+    loop = await >>= maybe (return ()) go
+    go x | f x = yield x >> loop
+         | otherwise = leftover x
+
+collect :: PrimMonad m => Int -> Sink a m (Vector a)
+collect size = do
+    v <- lift $ unsafeNew size
+    forM_ [0..size-1] $ \i -> do
+        me <- await
+        case me of
+            Nothing ->
+                error $ "Too many elements for a vector of size "
+                     ++ show size
+            Just e  -> lift $ unsafeWrite v i e
+    lift $ freeze v
+
+collectUnboxed :: (PrimMonad m, Unboxed.Unbox a)
+               => Int -> Sink a m (Unboxed.Vector a)
+collectUnboxed size = do
+    v <- lift $ Unboxed.unsafeNew size
+    forM_ [0..size-1] $ \i -> do
+        me <- await
+        case me of
+            Nothing ->
+                error $ "Too many elements for an unboxed vector of size "
+                     ++ show size
+            Just e  -> lift $ Unboxed.unsafeWrite v i e
+    lift $ Unboxed.freeze v
+
+-- | Remove the last N elements from the stream.  This requires holding up to
+--   N elements in memory.
+dropRight :: Monad m => Int -> Conduit a m a
+dropRight size = do
+    xs <- Seq.fromList <$> CL.take size
+    flip evalStateT xs $ whileM_ ((== size) . Seq.length <$> get) $ do
+        xs' <- get
+        case viewl xs' of
+            EmptyL -> error "impossible"
+            y :< ys -> do
+                mz <- lift await
+                case mz of
+                    Nothing -> put Seq.empty
+                    Just z  -> put (ys |> z) >> lift (yield y)
diff --git a/Data/Conduit/Extra/ZipSink.hs b/Data/Conduit/Extra/ZipSink.hs
--- a/Data/Conduit/Extra/ZipSink.hs
+++ b/Data/Conduit/Extra/ZipSink.hs
@@ -1,5 +1,16 @@
-module Data.Conduit.Extra.ZipSink where
+{-# LANGUAGE CPP #-}
+module Data.Conduit.Extra.ZipSink
+    ( ZipSink (..)
+    , broadcast
+    ) where
 
+#if MIN_VERSION_conduit(1, 0, 13)
+import Data.Conduit (ZipSink (..), sequenceSinks, Sink)
+import Data.Traversable (Traversable)
+
+broadcast :: (Traversable f, Monad m) => f (Sink i m r) -> Sink i m (f r)
+broadcast = sequenceSinks
+#else
 import Control.Applicative
 import Control.Monad
 import Data.Conduit as C
@@ -31,3 +42,4 @@
 
 broadcast :: (Traversable f, Monad m) => f (Sink i m r) -> Sink i m (f r)
 broadcast = getZipSink . sequenceA . fmap ZipSink
+#endif
diff --git a/conduit-extra.cabal b/conduit-extra.cabal
--- a/conduit-extra.cabal
+++ b/conduit-extra.cabal
@@ -1,5 +1,5 @@
 Name:                conduit-extra
-Version:             0.1.1
+Version:             0.1.2
 Synopsis:            Experimental helper functions for conduit.
 Description:
     This package is meant as a testing ground for new concepts in conduit. The idea is to have a much lower barrier to entry for this library relative to conduit itself. This way, conduit itself will continue to have a best-practices, minimal, stable API, while people are free to try crazy new features.
@@ -17,10 +17,15 @@
                      , Data.Conduit.Extra.Pipes
                      , Data.Conduit.Extra.Resumable
                      , Data.Conduit.Extra.ZipSink
+                     , Data.Conduit.Extra.Utils
   Build-depends:       base                     >= 4            && < 5
                      , conduit                  >= 1.0
                      , mtl
+                     , monad-loops
+                     , containers
+                     , primitive
                      , transformers
+                     , vector
                      , void
   ghc-options:     -Wall
 
