diff --git a/iteratee.cabal b/iteratee.cabal
--- a/iteratee.cabal
+++ b/iteratee.cabal
@@ -1,5 +1,5 @@
 name:          iteratee
-version:       0.8.4.5
+version:       0.8.4.6
 synopsis:      Iteratee-based I/O
 description:
   The Iteratee monad provides strict, safe, and functional I/O. In addition
@@ -50,9 +50,9 @@
     ListLike                  >= 1.0     && < 5,
     bytestring                >= 0.9     && < 0.11,
     containers                >= 0.2     && < 0.6,
-    exceptions                >= 0.5     && < 0.6,
+    exceptions                >= 0.5     && < 0.7,
     parallel                  >= 2       && < 4,
-    transformers              >= 0.2     && < 0.4
+    transformers              >= 0.2     && < 0.5
 
   exposed-modules:
     Data.Nullable
diff --git a/src/Data/Iteratee/Base.hs b/src/Data/Iteratee/Base.hs
--- a/src/Data/Iteratee/Base.hs
+++ b/src/Data/Iteratee/Base.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE TypeFamilies, FlexibleContexts, FlexibleInstances, Rank2Types,
     DeriveDataTypeable, ExistentialQuantification #-}
 
@@ -168,6 +169,12 @@
 instance (MonadCatch m, Nullable s, NullPoint s) =>
   MonadCatch (Iteratee s m) where
     m `catch` f = Iteratee $ \od oc -> runIter m od oc `CIO.catch` (\e -> runIter (f e) od oc)
+
+-- prior to exceptions-0.6, these were part of MonadCatch
+#if MIN_VERSION_exceptions(0,6,0)
+instance (MonadMask m, Nullable s, NullPoint s) =>
+  MonadMask (Iteratee s m) where
+#endif
     mask q      = Iteratee $ \od oc -> CIO.mask $ \u -> runIter (q $ ilift u) od oc
     uninterruptibleMask q = Iteratee $ \od oc -> CIO.uninterruptibleMask $ \u -> runIter (q $ ilift u) od oc
 
diff --git a/src/Data/Iteratee/IO.hs b/src/Data/Iteratee/IO.hs
--- a/src/Data/Iteratee/IO.hs
+++ b/src/Data/Iteratee/IO.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE CPP #-}
+{-# LANGUAGE ConstraintKinds #-}
 
 -- |Random and Binary IO with generic Iteratees.
 
@@ -40,6 +41,11 @@
 import Control.Monad.Catch
 import Control.Monad.IO.Class
 
+#if MIN_VERSION_exceptions(0,6,0)
+#else
+type MonadMask = MonadCatch
+#endif
+
 -- | The default buffer size.
 defaultBufSize :: Int
 defaultBufSize = 1024
@@ -48,14 +54,14 @@
 #if defined(USE_POSIX)
 
 enumFile
-  :: (MonadIO m, MonadCatch m, NullPoint s, ReadableChunk s el) =>
+  :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>
      Int
      -> FilePath
      -> Enumerator s m a
 enumFile = FD.enumFile
 
 enumFileRandom
-  :: (MonadIO m, MonadCatch m, NullPoint s, ReadableChunk s el) =>
+  :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>
      Int
      -> FilePath
      -> Enumerator s m a
@@ -64,7 +70,7 @@
 -- |Process a file using the given Iteratee.  This function wraps
 -- enumFd as a convenience.
 fileDriver
-  :: (MonadIO m, MonadCatch m, NullPoint s, ReadableChunk s el) =>
+  :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>
      Iteratee s m a
      -> FilePath
      -> m a
@@ -72,7 +78,7 @@
 
 -- |A version of fileDriver with a user-specified buffer size (in elements).
 fileDriverVBuf
-  :: (MonadIO m, MonadCatch m, NullPoint s, ReadableChunk s el) =>
+  :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>
      Int
      -> Iteratee s m a
      -> FilePath
@@ -82,14 +88,14 @@
 -- |Process a file using the given Iteratee.  This function wraps
 -- enumFdRandom as a convenience.
 fileDriverRandom
-  :: (MonadIO m, MonadCatch m, NullPoint s, ReadableChunk s el) =>
+  :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>
      Iteratee s m a
      -> FilePath
      -> m a
 fileDriverRandom = FD.fileDriverRandomFd defaultBufSize
 
 fileDriverRandomVBuf
-  :: (MonadIO m, MonadCatch m, NullPoint s, ReadableChunk s el) =>
+  :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>
      Int
      -> Iteratee s m a
      -> FilePath
@@ -104,7 +110,7 @@
 -- |Process a file using the given Iteratee.  This function wraps
 -- @enumHandle@ as a convenience.
 fileDriver ::
- (MonadIO m, MonadCatch m, NullPoint s, ReadableChunk s el) =>
+ (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>
   Iteratee s m a
   -> FilePath
   -> m a
@@ -112,7 +118,7 @@
 
 -- |A version of fileDriver with a user-specified buffer size (in elements).
 fileDriverVBuf ::
- (MonadIO m, MonadCatch m, NullPoint s, ReadableChunk s el) =>
+ (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>
   Int
   -> Iteratee s m a
   -> FilePath
@@ -122,14 +128,14 @@
 -- |Process a file using the given Iteratee.  This function wraps
 -- @enumRandomHandle@ as a convenience.
 fileDriverRandom
-  :: (MonadIO m, MonadCatch m, NullPoint s, ReadableChunk s el) =>
+  :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>
      Iteratee s m a
      -> FilePath
      -> m a
 fileDriverRandom = H.fileDriverRandomHandle defaultBufSize
 
 fileDriverRandomVBuf
-  :: (MonadIO m, MonadCatch m, NullPoint s, ReadableChunk s el) =>
+  :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>
      Int
      -> Iteratee s m a
      -> FilePath
@@ -137,14 +143,14 @@
 fileDriverRandomVBuf = H.fileDriverRandomHandle
 
 enumFile
-  :: (MonadIO m, MonadCatch m, NullPoint s, ReadableChunk s el) =>
+  :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>
      Int
      -> FilePath
      -> Enumerator s m a
 enumFile = H.enumFile
 
 enumFileRandom
-  :: (MonadIO m, MonadCatch m, NullPoint s, ReadableChunk s el) =>
+  :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>
      Int
      -> FilePath
      -> Enumerator s m a
diff --git a/src/Data/Iteratee/IO/Fd.hs b/src/Data/Iteratee/IO/Fd.hs
--- a/src/Data/Iteratee/IO/Fd.hs
+++ b/src/Data/Iteratee/IO/Fd.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE CPP, ScopedTypeVariables #-}
+{-# LANGUAGE ConstraintKinds #-}
 
 -- |Random and Binary IO with generic Iteratees, using File Descriptors for IO.
 -- when available, these are the preferred functions for performing IO as they
@@ -41,6 +42,12 @@
 
 import System.Posix hiding (FileOffset)
 
+#if MIN_VERSION_exceptions(0,6,0)
+#else
+type MonadMask = MonadCatch
+#endif
+
+
 -- ------------------------------------------------------------------------
 -- Binary Random IO enumerators
 
@@ -63,7 +70,7 @@
 -- over the entire contents of a file, in order, unless stopped by
 -- the iteratee.  In particular, seeking is not supported.
 enumFd
-  :: forall s el m a.(NullPoint s, ReadableChunk s el, MonadIO m, MonadCatch m) =>
+  :: forall s el m a.(NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m) =>
      Int
      -> Fd
      -> Enumerator s m a
@@ -75,7 +82,7 @@
 
 -- |A variant of enumFd that catches exceptions raised by the @Iteratee@.
 enumFdCatch
- :: forall e s el m a.(IException e, NullPoint s, ReadableChunk s el, MonadIO m, MonadCatch m)
+ :: forall e s el m a.(IException e, NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m)
     => Int
     -> Fd
     -> (e -> m (Maybe EnumException))
@@ -90,7 +97,7 @@
 -- |The enumerator of a POSIX File Descriptor: a variation of @enumFd@ that
 -- supports RandomIO (seek requests).
 enumFdRandom
- :: forall s el m a.(NullPoint s, ReadableChunk s el, MonadIO m, MonadCatch m) =>
+ :: forall s el m a.(NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m) =>
     Int
     -> Fd
     -> Enumerator s m a
@@ -103,7 +110,7 @@
             . liftIO . myfdSeek fd AbsoluteSeek $ fromIntegral off
 
 fileDriver
-  :: (MonadIO m, MonadCatch m, ReadableChunk s el) =>
+  :: (MonadIO m, MonadMask m, ReadableChunk s el) =>
      (Int -> Fd -> Enumerator s m a)
      -> Int
      -> Iteratee s m a
@@ -116,7 +123,7 @@
 
 -- |Process a file using the given @Iteratee@.
 fileDriverFd
-  :: (NullPoint s, MonadIO m, MonadCatch m, ReadableChunk s el) =>
+  :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) =>
      Int -- ^Buffer size (number of elements)
      -> Iteratee s m a
      -> FilePath
@@ -125,14 +132,14 @@
 
 -- |A version of fileDriverFd that supports seeking.
 fileDriverRandomFd
-  :: (NullPoint s, MonadIO m, MonadCatch m, ReadableChunk s el) =>
+  :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) =>
      Int
      -> Iteratee s m a
      -> FilePath
      -> m a
 fileDriverRandomFd = fileDriver enumFdRandom
 
-enumFile' :: (NullPoint s, MonadIO m, MonadCatch m, ReadableChunk s el) =>
+enumFile' :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) =>
   (Int -> Fd -> Enumerator s m a)
   -> Int -- ^Buffer size
   -> FilePath
@@ -143,14 +150,14 @@
   (flip (enumf bufsize) iter)
 
 enumFile ::
-  (NullPoint s, MonadIO m, MonadCatch m, ReadableChunk s el)
+  (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el)
   => Int                 -- ^Buffer size
   -> FilePath
   -> Enumerator s m a
 enumFile = enumFile' enumFd
 
 enumFileRandom ::
-  (NullPoint s, MonadIO m, MonadCatch m, ReadableChunk s el)
+  (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el)
   => Int                 -- ^Buffer size
   -> FilePath
   -> Enumerator s m a
diff --git a/src/Data/Iteratee/IO/Handle.hs b/src/Data/Iteratee/IO/Handle.hs
--- a/src/Data/Iteratee/IO/Handle.hs
+++ b/src/Data/Iteratee/IO/Handle.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE ConstraintKinds #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 
 -- |Random and Binary IO with generic Iteratees.  These functions use Handles
@@ -34,6 +36,10 @@
 
 import System.IO
 
+#if MIN_VERSION_exceptions(0,6,0)
+#else
+type MonadMask = MonadCatch
+#endif
 
 -- ------------------------------------------------------------------------
 -- Binary Random IO enumerators
@@ -59,7 +65,7 @@
 -- the iteratee.  In particular, seeking is not supported.
 -- Data is read into a buffer of the specified size.
 enumHandle ::
- forall s el m a.(NullPoint s, ReadableChunk s el, MonadIO m, MonadCatch m) =>
+ forall s el m a.(NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m) =>
   Int -- ^Buffer size (number of elements per read)
   -> Handle
   -> Enumerator s m a
@@ -76,7 +82,7 @@
  forall e s el m a.(IException e,
                     NullPoint s,
                     ReadableChunk s el,
-                    MonadIO m, MonadCatch m) =>
+                    MonadIO m, MonadMask m) =>
   Int -- ^Buffer size (number of elements per read)
   -> Handle
   -> (e -> m (Maybe EnumException))
@@ -92,7 +98,7 @@
 -- supports RandomIO (seek requests).
 -- Data is read into a buffer of the specified size.
 enumHandleRandom ::
- forall s el m a.(NullPoint s, ReadableChunk s el, MonadIO m, MonadCatch m) =>
+ forall s el m a.(NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m) =>
   Int -- ^ Buffer size (number of elements per read)
   -> Handle
   -> Enumerator s m a
@@ -107,7 +113,7 @@
 -- ----------------------------------------------
 -- File Driver wrapper functions.
 
-enumFile' :: (NullPoint s, MonadIO m, MonadCatch m, ReadableChunk s el) =>
+enumFile' :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) =>
   (Int -> Handle -> Enumerator s m a)
   -> Int -- ^Buffer size
   -> FilePath
@@ -118,14 +124,14 @@
   (flip (enumf bufsize) iter)
 
 enumFile ::
-  (NullPoint s, MonadIO m, MonadCatch m, ReadableChunk s el)
+  (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el)
   => Int                 -- ^Buffer size
   -> FilePath
   -> Enumerator s m a
 enumFile = enumFile' enumHandle
 
 enumFileRandom ::
-  (NullPoint s, MonadIO m, MonadCatch m, ReadableChunk s el)
+  (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el)
   => Int                 -- ^Buffer size
   -> FilePath
   -> Enumerator s m a
@@ -134,7 +140,7 @@
 -- |Process a file using the given @Iteratee@.  This function wraps
 -- @enumHandle@ as a convenience.
 fileDriverHandle
-  :: (NullPoint s, MonadIO m, MonadCatch m, ReadableChunk s el) =>
+  :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) =>
      Int                      -- ^Buffer size (number of elements)
      -> Iteratee s m a
      -> FilePath
@@ -144,7 +150,7 @@
 
 -- |A version of @fileDriverHandle@ that supports seeking.
 fileDriverRandomHandle
-  :: (NullPoint s, MonadIO m, MonadCatch m, ReadableChunk s el) =>
+  :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) =>
      Int                      -- ^ Buffer size (number of elements)
      -> Iteratee s m a
      -> FilePath
