diff --git a/Text/XML/LibXML/Enumerator.hs b/Text/XML/LibXML/Enumerator.hs
--- a/Text/XML/LibXML/Enumerator.hs
+++ b/Text/XML/LibXML/Enumerator.hs
@@ -22,6 +22,7 @@
 import qualified Data.XML.Types as X
 import qualified Text.XML.LibXML.SAX as SAX
 
+import Control.Exception (ErrorCall(..))
 import Control.Monad.IO.Class (MonadIO, liftIO)
 import Control.Monad.Trans.Class (lift)
 import Control.Monad.ST (ST)
@@ -68,16 +69,16 @@
 	set SAX.parsedComment (addEvent . EventComment)
 	set SAX.parsedInstruction (addEvent . EventInstruction)
 
-parseBytesIO :: MonadIO m => Maybe T.Text -> E.Enumeratee T.Text B.ByteString Event m b
+parseBytesIO :: MonadIO m => Maybe T.Text -> E.Enumeratee B.ByteString Event m b
 parseBytesIO = parseIO SAX.parseBytes
 
-parseTextIO :: MonadIO m => Maybe T.Text -> E.Enumeratee T.Text T.Text Event m b
+parseTextIO :: MonadIO m => Maybe T.Text -> E.Enumeratee T.Text Event m b
 parseTextIO = parseIO SAX.parseText
 
 parseIO :: MonadIO m
         => (SAX.Parser IO -> a -> IO ())
         -> Maybe T.Text
-        -> E.Enumeratee T.Text a Event m b
+        -> E.Enumeratee a Event m b
 parseIO parseFn name s = E.Iteratee $ do
 	(p, eventRef, errRef) <- liftIO $ newParserIO name
 	
@@ -93,15 +94,15 @@
 	let complete = withEvents (SAX.parseComplete p)
 	E.runIteratee $ eneeParser parseChunk complete s
 
-parseBytesST :: Maybe T.Text -> E.Enumeratee T.Text B.ByteString Event (ST s) b
+parseBytesST :: Maybe T.Text -> E.Enumeratee B.ByteString Event (ST s) b
 parseBytesST = parseST SAX.parseBytes
 
-parseTextST :: Maybe T.Text -> E.Enumeratee T.Text T.Text Event (ST s) b
+parseTextST :: Maybe T.Text -> E.Enumeratee T.Text Event (ST s) b
 parseTextST = parseST SAX.parseText
 
 parseST :: (SAX.Parser (ST s) -> a -> ST s ())
         -> Maybe T.Text
-        -> E.Enumeratee T.Text a Event (ST s) b
+        -> E.Enumeratee a Event (ST s) b
 parseST parseFn name s = E.Iteratee $ do
 	(p, eventRef, errRef) <- newParserST name
 	
@@ -120,7 +121,7 @@
 eneeParser :: Monad m
            => (a -> m ([Event], Maybe T.Text))
            -> m ([Event], Maybe T.Text)
-           -> E.Enumeratee T.Text a Event m b
+           -> E.Enumeratee a Event m b
 eneeParser parseChunk parseComplete = E.checkDone (E.continue . step) where
 	step k E.EOF = checkEvents k parseComplete (\k' -> E.yield (E.Continue k') E.EOF)
 	step k (E.Chunks xs) = parseLoop k xs
@@ -132,7 +133,7 @@
 		(events, maybeErr) <- lift getEvents
 		let checkError k' = case maybeErr of
 			Nothing -> next k'
-			Just err -> E.throwError err
+			Just err -> E.throwError (ErrorCall (T.unpack err))
 		if null events
 			then checkError k
 			else k (E.Chunks events) >>== E.checkDone checkError
diff --git a/libxml-enumerator.cabal b/libxml-enumerator.cabal
--- a/libxml-enumerator.cabal
+++ b/libxml-enumerator.cabal
@@ -1,5 +1,5 @@
 name: libxml-enumerator
-version: 0.2
+version: 0.3
 synopsis: Enumerator-based API for libXML's SAX interface
 license: MIT
 license-file: license.txt
@@ -20,7 +20,7 @@
       base >= 4 && < 5
     , bytestring >= 0.9 && < 0.10
     , text >= 0.7 && < 0.8
-    , enumerator >= 0.1 && < 0.4
+    , enumerator >= 0.4 && < 0.5
     , transformers >= 0.2 && < 0.3
     , libxml-sax >= 0.6 && < 0.7
     , xml-types >= 0.1 && < 0.2
