diff --git a/higher-leveldb.cabal b/higher-leveldb.cabal
--- a/higher-leveldb.cabal
+++ b/higher-leveldb.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                higher-leveldb
-version:             0.2.1.0
+version:             0.3.0.0
 synopsis:            A rich monadic API for working with leveldb databases.
 description:         A rich monadic API for working with leveldb databases.
 homepage:            https://github.com/jeremyjh/higher-leveldb
@@ -25,14 +25,14 @@
   exposed-modules:     Database.LevelDB.Higher
   -- other-modules:       
   hs-source-dirs:      src
-  build-depends:       base == 4.* 
+  build-depends:       base == 4.*
                        , cereal  >= 0.4 && < 0.5
                        , lifted-base >= 0.2.1.1 && < 0.3
                        , leveldb-haskell >= 0.2 && <= 0.7
                        , bytestring >= 0.10 && < 0.11
                        , resourcet       >=  1.1.0 && <= 1.2
                        , transformers-base >= 0.4.1 && < 0.5
-                       , mtl >= 2.0 && < 2.2
+                       , mtl >= 2.0 && < 2.3
                        , monad-control >= 0.3 && < 1.1
                        , data-default >= 0.5.1 && < 0.6
                        , transformers >= 0.3 && < 0.5
diff --git a/src/Database/LevelDB/Higher.hs b/src/Database/LevelDB/Higher.hs
--- a/src/Database/LevelDB/Higher.hs
+++ b/src/Database/LevelDB/Higher.hs
@@ -51,7 +51,9 @@
 import           Control.Monad.Writer
 import           Data.Word                         (Word32)
 
+#if !MIN_VERSION_base(4,8,0)
 import           Control.Applicative               (Applicative)
+#endif
 import           Control.Monad.Base                (MonadBase(..))
 
 import           Control.Concurrent.MVar.Lifted
@@ -69,11 +71,16 @@
 import           Control.Monad.Trans.Control
 
 
+#if MIN_VERSION_mtl(2,2,1)
+import qualified Control.Monad.Except              as Except
+#else
+import qualified Control.Monad.Trans.Error as Error
+#endif
+
 import qualified Control.Monad.Trans.Cont          as Cont
 import qualified Control.Monad.Trans.Identity      as Identity
 import qualified Control.Monad.Trans.List          as List
 import qualified Control.Monad.Trans.Maybe         as Maybe
-import qualified Control.Monad.Trans.Error         as Error
 import qualified Control.Monad.Trans.State         as State
 import qualified Control.Monad.Trans.Writer        as Writer
 import qualified Control.Monad.Trans.RWS           as RWS
@@ -205,11 +212,17 @@
 INST(Monad m,Cont.ContT r, Cont.mapContT)
 INST(Monad m,State.StateT s, State.mapStateT )
 INST(Monad m,Strict.StateT s, Strict.mapStateT )
-INST(Error.Error e, Error.ErrorT e, Error.mapErrorT)
 INST(Monoid w, Writer.WriterT w, Writer.mapWriterT)
 INST(Monoid w, Strict.WriterT w, Strict.mapWriterT)
 INST(Monoid w, RWS.RWST r w s, RWS.mapRWST)
 INST(Monoid w, Strict.RWST r w s, Strict.mapRWST)
+
+#if MIN_VERSION_mtl(2,2,1)
+INST(Except.MonadError e m, Except.ExceptT e, Except.mapExceptT)
+#else
+INST(Error.Error e, Error.ErrorT e, Error.mapErrorT)
+#endif
+
 #undef INST
 -- | alias for LevelDBT IO - useful if you aren't building a custom stack.
 type LevelDB a = LevelDBT IO a
