diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
 
 `hslua-aeson` uses [PVP Versioning][].
 
+## hslua-aeson-2.0.1
+
+Released 2021-12-28.
+
+-   Restored compatibility with aeson 1.5.
+
 ## hslua-aeson-2.0.0
 
 Released 2021-12-17.
diff --git a/hslua-aeson.cabal b/hslua-aeson.cabal
--- a/hslua-aeson.cabal
+++ b/hslua-aeson.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.2
 name:                hslua-aeson
-version:             2.0.0
+version:             2.0.1
 synopsis:            Allow aeson data types to be used with lua.
 description:         This package provides instances to push and receive any
                      datatype encodable as JSON to and from the Lua stack.
@@ -27,7 +27,7 @@
 common common-options
   default-language:    Haskell2010
   build-depends:       base                 >= 4.8    && < 5
-                     , aeson                >= 2.0    && < 2.1
+                     , aeson                >= 1.5    && < 2.1
                      , bytestring           >= 0.10.2 && < 0.12
                      , containers           >= 0.5.9  && < 0.7
                      , hashable             >= 1.2    && < 1.5
@@ -39,6 +39,7 @@
                      , text                 >= 1.0    && < 1.3
                      , vector               >= 0.7
   default-extensions:  BangPatterns
+                     , CPP
                      , LambdaCase
                      , OverloadedStrings
                      , TypeApplications
diff --git a/src/HsLua/Aeson.hs b/src/HsLua/Aeson.hs
--- a/src/HsLua/Aeson.hs
+++ b/src/HsLua/Aeson.hs
@@ -35,8 +35,6 @@
   ) where
 
 import Control.Monad ((<$!>), when)
-import Data.Aeson.Key (Key, toText, fromText)
-import Data.Aeson.KeyMap
 import Data.Scientific (Scientific, toRealFloat, fromFloatDigits)
 import Data.String (IsString (fromString))
 import Data.Vector (Vector)
@@ -44,9 +42,23 @@
 import HsLua.Marshalling as Lua
 
 import qualified Data.Aeson as Aeson
-import qualified Data.Aeson.KeyMap as KeyMap
 import qualified Data.Vector as Vector
 import qualified HsLua.Core.Unsafe as Unsafe
+
+#if MIN_VERSION_aeson(2,0,0)
+import Data.Aeson.Key (Key, toText, fromText)
+import qualified Data.Aeson.KeyMap as KeyMap
+type KeyMap = KeyMap.KeyMap
+#else
+import Data.Text (Text)
+import qualified Data.HashMap.Strict as KeyMap
+type Key = Text
+type KeyMap = KeyMap.HashMap Key
+toText :: Key -> Text
+toText = id
+fromText :: Text -> Key
+fromText = id
+#endif
 
 -- Scientific
 pushScientific :: Pusher e Scientific
diff --git a/test/test-hslua-aeson.hs b/test/test-hslua-aeson.hs
--- a/test/test-hslua-aeson.hs
+++ b/test/test-hslua-aeson.hs
@@ -7,7 +7,6 @@
 -}
 import Control.Monad (when)
 import Data.AEq ((~==))
-import Data.Aeson.Key (Key, fromText)
 import Data.ByteString (ByteString)
 import Data.Scientific (Scientific, toRealFloat, fromFloatDigits)
 import HsLua.Core as Lua
@@ -20,10 +19,17 @@
 import Test.QuickCheck.Instances ()
 
 import qualified Data.Aeson as Aeson
-import qualified Data.Aeson.KeyMap as KeyMap
 import qualified Data.Vector as Vector
 import qualified Test.QuickCheck.Monadic as QC
 
+#if MIN_VERSION_aeson(2,0,0)
+import Data.Aeson.Key (Key, fromText)
+import qualified Data.Aeson.KeyMap as KeyMap
+#else
+import qualified Data.HashMap.Strict as KeyMap
+#endif
+
+
 -- | Run this spec.
 main :: IO ()
 main = defaultMain tests
@@ -153,11 +159,13 @@
 instance Arbitrary Aeson.Value where
   arbitrary = arbitraryValue 5
 
+#if MIN_VERSION_aeson(2,0,0)
 instance Arbitrary Key where
   arbitrary = fmap fromText arbitrary
 
 instance Arbitrary a => Arbitrary (KeyMap.KeyMap a) where
   arbitrary = fmap KeyMap.fromList arbitrary
+#endif
 
 arbitraryValue :: Int -> Gen Aeson.Value
 arbitraryValue size = frequency
