diff --git a/genvalidity-containers.cabal b/genvalidity-containers.cabal
--- a/genvalidity-containers.cabal
+++ b/genvalidity-containers.cabal
@@ -1,11 +1,13 @@
--- This file has been generated from package.yaml by hpack version 0.28.2.
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.31.1.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 2351a699b51cc37b65fdb421731fa9392ccdcd8dc374a95a0b5536110d10b2b9
+-- hash: 22e1fd7c0b05edc7ecb432aeb818153fc4547642aa7648d05b0dd663d9a9f512
 
 name:           genvalidity-containers
-version:        0.5.1.1
+version:        0.6.0.0
 synopsis:       GenValidity support for containers
 description:    Please see README.md
 category:       Testing
@@ -14,11 +16,10 @@
 author:         Tom Sydney Kerckhove
 maintainer:     syd.kerckhove@gmail.com,
                 nick.van.den.broeck666@gmail.com
-copyright:      Copyright: (c) 2016-2018 Tom Sydney Kerckhove
+copyright:      Copyright: (c) 2016-2019 Tom Sydney Kerckhove
 license:        MIT
 license-file:   LICENSE
 build-type:     Simple
-cabal-version:  >= 1.10
 
 source-repository head
   type: git
@@ -39,7 +40,7 @@
       QuickCheck
     , base <5
     , containers
-    , genvalidity >=0.5
+    , genvalidity >=0.8
     , validity >=0.5
     , validity-containers >=0.3
   default-language: Haskell2010
diff --git a/src/Data/GenValidity/Map.hs b/src/Data/GenValidity/Map.hs
--- a/src/Data/GenValidity/Map.hs
+++ b/src/Data/GenValidity/Map.hs
@@ -50,12 +50,12 @@
     genValid = M.fromList <$> genValid
     shrinkValid = fmap M.fromList . shrinkValid . M.toList
 #if MIN_VERSION_containers(0,5,9)
-instance (Ord k, GenInvalid k, GenInvalid v) => GenInvalid (Map k v) where
+instance (Ord k, GenUnchecked k, GenInvalid k, GenUnchecked v, GenInvalid v) => GenInvalid (Map k v) where
     genInvalid =
         oneof
             [genStructurallyValidMapOfInvalidValues, genStructurallyInvalidMap]
 #else
-instance (Ord k, GenInvalid k, GenInvalid v) => GenInvalid (Map k v) where
+instance (Ord k, GenUnchecked k, GenInvalid k, GenUnchecked v, GenInvalid v) => GenInvalid (Map k v) where
     genInvalid = genStructurallyValidMapOfInvalidValues
 #endif
 genStructurallyValidMapOf :: Ord k => Gen (k, v) -> Gen (Map k v)
@@ -72,7 +72,7 @@
 -- Note: M.fromList <$> genInvalid does not work because of this line in the Data.Map documentation:
 -- ' If the list contains more than one value for the same key, the last value for the key is retained.'
 genStructurallyValidMapOfInvalidValues ::
-       (Ord k, GenInvalid k, GenInvalid v) => Gen (Map k v)
+       (Ord k, GenUnchecked k, GenInvalid k, GenUnchecked v, GenInvalid v) => Gen (Map k v)
 genStructurallyValidMapOfInvalidValues =
     sized $ \n -> do
         (k, v, m) <- genSplit3 n
diff --git a/src/Data/GenValidity/Sequence.hs b/src/Data/GenValidity/Sequence.hs
--- a/src/Data/GenValidity/Sequence.hs
+++ b/src/Data/GenValidity/Sequence.hs
@@ -18,6 +18,8 @@
 
 instance GenValid v => GenValid (Seq v) where
     genValid = S.fromList <$> genValid
+    shrinkValid = fmap S.fromList . shrinkValid . toList
 
-instance GenInvalid v => GenInvalid (Seq v) where
+instance (GenUnchecked v, GenInvalid v) => GenInvalid (Seq v) where
     genInvalid = S.fromList <$> genInvalid
+    shrinkInvalid = fmap S.fromList . shrinkInvalid . toList
diff --git a/src/Data/GenValidity/Set.hs b/src/Data/GenValidity/Set.hs
--- a/src/Data/GenValidity/Set.hs
+++ b/src/Data/GenValidity/Set.hs
@@ -46,13 +46,14 @@
 #endif
 instance (Ord v, GenValid v) => GenValid (Set v) where
     genValid = S.fromList <$> genValid
+    shrinkValid = fmap S.fromList . shrinkValid . S.toList
 #if MIN_VERSION_containers(0,5,9)
-instance (Ord v, GenInvalid v) => GenInvalid (Set v) where
+instance (Ord v, GenUnchecked v, GenInvalid v) => GenInvalid (Set v) where
     genInvalid =
         oneof
             [genStructurallyValidSetOfInvalidValues, genStructurallyInvalidSet]
 #else
-instance (Ord v, GenInvalid v) => GenInvalid (Set v) where
+instance (Ord v, GenUnchecked v, GenInvalid v) => GenInvalid (Set v) where
     genInvalid = genStructurallyValidSetOfInvalidValues
 #endif
 genStructurallyValidSetOf :: Ord v => Gen v -> Gen (Set v)
@@ -68,7 +69,7 @@
 
 -- Note: M.fromList <$> genInvalid does not work because of this line in the Data.Set documentation:
 -- ' If the list contains more than one value for the same key, the last value for the key is retained.'
-genStructurallyValidSetOfInvalidValues :: (Ord v, GenInvalid v) => Gen (Set v)
+genStructurallyValidSetOfInvalidValues :: (Ord v, GenUnchecked v, GenInvalid v) => Gen (Set v)
 genStructurallyValidSetOfInvalidValues =
     sized $ \n -> do
         (v, m) <- genSplit n
