diff --git a/Control/Exception/Lifted.hs b/Control/Exception/Lifted.hs
--- a/Control/Exception/Lifted.hs
+++ b/Control/Exception/Lifted.hs
@@ -1,8 +1,7 @@
 {-# LANGUAGE CPP
            , NoImplicitPrelude
            , ExistentialQuantification
-           , FlexibleContexts
-           , ImpredicativeTypes #-}
+           , FlexibleContexts #-}
 
 #if MIN_VERSION_base(4,3,0)
 {-# LANGUAGE RankNTypes #-} -- for mask
@@ -125,7 +124,7 @@
                                    , liftBaseWith, restoreM
                                    , control, liftBaseOp_
                                    )
-#if MIN_VERSION_base(4,3,0) || defined (__HADDOCK__)
+#if defined (__HADDOCK__)
 import Control.Monad.Trans.Control ( liftBaseOp )
 #endif
 
@@ -265,23 +264,22 @@
 #if MIN_VERSION_base(4,3,0)
 -- |Generalized version of 'E.mask'.
 mask :: MonadBaseControl IO m => ((forall a. m a -> m a) -> m b) -> m b
-mask = liftBaseOp E.mask . liftRestore
+mask f = control $ \runInBase ->
+           E.mask $ \g -> runInBase $ f $ liftBaseOp_ g
 {-# INLINABLE mask #-}
 
-liftRestore :: MonadBaseControl IO m
-            => ((forall a.  m a ->  m a) -> b)
-            -> ((forall a. IO a -> IO a) -> b)
-liftRestore f r = f $ liftBaseOp_ r
-{-# INLINE liftRestore #-}
-
 -- |Generalized version of 'E.mask_'.
 mask_ :: MonadBaseControl IO m => m a -> m a
 mask_ = liftBaseOp_ E.mask_
 {-# INLINABLE mask_ #-}
 
 -- |Generalized version of 'E.uninterruptibleMask'.
-uninterruptibleMask :: MonadBaseControl IO m => ((forall a. m a -> m a) -> m b) -> m b
-uninterruptibleMask = liftBaseOp E.uninterruptibleMask . liftRestore
+uninterruptibleMask
+    :: MonadBaseControl IO m => ((forall a. m a -> m a) -> m b) -> m b
+uninterruptibleMask f =
+    control $ \runInBase ->
+        E.uninterruptibleMask $ \g -> runInBase $ f $ liftBaseOp_ g
+
 {-# INLINABLE uninterruptibleMask #-}
 
 -- |Generalized version of 'E.uninterruptibleMask_'.
diff --git a/lifted-base.cabal b/lifted-base.cabal
--- a/lifted-base.cabal
+++ b/lifted-base.cabal
@@ -1,5 +1,5 @@
 Name:                lifted-base
-Version:             0.2.3.0
+Version:             0.2.3.1
 Synopsis:            lifted IO operations from the base library
 License:             BSD3
 License-file:        LICENSE
