diff --git a/CHANGES.markdown b/CHANGES.markdown
--- a/CHANGES.markdown
+++ b/CHANGES.markdown
@@ -1,3 +1,10 @@
+0.1.11 (1 August 2013)
+----------------------
+
+  - add MonadRandom and MonadSplit instances for IdentityT
+  - derive MonadReader and MonadWriter instances instead of declaring
+    them explicitly (thanks again to James Koppel)
+
 0.1.10 (16 July 2013)
 ---------------------
 
diff --git a/Control/Monad/Random.hs b/Control/Monad/Random.hs
--- a/Control/Monad/Random.hs
+++ b/Control/Monad/Random.hs
@@ -51,6 +51,7 @@
 import           Control.Monad.Reader
 import           Control.Monad.State
 import           Control.Monad.Trans        ()
+import           Control.Monad.Trans.Identity
 import           Control.Monad.Trans.Maybe
 import           Control.Monad.Writer
 import           System.Random
@@ -58,7 +59,7 @@
 -- | A monad transformer which adds a random number generator to an
 -- existing monad.
 newtype RandT g m a = RandT (StateT g m a)
-    deriving (Functor, Monad, MonadTrans, MonadIO, MonadFix)
+    deriving (Functor, Monad, MonadTrans, MonadIO, MonadFix, MonadReader r, MonadWriter w)
 
 instance (Functor m,Monad m) => Applicative (RandT g m) where
   pure = return
@@ -123,6 +124,12 @@
   p <- liftM toRational $ getRandomR (0.0,s)
   return . fst . head $ dropWhile (\(_,q) -> q < p) cs
 
+instance (MonadRandom m) => MonadRandom (IdentityT m) where
+    getRandom = lift getRandom
+    getRandomR = lift . getRandomR
+    getRandoms = lift getRandoms
+    getRandomRs = lift . getRandomRs
+
 instance (MonadRandom m) => MonadRandom (StateT s m) where
     getRandom = lift getRandom
     getRandomR = lift . getRandomR
@@ -159,6 +166,9 @@
     getRandoms = lift getRandoms
     getRandomRs = lift . getRandomRs
 
+instance (MonadSplit g m) => MonadSplit g (IdentityT m) where
+    getSplit = lift getSplit
+
 instance (MonadSplit g m) => MonadSplit g (StateT s m) where
     getSplit = lift getSplit
 
@@ -180,15 +190,6 @@
 instance (MonadState s m, RandomGen g) => MonadState s (RandT g m) where
     get = lift get
     put = lift . put
-
-instance (MonadReader r m, RandomGen g) => MonadReader r (RandT g m) where
-    ask = lift ask
-    local f (RandT m) = RandT $ local f m
-
-instance (MonadWriter w m, RandomGen g, Monoid w) => MonadWriter w (RandT g m) where
-    tell = lift . tell
-    listen (RandT m) = RandT $ listen m
-    pass (RandT m) = RandT $ pass m
 
 instance MonadRandom IO where
     getRandom = randomIO
diff --git a/MonadRandom.cabal b/MonadRandom.cabal
--- a/MonadRandom.cabal
+++ b/MonadRandom.cabal
@@ -1,5 +1,5 @@
 name:                MonadRandom
-version:             0.1.10
+version:             0.1.11
 synopsis:            Random-number generation monad.
 description:         Support for computations which consume random values.
 license:             OtherLicense
