diff --git a/genvalidity-containers.cabal b/genvalidity-containers.cabal
--- a/genvalidity-containers.cabal
+++ b/genvalidity-containers.cabal
@@ -1,18 +1,19 @@
--- This file has been generated from package.yaml by hpack version 0.20.0.
+-- This file has been generated from package.yaml by hpack version 0.28.2.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 249d5502b09fcdc73906c58d9dd5cd6253b893a42200f4e1a7d2a3e4592be478
+-- hash: 4ceb99a83aa476e2b06907a031bf2c38970c3dee854c26896294c39620f4f4cb
 
 name:           genvalidity-containers
-version:        0.4.0.1
+version:        0.5.0.0
 synopsis:       GenValidity support for containers
 description:    Please see README.md
 category:       Testing
 homepage:       https://github.com/NorfairKing/validity#readme
 bug-reports:    https://github.com/NorfairKing/validity/issues
 author:         Tom Sydney Kerckhove
-maintainer:     syd.kerckhove@gmail.com
+maintainer:     syd.kerckhove@gmail.com,
+                nick.van.den.broeck666@gmail.com
 copyright:      Copyright: (c) 2016-2018 Tom Sydney Kerckhove
 license:        MIT
 license-file:   LICENSE
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
@@ -4,10 +4,12 @@
 module Data.GenValidity.Map
     ( genStructurallyValidMapOf
     , genStructurallyValidMapOfInvalidValues
+#if MIN_VERSION_containers(0,5,9)
+    , genStructurallyInvalidMap
+#endif
     ) where
 #if !MIN_VERSION_base(4,8,0)
-import Control.Applicative (pure)
-import Data.Functor ((<$>))
+import Control.Applicative (pure, (<$>), (<*>))
 #endif
 import Data.GenValidity
 import Data.Validity.Map ()
@@ -15,8 +17,11 @@
 
 import Data.Map (Map)
 import qualified Data.Map as M
+#if MIN_VERSION_containers(0,5,9)
 import qualified Data.Map.Internal as Internal
+#endif
 
+#if MIN_VERSION_containers(0,5,9)
 instance (Ord k, GenUnchecked k, GenUnchecked v) => GenUnchecked (Map k v) where
     genUnchecked =
         sized $ \n ->
@@ -36,15 +41,22 @@
         [ Internal.Bin s' k' a' m1' m2'
         | (s', k', a', m1', m2') <- shrinkUnchecked (s, k, a, m1, m2)
         ]
-
+#else
+instance (Ord k, GenUnchecked k, GenUnchecked v) => GenUnchecked (Map k v) where
+    genUnchecked = M.fromList <$> genUnchecked
+    shrinkUnchecked = fmap M.fromList . shrinkUnchecked . M.toList
+#endif
 instance (Ord k, GenValid k, GenValid v) => GenValid (Map k v) where
     genValid = M.fromList <$> genValid
-
+#if MIN_VERSION_containers(0,5,9)
 instance (Ord k, GenInvalid k, GenInvalid v) => GenInvalid (Map k v) where
     genInvalid =
         oneof
             [genStructurallyValidMapOfInvalidValues, genStructurallyInvalidMap]
-
+#else
+instance (Ord k, GenInvalid k, GenInvalid v) => GenInvalid (Map k v) where
+    genInvalid = genStructurallyValidMapOfInvalidValues
+#endif
 genStructurallyValidMapOf :: Ord k => Gen (k, v) -> Gen (Map k v)
 genStructurallyValidMapOf g =
     sized $ \n ->
@@ -72,11 +84,12 @@
                     (,) <$> genUnchecked <*> genUnchecked
                 pure $ M.insert key val rest
         oneof [go genInvalid genUnchecked, go genUnchecked genInvalid]
-
+#if MIN_VERSION_containers(0,5,9)
 genStructurallyInvalidMap ::
        (Ord k, GenUnchecked k, GenUnchecked v) => Gen (Map k v)
 genStructurallyInvalidMap = do
     v <- genUnchecked
     if M.valid v
-        then scale (+ 1) genUnchecked
+        then scale (+ 1) genStructurallyInvalidMap
         else pure v
+#endif
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
@@ -1,13 +1,15 @@
-{-# OPTIONS_GHC -fno-warn-orphans #-}
 {-# LANGUAGE CPP #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
 
 module Data.GenValidity.Set
     ( genStructurallyValidSetOf
     , genStructurallyValidSetOfInvalidValues
+#if MIN_VERSION_containers(0,5,9)
     , genStructurallyInvalidSet
+#endif
     ) where
 #if !MIN_VERSION_base(4,8,0)
-import Data.Functor ((<$>))
+import Control.Applicative ((<$>), pure)
 #endif
 import Data.GenValidity
 import Data.Validity.Set ()
@@ -15,8 +17,10 @@
 
 import Data.Set (Set)
 import qualified Data.Set as S
+#if MIN_VERSION_containers(0,5,9)
 import qualified Data.Set.Internal as Internal
-
+#endif
+#if MIN_VERSION_containers(0,5,9)
 instance (Ord v, GenUnchecked v) => GenUnchecked (Set v) where
     genUnchecked =
         sized $ \n ->
@@ -35,15 +39,22 @@
         [ Internal.Bin s' a' s1' s2'
         | (s', a', s1', s2') <- shrinkUnchecked (s, a, s1, s2)
         ]
-
+#else
+instance (Ord v, GenUnchecked v) => GenUnchecked (Set v) where
+    genUnchecked = S.fromList <$> genUnchecked
+    shrinkUnchecked = fmap S.fromList . shrinkUnchecked . S.toList
+#endif
 instance (Ord v, GenValid v) => GenValid (Set v) where
     genValid = S.fromList <$> genValid
-
+#if MIN_VERSION_containers(0,5,9)
 instance (Ord v, GenInvalid v) => GenInvalid (Set v) where
     genInvalid =
         oneof
             [genStructurallyValidSetOfInvalidValues, genStructurallyInvalidSet]
-
+#else
+instance (Ord v, GenInvalid v) => GenInvalid (Set v) where
+    genInvalid = genStructurallyValidSetOfInvalidValues
+#endif
 genStructurallyValidSetOf :: Ord v => Gen v -> Gen (Set v)
 genStructurallyValidSetOf g =
     sized $ \n ->
@@ -64,10 +75,11 @@
         val <- resize v genInvalid
         rest <- resize m $ genStructurallyValidSetOf genUnchecked
         pure $ S.insert val rest
-
+#if MIN_VERSION_containers(0,5,9)
 genStructurallyInvalidSet :: (Ord v, GenUnchecked v) => Gen (Set v)
 genStructurallyInvalidSet = do
     v <- genUnchecked
     if S.valid v
-        then scale (+ 1) genUnchecked
+        then scale (+ 1) genStructurallyInvalidSet
         else pure v
+#endif
diff --git a/test/Test/Validity/Containers/MapSpec.hs b/test/Test/Validity/Containers/MapSpec.hs
--- a/test/Test/Validity/Containers/MapSpec.hs
+++ b/test/Test/Validity/Containers/MapSpec.hs
@@ -1,14 +1,33 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE TypeApplications #-}
 
 module Test.Validity.Containers.MapSpec where
 
 import Test.Hspec
 
-import Data.GenValidity.Map ()
+import Data.GenValidity
+import Data.GenValidity.Map
 import Data.Map (Map)
 import Test.Validity.GenValidity
 
 spec :: Spec
 spec = do
+    describe "genStructurallyValidMapOf" $
+        it "produces valid maps" $
+        genGeneratesValid
+            (genStructurallyValidMapOf @Double @Double genValid)
+            (const [])
+    describe "genStructurallyValidMapOfInvalidValues" $
+        it "produces valid maps" $
+        genGeneratesInvalid
+            (genStructurallyValidMapOfInvalidValues @Double @Double)
+            (const [])
+#if MIN_VERSION_containers(0,5,9)
+    describe "genStructurallyInvalidMap" $
+        it "produces invalid maps" $
+        genGeneratesInvalid
+            (genStructurallyInvalidMap @Double @Double)
+            (const [])
+#endif
     genValidSpec @(Map Int Double)
     genValiditySpec @(Map Double Double)
diff --git a/test/Test/Validity/Containers/SetSpec.hs b/test/Test/Validity/Containers/SetSpec.hs
--- a/test/Test/Validity/Containers/SetSpec.hs
+++ b/test/Test/Validity/Containers/SetSpec.hs
@@ -1,14 +1,31 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE TypeApplications #-}
 
 module Test.Validity.Containers.SetSpec where
 
 import Test.Hspec
 
-import Data.GenValidity.Set ()
+import Data.GenValidity
+import Data.GenValidity.Set
 import Data.Set (Set)
 import Test.Validity.GenValidity
 
 spec :: Spec
 spec = do
+    describe "genStructurallyValidSetOf" $
+        it "produces valid sets" $
+        genGeneratesValid
+            (genStructurallyValidSetOf @Double genValid)
+            (const [])
+    describe "genStructurallyValidSetOfInvalidValues" $
+        it "produces valid sets" $
+        genGeneratesInvalid
+            (genStructurallyValidSetOfInvalidValues @Double)
+            (const [])
+#if MIN_VERSION_containers(0,5,9)
+    describe "genStructurallyInvalidSet" $
+        it "produces invalid sets" $
+        genGeneratesInvalid (genStructurallyInvalidSet @Double) (const [])
+#endif
     genValidSpec @(Set Int)
     genValiditySpec @(Set Double)
