diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
 # Revision history for aeson-combinators
 
+## 0.1.1.0 -- 2023-12-28
+* Aeson 2.2.x compatibility
+
 ## 0.1.1.0 -- 2023-09-03
 * `fromDecoder` utility to unwrap a `Decoder`'s function
 * `maybeKey` combinator
diff --git a/aeson-combinators.cabal b/aeson-combinators.cabal
--- a/aeson-combinators.cabal
+++ b/aeson-combinators.cabal
@@ -1,6 +1,6 @@
 cabal-version:       >=1.10
 name:                aeson-combinators
-version:             0.1.1.0
+version:             0.1.2.0
 synopsis:            Aeson combinators for dead simple JSON decoding
 description:
     Low overhead value space `Decoder`
@@ -18,10 +18,10 @@
 extra-source-files:  README.md
                    , CHANGELOG.md
 homepage:            https://github.com/turboMaCk/aeson-combinators
-tested-with:         GHC == 8.8.4
-                   , GHC == 8.10.7
+tested-with:         GHC == 8.10.7
                    , GHC == 9.0.2
                    , GHC == 9.2.5
+                   , GHC == 9.8.1
                    , GHCJS == 8.6.0.1
 
 Flag doctest
@@ -48,6 +48,10 @@
                      , unordered-containers
                      , void
                      , scientific
+
+  if impl(ghc >= 9.8.0)
+      build-depends:
+          attoparsec-aeson
   hs-source-dirs:      lib
   default-language:    Haskell2010
   hs-source-dirs:      lib
diff --git a/lib/Data/Aeson/Combinators/Decode.hs b/lib/Data/Aeson/Combinators/Decode.hs
--- a/lib/Data/Aeson/Combinators/Decode.hs
+++ b/lib/Data/Aeson/Combinators/Decode.hs
@@ -102,8 +102,15 @@
 import qualified Control.Monad.Fail         as Fail
 
 import           Data.Aeson.Combinators.Compat
+
+#if !(MIN_VERSION_aeson(2,2,0))
 import           Data.Aeson.Internal        (JSONPath, JSONPathElement (..))
-import qualified Data.Aeson.Internal        as AI
+import           Data.Aeson.Internal        (formatError, iparse)
+#endif
+#if MIN_VERSION_aeson(2,2,0)
+import           Data.Aeson.Types           (JSONPath, JSONPathElement (..))
+import           Data.Aeson.Types           (formatError, iparse)
+#endif
 import qualified Data.Aeson.Parser          as Parser
 import qualified Data.Aeson.Parser.Internal as ParserI
 import           Data.Aeson.Types           hiding (parseEither, parseMaybe)
@@ -797,14 +804,14 @@
 -- | Like 'decode' but returns an error message when decoding fails.
 eitherDecode :: Decoder a -> LB.ByteString -> Either String a
 eitherDecode (Decoder d) =
-  eitherFormatError . Parser.eitherDecodeWith ParserI.jsonEOF (AI.iparse d)
+  eitherFormatError . Parser.eitherDecodeWith ParserI.jsonEOF (iparse d)
 {-# INLINE eitherDecode #-}
 
 
 -- | Like 'decode'' but returns an error message when decoding fails.
 eitherDecode' :: Decoder a -> LB.ByteString -> Either String a
 eitherDecode' (Decoder d) =
-  eitherFormatError . Parser.eitherDecodeWith ParserI.jsonEOF' (AI.iparse d)
+  eitherFormatError . Parser.eitherDecodeWith ParserI.jsonEOF' (iparse d)
 {-# INLINE eitherDecode' #-}
 
 
@@ -844,14 +851,14 @@
 -- | Like 'decodeStrict' but returns an error message when decoding fails.
 eitherDecodeStrict :: Decoder a -> B.ByteString -> Either String a
 eitherDecodeStrict (Decoder d) =
-  eitherFormatError . Parser.eitherDecodeStrictWith ParserI.jsonEOF (AI.iparse d)
+  eitherFormatError . Parser.eitherDecodeStrictWith ParserI.jsonEOF (iparse d)
 {-# INLINE eitherDecodeStrict #-}
 
 
 -- | Like 'decodeStrict'' but returns an error message when decoding fails.
 eitherDecodeStrict' :: Decoder a -> B.ByteString -> Either String a
 eitherDecodeStrict' (Decoder d) =
-  eitherFormatError . Parser.eitherDecodeStrictWith ParserI.jsonEOF' (AI.iparse d)
+  eitherFormatError . Parser.eitherDecodeStrictWith ParserI.jsonEOF' (iparse d)
 {-# INLINE eitherDecodeStrict' #-}
 
 
@@ -923,7 +930,7 @@
 
 
 eitherFormatError :: Either (JSONPath, String) a -> Either String a
-eitherFormatError = Prelude.either (Left . uncurry AI.formatError) Right
+eitherFormatError = Prelude.either (Left . uncurry formatError) Right
 {-# INLINE eitherFormatError #-}
 
 
