diff --git a/monad-abort-fd.cabal b/monad-abort-fd.cabal
--- a/monad-abort-fd.cabal
+++ b/monad-abort-fd.cabal
@@ -1,5 +1,5 @@
 Name: monad-abort-fd
-Version: 0.3
+Version: 0.4
 Category: Control
 Stability: experimental
 Synopsis: A better error monad transformer
@@ -27,10 +27,10 @@
   Build-Depends:
     base               >= 4 && < 5,
     transformers       >= 0.2,
-    transformers-base  >= 0.3,
-    transformers-abort >= 0.3,
+    transformers-base  >= 0.4,
+    transformers-abort >= 0.4,
     mtl                >= 2.0,
-    monad-control      >= 0.2.0.2,
+    monad-control      >= 0.3,
     data-default       >= 0.2
   Hs-Source-Dirs: src
   GHC-Options: -Wall
diff --git a/src/Control/Monad/Exception.hs b/src/Control/Monad/Exception.hs
--- a/src/Control/Monad/Exception.hs
+++ b/src/Control/Monad/Exception.hs
@@ -47,6 +47,7 @@
 import Data.Traversable
 import Data.Functor.Identity
 import Control.Applicative
+import Control.Monad (join, liftM)
 import Control.Monad.Base
 import Control.Monad.Trans.Class
 import Control.Monad.Trans.Control
@@ -261,7 +262,9 @@
 
 liftSetMaskingState ∷ (MonadTransControl t, MonadMask m μ, Monad (t μ))
                     ⇒ m → t μ α → t μ α
-liftSetMaskingState ms m = control $ \run → setMaskingState ms (run m)
+liftSetMaskingState ms m =
+  join $ liftM (restoreT . return) $ liftWith $ \run →
+    setMaskingState ms (run m)
 {-# INLINE liftSetMaskingState #-}
 
 instance MonadMask m μ ⇒ MonadMask m (MaybeT μ) where
