diff --git a/CHANGES.markdown b/CHANGES.markdown
--- a/CHANGES.markdown
+++ b/CHANGES.markdown
@@ -1,3 +1,8 @@
+0.3.0.2 (30 March 2015)
+-----------------------
+
+  - Add transformers-compat to allow building with newer mtl
+
 0.3.0.1 (24 November 2014)
 --------------------------
 
diff --git a/Control/Monad/Random.hs b/Control/Monad/Random.hs
--- a/Control/Monad/Random.hs
+++ b/Control/Monad/Random.hs
@@ -50,11 +50,7 @@
 import           Control.Arrow
 import           Control.Monad                ()
 import           Control.Monad.Cont
-#if MIN_VERSION_transformers(0,4,0)
-import           Control.Monad.Except
-#else
 import           Control.Monad.Error
-#endif
 import           Control.Monad.Identity
 import           Control.Monad.Random.Class
 import           Control.Monad.Reader
@@ -64,6 +60,7 @@
 import qualified Control.Monad.State.Lazy     as SL
 import qualified Control.Monad.State.Strict   as SS
 import           Control.Monad.Trans          ()
+import           Control.Monad.Trans.Except
 import           Control.Monad.Trans.Identity
 import           Control.Monad.Trans.Maybe
 import           Control.Monad.Writer.Class
@@ -81,12 +78,6 @@
   pure = return
   (<*>) = ap
 
-liftState :: (MonadState s m) => (s -> (a,s)) -> m a
-liftState t = do v <- get
-                 let (x, v') = t v
-                 put v'
-                 return x
-
 -- | Lift arbitrary action to RandT
 liftRandT :: (Monad m, RandomGen g) =>
              (g -> m (a, g)) -- ^ action returning value and new generator state
@@ -97,17 +88,17 @@
 liftRand :: (RandomGen g) =>
             (g -> (a, g)) -- ^ action returning value and new generator state
             -> Rand g a
-liftRand = RandT . liftState
+liftRand = RandT . state
 
 instance (Monad m, RandomGen g) => MonadRandom (RandT g m) where
-    getRandom = RandT . liftState $ random
-    getRandoms = RandT . liftState $ first randoms . split
-    getRandomR (x,y) = RandT . liftState $ randomR (x,y)
-    getRandomRs (x,y) = RandT . liftState $
+    getRandom = RandT . state $ random
+    getRandoms = RandT . state $ first randoms . split
+    getRandomR (x,y) = RandT . state $ randomR (x,y)
+    getRandomRs (x,y) = RandT . state $
                             first (randomRs (x,y)) . split
 
 instance (Monad m, RandomGen g) => MonadSplit g (RandT g m) where
-    getSplit = RandT . liftState $ split
+    getSplit = RandT . state $ split
 
 -- | Evaluate a RandT computation using the generator @g@.  Note that the
 -- generator @g@ is not returned, so there's no way to recover the
@@ -203,11 +194,13 @@
     getRandoms = lift getRandoms
     getRandomRs = lift . getRandomRs
 
-#if MIN_VERSION_transformers(0,4,0)
 instance (MonadRandom m) => MonadRandom (ExceptT e m) where
-#else
+    getRandom = lift getRandom
+    getRandomR = lift . getRandomR
+    getRandoms = lift getRandoms
+    getRandomRs = lift . getRandomRs
+
 instance (Error e, MonadRandom m) => MonadRandom (ErrorT e m) where
-#endif
     getRandom = lift getRandom
     getRandomR = lift . getRandomR
     getRandoms = lift getRandoms
@@ -249,11 +242,10 @@
 instance (MonadSplit g m, Monoid w) => MonadSplit g (RWSS.RWST r w s m) where
     getSplit = lift getSplit
 
-#if MIN_VERSION_transformers(0,4,0)
 instance (MonadSplit g m) => MonadSplit g (ExceptT e m) where
-#else
+    getSplit = lift getSplit
+
 instance (Error e, MonadSplit g m) => MonadSplit g (ErrorT e m) where
-#endif
     getSplit = lift getSplit
 
 instance (MonadSplit g m) => MonadSplit g (MaybeT m) where
diff --git a/MonadRandom.cabal b/MonadRandom.cabal
--- a/MonadRandom.cabal
+++ b/MonadRandom.cabal
@@ -1,5 +1,5 @@
 name:                MonadRandom
-version:             0.3.0.1
+version:             0.3.0.2
 synopsis:            Random-number generation monad.
 description:         Support for computations which consume random values.
 license:             OtherLicense
@@ -17,6 +17,6 @@
 
 library
   exposed-modules:     Control.Monad.Random, Control.Monad.Random.Class
-  build-depends:       base >= 2 && < 5, transformers >= 0.3 && < 0.5, mtl, random
+  build-depends:       base >= 2 && < 5, transformers >= 0.3 && < 0.5, transformers-compat == 0.4.*, mtl, random
   ghc-options:         -Wall
   default-language:    Haskell2010
