diff --git a/src/Control/Monad/Catch.hs b/src/Control/Monad/Catch.hs
index f54b64807ec1e6c27d80aba5d53f0301827b5c83..09c74343f11d0a441632fee41b7ac53ded979616 100644
--- a/src/Control/Monad/Catch.hs
+++ b/src/Control/Monad/Catch.hs
@@ -86,6 +86,10 @@ import qualified Control.Monad.Trans.State.Lazy as LazyS
 import qualified Control.Monad.Trans.State.Strict as StrictS
 import qualified Control.Monad.Trans.Writer.Lazy as LazyW
 import qualified Control.Monad.Trans.Writer.Strict as StrictW
+import Control.Monad.Trans.List (ListT)
+import Control.Monad.Trans.Maybe (MaybeT)
+import Control.Monad.Trans.Error (ErrorT, Error)
+import Control.Monad.Trans.Cont (ContT)
 import Control.Monad.Trans.Identity
 import Control.Monad.Reader as Reader
 import Control.Monad.RWS
@@ -221,6 +225,16 @@ instance (MonadCatch m, Monoid w) => MonadCatch (StrictRWS.RWST r w s m) where
     StrictRWS.RWST $ \r s -> uninterruptibleMask $ \u -> StrictRWS.runRWST (a $ q u) r s
       where q u (StrictRWS.RWST b) = StrictRWS.RWST $ \ r s -> u (b r s)
 
+-- Transformers which are only instances of MonadThrow, not MonadCatch
+instance MonadThrow m => MonadThrow (ListT m) where
+  throwM = lift . throwM
+instance MonadThrow m => MonadThrow (MaybeT m) where
+  throwM = lift . throwM
+instance (Error e, MonadThrow m) => MonadThrow (ErrorT e m) where
+  throwM = lift . throwM
+instance MonadThrow m => MonadThrow (ContT r m) where
+  throwM = lift . throwM
+
 ------------------------------------------------------------------------------
 -- $utilities
 -- These functions follow those from "Control.Exception", except that they are