diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # Revision history for ordered-containers
 
+## 0.2.5 -- 2026-10-31
+
+* Avoid non-canonical `Monoid` instances on recent GHC versions.
+* Export `alter` from `Data.Map.Ordered.Strict`.
+
 ## 0.2.4 -- 2024-05-18
 
 * Misc. housekeeping -- version bumps, documentation fixes, etc. (thank you Ryan Scott and Andrew Kent!)
diff --git a/Data/Map/Ordered/Internal.hs b/Data/Map/Ordered/Internal.hs
--- a/Data/Map/Ordered/Internal.hs
+++ b/Data/Map/Ordered/Internal.hs
@@ -91,7 +91,9 @@
 -- @since 0.2
 instance (Ord k, Monoid v) => Monoid (Bias L (OMap k v)) where
 	mempty = Bias empty
+#if !MIN_VERSION_base(4,11,0)
 	mappend (Bias o) (Bias o') = Bias (unionWithL (const mappend) o o')
+#endif
 
 -- | Empty maps and map union. When combining two sets that share elements, the
 -- indices of the right argument are preferred, and the values are combined
@@ -102,7 +104,9 @@
 -- @since 0.2
 instance (Ord k, Monoid v) => Monoid (Bias R (OMap k v)) where
 	mempty = Bias empty
+#if !MIN_VERSION_base(4,11,0)
 	mappend (Bias o) (Bias o') = Bias (unionWithR (const mappend) o o')
+#endif
 
 -- | Values are traversed in insertion order, not key order.
 --
diff --git a/Data/Map/Ordered/Strict.hs b/Data/Map/Ordered/Strict.hs
--- a/Data/Map/Ordered/Strict.hs
+++ b/Data/Map/Ordered/Strict.hs
@@ -23,6 +23,7 @@
 	-- * Deletion
 	, delete, filter, (\\)
 	, (|/\), (/\|), intersectionWith
+	, alter
 	-- * Query
 	, null, size, member, notMember, lookup
 	-- * Indexing
diff --git a/Data/Set/Ordered.hs b/Data/Set/Ordered.hs
--- a/Data/Set/Ordered.hs
+++ b/Data/Set/Ordered.hs
@@ -103,7 +103,9 @@
 -- @since 0.2
 instance Ord a => Monoid (Bias L (OSet a)) where
 	mempty = Bias empty
+#if !MIN_VERSION_base(4,11,0)
 	mappend (Bias o) (Bias o') = Bias (o |<> o')
+#endif
 
 -- | Empty sets and set union. When combining two sets that share elements, the
 -- indices of the right argument are preferred.
@@ -113,7 +115,9 @@
 -- @since 0.2
 instance Ord a => Monoid (Bias R (OSet a)) where
 	mempty = Bias empty
+#if !MIN_VERSION_base(4,11,0)
 	mappend (Bias o) (Bias o') = Bias (o <>| o')
+#endif
 
 infixr 5 <|, |<   -- copy :
 infixl 5 >|, |>
diff --git a/ordered-containers.cabal b/ordered-containers.cabal
--- a/ordered-containers.cabal
+++ b/ordered-containers.cabal
@@ -1,5 +1,5 @@
 name:                ordered-containers
-version:             0.2.4
+version:             0.2.5
 synopsis:            Set- and Map-like types that remember the order elements were inserted
 license:             BSD3
 license-file:        LICENSE
@@ -17,6 +17,6 @@
 library
   exposed-modules:     Data.Map.Ordered, Data.Map.Ordered.Strict, Data.Set.Ordered
   other-modules:       Data.Map.Ordered.Internal, Data.Map.Util
-  build-depends:       base >=4.7 && <5, containers >=0.1 && <0.8, hashable >=1.2 && <2.0
+  build-depends:       base >=4.7 && <5, containers >=0.1 && <0.9, hashable >=1.2 && <2.0
   default-language:    Haskell98
   ghc-options:         -fno-warn-tabs
