diff --git a/enumerator.cabal b/enumerator.cabal
--- a/enumerator.cabal
+++ b/enumerator.cabal
@@ -1,5 +1,5 @@
 name: enumerator
-version: 0.4.3.1
+version: 0.4.4
 synopsis: Implementation of Oleg Kiselyov's left-fold enumerators
 license: MIT
 license-file: license.txt
diff --git a/hs/Data/Enumerator.hs b/hs/Data/Enumerator.hs
--- a/hs/Data/Enumerator.hs
+++ b/hs/Data/Enumerator.hs
@@ -212,11 +212,10 @@
 liftI k = continue $ returnI . k
 {-# INLINE liftI #-}
 catchError :: Monad m => Iteratee a m b -> (E.SomeException -> Iteratee a m b) -> Iteratee a m b
-catchError iter h = Iteratee $ do
-	step <- runIteratee iter
-	case step of
-		Error err -> runIteratee (h err)
-		_ -> return step
+catchError iter h = iter >>== step where
+	step (Yield b as) = yield b as
+	step (Error err) = h err
+	step (Continue k) = continue (\stream -> k stream >>== step)
 infixl 1 >>==
 
 -- | Equivalent to (>>=), but allows 'Iteratee's with different input types
