diff --git a/Control/Monad/Cont/Class.hs b/Control/Monad/Cont/Class.hs
--- a/Control/Monad/Cont/Class.hs
+++ b/Control/Monad/Cont/Class.hs
@@ -55,7 +55,9 @@
 import Control.Monad.Trans.Cont (ContT)
 import qualified Control.Monad.Trans.Cont as ContT
 import Control.Monad.Trans.Error as Error
+import Control.Monad.Trans.Identity as Identity
 import Control.Monad.Trans.List as List
+import Control.Monad.Trans.Maybe as Maybe
 import Control.Monad.Trans.Reader as Reader
 import Control.Monad.Trans.RWS.Lazy as LazyRWS
 import Control.Monad.Trans.RWS.Strict as StrictRWS
@@ -97,8 +99,14 @@
 instance (Error e, MonadCont m) => MonadCont (ErrorT e m) where
     callCC = Error.liftCallCC callCC
 
+instance (MonadCont m) => MonadCont (IdentityT m) where
+    callCC = Identity.liftCallCC callCC
+
 instance (MonadCont m) => MonadCont (ListT m) where
     callCC = List.liftCallCC callCC
+
+instance (MonadCont m) => MonadCont (MaybeT m) where
+    callCC = Maybe.liftCallCC callCC
 
 instance (MonadCont m) => MonadCont (ReaderT r m) where
     callCC = Reader.liftCallCC callCC
diff --git a/Control/Monad/Error/Class.hs b/Control/Monad/Error/Class.hs
--- a/Control/Monad/Error/Class.hs
+++ b/Control/Monad/Error/Class.hs
@@ -32,13 +32,15 @@
     Andy Gill (<http://web.cecs.pdx.edu/~andy/>)
 -}
 module Control.Monad.Error.Class (
-    Error,
+    Error(..),
     MonadError(..),
   ) where
 
-import Control.Monad.Trans.Error (Error, ErrorT)
+import Control.Monad.Trans.Error (Error(..), ErrorT)
 import qualified Control.Monad.Trans.Error as ErrorT (throwError, catchError)
+import Control.Monad.Trans.Identity as Identity
 import Control.Monad.Trans.List as List
+import Control.Monad.Trans.Maybe as Maybe
 import Control.Monad.Trans.Reader as Reader
 import Control.Monad.Trans.RWS.Lazy as LazyRWS
 import Control.Monad.Trans.RWS.Strict as StrictRWS
@@ -108,10 +110,20 @@
 -- ---------------------------------------------------------------------------
 -- Instances for other mtl transformers
 
+instance (MonadError m) => MonadError (IdentityT m) where
+    type ErrorType (IdentityT m) = ErrorType m
+    throwError = lift . throwError
+    catchError = Identity.liftCatch catchError
+
 instance (MonadError m) => MonadError (ListT m) where
     type ErrorType (ListT m) = ErrorType m
     throwError = lift . throwError
     catchError = List.liftCatch catchError
+
+instance (MonadError m) => MonadError (MaybeT m) where
+    type ErrorType (MaybeT m) = ErrorType m
+    throwError = lift . throwError
+    catchError = Maybe.liftCatch catchError
 
 instance (MonadError m) => MonadError (ReaderT r m) where
     type ErrorType (ReaderT r m) = ErrorType m
diff --git a/Control/Monad/RWS/Class.hs b/Control/Monad/RWS/Class.hs
--- a/Control/Monad/RWS/Class.hs
+++ b/Control/Monad/RWS/Class.hs
@@ -1,4 +1,5 @@
 
+-----------------------------------------------------------------------------
 -- |
 -- Module      :  Control.Monad.RWS.Class
 -- Copyright   :  (c) Andy Gill 2001,
@@ -30,6 +31,8 @@
 import Control.Monad.Writer.Class
 
 import Control.Monad.Trans.Error(Error, ErrorT)
+import Control.Monad.Trans.Maybe(MaybeT)
+import Control.Monad.Trans.Identity(IdentityT)
 import Control.Monad.Trans.RWS.Lazy as Lazy (RWST)
 import qualified Control.Monad.Trans.RWS.Strict as Strict (RWST)
 
@@ -46,3 +49,7 @@
 -- Instances for other mtl transformers
  
 instance (Error e, MonadRWS m) => MonadRWS (ErrorT e m)
+ 
+instance (MonadRWS m) => MonadRWS (IdentityT m)
+ 
+instance (MonadRWS m) => MonadRWS (MaybeT m)
diff --git a/Control/Monad/Reader.hs b/Control/Monad/Reader.hs
--- a/Control/Monad/Reader.hs
+++ b/Control/Monad/Reader.hs
@@ -37,10 +37,15 @@
 -}
 
 module Control.Monad.Reader (
-    module Control.Monad.Reader.Class,
+    -- * MonadReader class
+    MonadReader(..),
+    asks,
+    -- * The Reader monad
     Reader,
+    runReader,
     mapReader,
     withReader,
+    -- * The ReaderT monad transformer
     ReaderT(..),
     mapReaderT,
     withReaderT,
@@ -59,7 +64,9 @@
 
 import Control.Monad.Reader.Class
 
-import Control.Monad.Trans.Reader hiding (ask, local, asks)
+import Control.Monad.Trans.Reader (
+    Reader, runReader, mapReader, withReader,
+    ReaderT(..), mapReaderT, withReaderT)
 import Control.Monad.Trans
 
 import Control.Monad
diff --git a/Control/Monad/Reader/Class.hs b/Control/Monad/Reader/Class.hs
--- a/Control/Monad/Reader/Class.hs
+++ b/Control/Monad/Reader/Class.hs
@@ -44,7 +44,9 @@
 
 import Control.Monad.Trans.Cont as Cont
 import Control.Monad.Trans.Error
+import Control.Monad.Trans.Identity
 import Control.Monad.Trans.List
+import Control.Monad.Trans.Maybe
 import Control.Monad.Trans.Reader (ReaderT)
 import qualified Control.Monad.Trans.Reader as ReaderT (ask, local)
 import qualified Control.Monad.Trans.RWS.Lazy as LazyRWS (RWST, ask, local)
@@ -121,10 +123,20 @@
     ask   = lift ask
     local = mapErrorT . local
 
+instance (MonadReader m) => MonadReader (IdentityT m) where
+    type EnvType (IdentityT m) = EnvType m
+    ask   = lift ask
+    local = mapIdentityT . local
+
 instance (MonadReader m) => MonadReader (ListT m) where
     type EnvType (ListT m) = EnvType m
     ask   = lift ask
     local = mapListT . local
+
+instance (MonadReader m) => MonadReader (MaybeT m) where
+    type EnvType (MaybeT m) = EnvType m
+    ask   = lift ask
+    local = mapMaybeT . local
 
 instance (MonadReader m) => MonadReader (Lazy.StateT s m) where
     type EnvType (Lazy.StateT s m) = EnvType m
diff --git a/Control/Monad/State/Class.hs b/Control/Monad/State/Class.hs
--- a/Control/Monad/State/Class.hs
+++ b/Control/Monad/State/Class.hs
@@ -28,7 +28,9 @@
 import Control.Monad.Trans (lift)
 import Control.Monad.Trans.Cont
 import Control.Monad.Trans.Error
+import Control.Monad.Trans.Identity
 import Control.Monad.Trans.List
+import Control.Monad.Trans.Maybe
 import Control.Monad.Trans.Reader
 import qualified Control.Monad.Trans.RWS.Lazy as LazyRWS (RWST, get, put)
 import qualified Control.Monad.Trans.RWS.Strict as StrictRWS (RWST, get, put)
@@ -108,8 +110,18 @@
     get = lift get
     put = lift . put
 
+instance (MonadState m) => MonadState (IdentityT m) where
+    type StateType (IdentityT m) = StateType m
+    get = lift get
+    put = lift . put
+
 instance (MonadState m) => MonadState (ListT m) where
     type StateType (ListT m) = StateType m
+    get = lift get
+    put = lift . put
+
+instance (MonadState m) => MonadState (MaybeT m) where
+    type StateType (MaybeT m) = StateType m
     get = lift get
     put = lift . put
 
diff --git a/Control/Monad/Writer/Class.hs b/Control/Monad/Writer/Class.hs
--- a/Control/Monad/Writer/Class.hs
+++ b/Control/Monad/Writer/Class.hs
@@ -26,6 +26,8 @@
 
 import Control.Monad
 import Control.Monad.Trans.Error as Error
+import Control.Monad.Trans.Identity as Identity
+import Control.Monad.Trans.Maybe as Maybe
 import Control.Monad.Trans.Reader
 import qualified Control.Monad.Trans.RWS.Lazy as LazyRWS (
         RWST, tell, listen, pass)
@@ -100,6 +102,18 @@
     tell   = lift . tell
     listen = Error.liftListen listen
     pass   = Error.liftPass pass
+
+instance (MonadWriter m) => MonadWriter (IdentityT m) where
+    type WriterType (IdentityT m) = WriterType m
+    tell   = lift . tell
+    listen = Identity.mapIdentityT listen
+    pass   = Identity.mapIdentityT pass
+
+instance (MonadWriter m) => MonadWriter (MaybeT m) where
+    type WriterType (MaybeT m) = WriterType m
+    tell   = lift . tell
+    listen = Maybe.liftListen listen
+    pass   = Maybe.liftPass pass
 
 instance (MonadWriter m) => MonadWriter (ReaderT r m) where
     type WriterType (ReaderT r m) = WriterType m
diff --git a/monads-tf.cabal b/monads-tf.cabal
--- a/monads-tf.cabal
+++ b/monads-tf.cabal
@@ -1,5 +1,5 @@
 name:         monads-tf
-version:      0.0.0.0
+version:      0.0.0.1
 license:      BSD3
 license-file: LICENSE
 cabal-version: >= 1.2.3
@@ -37,7 +37,7 @@
     Control.Monad.Writer.Class
     Control.Monad.Writer.Lazy
     Control.Monad.Writer.Strict
-build-depends: base, transformers
+build-depends: base, transformers >= 0.1.4.0
 extensions:
     FlexibleContexts
     TypeFamilies
