diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 0.3.0.6
+
+- Revised upper bounds for package dependencies.
+
 # 0.3.0.5
 
 - Added support for GHC `9.12`.
diff --git a/quickcheck-monoid-subclasses.cabal b/quickcheck-monoid-subclasses.cabal
--- a/quickcheck-monoid-subclasses.cabal
+++ b/quickcheck-monoid-subclasses.cabal
@@ -1,6 +1,6 @@
 cabal-version:  3.0
 name:           quickcheck-monoid-subclasses
-version:        0.3.0.5
+version:        0.3.0.6
 bug-reports:    https://github.com/jonathanknowles/quickcheck-monoid-subclasses/issues
 license:        Apache-2.0
 license-file:   LICENSE
@@ -33,11 +33,9 @@
 common dependency-pretty-show
     build-depends:pretty-show               >= 1.10         && < 1.11
 common dependency-QuickCheck
-    build-depends:QuickCheck                >= 2.14.2       && < 2.16
+    build-depends:QuickCheck                >= 2.14.2       && < 2.17
 common dependency-quickcheck-classes
     build-depends:quickcheck-classes        >= 0.6.5.0      && < 0.7
-common dependency-quickcheck-instances
-    build-depends:quickcheck-instances      >= 0.3.28       && < 0.4
 common dependency-semigroupoids
     build-depends:semigroupoids             >= 5.3.7        && < 6.1
 common dependency-text
@@ -109,7 +107,6 @@
       , dependency-monoid-subclasses
       , dependency-QuickCheck
       , dependency-quickcheck-classes
-      , dependency-quickcheck-instances
       , extensions
     build-depends:
       , internal
@@ -131,7 +128,6 @@
       , dependency-monoid-subclasses
       , dependency-QuickCheck
       , dependency-quickcheck-classes
-      , dependency-quickcheck-instances
       , dependency-text
       , dependency-vector
       , extensions
diff --git a/src/prelude/Internal/Prelude.hs b/src/prelude/Internal/Prelude.hs
--- a/src/prelude/Internal/Prelude.hs
+++ b/src/prelude/Internal/Prelude.hs
@@ -26,5 +26,3 @@
 import Internal.Semigroup.Tuple
 import Numeric.Natural
 import Test.QuickCheck
-import Test.QuickCheck.Instances.Natural
-    ()
diff --git a/src/test/ClassSpec.hs b/src/test/ClassSpec.hs
--- a/src/test/ClassSpec.hs
+++ b/src/test/ClassSpec.hs
@@ -49,7 +49,16 @@
 import Test.Hspec.Laws
     ( testLawsMany )
 import Test.QuickCheck
-    ( Arbitrary (..), Confidence, Property, scale, shrinkMap )
+    ( Arbitrary (..)
+    , Confidence
+    , Property
+    , elements
+    , frequency
+    , listOf
+    , scale
+    , shrinkIntegral
+    , shrinkMap
+    )
 import Test.QuickCheck.Classes
     ( Laws (..) )
 import Test.QuickCheck.Classes.Monoid.Factorial
@@ -80,17 +89,13 @@
     )
 import Test.QuickCheck.Classes.Semigroup.Factorial
     ( factorialLaws, stableFactorialLaws )
-import Test.QuickCheck.Instances.ByteString
-    ()
-import Test.QuickCheck.Instances.Natural
-    ()
-import Test.QuickCheck.Instances.Text
-    ()
-import Test.QuickCheck.Instances.Vector
-    ()
 import Test.QuickCheck.Property
     ( Result (..), mapTotalResult )
 
+import qualified Data.ByteString.Lazy as ByteString
+import qualified Data.Text as Text
+import qualified Data.Vector as Vector
+
 spec :: Spec
 spec = do
     testLawsMany @() $ fmap disableCoverageCheck <$>
@@ -551,9 +556,43 @@
         , SumCancellative
         )
 
+--------------------------------------------------------------------------------
+-- Arbitrary instances
+--------------------------------------------------------------------------------
+
 instance Arbitrary a => Arbitrary (Small a) where
     arbitrary = Small <$> scale (`div` 2) arbitrary
     shrink = shrinkMap Small getSmall
+
+instance Arbitrary ByteString where
+    arbitrary = ByteString.pack <$> listOf genByte
+      where
+        genByte = frequency
+            [ (64, pure 0)
+            , (16, pure 1)
+            , ( 4, pure 2)
+            , ( 1, pure 3)
+            ]
+    shrink = shrinkMap ByteString.pack ByteString.unpack
+
+instance Arbitrary Text where
+    arbitrary = Text.pack <$> listOf genChar
+      where
+        genChar = frequency
+            [ (64, pure 'a')
+            , (16, pure 'b')
+            , ( 4, pure 'c')
+            , ( 1, pure 'd')
+            ]
+    shrink = shrinkMap Text.pack Text.unpack
+
+instance Arbitrary Natural where
+    arbitrary = elements [0 .. 3]
+    shrink = shrinkIntegral
+
+instance Arbitrary a => Arbitrary (Vector a) where
+    arbitrary = Vector.fromList <$> arbitrary
+    shrink = shrinkMap Vector.fromList Vector.toList
 
 --------------------------------------------------------------------------------
 -- Coverage checks
