diff --git a/Data/Conduit/Cereal.hs b/Data/Conduit/Cereal.hs
--- a/Data/Conduit/Cereal.hs
+++ b/Data/Conduit/Cereal.hs
@@ -29,13 +29,15 @@
                                          , DC.sinkClose = close f
                                          }
                 Done _ _ -> throw GetDoesntConsumeInput
-  where push f input = case f input of
-                         Fail s -> lift $ DC.resourceThrow $ GetException s
-                         Partial f' -> return $ DC.Processing (push f') (close f')
-                         Done r rest -> return $ DC.Done (if BS.null rest
-                                                            then Nothing
-                                                            else Just rest
-                                                         ) r
+  where push f input
+          | BS.null input = return $ DC.Processing (push f) (close f)
+          | otherwise = case f input of
+              Fail s -> lift $ DC.resourceThrow $ GetException s
+              Partial f' -> return $ DC.Processing (push f') (close f')
+              Done r rest -> return $ DC.Done (if BS.null rest
+                                                 then Nothing
+                                                 else Just rest
+                                              ) r
         close f = let Fail s = f BS.empty in lift $ DC.resourceThrow $ GetException s
 
 -- | Convert a 'Put' into a 'Source'. Runs in constant memory.
diff --git a/cereal-conduit.cabal b/cereal-conduit.cabal
--- a/cereal-conduit.cabal
+++ b/cereal-conduit.cabal
@@ -1,5 +1,5 @@
 name:            cereal-conduit
-version:         0.0.2
+version:         0.0.3
 license:         BSD3
 license-file:    LICENSE
 author:          Myles C. Maxfield <myles.maxfield@gmail.com>
