diff --git a/benchmarks/benchmark_v0.2.hs b/benchmarks/benchmark_v0.2.hs
--- a/benchmarks/benchmark_v0.2.hs
+++ b/benchmarks/benchmark_v0.2.hs
@@ -1,18 +1,20 @@
 {-# LANGUAGE OverloadedStrings #-}
 import Bio.Sequence.Stockholm
 import Bio.Sequence.Stockholm.Stream
-import Control.Monad.Exception.Synchronous (Exceptional(..))
 import System.IO (stdin)
 import qualified Data.Conduit as C
 import qualified Data.Conduit.Binary as CB
 import qualified Data.Conduit.List as CL
 
+main :: IO ()
 main = main_event
 
+main_doc :: IO ()
 main_doc = C.runResourceT $ CB.sourceHandle stdin C.$$ parseStockholm C.=$ CL.mapM_ printName
     where
       printName (Stockholm file _ _) = print (findAnn AC file)
 
+main_event :: IO ()
 main_event = C.runResourceT $ CB.sourceHandle stdin C.$$ parseEvents C.=$ CL.mapM_ printName
     where
       printName (EvGF "AC" name) = print name
diff --git a/biostockholm.cabal b/biostockholm.cabal
--- a/biostockholm.cabal
+++ b/biostockholm.cabal
@@ -1,5 +1,5 @@
 Name:                biostockholm
-Version:             0.2
+Version:             0.2.1
 Synopsis:            Parsing and rendering of Stockholm files (used by Pfam, Rfam and Infernal).
 License:             BSD3
 License-file:        LICENSE
@@ -40,11 +40,11 @@
       , containers         >= 0.2   && < 0.5
       , bytestring         == 0.9.*
       , deepseq            >= 1.1   && < 1.3
-      , conduit            == 0.1.*
+      , conduit            == 0.2.*
       , attoparsec         == 0.10.*
-      , attoparsec-conduit == 0.0.*
+      , attoparsec-conduit == 0.2.*
       , blaze-builder      == 0.3.*
-      , blaze-builder-conduit == 0.0.*
+      , blaze-builder-conduit == 0.2.*
 
       , biocore            >= 0.1   && < 0.3
 
@@ -54,17 +54,15 @@
   Main-is: runtests.hs
   Ghc-Options: -Wall
   Build-depends:
-        base               >= 3     && < 5
-      , containers         >= 0.2   && < 0.5
-      , bytestring         == 0.9.*
-      , conduit            == 0.1.*
+        base
+      , containers
+      , bytestring
+      , conduit
       , zlib-conduit
-      , transformers       >= 0.2
-
-      , biocore            >= 0.1   && < 0.3
+      , biocore
 
+      , transformers       >= 0.2
       , hspec              == 0.9.*
       , HUnit
       , QuickCheck
-
       , biostockholm
diff --git a/src/Bio/Sequence/Stockholm/Document.hs b/src/Bio/Sequence/Stockholm/Document.hs
--- a/src/Bio/Sequence/Stockholm/Document.hs
+++ b/src/Bio/Sequence/Stockholm/Document.hs
@@ -333,7 +333,7 @@
       close (InsideStockholm annots seqs) = return [makeStockholm annots seqs]
 
       push state (EvComment _) =
-          return (state, C.Producing [])
+          return (C.StateProducing state [])
 
       push LookingForHeader EvHeader =
           continue (emptyPA, M.empty)
@@ -343,7 +343,7 @@
       push (InsideStockholm _ _) EvHeader =
           fail "parseDoc: unexpected header"
       push (InsideStockholm annots seqs) EvEnd =
-          return (LookingForHeader, C.Producing [makeStockholm annots seqs])
+          return (C.StateProducing LookingForHeader [makeStockholm annots seqs])
       push (InsideStockholm annots seqs) (EvSeqData label data_) =
           continue (annots, insertDM (label, data_) seqs)
       push (InsideStockholm annots seqs) (EvGF feat data_) =
@@ -355,7 +355,7 @@
       push (InsideStockholm annots seqs) (EvGR sq feat data_) =
           continue (insertPA_GR sq (Ann (parseClmnFeature feat) data_) annots, seqs)
 
-      continue (annots, seqs) = return (InsideStockholm annots seqs, C.Producing [])
+      continue (annots, seqs) = return (C.StateProducing (InsideStockholm annots seqs) [])
       {-# INLINE continue #-}
 
 data ParseDoc = LookingForHeader
diff --git a/src/Bio/Sequence/Stockholm/Stream.hs b/src/Bio/Sequence/Stockholm/Stream.hs
--- a/src/Bio/Sequence/Stockholm/Stream.hs
+++ b/src/Bio/Sequence/Stockholm/Stream.hs
@@ -60,16 +60,17 @@
 eventParser = hash *> (ann <|> comment)
           <|> end
           <|> seqdata
+              A.<?> "Event"
     where
       word = A.takeTill A8.isHorizontalSpace <* spaces
       tillNextLine = A.takeLazyByteString
 
       hash    = A8.char '#'
-      comment = EvComment <$> tillNextLine
-      end     = EvEnd     <$  A8.string "//" <* spaces
-      seqdata = EvSeqData <$> word <*> tillNextLine
+      comment = EvComment <$> tillNextLine A.<?> "Comment"
+      end     = EvEnd     <$  A8.string "//" <* spaces A.<?> "End of Stockholm file (//)"
+      seqdata = EvSeqData <$> word <*> tillNextLine A.<?> "Sequence data"
 
-      ann = A8.string "=G" *> (gf <|> gc <|> gs <|> gr)
+      ann = A8.string "=G" *> (gf <|> gc <|> gs <|> gr) A.<?> "Annotation"
           where
             gf = EvGF <$ A8.char 'F' <* spaces          <*> word <*> tillNextLine
             gc = EvGC <$ A8.char 'C' <* spaces          <*> word <*> tillNextLine
@@ -79,6 +80,7 @@
 -- | Parse 'EvHeader'.
 headerParser :: A.Parser Event
 headerParser = EvHeader <$ A8.char '#' <* spaces <* mystring "STOCKHOLM 1.0" <* spaces
+               A.<?> "Stockholm Header"
     where
       mystring (x:xs) = A8.char x *> mystring xs
       mystring []     = pure ()
diff --git a/tests/runtests.hs b/tests/runtests.hs
--- a/tests/runtests.hs
+++ b/tests/runtests.hs
@@ -85,7 +85,7 @@
           liftIO (zipWithM_ (@?=) parsed2 parsed1)
 
     describe "renderEvents/parseEvents" $ do
-      prop "passes QuickCheck property" $ \(events :: [Event]) ->
+      prop "passes QuickCheck property" $ forAll eventList $ \(events :: [Event]) ->
         unsafePerformIO $ do
           rendered <- C.runResourceT $ CL.sourceList events   C.$$ renderEvents C.=$ CL.consume
           again    <- C.runResourceT $ CL.sourceList rendered C.$$ parseEvents C.=$ CL.consume
@@ -192,13 +192,13 @@
       , (2,  EvGR      <$> seqlabel <*> feature <*> arbitrary)
       ]
         where seqlabel = strict . unSL <$> arbitrary
-              seqdata  = strict . unSD <$> arbitrary
+              seqdata  = unSD <$> arbitrary
               feature  = B.pack <$> listOf1 (elements alpha)
               strict = B.concat . L.toChunks
 
 eventList :: Gen [Event]
 eventList = sized $ \s -> frequency [ (100, single)
-                                    , (s, (++) <$> single <*> (resize (s `div` 2) eventList)) ]
+                                    , (s, (++) <$> single <*> (resize (s - 1) eventList)) ]
     where
       single = (\xs -> EvHeader : xs ++ [EvEnd]) <$> listOf arbitrary
 
@@ -283,7 +283,7 @@
                 (before, rest)          -> (EvHeader : before)            : separate rest
           separate (x:xs) = [x] : separate xs
           separate []     = []
-          (<>) = B.append
+          (<>) = L.append
           glue (EvSeqData sq1 data1 : EvSeqData sq2 data2 : xs)
               | sq1 == sq2 = glue (EvSeqData sq1 (data1 <> data2) : xs)
           glue (EvGF feat1 data1 : EvGF feat2 data2 : xs)
