diff --git a/Control/Exception/Peel.hs b/Control/Exception/Peel.hs
--- a/Control/Exception/Peel.hs
+++ b/Control/Exception/Peel.hs
@@ -143,8 +143,7 @@
   k'' <- peelIO
   join $ liftIO $ E.bracket_ (k before) (k' after) (k'' thing)
 
--- |Generalized version of 'E.bracketOnError'.  Note, any monadic side
--- effects in @m@ of the \"release\" computation will be discarded.
+-- |Generalized version of 'E.bracketOnError'.
 bracketOnError :: MonadPeelIO m =>
                   m a -- ^ computation to run first (\"acquire resource\")
                   -> (a -> m b) -- ^ computation to run last (\"release resource\")
@@ -168,8 +167,7 @@
   k' <- peelIO
   join $ liftIO $ E.finally (k a) (k' sequel)
 
--- |Generalized version of 'E.onException'.  Note, any monadic side
--- effects in @m@ of the \"afterward\" computation will be discarded.
+-- |Generalized version of 'E.onException'.
 onException :: MonadPeelIO m => m a -> m b -> m a
 onException m what = do
   k <- peelIO
diff --git a/Control/Monad/Trans/Peel.hs b/Control/Monad/Trans/Peel.hs
--- a/Control/Monad/Trans/Peel.hs
+++ b/Control/Monad/Trans/Peel.hs
@@ -15,12 +15,17 @@
 'idPeel' and 'liftPeel' are provided to assist creation of
 @MonadPeelIO@-like classes (see "Control.Monad.IO.Peel") based on core
 monads other than 'IO'.
+
+'liftOp' and 'liftOp_' enable convenient lifting of two common special
+cases of control operation types.
 -}
 
 module Control.Monad.Trans.Peel (
   MonadTransPeel(..),
   idPeel,
   liftPeel,
+  liftOp,
+  liftOp_,
   ) where
 
 import Prelude hiding (catch)
@@ -196,3 +201,36 @@
     return $ \m -> do
       m' <- k' $ k m
       return $ join $ lift m'
+
+-- |@liftOp@ is a particular application of 'peel' that allows lifting
+-- control operations of type @(a -> m b) -> m b@ to @'MonadTransPeel'
+-- t => (a -> t m b) -> t m b@.
+--
+-- @
+--    'liftOp' f g = do
+--      k \<- 'peel'
+--      'join' $ 'lift' $ f (k . g)
+-- @
+liftOp :: (MonadTransPeel t, Monad m, Monad n, Monad o, Monad (t n)) =>
+          ((a -> m (t o b)) -> n (t n c)) -> (a -> t m b) -> t n c
+liftOp f g = do
+  k <- peel
+  join $ lift $ f (k . g)
+
+-- |@liftOp_@ is a particular application of 'peel' that allows
+-- lifting control operations of type @m a -> m a@ to
+-- @'MonadTransPeel' m => t m a -> t m a@.
+--
+-- It can be thought of as a generalization of @mapReaderT@,
+-- @mapStateT@, etc.
+--
+-- @
+--    'liftOp_' f m = do
+--      k \<- 'peel'
+--      'join' $ 'lift' $ f (k m)
+-- @
+liftOp_ :: (MonadTransPeel t, Monad m, Monad n, Monad o, Monad (t n)) =>
+           (m (t o a) -> n (t n b)) -> t m a -> t n b
+liftOp_ f m = do
+  k <- peel
+  join $ lift $ f (k m)
diff --git a/monad-peel.cabal b/monad-peel.cabal
--- a/monad-peel.cabal
+++ b/monad-peel.cabal
@@ -1,5 +1,5 @@
 Name:                monad-peel
-Version:             0.1
+Version:             0.1.1
 Synopsis:            Lift control operations like exception catching through monad transformers
 Description:
   This package defines @MonadPeelIO@, a subset of @MonadIO@ into which
@@ -30,4 +30,4 @@
   Build-depends:
     base >= 3 && < 5,
     extensible-exceptions,
-    transformers >= 0.2 && < 0.3
+    transformers >= 0.2 && < 0.4
