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
@@ -34,13 +34,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
@@ -105,9 +107,17 @@
 -- ---------------------------------------------------------------------------
 -- Instances for other mtl transformers
 
+instance (MonadError e m) => MonadError e (IdentityT m) where
+    throwError = lift . throwError
+    catchError = Identity.liftCatch catchError
+
 instance (MonadError e m) => MonadError e (ListT m) where
     throwError = lift . throwError
     catchError = List.liftCatch catchError
+
+instance (MonadError e m) => MonadError e (MaybeT m) where
+    throwError = lift . throwError
+    catchError = Maybe.liftCatch catchError
 
 instance (MonadError e m) => MonadError e (ReaderT r m) where
     throwError = lift . throwError
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
@@ -33,6 +33,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)
 
@@ -51,3 +53,11 @@
 -- This instance needs UndecidableInstances, because
 -- it does not satisfy the coverage condition
 instance (Error e, MonadRWS r w s m) => MonadRWS r w s (ErrorT e m)
+ 
+-- This instance needs UndecidableInstances, because
+-- it does not satisfy the coverage condition
+instance (MonadRWS r w s m) => MonadRWS r w s (IdentityT m)
+ 
+-- This instance needs UndecidableInstances, because
+-- it does not satisfy the coverage condition
+instance (MonadRWS r w s m) => MonadRWS r w s (MaybeT m)
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
@@ -45,7 +45,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)
@@ -116,9 +118,19 @@
     local = mapErrorT . local
 
 -- Needs UndecidableInstances
+instance (MonadReader r m) => MonadReader r (IdentityT m) where
+    ask   = lift ask
+    local = mapIdentityT . local
+
+-- Needs UndecidableInstances
 instance (MonadReader r m) => MonadReader r (ListT m) where
     ask   = lift ask
     local = mapListT . local
+
+-- Needs UndecidableInstances
+instance (MonadReader r m) => MonadReader r (MaybeT m) where
+    ask   = lift ask
+    local = mapMaybeT . local
 
 -- Needs UndecidableInstances
 instance (MonadReader r m) => MonadReader r (Lazy.StateT s m) where
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
@@ -31,7 +31,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)
@@ -105,7 +107,15 @@
     get = lift get
     put = lift . put
 
+instance (MonadState s m) => MonadState s (IdentityT m) where
+    get = lift get
+    put = lift . put
+
 instance (MonadState s m) => MonadState s (ListT m) where
+    get = lift get
+    put = lift . put
+
+instance (MonadState s m) => MonadState s (MaybeT m) where
     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
@@ -29,6 +29,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)
@@ -99,6 +101,16 @@
     tell   = lift . tell
     listen = Error.liftListen listen
     pass   = Error.liftPass pass
+
+instance (MonadWriter w m) => MonadWriter w (IdentityT m) where
+    tell   = lift . tell
+    listen = Identity.mapIdentityT listen
+    pass   = Identity.mapIdentityT pass
+
+instance (MonadWriter w m) => MonadWriter w (MaybeT m) where
+    tell   = lift . tell
+    listen = Maybe.liftListen listen
+    pass   = Maybe.liftPass pass
 
 instance (MonadWriter w m) => MonadWriter w (ReaderT r m) where
     tell   = lift . tell
diff --git a/monads-fd.cabal b/monads-fd.cabal
--- a/monads-fd.cabal
+++ b/monads-fd.cabal
@@ -1,5 +1,5 @@
 name:         monads-fd
-version:      0.0.0.0
+version:      0.0.0.1
 license:      BSD3
 license-file: LICENSE
 author:       Andy Gill
@@ -36,7 +36,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:
     MultiParamTypeClasses
     FunctionalDependencies
