diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+0.9.5
+-----
+
+* Support for mtl 2.3
+
 0.9.4
 -----
 
diff --git a/Jose/Internal/Base64.hs b/Jose/Internal/Base64.hs
--- a/Jose/Internal/Base64.hs
+++ b/Jose/Internal/Base64.hs
@@ -1,11 +1,16 @@
-{-# LANGUAGE OverloadedStrings, FlexibleContexts #-}
+{-# LANGUAGE OverloadedStrings, FlexibleContexts, CPP #-}
 {-# OPTIONS_HADDOCK hide #-}
 
 -- | JWT-style base64 encoding and decoding
 
 module Jose.Internal.Base64 where
 
+#if MIN_VERSION_mtl(2,2,1)
+import Control.Monad.Except
+#else
 import Control.Monad.Error
+#endif
+
 import Data.ByteArray
 import Data.ByteArray.Encoding
 
diff --git a/jose-jwt.cabal b/jose-jwt.cabal
--- a/jose-jwt.cabal
+++ b/jose-jwt.cabal
@@ -1,5 +1,5 @@
 Name:               jose-jwt
-Version:            0.9.4
+Version:            0.9.5
 Synopsis:           JSON Object Signing and Encryption Library
 Homepage:           http://github.com/tekul/jose-jwt
 Bug-Reports:        http://github.com/tekul/jose-jwt/issues
@@ -17,7 +17,7 @@
 License:            BSD3
 License-File:       LICENSE
 Build-Type:         Simple
-Cabal-Version:      >= 1.16
+Cabal-Version:      1.16
 Category:           JSON, Cryptography
 
 Extra-Source-Files:
@@ -50,7 +50,7 @@
     Buildable: False
   else
     Build-depends:    base >= 4.9 && < 5
-                    , aeson >= 1.5 && < 2.1
+                    , aeson >= 1.5 && < 2.2
                     , attoparsec >= 0.12.0.0
                     , bytestring >= 0.9
                     , cereal >= 0.4
