diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+0.8.7.1
+=======
+* Text 2 compatibility [#138](https://github.com/Soostone/katip/pull/138)
+
 0.8.7.0
 =======
 * Aeson 2 compatibility [#131](https://github.com/Soostone/katip/pull/131)
diff --git a/katip.cabal b/katip.cabal
--- a/katip.cabal
+++ b/katip.cabal
@@ -1,5 +1,5 @@
 name:                katip
-version:             0.8.7.0
+version:             0.8.7.1
 synopsis:            A structured logging framework.
 description:
   Katip is a structured logging framework. See README.md for more details.
@@ -25,7 +25,7 @@
   test/Katip/Tests/Scribes/Handle.hs
   test/Katip/Tests/Scribes/Handle-text.golden
   test/Katip/Tests/Format/Time.hs
-tested-with: GHC == 8.0.1, GHC == 8.2.2, GHC == 8.4.3
+tested-with: GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.3, GHC == 8.6.5, GHC == 8.8.4, GHC == 8.10.7, GHC == 9.0.2
 
 source-repository head
   type:     git
@@ -54,8 +54,8 @@
     OverloadedStrings
 
   build-depends: base >=4.9.0.0 && <5
-               , aeson >=0.6
-               , async < 3.0.0.0
+               , aeson >=1.0.0.0
+               , async >= 2.0.0.0 && < 3.0.0.0
                , auto-update >= 0.1
                , bytestring >= 0.9
                , containers >=0.4
@@ -65,7 +65,7 @@
                , old-locale >= 1.0
                , string-conv >= 0.1
                , template-haskell >= 2.8
-               , text >= 0.11
+               , text >= 1.2.4.0
                , time >= 1
                , transformers >= 0.3
                , transformers-compat
@@ -73,13 +73,13 @@
                , monad-control >= 1.0
                , mtl >= 2.0
                , transformers-base >= 0.3
-               , resourcet >= 1.1
+               , resourcet >= 1.2.0
                , scientific >= 0.3.3.0
                , microlens >= 0.2.0.0
                , microlens-th >= 0.1.0.0
                , semigroups
                , unliftio-core >= 0.1
-               , stm >= 2.4
+               , stm >= 2.4.4.1
 
   hs-source-dirs:      src
   default-language:    Haskell2010
diff --git a/src/Katip/Core.hs b/src/Katip/Core.hs
--- a/src/Katip/Core.hs
+++ b/src/Katip/Core.hs
@@ -70,6 +70,7 @@
 import qualified Data.Map.Strict                   as M
 import           Data.Maybe                        (fromMaybe)
 import           Data.Semigroup                    as SG
+import qualified Data.Set                          as Set
 import           Data.String
 import           Data.String.Conv
 import           Data.Text                         (Text)
@@ -437,6 +438,13 @@
     mempty = SomeKeys []
     mappend = (<>)
 
+
+-- | Compares two payload selections for equivalence. With SomeKeys, ordering
+-- and duplicates are ignored.
+equivalentPayloadSelection :: PayloadSelection -> PayloadSelection -> Bool
+equivalentPayloadSelection AllKeys AllKeys = True
+equivalentPayloadSelection (SomeKeys a) (SomeKeys b) = Set.fromList a == Set.fromList b
+equivalentPayloadSelection _ _ = False
 
 -------------------------------------------------------------------------------
 -- | Katip requires JSON objects to be logged as context. This
diff --git a/src/Katip/Format/Time.hs b/src/Katip/Format/Time.hs
--- a/src/Katip/Format/Time.hs
+++ b/src/Katip/Format/Time.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE CPP #-}
+
 -- | Time and memory efficient time encoding helper functions.
 module Katip.Format.Time
   ( formatAsLogTime,
@@ -11,7 +13,12 @@
 import qualified Data.Text.Array as TA
 import Data.Text.Internal (Text (..))
 import Data.Time (Day, DiffTime, UTCTime (..), toGregorian)
-import Data.Word (Word16)
+import Data.Word
+#if MIN_VERSION_text(2,0,0)
+  (Word8)
+#else
+  (Word16)
+#endif
 import Unsafe.Coerce (unsafeCoerce)
 
 -- Note: All functions here are optimized to never allocate anything
@@ -178,14 +185,24 @@
 -- Copyright:   (c) 2015-2016 Bryan O'Sullivan
 -- License:     BSD3
 
-data T = T {-# UNPACK #-} !Word16 {-# UNPACK #-} !Word16
+data T = T
+#if MIN_VERSION_text(2,0,0)
+  {-# UNPACK #-} !Word8 {-# UNPACK #-} !Word8
+#else
+  {-# UNPACK #-} !Word16 {-# UNPACK #-} !Word16
+#endif
 
 twoDigits :: Int -> T
 twoDigits a = T (digit hi) (digit lo)
   where
     (hi, lo) = a `quotRem` 10
 
-digit :: Int -> Word16
+digit :: Int ->
+#if MIN_VERSION_text(2,0,0)
+  Word8
+#else
+  Word16
+#endif
 digit x = fromIntegral (x + 48)
 
 data TimeOfDay64
diff --git a/test/Katip/Tests.hs b/test/Katip/Tests.hs
--- a/test/Katip/Tests.hs
+++ b/test/Katip/Tests.hs
@@ -79,16 +79,33 @@
         let everything = liftPayload (SimpleLogPayload [("foo", AnyLogPayload ("a" :: Text))])
             conservative = liftPayload (ConservativePayload "always" "rarely")
             both = everything <> conservative
-        payloadKeys V2 both @?= SomeKeys ["often_shown", "rarely_shown", "foo"]
-        payloadKeys V1 both @?= SomeKeys ["often_shown", "foo"]
+        assertEquivalentPayloadSelection
+          (payloadKeys V2 both)
+          (SomeKeys somePayloadKeys)
+        assertEquivalentPayloadSelection
+          (payloadKeys V1 both)
+          (SomeKeys ["often_shown", "foo"])
     ]
 
+assertEquivalentPayloadSelection :: PayloadSelection -> PayloadSelection -> Assertion
+assertEquivalentPayloadSelection a b
+  | equivalentPayloadSelection a b = pure ()
+  | otherwise = assertFailure ("Expected " <> show a <> " =~ " <> show b)
+
 #if MIN_VERSION_aeson(2, 0, 0)
 singletonMap :: K.Key -> v -> KM.KeyMap v
 singletonMap = KM.singleton
 #else
 singletonMap :: Text -> v -> HM.HashMap Text v
 singletonMap = HM.singleton
+#endif
+
+#if MIN_VERSION_unordered_containers(0, 2, 16)
+somePayloadKeys :: [Text]
+somePayloadKeys = ["rarely_shown", "often_shown", "foo"]
+#else
+somePayloadKeys :: [Text]
+somePayloadKeys = ["often_shown", "rarely_shown", "foo"]
 #endif
 
 -------------------------------------------------------------------------------
diff --git a/test/Katip/Tests/Scribes/Handle.hs b/test/Katip/Tests/Scribes/Handle.hs
--- a/test/Katip/Tests/Scribes/Handle.hs
+++ b/test/Katip/Tests/Scribes/Handle.hs
@@ -73,6 +73,11 @@
 goldenTextPath = "test/Katip/Tests/Scribes/Handle-text-aeson2.golden"
 goldenJsonPath :: FilePath
 goldenJsonPath = "test/Katip/Tests/Scribes/Handle-json-aeson2.golden"
+#elif MIN_VERSION_unordered_containers(0, 2, 16)
+goldenTextPath :: FilePath
+goldenTextPath = "test/Katip/Tests/Scribes/Handle-text-aeson2.golden"
+goldenJsonPath :: FilePath
+goldenJsonPath = "test/Katip/Tests/Scribes/Handle-json-aeson2.golden"
 #else
 goldenTextPath :: FilePath
 goldenTextPath = "test/Katip/Tests/Scribes/Handle-text.golden"
