diff --git a/Text/HTML/TagStream/Stream.hs b/Text/HTML/TagStream/Stream.hs
--- a/Text/HTML/TagStream/Stream.hs
+++ b/Text/HTML/TagStream/Stream.hs
@@ -7,17 +7,23 @@
 import Data.Conduit
 import Text.HTML.TagStream.Parser
 import Text.HTML.TagStream.Types
+import Control.Monad (unless)
 
 -- | html parser conduit.
-tokenStream :: Monad m => Conduit ByteString m Token
-tokenStream = conduitState S.empty push close
+tokenStream :: Monad m => GInfConduit ByteString m Token
+tokenStream =
+    loop S.empty
   where
+    loop accum = awaitE >>= either (close accum) (push accum)
+
     push accum input =
         case parseOnly html (accum `S.append` input) of
-            Right (splitAccum -> (accum', tokens)) -> return $ StateProducing accum' tokens
+            Right (splitAccum -> (accum', tokens)) -> mapM_ yield tokens >> loop accum'
             Left err -> fail err
 
-    close s = return $ if S.null s then [] else [Text s]
+    close s r = do
+        unless (S.null s) $ yield $ Text s
+        return r
 
     splitAccum :: [Token] -> (ByteString, [Token])
     splitAccum [] = (S.empty, [])
diff --git a/tagstream-conduit.cabal b/tagstream-conduit.cabal
--- a/tagstream-conduit.cabal
+++ b/tagstream-conduit.cabal
@@ -1,5 +1,5 @@
 Name:                tagstream-conduit
-Version:             0.3.2
+Version:             0.4.0
 Synopsis:            streamlined html tag parser
 Description:
     Tag-stream is a library for parsing HTML//XML to a token stream.
@@ -32,10 +32,10 @@
                      , Text.HTML.TagStream.Utils
   Build-depends:       base >= 4 && < 5
                      , bytestring
-                     , conduit >= 0.4 && < 0.5
+                     , conduit >= 0.5 && < 0.6
                      , attoparsec
                      , blaze-builder
-                     , blaze-builder-conduit >= 0.4 && < 0.5
+                     , blaze-builder-conduit >= 0.5 && < 0.6
 
 test-suite test
     hs-source-dirs: tests
