diff --git a/genvalidity-hspec-aeson.cabal b/genvalidity-hspec-aeson.cabal
--- a/genvalidity-hspec-aeson.cabal
+++ b/genvalidity-hspec-aeson.cabal
@@ -1,5 +1,5 @@
 name: genvalidity-hspec-aeson
-version: 0.0.1.1
+version: 0.1.0.0
 cabal-version: >=1.10
 build-type: Simple
 license: MIT
@@ -22,13 +22,13 @@
         Test.Validity.Aeson
     build-depends:
         base >=4.9 && <=5,
-        genvalidity-hspec >=0.3 && <0.5,
-        genvalidity >=0.3 && <0.4,
-        hspec,
+        genvalidity-hspec >=0.5 && <0.6,
+        genvalidity >=0.4 && <0.5,
+        hspec -any,
         aeson >=0.11 && <1.2,
-        QuickCheck,
+        QuickCheck -any,
         deepseq >=1.4 && <1.5,
-        bytestring
+        bytestring -any
     default-language: Haskell2010
     hs-source-dirs: src/
     ghc-options: -Wall
@@ -47,13 +47,15 @@
     type: exitcode-stdio-1.0
     main-is: Spec.hs
     build-depends:
+        aeson -any,
         base -any,
-        genvalidity >=0.3 && <0.4,
+        genvalidity -any,
+        genvalidity-aeson -any,
+        genvalidity-hspec -any,
         genvalidity-hspec-aeson -any,
-        hspec,
-        aeson,
-        text,
-        genvalidity-text
+        genvalidity-text -any,
+        hspec -any,
+        text -any
     default-language: Haskell2010
     hs-source-dirs: test/
     other-modules:
diff --git a/src/Test/Validity/Aeson.hs b/src/Test/Validity/Aeson.hs
--- a/src/Test/Validity/Aeson.hs
+++ b/src/Test/Validity/Aeson.hs
@@ -31,44 +31,44 @@
 -- Example usage:
 --
 -- > jsonSpecOnValid @Double
-jsonSpecOnValid
-    :: forall a.
-       (Show a, Eq a, Typeable a, GenValid a, FromJSON a, ToJSON a)
+jsonSpecOnValid ::
+       forall a. (Show a, Eq a, Typeable a, GenValid a, FromJSON a, ToJSON a)
     => Spec
-jsonSpecOnValid = jsonSpecOnGen (genValid @a) "valid"
+jsonSpecOnValid = jsonSpecOnGen (genValid @a) "valid" shrinkValid
 
 -- | Standard test spec for properties of JSON-related functions for unchecked values
 --
 -- Example usage:
 --
 -- > jsonSpec @Int
-jsonSpec
-    :: forall a.
+jsonSpec ::
+       forall a.
        (Show a, Eq a, Typeable a, GenUnchecked a, FromJSON a, ToJSON a)
     => Spec
-jsonSpec = jsonSpecOnGen (genUnchecked @a) "unchecked"
+jsonSpec = jsonSpecOnGen (genUnchecked @a) "unchecked" shrinkUnchecked
 
 -- | Standard test spec for properties of JSON-related functions for arbitrary values
 --
 -- Example usage:
 --
 -- > jsonSpecOnArbitrary @Int
-jsonSpecOnArbitrary
-    :: forall a.
-       (Show a, Eq a, Typeable a, Arbitrary a, FromJSON a, ToJSON a)
+jsonSpecOnArbitrary ::
+       forall a. (Show a, Eq a, Typeable a, Arbitrary a, FromJSON a, ToJSON a)
     => Spec
-jsonSpecOnArbitrary = jsonSpecOnGen (arbitrary @a) "arbitrary"
+jsonSpecOnArbitrary = jsonSpecOnGen (arbitrary @a) "arbitrary" shrink
 
 -- | Standard test spec for properties of JSON-related functions for a given generator (and a name for that generator).
 --
 -- Example usage:
 --
 -- > jsonSpecOnGen (genListOf $ pure 'a') "sequence of 'a's"
-jsonSpecOnGen
-    :: forall a.
-       (Show a, Eq a, Typeable a, FromJSON a, ToJSON a)
-    => Gen a -> String -> Spec
-jsonSpecOnGen gen genname =
+jsonSpecOnGen ::
+       forall a. (Show a, Eq a, Typeable a, FromJSON a, ToJSON a)
+    => Gen a
+    -> String
+    -> (a -> [a])
+    -> Spec
+jsonSpecOnGen gen genname s =
     parallel $ do
         let name = nameOf @a
         describe ("JSON " ++ name ++ " (" ++ genname ++ ")") $ do
@@ -80,7 +80,7 @@
                          , "\"" ++ genname
                          , name ++ "\""
                          ]) $
-                neverFailsToEncodeOnGen gen
+                neverFailsToEncodeOnGen gen s
             describe
                 ("decode :: " ++ name ++ " -> Data.ByteString.Lazy.ByteString") $
                 it
@@ -89,36 +89,33 @@
                          , "\"" ++ genname
                          , name ++ "\"" ++ "'s"
                          ]) $
-                encodeAndDecodeAreInversesOnGen gen
+                encodeAndDecodeAreInversesOnGen gen s
 
 -- |
 --
--- prop> neverFailsToEncodeOnGen @Bool arbitrary
--- prop> neverFailsToEncodeOnGen @Bool genUnchecked
--- prop> neverFailsToEncodeOnGen @Bool genValid
--- prop> neverFailsToEncodeOnGen @Int arbitrary
--- prop> neverFailsToEncodeOnGen @Int genUnchecked
--- prop> neverFailsToEncodeOnGen @Int genValid
-neverFailsToEncodeOnGen
-    :: (Show a, ToJSON a)
-    => Gen a -> Property
-neverFailsToEncodeOnGen gen =
-    forAll gen $ \(a :: a) ->
+-- prop> neverFailsToEncodeOnGen @Bool arbitrary shrink
+-- prop> neverFailsToEncodeOnGen @Bool genUnchecked shrinkUnchecked
+-- prop> neverFailsToEncodeOnGen @Bool genValid shrinkValid
+-- prop> neverFailsToEncodeOnGen @Int arbitrary shrink
+-- prop> neverFailsToEncodeOnGen @Int genUnchecked shrinkUnchecked
+-- prop> neverFailsToEncodeOnGen @Int genValid shrinkValid
+neverFailsToEncodeOnGen :: (Show a, ToJSON a) => Gen a -> (a -> [a]) -> Property
+neverFailsToEncodeOnGen gen s =
+    forAllShrink gen s $ \(a :: a) ->
         evaluate (deepseq (JSON.encode a) ()) `shouldReturn` ()
 
 -- |
 --
--- prop> encodeAndDecodeAreInversesOnGen @Bool arbitrary
--- prop> encodeAndDecodeAreInversesOnGen @Bool genUnchecked
--- prop> encodeAndDecodeAreInversesOnGen @Bool genValid
--- prop> encodeAndDecodeAreInversesOnGen @Int arbitrary
--- prop> encodeAndDecodeAreInversesOnGen @Int genUnchecked
--- prop> encodeAndDecodeAreInversesOnGen @Int genValid
-encodeAndDecodeAreInversesOnGen
-    :: (Show a, Eq a, FromJSON a, ToJSON a)
-    => Gen a -> Property
-encodeAndDecodeAreInversesOnGen gen =
-    forAll gen $ \(a :: a) ->
+-- prop> encodeAndDecodeAreInversesOnGen @Bool arbitrary shrink
+-- prop> encodeAndDecodeAreInversesOnGen @Bool genUnchecked shrinkUnchecked
+-- prop> encodeAndDecodeAreInversesOnGen @Bool genValid shrinkValid
+-- prop> encodeAndDecodeAreInversesOnGen @Int arbitrary shrink
+-- prop> encodeAndDecodeAreInversesOnGen @Int genUnchecked shrinkUnchecked
+-- prop> encodeAndDecodeAreInversesOnGen @Int genValid shrinkValid
+encodeAndDecodeAreInversesOnGen ::
+       (Show a, Eq a, FromJSON a, ToJSON a) => Gen a -> (a -> [a]) -> Property
+encodeAndDecodeAreInversesOnGen gen s =
+    forAllShrink gen s $ \(a :: a) ->
         let encoded = JSON.encode a
             errOrDecoded = JSON.eitherDecode encoded
         in case errOrDecoded of
diff --git a/test/Test/Validity/AesonSpec.hs b/test/Test/Validity/AesonSpec.hs
--- a/test/Test/Validity/AesonSpec.hs
+++ b/test/Test/Validity/AesonSpec.hs
@@ -8,20 +8,24 @@
 
 import Data.Aeson
 import Data.GenValidity
+import Data.GenValidity.Aeson ()
 import Data.GenValidity.Text ()
 import Data.Text (Text)
 import GHC.Generics
+import Test.Validity
 import Test.Validity.Aeson
 
 spec :: Spec
 spec = do
-    jsonSpecOnGen (genListOf $ pure 'a') "sequence of 'a's"
+    jsonSpecOnGen (genListOf $ pure 'a') "sequence of 'a's" (const [])
     jsonSpecOnValid @Double
     jsonSpec @Int
     jsonSpecOnArbitrary @Int
     jsonSpecOnValid @ForShow
+    jsonSpecOnValid @Value
+    shrinkValidSpec @Value
 
-data ForShow =
+newtype ForShow =
     ForShow Text
     deriving (Show, Eq, Generic)
 
