diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.markdown
@@ -0,0 +1,12 @@
+# aeson-pretty changelog
+
+## 0.8.11
+ * Dropped support for Aeson 1.4 and older
+ * Added support for Aeson 2.3
+ * Added support for Aeson 2.2
+
+## 0.8.10
+ * Added support for Aeson 2.1
+
+## 0.8.9
+ * Added support for Aeson 2.0
diff --git a/Data/Aeson/Encode/Pretty.hs b/Data/Aeson/Encode/Pretty.hs
--- a/Data/Aeson/Encode/Pretty.hs
+++ b/Data/Aeson/Encode/Pretty.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE OverloadedStrings, RecordWildCards #-}
+{-# LANGUAGE OverloadedStrings, RecordWildCards, CPP #-}
 
 -- |Aeson-compatible pretty-printing of JSON 'Value's.
 module Data.Aeson.Encode.Pretty (
@@ -54,14 +54,22 @@
     keyOrder
 ) where
 
+#if MIN_VERSION_aeson(2,0,0)
+import qualified Data.Aeson.Key as AK
+import qualified Data.Aeson.KeyMap as AKM
+#endif
 import Data.Aeson (Value(..), ToJSON(..))
-import qualified Data.Aeson.Encode as Aeson
+import qualified Data.Aeson.Text as Aeson
 import Data.ByteString.Lazy (ByteString)
 import Data.Function (on)
+#if !MIN_VERSION_aeson(2,0,0)
 import qualified Data.HashMap.Strict as H (toList)
+#endif
 import Data.List (intersperse, sortBy, elemIndex)
 import Data.Maybe (fromMaybe)
+#if !MIN_VERSION_base(4,13,0)
 import Data.Semigroup ((<>))
+#endif
 import qualified Data.Scientific as S (Scientific, FPFormat(..))
 import Data.Ord (comparing)
 import Data.Text (Text)
@@ -87,10 +95,11 @@
 data Indent = Spaces Int | Tab
 
 data NumberFormat
-  -- | The standard behaviour of the 'Aeson.encode' function. Uses
-  --   integer literals for integers (1, 2, 3...), simple decimals
-  --   for fractional values between 0.1 and 9,999,999, and scientific
-  --   notation otherwise.
+  -- | For numbers with absolute value less than 1e19, this follows the standard
+  -- behaviour of the 'Data.Aeson.encode' function. Uses integer literals for
+  -- integers (1, 2, 3...), simple decimals for fractional values between 0.1
+  -- and 9,999,999, and scientific notation otherwise. For numbers with an
+  -- absolute value larger than 1e19, always uses scientific notation.
   = Generic
   -- | Scientific notation (e.g. 2.3e123).
   | Scientific
@@ -146,7 +155,7 @@
 encodePrettyToTextBuilder :: ToJSON a => a -> Builder
 encodePrettyToTextBuilder = encodePrettyToTextBuilder' defConfig
 
--- |A variant of 'encodeToTextBuilder' that takes an additional configuration
+-- |A variant of 'Aeson.encodeToTextBuilder' that takes an additional configuration
 --  parameter.
 encodePrettyToTextBuilder' :: ToJSON a => Config -> a -> Builder
 encodePrettyToTextBuilder' Config{..} x = fromValue st (toJSON x) <> trail
@@ -170,9 +179,15 @@
 fromValue st@PState{..} val = go val
   where
     go (Array v)  = fromCompound st ("[","]") fromValue (V.toList v)
-    go (Object m) = fromCompound st ("{","}") fromPair (pSort (H.toList m))
+    go (Object m) = fromCompound st ("{","}") fromPair (pSort (toList' m))
     go (Number x) = fromNumber st x
     go v          = Aeson.encodeToTextBuilder v
+
+#if MIN_VERSION_aeson(2,0,0)
+    toList' = fmap (\(k, v) -> (AK.toText k, v)) . AKM.toList
+#else
+    toList' = H.toList
+#endif
 
 fromCompound :: PState
              -> (Builder, Builder)
diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -1,7 +1,5 @@
 # Welcome to aeson-pretty
 
-[![Build Status](https://travis-ci.org/informatikr/aeson-pretty.svg?branch=master)](https://travis-ci.org/informatikr/aeson-pretty)
-
 This is a JSON pretty-printing Haskell library compatible with [aeson](http://hackage.haskell.org/package/aeson) as well as a command-line tool to improve readabilty of streams of JSON data.
 
 The **library** provides a single function `encodePretty`. It is a drop-in replacement for aeson's `encode` function, producing JSON-ByteStrings for human readers.
@@ -20,6 +18,9 @@
 
 * `git clone git://github.com/informatikr/aeson-pretty.git`
 
+# Aeson / GHC support
+We support all GHCs supported by the latest Aeson release. This in turn determines which Aeson releases we support.
+
 # Authors
 
-This library is written and maintained by Falko Peters, <falko.peters@gmail.com>.
+This library is written by Falko Peters <falko.peters@gmail.com> and maintained by Martijn Bastiaan <martijn@qbaylogic.com>.
diff --git a/aeson-pretty.cabal b/aeson-pretty.cabal
--- a/aeson-pretty.cabal
+++ b/aeson-pretty.cabal
@@ -1,20 +1,20 @@
+cabal-version:  2.0
 name:           aeson-pretty
-version:        0.8.7
+version:        0.8.11
 license:        BSD3
 license-file:   LICENSE
 category:       Text, Web, JSON, Pretty Printer
 copyright:      Copyright 2011 Falko Peters
 author:         Falko Peters <falko.peters@gmail.com>
-maintainer:     Falko Peters <falko.peters@gmail.com>
+maintainer:     Martijn Bastiaan <martijn@hmbastiaan.nl>
 stability:      experimental
-cabal-version:  >= 1.8
 homepage:       http://github.com/informatikr/aeson-pretty
 bug-reports:    http://github.com/informatikr/aeson-pretty/issues
 build-type:     Simple
 synopsis:       JSON pretty-printing library and command-line tool.
 description:
     A JSON pretty-printing library compatible with aeson as well as
-    a command-line tool to improve readabilty of streams of JSON data.
+    a command-line tool to improve readability of streams of JSON data.
     .
     The /library/ provides the function "encodePretty". It is a drop-in
     replacement for aeson's "encode" function, producing JSON-ByteStrings for
@@ -22,43 +22,41 @@
     .
     The /command-line tool/ reads JSON from stdin and writes prettified JSON
     to stdout. It also offers a complementary "compact"-mode, essentially the
-    opposite of pretty-printing. If you specify @-flib-only@ like this
-    .
-        > cabal install -flib-only aeson-pretty
-    .
-    the command-line tool will NOT be installed.
+    opposite of pretty-printing.
 
 extra-source-files:
     README.markdown
 
+extra-doc-files:
+    CHANGELOG.markdown
+
 flag lib-only
     description: Only build/install the library, NOT the command-line tool.
     default: False
+    manual: True
 
 library
     exposed-modules:
         Data.Aeson.Encode.Pretty
 
     build-depends:
-        aeson >= 0.7,
-        base >= 4.5,
-        base-compat >= 0.9 && < 0.11,
+        aeson >=1.5  && <2.4,
+        base >= 4.10 && < 4.23,
+        base-compat >= 0.9,
         bytestring >= 0.9,
         scientific >= 0.3,
         vector >= 0.9,
         text >= 0.11,
-        unordered-containers >= 0.1.3.0
-
-    if !impl(ghc >= 8.0)
-      build-depends:
-        semigroups >= 0.18.2
+        unordered-containers >= 0.2.14.0
 
     ghc-options: -Wall
+    default-language: Haskell2010
 
 executable aeson-pretty
     hs-source-dirs: cli-tool
     main-is: Main.hs
     other-modules: Paths_aeson_pretty
+    autogen-modules: Paths_aeson_pretty
 
     if flag(lib-only)
         buildable: False
@@ -67,12 +65,13 @@
             aeson >= 0.6,
             aeson-pretty,
             attoparsec >= 0.10,
-            base == 4.*,
+            attoparsec-aeson,
+            base >= 4.10 && < 4.23,
             bytestring >= 0.9,
             cmdargs >= 0.7
 
     ghc-options: -Wall
-    ghc-prof-options: -auto-all
+    default-language: Haskell2010
 
 source-repository head
     type:     git
diff --git a/cli-tool/Main.hs b/cli-tool/Main.hs
--- a/cli-tool/Main.hs
+++ b/cli-tool/Main.hs
@@ -1,9 +1,14 @@
-{-# LANGUAGE DeriveDataTypeable, RecordWildCards, OverloadedStrings #-}
+{-# LANGUAGE CPP, DeriveDataTypeable, RecordWildCards, OverloadedStrings, PackageImports #-}
 module Main (main) where
 
 import Prelude hiding (interact, concat, unlines, null)
-import Data.Aeson (Value(..), json', encode)
+import Data.Aeson (Value(..), encode)
 import Data.Aeson.Encode.Pretty
+#if MIN_VERSION_aeson(2,2,0)
+import "attoparsec-aeson" Data.Aeson.Parser.Internal (value')
+#else
+import "aeson" Data.Aeson.Parser.Internal (value')
+#endif
 import Data.Attoparsec.Lazy (Result(..), parse)
 import Data.ByteString.Lazy.Char8 (ByteString, interact, unlines, null)
 import Data.Version (showVersion)
@@ -15,7 +20,11 @@
                     , indent  :: Int
                     , sort    :: Bool
                     }
+#if __GLASGOW_HASKELL__ >= 912
+    deriving (Data)
+#else
     deriving (Data, Typeable)
+#endif
 
 opts :: Options
 opts = Opts
@@ -53,7 +62,7 @@
     interact $ unlines . map enc . values
 
 values :: ByteString -> [Value]
-values s = case parse json' s of
+values s = case parse value' s of
             Done rest v     -> v : values rest
             Fail rest _ _
                 | null rest -> []
