diff --git a/CHANGES.markdown b/CHANGES.markdown
--- a/CHANGES.markdown
+++ b/CHANGES.markdown
@@ -1,10 +1,17 @@
-## Changes in 0.8.8.2 [2023.03.07]
- - Fix GHC 9.2.1 build error that was accidentally introduced in
-   `base-orphans-0.8.8`.
-
-## Changes in 0.8.8.1 [2023.03.05]
- - Fix GHC 9.4 build error that was accidentally introduced in
-   `base-orphans-0.8.8`.
+## Changes in 0.9.0 [2023.03.05]
+ - Adapt to recent changes to `Down` instances:
+   * The `Bounded` instance for `Down` was changed in `base-4.15.0.0` to swap
+     the values of `minBound` and `maxBound` for the underlying type. This
+     change has now been propagated to `base-orphans`.
+   * The `Enum` instance for `Down` was removed in `base-4.15.0.0`, but a
+     different version of the instance was added back in `base-4.18.0.0`, where
+     `succ` and `pred` are swapped. We have changed the backported version of
+     this instance in `base-orphans` to match the behavior of the instance
+     added in `base-4.18.0.0`.
+   * The `Integral` instance for `Down` was removed from `base` entirely in
+     `base-4.15.0.0`. We have finally removed it from `base-orphans` in this
+     release, as it actively makes it more difficult to define the
+     aforementioned `Enum` instance.
 
 ## Changes in 0.8.8 [2023.03.05]
  - Backport new instances from GHC 9.6.1/`base-4.18.0.0`:
diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -36,7 +36,7 @@
  * `Alternative`, `Eq`, `Ord`, `Read`, `Show`, `Foldable`, and `Traversable` instances for `ZipList`
  * `Applicative` instance for `K1` from `GHC.Generics`
  * `Applicative`, `Bits`, `Bounded`, `Data`, `Enum`, `Eq1`, `FiniteBits`,
-   `Floating`, `Foldable`, `Fractional`, `Functor`, `Integral`, `Ix`, `Ord1`,
+   `Floating`, `Foldable`, `Fractional`, `Functor`, `Ix`, `Ord1`,
    `Monad`, `MonadFix`, `MonadZip`, `Monoid`, `Num`, `Read`, `Read1`, `Real`,
    `RealFloat`, `RealFrac`, `Semigroup`, `Show`, `Show1`, `Storable`, and
    `Traversable` instances for `Down`
diff --git a/base-orphans.cabal b/base-orphans.cabal
--- a/base-orphans.cabal
+++ b/base-orphans.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 5f8726da7da713fa7b7a95dea492501a6762a25a36aebbd6bb8931e0d0324660
+-- hash: 7aa19d6f2d3a7409ee405d67a21b8edb902103b703a6f241f2b5e8e219f70a87
 
 name:                base-orphans
-version:             0.8.8.2
+version:             0.9.0
 synopsis:            Backwards-compatible orphan instances for base
 description:         @base-orphans@ defines orphan instances that mimic instances available in
                      later versions of @base@ to a wider (older) range of compilers.
@@ -36,7 +36,7 @@
 license-file:        LICENSE
 build-type:          Simple
 tested-with:
-    GHC == 7.0.4 , GHC == 7.2.2 , GHC == 7.4.2 , GHC == 7.6.3 , GHC == 7.8.4 , GHC == 7.10.3 , GHC == 8.0.2 , GHC == 8.2.2 , GHC == 8.4.4 , GHC == 8.6.5 , GHC == 8.8.4 , GHC == 8.10.7 , GHC == 9.0.2 , GHC == 9.2.1 , GHC == 9.2.7 , GHC == 9.4.4 , GHC == 9.6.1
+    GHC == 7.0.4 , GHC == 7.2.2 , GHC == 7.4.2 , GHC == 7.6.3 , GHC == 7.8.4 , GHC == 7.10.3 , GHC == 8.0.2 , GHC == 8.2.2 , GHC == 8.4.4 , GHC == 8.6.5 , GHC == 8.8.4 , GHC == 8.10.7 , GHC == 9.0.2 , GHC == 9.2.7 , GHC == 9.4.4 , GHC == 9.6.1
 extra-source-files:
     CHANGES.markdown
     README.markdown
diff --git a/src/Data/Orphans.hs b/src/Data/Orphans.hs
--- a/src/Data/Orphans.hs
+++ b/src/Data/Orphans.hs
@@ -94,7 +94,7 @@
 # endif
 #endif
 
-#if !(MIN_VERSION_base(4,16,1)) || (MIN_VERSION_base(4,17,0) && !(MIN_VERSION_base(4,18,0)))
+#if !(MIN_VERSION_base(4,18,0))
 import           Data.Orphans.Prelude
 #endif
 
@@ -1188,12 +1188,14 @@
   Kleisli f `mplus` Kleisli g = Kleisli $ \x -> f x `mplus` g x
   {-# INLINE mplus #-}
 
+-- | Swaps @'minBound'@ and @'maxBound'@ of the underlying type.
+instance Bounded a => Bounded (Down a) where
+    minBound = Down maxBound
+    maxBound = Down minBound
+
 deriving instance Bits       a => Bits       (Down a)
-deriving instance Bounded    a => Bounded    (Down a)
-deriving instance Enum       a => Enum       (Down a)
 deriving instance Floating   a => Floating   (Down a)
 deriving instance Fractional a => Fractional (Down a)
-deriving instance Integral   a => Integral   (Down a)
 deriving instance Ix         a => Ix         (Down a)
 deriving instance Real       a => Real       (Down a)
 deriving instance RealFrac   a => RealFrac   (Down a)
@@ -1973,6 +1975,26 @@
     fmap fun (a, b, c, d, e, f) = (a, b, c, d, e, fun f)
 instance Functor ((,,,,,,) a b c d e f) where
     fmap fun (a, b, c, d, e, f, g) = (a, b, c, d, e, f, fun g)
+
+# if !(MIN_VERSION_base(4,14,0)) || MIN_VERSION_base(4,15,0)
+-- | Swaps @'succ'@ and @'pred'@ of the underlying type.
+instance (Enum a, Bounded a, Eq a) => Enum (Down a) where
+    succ = fmap pred
+    pred = fmap succ
+
+    -- Here we use the fact that 'comparing (complement @Int)' behaves
+    -- as an order-swapping `compare @Int`.
+    fromEnum (Down x) = complement $ fromEnum x
+    toEnum = Down . toEnum . complement
+
+    enumFrom (Down x)
+        | x == minBound
+        = [Down x] -- We can't rely on 'enumFromThen _ (pred @a minBound)` behaving nicely,
+                   -- since 'enumFromThen _' might be strict and 'pred minBound' might throw
+        | otherwise
+        = coerce $ enumFromThen x (pred x)
+    enumFromThen (Down x) (Down y) = coerce $ enumFromThen x y
+# endif
 
 # if MIN_VERSION_base(4,17,0)
 instance (Generic1 f, Eq (Rep1 f a)) => Eq (Generically1 f a) where
