diff --git a/Blaze/ByteString/Builder/ByteString.hs b/Blaze/ByteString/Builder/ByteString.hs
--- a/Blaze/ByteString/Builder/ByteString.hs
+++ b/Blaze/ByteString/Builder/ByteString.hs
@@ -61,7 +61,7 @@
 
 
 -- | Construct a 'B.Builder' that copies the strict 'S.ByteString's, if it is
--- smaller than the treshold, and inserts it directly otherwise.
+-- smaller than the threshold, and inserts it directly otherwise.
 --
 -- For example, @fromByteStringWith 1024@ copies strict 'S.ByteString's whose size
 -- is less or equal to 1kb, and inserts them directly otherwise. This implies
diff --git a/Blaze/ByteString/Builder/Internal/Write.hs b/Blaze/ByteString/Builder/Internal/Write.hs
--- a/Blaze/ByteString/Builder/Internal/Write.hs
+++ b/Blaze/ByteString/Builder/Internal/Write.hs
@@ -75,7 +75,7 @@
 
 -- | Changing a sequence of bytes starting from the given pointer. 'Poke's are
 -- the most primitive buffer manipulation. In most cases, you don't use the
--- explicitely but as part of a 'Write', which also tells how many bytes will
+-- explicitly but as part of a 'Write', which also tells how many bytes will
 -- be changed at most.
 newtype Poke =
     Poke { runPoke :: Ptr Word8 -> IO (Ptr Word8) }
@@ -134,7 +134,7 @@
 
 #if !(MIN_VERSION_base(4,11,0))
   {-# INLINE mappend #-}
-  (Poke po1) `mappend` (Poke po2) = Poke $ po1 >=> po2
+  mappend = (<>)
 
   {-# INLINE mconcat #-}
   mconcat = F.foldr mappend mempty
@@ -154,8 +154,7 @@
 
 #if !(MIN_VERSION_base(4,11,0))
   {-# INLINE mappend #-}
-  (Write bound1 w1) `mappend` (Write bound2 w2) =
-    Write (bound1 + bound2) (w1 `mappend` w2)
+  mappend = (<>)
 
   {-# INLINE mconcat #-}
   mconcat = F.foldr mappend mempty
diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,9 @@
+* 0.4.2.3 2023-08-27
+  - Fix compilation warnings concerning non-canonical mappend
+  - Support bytestring-0.12
+  - Support text-2.1
+  - Tested with GHC 7.0.4 to 9.8.1 alpha3
+
 * 0.4.2.2
   - Support GHC 9.2
 
diff --git a/benchmarks/FastPut.hs b/benchmarks/FastPut.hs
--- a/benchmarks/FastPut.hs
+++ b/benchmarks/FastPut.hs
@@ -291,7 +291,7 @@
 -- When using 'toLazyByteString' to extract a lazy 'L.ByteString' from a
 -- 'Builder', this means that a new chunk will be started in the resulting lazy
 -- 'L.ByteString'. The remaining part of the buffer is spilled, if the
--- reamining free space is smaller than the minimal desired buffer size.
+-- remaining free space is smaller than the minimal desired buffer size.
 --
 {-
 flush :: Builder
diff --git a/blaze-builder.cabal b/blaze-builder.cabal
--- a/blaze-builder.cabal
+++ b/blaze-builder.cabal
@@ -1,5 +1,5 @@
 Name:                blaze-builder
-Version:             0.4.2.2
+Version:             0.4.2.3
 Synopsis:            Efficient buffered output.
 
 Description:
@@ -33,8 +33,11 @@
 Cabal-version:       >= 1.10
 
 Tested-with:
-  GHC == 9.2.0.20210821
-  GHC == 9.0.1
+  GHC == 9.8.0
+  GHC == 9.6.2
+  GHC == 9.4.7
+  GHC == 9.2.8
+  GHC == 9.0.2
   GHC == 8.10.7
   GHC == 8.8.4
   GHC == 8.6.5
@@ -81,11 +84,11 @@
                      Blaze.ByteString.Builder.Internal.Write
 
   build-depends:
-      base == 4.*
-    , bytestring >= 0.9 && < 1.0
+      base       >= 4.3  && < 5
+    , bytestring >= 0.9  && < 1
     , deepseq
     , ghc-prim
-    , text >= 0.10 && < 1.3
+    , text       >= 0.10 && < 3
 
   if impl(ghc < 7.8)
      build-depends:  bytestring-builder
