diff --git a/Text/JSON/YAJL/Enumerator.hs b/Text/JSON/YAJL/Enumerator.hs
--- a/Text/JSON/YAJL/Enumerator.hs
+++ b/Text/JSON/YAJL/Enumerator.hs
@@ -55,16 +55,16 @@
 
 -- Parser {{{
 
-parseBytesIO :: MonadIO m => E.Enumeratee T.Text B.ByteString Event m b
+parseBytesIO :: MonadIO m => E.Enumeratee B.ByteString Event m b
 parseBytesIO = parseIO Y.parseBytes
 
-parseTextIO :: MonadIO m => E.Enumeratee T.Text T.Text Event m b
+parseTextIO :: MonadIO m => E.Enumeratee T.Text Event m b
 parseTextIO = parseIO Y.parseText
 
-parseBytesST :: E.Enumeratee T.Text B.ByteString Event (ST s) b
+parseBytesST :: E.Enumeratee B.ByteString Event (ST s) b
 parseBytesST = parseST Y.parseBytes
 
-parseTextST :: E.Enumeratee T.Text T.Text Event (ST s) b
+parseTextST :: E.Enumeratee T.Text Event (ST s) b
 parseTextST = parseST Y.parseText
 
 newParserIO :: IO (Y.Parser IO, IO.IORef [Event])
@@ -99,7 +99,7 @@
 
 parseIO :: MonadIO m
         => (Y.Parser IO -> a -> IO Y.ParseStatus)
-        -> E.Enumeratee T.Text a Event m b
+        -> E.Enumeratee a Event m b
 parseIO parseFn s = do
 	(p, eventRef) <- liftIO newParserIO
 	
@@ -114,7 +114,7 @@
 	eneeParser parseChunk complete s
 
 parseST :: (Y.Parser (ST s) -> a -> ST s Y.ParseStatus)
-        -> E.Enumeratee T.Text a Event (ST s) b
+        -> E.Enumeratee a Event (ST s) b
 parseST parseFn s = do
 	(p, eventRef) <- lift newParserST
 	
@@ -131,12 +131,12 @@
 eneeParser :: Monad m
            => (a -> m ([Event], Y.ParseStatus))
            -> m ([Event], Y.ParseStatus)
-           -> 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.Chunks xs) = parseLoop k xs
 	step k E.EOF = checkEvents k parseComplete
 		(\k' -> E.yield (E.Continue k') E.EOF)
-		(\_ -> E.throwError (T.pack "Unexpected EOF"))
+		(\_ -> throwError (T.pack "Unexpected EOF"))
 	
 	parseLoop k [] = E.continue (step k)
 	parseLoop k (x:xs) = checkEvents k (parseChunk x)
@@ -146,13 +146,15 @@
 	checkEvents k getEvents onFinished onContinue = do
 		(events, status) <- lift getEvents
 		let checkError k' = case status of
-			Y.ParseError err -> E.throwError err
+			Y.ParseError err -> throwError err
 			Y.ParseFinished -> onFinished k'
 			Y.ParseContinue -> onContinue k'
-			Y.ParseCancelled -> E.throwError (T.pack "Parse cancelled")
+			Y.ParseCancelled -> throwError (T.pack "Parse cancelled")
 		if null events
 			then checkError k
 			else k (E.Chunks events) >>== E.checkDone checkError
+	
+	throwError = E.throwError . Exc.ErrorCall . T.unpack
 
 -- }}}
 
@@ -172,26 +174,26 @@
 
 generateTextIO :: MonadIO m
                => Y.GeneratorConfig
-               -> E.Enumeratee Y.GeneratorError Event T.Text m b
+               -> E.Enumeratee Event T.Text m b
 generateTextIO = generateIO (fmap TE.decodeUtf8 . Y.getBuffer)
 
 generateBytesIO :: MonadIO m
                 => Y.GeneratorConfig
-                -> E.Enumeratee Y.GeneratorError Event B.ByteString m b
+                -> E.Enumeratee Event B.ByteString m b
 generateBytesIO = generateIO Y.getBuffer
 
 generateTextST :: Y.GeneratorConfig
-               -> E.Enumeratee Y.GeneratorError Event T.Text (ST s) b
+               -> E.Enumeratee Event T.Text (ST s) b
 generateTextST = generateST (fmap TE.decodeUtf8 . Y.getBuffer)
 
 generateBytesST :: Y.GeneratorConfig
-                -> E.Enumeratee Y.GeneratorError Event B.ByteString (ST s) b
+                -> E.Enumeratee Event B.ByteString (ST s) b
 generateBytesST = generateST Y.getBuffer
 
 generateIO :: (Nullable a, MonadIO m)
            => (Y.Generator RealWorld -> ST RealWorld a)
            -> Y.GeneratorConfig
-           -> E.Enumeratee Y.GeneratorError Event a m b
+           -> E.Enumeratee Event a m b
 generateIO getBuf config s = do
 	g <- liftIO $ stToIO $ Y.newGenerator config
 	let takeBuf = liftIO $ stToIO $ do
@@ -206,7 +208,7 @@
 generateST :: Nullable a
            => (Y.Generator s -> ST s a)
            -> Y.GeneratorConfig
-           -> E.Enumeratee Y.GeneratorError Event a (ST s) b
+           -> E.Enumeratee Event a (ST s) b
 generateST getBuf config s = do
 	g <- lift $ Y.newGenerator config
 	let takeBuf = do
@@ -221,7 +223,7 @@
 eneeGenerator :: (Nullable a, Monad m)
               => (Event -> m (Maybe Y.GeneratorError))
               -> m a
-              -> E.Enumeratee Y.GeneratorError Event a m b
+              -> E.Enumeratee Event a m b
 eneeGenerator genEvent takeBuf = E.checkDone (E.continue . step) where
 	step k (E.Chunks []) = E.continue (step k)
 	step k (E.Chunks xs) = parseLoop k xs
diff --git a/yajl-enumerator.cabal b/yajl-enumerator.cabal
--- a/yajl-enumerator.cabal
+++ b/yajl-enumerator.cabal
@@ -1,5 +1,5 @@
 name: yajl-enumerator
-version: 0.1
+version: 0.2
 synopsis: Enumerator-based interface to YAJL, an event-based JSON implementation
 license: GPL-3
 license-file: license.txt
@@ -21,7 +21,7 @@
     , bytestring >= 0.9 && < 0.10
     , text >= 0.7 && < 0.8
     , yajl >= 0.3 && < 0.4
-    , enumerator >= 0.1 && < 0.4
+    , enumerator >= 0.4 && < 0.5
     , transformers >= 0.2 && < 0.3
 
   exposed-modules:
