diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Changelog
 
+## 0.1.4.1
+
+- Support aeson-2.0
+
 ## 0.1.4.0
 
 - Completes The Room API
diff --git a/matrix-client.cabal b/matrix-client.cabal
--- a/matrix-client.cabal
+++ b/matrix-client.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.4
 name:                matrix-client
-version:             0.1.4.0
+version:             0.1.4.1
 synopsis:            A matrix client library
 description:
     Matrix client is a library to interface with https://matrix.org.
@@ -31,7 +31,7 @@
 common common-options
   build-depends:       base                   >= 4.11.0.0 && < 5
                      , aeson-casing           >= 0.2.0.0  && < 0.3.0.0
-                     , aeson                  >= 1.0.0.0  && < 1.6
+                     , aeson                  >= 1.0.0.0  && < 2.1
   ghc-options:         -Wall
                        -Wcompat
                        -Widentities
diff --git a/src/Network/Matrix/Client.hs b/src/Network/Matrix/Client.hs
--- a/src/Network/Matrix/Client.hs
+++ b/src/Network/Matrix/Client.hs
@@ -24,6 +24,7 @@
     getTokenFromEnv,
     createSession,
     login,
+    loginToken,
     logout,
 
     -- * API
@@ -179,12 +180,16 @@
 
 -- | 'login' allows you to generate a session token.
 login :: LoginCredentials -> IO ClientSession
-login cred = do
+login = fmap fst . loginToken 
+
+-- | 'loginToken' allows you to generate a session token and recover the Matrix auth token.
+loginToken :: LoginCredentials -> IO (ClientSession, MatrixToken)
+loginToken cred = do
   req <- mkLoginRequest cred
   manager <- mkManager
   resp' <- doRequest' manager req
   case resp' of
-    Right LoginResponse {..} -> pure $ ClientSession (lBaseUrl cred) (MatrixToken lrAccessToken) manager
+    Right LoginResponse {..} -> pure (ClientSession (lBaseUrl cred) (MatrixToken lrAccessToken) manager, (MatrixToken lrAccessToken))
     Left err ->
       -- NOTE: There is nothing to recover after a failed login attempt
       fail $ show err
diff --git a/src/Network/Matrix/Identity.hs b/src/Network/Matrix/Identity.hs
--- a/src/Network/Matrix/Identity.hs
+++ b/src/Network/Matrix/Identity.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE RecordWildCards #-}
 
@@ -40,6 +41,9 @@
 import Data.ByteString.Lazy (fromStrict)
 import Data.ByteString.Lazy.Base64.URL (encodeBase64Unpadded)
 import Data.Digest.Pure.SHA (bytestringDigest, sha256)
+#if MIN_VERSION_aeson(2,0,0)
+import qualified Data.Aeson.KeyMap as KeyMap
+#endif
 import qualified Data.HashMap.Strict as HM
 import Data.List (lookup)
 import Data.List.NonEmpty (NonEmpty)
@@ -50,6 +54,14 @@
 import qualified Network.HTTP.Client as HTTP
 import Network.Matrix.Internal
 
+#if MIN_VERSION_aeson(2,0,0)
+toKVList :: KeyMap.KeyMap v -> [(Text, v)]
+toKVList = HM.toList . KeyMap.toHashMapText
+#else
+toKVList :: HM.HashMap Text v -> [(Text, v)]
+toKVList = HM.toList
+#endif
+
 -- $setup
 -- >>> import Data.Aeson (decode)
 
@@ -123,7 +135,7 @@
   parseJSON (Object v) = do
     mappings <- v .: "mappings"
     case mappings of
-      (Object kv) -> pure . IdentityLookupResponse $ mapMaybe toTuple (HM.toList kv)
+      (Object kv) -> pure . IdentityLookupResponse $ mapMaybe toTuple (toKVList kv)
       _ -> mzero
     where
       toTuple (k, String s) = Just (HashedAddress k, UserID s)
