diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,10 @@
+# Revision history for aeson-better-errors
+
+## 0.9.1.1
+
+* Make compatible with aeson >2.0.0.0
+
+
+## Previous versions
+
+* Please see git history
diff --git a/aeson-better-errors.cabal b/aeson-better-errors.cabal
--- a/aeson-better-errors.cabal
+++ b/aeson-better-errors.cabal
@@ -1,5 +1,5 @@
 name:                aeson-better-errors
-version:             0.9.1.0
+version:             0.9.1.1
 synopsis:            Better error messages when decoding JSON values.
 license:             MIT
 license-file:        LICENSE
@@ -10,6 +10,7 @@
 build-type:          Simple
 cabal-version:       >=1.10
 extra-source-files:  README.md
+                   , CHANGELOG.md
 
 description:
   A small package which gives you the tools to build parsers to decode JSON
@@ -26,7 +27,7 @@
                      Data.Aeson.BetterErrors.Internal
   other-modules:     Data.Aeson.BetterErrors.Utils
   build-depends:     base >=4.5 && <5
-                   , aeson >=0.7
+                   , aeson >=0.7 && <1.6 || >=2.0 && <2.1
                    , unordered-containers
                    , dlist
                    , text
diff --git a/src/Data/Aeson/BetterErrors/Internal.hs b/src/Data/Aeson/BetterErrors/Internal.hs
--- a/src/Data/Aeson/BetterErrors/Internal.hs
+++ b/src/Data/Aeson/BetterErrors/Internal.hs
@@ -33,7 +33,13 @@
 import qualified Data.Vector as V
 import Data.Scientific (Scientific)
 import qualified Data.Scientific as S
+
+#if MIN_VERSION_aeson(2,0,0)
+import qualified Data.Aeson.KeyMap as KeyMap
+import qualified Data.Aeson.Key as Key
+#else
 import qualified Data.HashMap.Strict as HashMap
+#endif
 
 import Data.Aeson.BetterErrors.Utils
 
@@ -387,7 +393,11 @@
   v <- asks rdrValue
   case v of
     A.Object obj ->
+#if MIN_VERSION_aeson(2,0,0)
+      case KeyMap.lookup (Key.fromText k) obj of
+#else
       case HashMap.lookup k obj of
+#endif
         Just v' ->
           local (appendPath (ObjectKey k) . setValue v') p
         Nothing ->
@@ -435,9 +445,15 @@
 -- an argument, and collect the results.
 forEachInObject :: (Functor m, Monad m) => (Text -> ParseT err m a) -> ParseT err m [a]
 forEachInObject p = do
+#if MIN_VERSION_aeson(2,0,0)
+  xs <- KeyMap.toList <$> asObject
+  forM xs $ \(k, x) ->
+    local (appendPath (ObjectKey (Key.toText k)) . setValue x) (p (Key.toText k))
+#else
   xs <- HashMap.toList <$> asObject
   forM xs $ \(k, x) ->
     local (appendPath (ObjectKey k) . setValue x) (p k)
+#endif
 
 -- | Attempt to parse each property value in the object with the given parser,
 -- and collect the results.
