diff --git a/MonadCatchIO-transformers.cabal b/MonadCatchIO-transformers.cabal
--- a/MonadCatchIO-transformers.cabal
+++ b/MonadCatchIO-transformers.cabal
@@ -1,5 +1,5 @@
 Name:            MonadCatchIO-transformers
-Version:         0.2.2.3
+Version:         0.3.1.3
 Cabal-Version:   >= 1.6
 License:         BSD3
 License-file:    LICENSE
@@ -9,6 +9,9 @@
   transformers (from the 'transformers' package) with @IO@ as the base monad.
   You can extend this functionality to other monads, by creating an instance
   of the @MonadCatchIO@ class.
+  
+  Warning: this package is deprecated. Use the 'exceptions' package instead,
+  if possible.
 Maintainer:      ariep@xs4all.nl
 Category:        Control
 Synopsis:        Monad-transformer compatible version of the Control.Exception module
@@ -16,14 +19,16 @@
 
 Source-repository head
   Type:     darcs
-  Location: http://patch-tag.com/r/AriePeterson/MonadCatchIO-transformers
+  Location: http://hub.darcs.net/AriePeterson/MonadCatchIO-transformers
 
 Library
   Build-Depends:
-    base == 4.*,
+    base < 4.9,
     extensible-exceptions == 0.1.*,
-    transformers == 0.2.*
+    transformers >= 0.2 && < 0.5,
+    monads-tf == 0.1.*
   Exposed-Modules:
     Control.Monad.CatchIO
+    Control.Monad.CatchIO.Try
   Hs-Source-Dirs:  src
   Ghc-options:     -Wall
diff --git a/src/Control/Monad/CatchIO.hs b/src/Control/Monad/CatchIO.hs
--- a/src/Control/Monad/CatchIO.hs
+++ b/src/Control/Monad/CatchIO.hs
@@ -1,4 +1,14 @@
-{-# LANGUAGE ExistentialQuantification, ScopedTypeVariables #-}
+{-# LANGUAGE ExistentialQuantification, ScopedTypeVariables, MagicHash #-}
+-- | Warning: this module is /deprecated/.
+-- 
+-- Please consider using the package
+-- <http://hackage.haskell.org/package/exceptions exceptions>
+-- instead, if possible.
+-- 
+-- The functions @block@ and @unblock@, which are part of the @MonadCatchIO@
+-- class, have known problems. The IO instances of these functions, which are
+-- provided by the base library, have been deprecated for some time, and have
+-- been removed in base-4.7.
 module Control.Monad.CatchIO
   (
     MonadCatchIO(..)
@@ -37,22 +47,21 @@
 
 import           Data.Monoid                                  (Monoid)
 
+import           GHC.Base                                     (maskAsyncExceptions#)
+import           GHC.IO                                       (unsafeUnmask,IO(IO))
 
+
 class MonadIO m => MonadCatchIO m where
   -- | Generalized version of 'E.catch'
   catch   :: E.Exception e => m a -> (e -> m a) -> m a
-  
-  -- | Generalized version of 'E.block'
   block   :: m a -> m a
-  
-  -- | Generalized version of 'E.unblock'
   unblock :: m a -> m a
 
 
 instance MonadCatchIO IO where
   catch   = E.catch
-  block   = E.block
-  unblock = E.unblock
+  block   = \ (IO io) -> IO $ maskAsyncExceptions# io
+  unblock = unsafeUnmask
 
 -- | Warning: this instance is somewhat contentious.
 -- 
diff --git a/src/Control/Monad/CatchIO/Try.hs b/src/Control/Monad/CatchIO/Try.hs
new file mode 100644
--- /dev/null
+++ b/src/Control/Monad/CatchIO/Try.hs
@@ -0,0 +1,30 @@
+{-# LANGUAGE FlexibleContexts #-}
+module Control.Monad.CatchIO.Try
+  (
+    tryIO
+  , eitherIO
+{-  
+  , MonadCatchIO
+  , MonadIO
+  , liftIO
+  , MonadError
+  , Error
+  , ErrorType
+  , throwError
+  , strMsg
+  , ErrorT
+  , runErrorT-}
+  ) where
+
+
+import           Control.Exception         (IOException)
+import           Control.Monad.CatchIO     (MonadCatchIO,tryJust)
+import           Control.Monad.Trans.Error (strMsg)
+import           Control.Monad.Error       (MonadError,Error,ErrorType,throwError,MonadIO,liftIO)
+
+
+tryIO :: (Error (ErrorType m),MonadError m,MonadCatchIO m,Functor m) => IO a -> m a
+tryIO = (=<<) (either (throwError . strMsg . show) return) . eitherIO . liftIO
+
+eitherIO :: (MonadCatchIO m,Functor m) => m a -> m (Either IOException a)
+eitherIO = tryJust (Just :: IOException -> Maybe IOException)
