diff --git a/Control/Monad/Trans/Resource.hs b/Control/Monad/Trans/Resource.hs
--- a/Control/Monad/Trans/Resource.hs
+++ b/Control/Monad/Trans/Resource.hs
@@ -70,6 +70,13 @@
 import Control.Monad.Trans.Writer   ( WriterT  )
 import Control.Monad.Trans.RWS      ( RWST     )
 
+import Control.Monad.Cont.Class   ( MonadCont (..) )
+import Control.Monad.Error.Class  ( MonadError (..) )
+import Control.Monad.RWS.Class    ( MonadRWS (..) )
+import Control.Monad.Reader.Class ( MonadReader (..) )
+import Control.Monad.State.Class  ( MonadState (..) )
+import Control.Monad.Writer.Class ( MonadWriter (..) )
+
 import Data.Word (Word)
 
 import qualified Control.Monad.Trans.RWS.Strict    as Strict ( RWST   )
@@ -119,7 +126,7 @@
 -- a release action will only ever be called once.
 --
 -- Since 0.3.0
-newtype ResourceT m a = ResourceT (I.IORef ReleaseMap -> m a)
+newtype ResourceT m a = ResourceT { unResourceT :: I.IORef ReleaseMap -> m a }
 
 instance Typeable1 m => Typeable1 (ResourceT m) where
     typeOf1 = goType undefined
@@ -134,6 +141,32 @@
 #endif
                 [ typeOf1 m
                 ]
+
+instance MonadCont m => MonadCont (ResourceT m) where
+  callCC f = ResourceT $ \i -> callCC $ \c -> unResourceT (f (ResourceT . const . c)) i
+
+instance MonadError e m => MonadError e (ResourceT m) where
+  throwError = lift . throwError
+  catchError r h = ResourceT $ \i -> unResourceT r i `catchError` \e -> unResourceT (h e) i
+
+instance MonadRWS r w s m => MonadRWS r w s (ResourceT m)
+
+instance MonadReader r m => MonadReader r (ResourceT m) where
+  ask = lift ask
+  local = mapResourceT . local
+
+mapResourceT :: (m a -> n b) -> ResourceT m a -> ResourceT n b
+mapResourceT f = ResourceT . (f .) . unResourceT
+
+instance MonadState s m => MonadState s (ResourceT m) where
+  get = lift get
+  put = lift . put
+
+instance MonadWriter w m => MonadWriter w (ResourceT m) where
+  tell   = lift . tell
+  listen = mapResourceT listen
+  pass   = mapResourceT pass
+
 
 -- | A @Monad@ which allows for safe resource allocation. In theory, any monad
 -- transformer stack included a @ResourceT@ can be an instance of
diff --git a/resourcet.cabal b/resourcet.cabal
--- a/resourcet.cabal
+++ b/resourcet.cabal
@@ -1,5 +1,5 @@
 Name:                resourcet
-Version:             0.3.2.2
+Version:             0.3.3
 Synopsis:            Deterministic allocation and freeing of scarce resources.
 Description:
 	This package was originally included with the conduit package, and has since been split off. For more information, please see <http://www.yesodweb.com/book/conduits>.
@@ -20,6 +20,7 @@
                      , monad-control            >= 0.3.1        && < 0.4
                      , containers
                      , transformers             >= 0.2.2        && < 0.4
+                     , mtl                      >= 2.0          && < 2.2
   ghc-options:     -Wall
 
 source-repository head
