diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,8 +1,14 @@
+# 1.1.0.1
+
+- Compatibility with *base* 4.21 (GHC 9.12)
+- Avoid dependency on *contravariant*
+
 # 1.1.0.0
 
 - Remove `Eq` and `Ord` for `Generically1` instances.
   They are now available in *base* 4.18, and *base-orphans* 0.8.8
   for backwards compatibility.
+- (Revisions) Also compatible with *base* 4.20 (GHC 9.10) and 4.19 (GHC 9.8)
 
 # 1.0.0.1
 
diff --git a/generic-data.cabal b/generic-data.cabal
--- a/generic-data.cabal
+++ b/generic-data.cabal
@@ -1,5 +1,5 @@
 name:                generic-data
-version:             1.1.0.0
+version:             1.1.0.1
 synopsis:            Deriving instances with GHC.Generics and related utilities
 description:
   Generic implementations of standard type classes.
@@ -17,7 +17,8 @@
 cabal-version:       >=1.10
 tested-with:         GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4,
                      GHC == 8.6.5, GHC == 8.10.7, GHC == 9.0.2,
-                     GHC == 9.2.7, GHC == 9.4.4, GHC == 9.6.1
+                     GHC == 9.2.8, GHC == 9.4.8, GHC == 9.6.6,
+                     GHC == 9.8.2, GHC == 9.10.1
 
 library
   hs-source-dirs:      src
@@ -43,10 +44,11 @@
   build-depends:
     ap-normalize >= 0.1 && < 0.2,
     base-orphans >= 0.8.8,
-    contravariant,
     ghc-boot-th,
     show-combinators,
-    base >= 4.9 && < 4.19
+    base >= 4.9 && < 4.22
+  if impl(ghc < 9.6)
+    build-depends: contravariant
   hs-source-dirs:      orphans
   exposed-modules:
     Generic.Data.Orphans
diff --git a/orphans/Generic/Data/Orphans.hs b/orphans/Generic/Data/Orphans.hs
--- a/orphans/Generic/Data/Orphans.hs
+++ b/orphans/Generic/Data/Orphans.hs
@@ -1,14 +1,19 @@
 {-# OPTIONS_GHC -Wno-orphans #-}
 
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE EmptyCase #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE StandaloneDeriving #-}
 {-# LANGUAGE TypeOperators #-}
 
--- | Orphan instances. They should probably be upstreamed.
+-- | Orphan instances.
+--
+-- The orphan instances in this module have been upstreamed in base 4.21 (GHC 9.12).
+-- This module is empty starting from that version. It remains for backwards compatiblity.
 
 module Generic.Data.Orphans where
 
+#if __GLASGOW_HASKELL__ < 912
 import Data.Functor.Classes
 import Data.Orphans ()
 import Data.Semigroup
@@ -71,3 +76,4 @@
 instance (Ord1 f, Ord1 g) => Ord1 (f :.: g) where
   liftCompare compare' (Comp1 x1) (Comp1 x2) =
     (liftCompare . liftCompare) compare' x1 x2
+#endif
diff --git a/test/unit.hs b/test/unit.hs
--- a/test/unit.hs
+++ b/test/unit.hs
@@ -138,12 +138,21 @@
   showsPrec = gshowsPrec
 
 maybeModuleName :: String
-#if MIN_VERSION_base(4,12,0)
+#if MIN_VERSION_base(4,20,0)
+maybeModuleName = "GHC.Internal.Maybe"
+#elif MIN_VERSION_base(4,12,0)
 maybeModuleName = "GHC.Maybe"
 #else
 maybeModuleName = "GHC.Base"
 #endif
 
+maybePackageName :: String
+#if MIN_VERSION_base(4,20,0)
+maybePackageName = "ghc-internal"
+#else
+maybePackageName = "base"
+#endif
+
 main :: IO ()
 main = defaultMain test
 
@@ -253,7 +262,7 @@
   , testGroup "Meta"
       [ testCase "datatypeName" $ "Maybe" @=? gdatatypeName @(Maybe Int)
       , testCase "moduleName" $ maybeModuleName @=? gmoduleName @(Maybe Int)
-      , testCase "packageName" $ "base" @=? gpackageName @(Maybe Int)
+      , testCase "packageName" $ maybePackageName @=? gpackageName @(Maybe Int)
       , testCase "isNewtype" $ False @=? gisNewtype @(Maybe Int)
       , testCase "conName" $ "Just" @=? gconName (Just ())
       , testCase "conFixity" $ Prefix @=? gconFixity (Just ())
