diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,7 @@
+Version 3.0
+  * Add instane from `MonadFail`---none of the transformers implement this
+    functionality so the implementation just lifts things.
+
 Version 3.8
   * Added `WithBase`
 
diff --git a/monadLib.cabal b/monadLib.cabal
--- a/monadLib.cabal
+++ b/monadLib.cabal
@@ -1,5 +1,5 @@
 Name:           monadLib
-Version:        3.8
+Version:        3.9
 License:        BSD3
 License-file:   LICENSE
 Author:         Iavor S. Diatchki
@@ -15,10 +15,6 @@
   README,
   CHANGES
 
-Flag base3
-  Description: Build for compatability with base3
-  Default:     False
-
 Library
   hs-source-dirs: src
   Exposed-modules:
@@ -26,11 +22,7 @@
     MonadLib.Monads,
     MonadLib.Derive
 
-  if flag(base3)
-    Build-depends: base < 4
-    CPP-options: -DUSE_BASE3
-  else
-    Build-depends: base >= 4 && < 5
+  Build-depends: base >= 4 && < 5
 
   GHC-options:    -O2 -Wall
 
diff --git a/src/MonadLib.hs b/src/MonadLib.hs
--- a/src/MonadLib.hs
+++ b/src/MonadLib.hs
@@ -46,11 +46,12 @@
   handle,
   WithBase,
 
-  -- * Miscellaneous
-  version,
   module Control.Monad
 ) where
 
+#if __GLASGOW_HASKELL__ < 800
+import Data.Monoid
+#endif
 
 import Control.Applicative
 import Control.Monad
@@ -63,13 +64,12 @@
 import qualified Control.Exception as IO (SomeException)
 #endif
 import System.Exit(ExitCode,exitWith)
-import Data.Monoid
 import Data.Kind(Type)
 import Prelude hiding (Ordering(..))
-
--- | The current version of the library.
-version :: (Int,Int,Int)
-version = (3,5,2)
+#if __GLASGOW_HASKELL__ >= 800
+import qualified Control.Monad.Fail as MF
+import Control.Monad.Fail(MonadFail)
+#endif
 
 
 -- $Types
@@ -264,6 +264,9 @@
 t_fail     :: (MonadT t, Monad m) => String -> t m a
 t_fail x    = lift (fail x)
 
+t_fail'    :: (MonadT t, MonadFail m) => String -> t m a
+t_fail' x   = lift (MF.fail x)
+
 t_mzero    :: (MonadT t, MonadPlus m) => t m a
 t_mzero     = lift mzero
 
@@ -854,3 +857,13 @@
   WithBase b (f ': fs)  = f (WithBase b fs)
 
 
+#if __GLASGOW_HASKELL__ >= 800
+instance MonadFail m => MonadFail (IdT          m) where fail = t_fail'
+instance MonadFail m => MonadFail (ReaderT    i m) where fail = t_fail'
+instance (Monoid i, MonadFail m)
+                     => MonadFail (WriterT    i m) where fail = t_fail'
+instance MonadFail m => MonadFail (StateT     i m) where fail = t_fail'
+instance MonadFail m => MonadFail (ExceptionT i m) where fail = t_fail'
+instance MonadFail m => MonadFail (ChoiceT      m) where fail = t_fail'
+instance MonadFail m => MonadFail (ContT      i m) where fail = t_fail'
+#endif
diff --git a/src/MonadLib/Monads.hs b/src/MonadLib/Monads.hs
--- a/src/MonadLib/Monads.hs
+++ b/src/MonadLib/Monads.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE Safe #-}
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-|  This module contains a collection of monads that
@@ -15,9 +16,11 @@
 ) where
 import MonadLib
 import MonadLib.Derive
-import Control.Applicative
 import Control.Monad.Fix
+#if __GLASGOW_HASKELL__ < 800
 import Data.Monoid
+import Control.Applicative
+#endif
 
 newtype Reader    i a = R' { unR :: ReaderT    i Id a }
 newtype Writer    i a = W' { unW :: WriterT    i Id a }
