diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,8 @@
-# 0.3.5.1.
+# 0.3.5.2
+
+- Support QuickCheck-2.9.1
+
+# 0.3.5.1
 
 - Fix `(.=)` export regression introduced by 0.3.5.0
 
diff --git a/aeson-compat.cabal b/aeson-compat.cabal
--- a/aeson-compat.cabal
+++ b/aeson-compat.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           aeson-compat
-version:        0.3.5.1
+version:        0.3.5.2
 synopsis:       Compatibility layer for aeson
 description:    Compatibility layer for @aeson@
 category:       Web
@@ -32,7 +32,7 @@
   build-depends:
       base                     >=4.6  && <4.10
     , base-compat              >=0.6.0 && <0.10
-    , aeson                    >=0.7.0.6 && <0.11.3
+    , aeson                    >=0.7.0.6 && <1.1
     , attoparsec               >=0.12 && <0.14
     , bytestring               >=0.10 && <0.11
     , containers               >=0.5  && <0.6
@@ -62,7 +62,7 @@
   build-depends:
       base                     >=4.6  && <4.10
     , base-compat              >=0.6.0 && <0.10
-    , aeson                    >=0.7.0.6 && <0.11.3
+    , aeson                    >=0.7.0.6 && <1.1
     , attoparsec               >=0.12 && <0.14
     , bytestring               >=0.10 && <0.11
     , containers               >=0.5  && <0.6
@@ -82,7 +82,7 @@
     , tasty                 >=0.10 && <0.12
     , tasty-hunit           >=0.9  && <0.10
     , tasty-quickcheck      >=0.8  && <0.9
-    , QuickCheck            >=2.7.6 && <2.8.3
+    , QuickCheck            >=2.7.6 && <2.9.2
     , quickcheck-instances  >=0.3  && <0.3.13
   other-modules:
       Orphans
diff --git a/test/Orphans.hs b/test/Orphans.hs
--- a/test/Orphans.hs
+++ b/test/Orphans.hs
@@ -5,7 +5,6 @@
 import Prelude                   ()
 import Prelude.Compat
 
-import Data.Version              (Version (..))
 import Test.Tasty.QuickCheck
 
 import Data.Orphans              ()
@@ -15,16 +14,18 @@
 import Data.Vector               as V
 #endif
 
-#if !MIN_VERSION_QuickCheck(2,8,3)
+#if !(MIN_VERSION_QuickCheck(2,8,0) && MIN_VERSION_base(4,8,0)) && !(MIN_VERSION_QuickCheck(2,9,0))
+import Numeric.Natural           (Natural)
+#endif
+
+#if !MIN_VERSION_QuickCheck(2,9,0)
 import Control.Applicative       (Const (..))
 import Data.List.NonEmpty        (NonEmpty (..))
-import Data.Proxy                (Proxy (..))
-import Data.Tagged               (Tagged (..))
+import Data.Version              (Version (..))
 #endif
 
-#if !(MIN_VERSION_QuickCheck(2,8,0) && MIN_VERSION_base(4,8,0))
-import Numeric.Natural           (Natural)
-#endif
+import Data.Proxy                (Proxy (..))
+import Data.Tagged               (Tagged (..))
 
 #if !MIN_VERSION_quickcheck_instances(0,3,12)
 instance Arbitrary a => Arbitrary (Vector a) where
@@ -32,30 +33,30 @@
   shrink    =  fmap V.fromList . shrink . V.toList
 #endif
 
-#if !(MIN_VERSION_QuickCheck(2,8,0) && MIN_VERSION_base(4,8,0))
+#if !(MIN_VERSION_QuickCheck(2,8,0) && MIN_VERSION_base(4,8,0)) && !(MIN_VERSION_QuickCheck(2,9,0))
 instance Arbitrary Natural where
   arbitrary = fmap (fromInteger . abs) arbitrary
 #endif
 
-instance Arbitrary Version where
-  arbitrary = do
-    x <- fmap abs arbitrary
-    xs <- (fmap . fmap) abs arbitrary
-    return $ Version (x : xs) []
-
-#if !MIN_VERSION_QuickCheck(2,8,3)
+#if !MIN_VERSION_QuickCheck(2,9,0)
 instance Arbitrary a => Arbitrary (NonEmpty a) where
   arbitrary = do
     x <- arbitrary
     xs <- arbitrary
     return (x :| xs)
 
-instance Arbitrary a => Arbitrary (Tagged t a) where
-  arbitrary = fmap Tagged arbitrary
-
 instance Arbitrary a => Arbitrary (Const a b) where
   arbitrary = fmap Const arbitrary
 
+instance Arbitrary Version where
+  arbitrary = do
+    x <- fmap abs arbitrary
+    xs <- (fmap . fmap) abs arbitrary
+    return $ Version (x : xs) []
+#endif
+
+instance Arbitrary a => Arbitrary (Tagged t a) where
+  arbitrary = fmap Tagged arbitrary
+
 instance Arbitrary (Proxy a) where
   arbitrary = return Proxy
-#endif
