diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,8 @@
 # bugzilla-redhat version history
 
+## 0.3.3 (2021-10-14)
+- support building with aeson-2.0
+
 ## 0.3.2 (2021-06-19)
 - BugillaServer can now be fully qualified (@TristanCacqueray)
 - Add apikeySession to support api_key auth (@TristanCacqueray)
diff --git a/bugzilla-redhat.cabal b/bugzilla-redhat.cabal
--- a/bugzilla-redhat.cabal
+++ b/bugzilla-redhat.cabal
@@ -1,5 +1,5 @@
 name:                bugzilla-redhat
-version:             0.3.2
+version:             0.3.3
 synopsis:            A Haskell interface to the Bugzilla native REST API
 description:         This package is designed to provide an easy-to-use,
                      type-safe interface to querying Bugzilla from Haskell.
@@ -37,7 +37,7 @@
                        Web.Bugzilla.RedHat.Internal.Search,
                        Web.Bugzilla.RedHat.Internal.Types
   build-depends:       base >=4.6 && <5,
-                       aeson >=0.7 && <1.6,
+                       aeson >=0.7 && <2.1,
                        blaze-builder >=0.3 && <0.5,
                        bytestring >=0.10 && <0.11,
                        connection >=0.2 && <0.4,
@@ -75,7 +75,7 @@
   hs-source-dirs:      test
   main-is:             Spec.hs
   build-depends:       base >=4.6 && <5,
-                       aeson >=0.7 && <1.6,
+                       aeson >=0.7 && <2.1,
                        bugzilla-redhat,
                        hspec >=2.0 && <3.0,
                        time >=1.4 && <1.10
diff --git a/src/Web/Bugzilla/RedHat.hs b/src/Web/Bugzilla/RedHat.hs
--- a/src/Web/Bugzilla/RedHat.hs
+++ b/src/Web/Bugzilla/RedHat.hs
@@ -10,7 +10,7 @@
 --
 --   A very simple program using this package might look like this:
 --
--- >   ctx <- newBugzillaContext "bugzilla.redhat.com"
+-- >   ctx <- newBugzillaContext "https://bugzilla.redhat.com"
 -- >   let session = anonymousSession ctx
 -- >       user = "me@example.org"
 -- >       query = AssignedToField .==. user .&&.
diff --git a/src/Web/Bugzilla/RedHat/Internal/Types.hs b/src/Web/Bugzilla/RedHat/Internal/Types.hs
--- a/src/Web/Bugzilla/RedHat/Internal/Types.hs
+++ b/src/Web/Bugzilla/RedHat/Internal/Types.hs
@@ -46,7 +46,12 @@
 import Data.Aeson.Encode
 #endif
 import Data.Aeson.Types
-import qualified Data.HashMap.Strict as H
+#if MIN_VERSION_aeson(2,0,0)
+import Data.Aeson.Key
+import qualified Data.Aeson.KeyMap as M
+#else
+import qualified Data.HashMap.Strict as M
+#endif
 import qualified Data.Text as T
 import qualified Data.Text.Lazy as TL
 import qualified Data.Text.Lazy.Builder as TLB
@@ -418,8 +423,13 @@
   , bugUrl                 :: T.Text
   , bugVersion             :: [T.Text]
   , bugWhiteboard          :: T.Text
-  , bugCustomFields        :: H.HashMap T.Text T.Text
-  , bugExternalBugs        :: Maybe [ExternalBug]
+  , bugCustomFields        ::
+#if MIN_VERSION_aeson(2,0,0)
+                              M.KeyMap T.Text
+#else
+                              M.HashMap T.Text T.Text
+#endif
+, bugExternalBugs        :: Maybe [ExternalBug]
   } deriving (Eq, Show)
 
 instance FromJSON Bug where
@@ -464,9 +474,14 @@
           <*> v .:? "external_bugs"
   parseJSON _ = mzero
 
-customFields :: Object -> H.HashMap T.Text T.Text
-customFields = H.map stringifyCustomFields
-             . H.filterWithKey filterCustomFields
+customFields :: Object ->
+#if MIN_VERSION_aeson(2,0,0)
+                M.KeyMap T.Text
+#else
+                M.HashMap T.Text T.Text
+#endif
+customFields = M.map stringifyCustomFields
+             . M.filterWithKey filterCustomFields
   where
     stringifyCustomFields :: Value -> T.Text
     stringifyCustomFields (String t) = t
@@ -477,7 +492,10 @@
                                      . toJSON
                                      $ v
 
-    filterCustomFields k _ = "cf_" `T.isPrefixOf` k
+    filterCustomFields k _ = "cf_" `T.isPrefixOf` toText k
+#if !MIN_VERSION_aeson(2,0,0)
+      where toText = id
+#endif
 
 newtype BugList = BugList [Bug]
                deriving (Eq, Show)
@@ -544,8 +562,8 @@
     attachmentsVal <- v .: "attachments"
     bugsVal <- v .: "bugs"
     case (attachmentsVal, bugsVal) of
-      (Object (H.toList -> [(_, as)]), _) -> AttachmentList . (:[]) <$> parseJSON as
-      (_, Object (H.toList -> [(_, as)])) -> AttachmentList <$> parseJSON as
+      (Object (M.toList -> [(_, as)]), _) -> AttachmentList . (:[]) <$> parseJSON as
+      (_, Object (M.toList -> [(_, as)])) -> AttachmentList <$> parseJSON as
       _                                   -> mzero
   parseJSON _ = mzero
 
@@ -581,7 +599,7 @@
   parseJSON (Object v) = do
     bugsVal <- v .: "bugs"
     case bugsVal of
-      Object (H.toList -> [(_, cs)]) ->
+      Object (M.toList -> [(_, cs)]) ->
         do comments <- withObject "comments" (.: "comments") cs
            withArray "comment list" (\a -> CommentList <$> parseJSON (addCount a)) comments
       _ -> mzero
@@ -594,7 +612,7 @@
 addCount vs = Array $ V.zipWith addCount' (V.enumFromN 0 $ V.length vs) vs
  where
    addCount' :: Int -> Value -> Value
-   addCount' c (Object v) = Object $ H.insert "count" (Number $ fromIntegral c) v
+   addCount' c (Object v) = Object $ M.insert "count" (Number $ fromIntegral c) v
    addCount' _ v          = v
 
 -- | History information for a bug.
