diff --git a/genvalidity-bytestring.cabal b/genvalidity-bytestring.cabal
--- a/genvalidity-bytestring.cabal
+++ b/genvalidity-bytestring.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: a576909f691b01e569d7164556dc20d0f9e6ca5cac0b6db9bab76489fe3ef281
+-- hash: c9985f1a13b131ff21c83bf08ae8c91ca6d91ad12183953fa103ea08618530ae
 
 name:           genvalidity-bytestring
-version:        0.4.0.0
+version:        0.5.0.0
 synopsis:       GenValidity support for ByteString
 description:    Please see README.md
 category:       Testing
@@ -16,7 +16,7 @@
 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
@@ -36,7 +36,7 @@
       QuickCheck
     , base >=4.7 && <5
     , bytestring
-    , genvalidity >=0.5
+    , genvalidity >=0.8
     , validity >=0.5
     , validity-bytestring >=0.4
   default-language: Haskell2010
diff --git a/src/Data/GenValidity/ByteString.hs b/src/Data/GenValidity/ByteString.hs
--- a/src/Data/GenValidity/ByteString.hs
+++ b/src/Data/GenValidity/ByteString.hs
@@ -1,6 +1,10 @@
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 {-# LANGUAGE CPP #-}
-
+#if MIN_VERSION_base(4,9,0)
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE UndecidableInstances #-}
+#endif
 module Data.GenValidity.ByteString where
 
 import Data.GenValidity
@@ -14,25 +18,10 @@
 import qualified Data.ByteString.Internal as SB
 import qualified Data.ByteString.Lazy as LB
 import qualified Data.ByteString.Lazy.Internal as LB
-
-instance GenUnchecked SB.ByteString where
-    genUnchecked =
-        error $
-        unlines
-            [ "Data.GenValidity.ByteString.genUnchecked :: Strict.ByteString"
-            , "You probably do not want to use this."
-            , "You probably want to use 'genValid' instead."
-            , "See https://github.com/NorfairKing/validity/blob/master/docs/BYTESTRING.md"
-            ]
-    shrinkUnchecked =
-        error $
-        unlines
-            [ "Data.GenValidity.ByteString.shrinkUnchecked :: Strict.ByteString -> [Strict.ByteString]"
-            , "You probably do not want to use this."
-            , "You probably want to use 'shrinkValid' instead."
-            , "See https://github.com/NorfairKing/validity/blob/master/docs/BYTESTRING.md"
-            ]
-
+import qualified Data.ByteString.Short as Short
+#if MIN_VERSION_base(4,9,0)
+import GHC.TypeLits
+#endif
 -- |
 --
 -- > genValid = SB.pack <$> genValid
@@ -40,7 +29,13 @@
 instance GenValid SB.ByteString where
     genValid = SB.pack <$> genValid
     shrinkValid = fmap SB.pack . shrinkValid . SB.unpack
-
+#if MIN_VERSION_base(4,9,0)
+-- If you see this error and want to learn more, have a look at docs/BYTESTRING.md
+instance GHC.TypeLits.TypeError ('GHC.TypeLits.Text "The GenUnchecked Data.ByteString.ByteString is disabled:" 'GHC.TypeLits.:$$: 'GHC.TypeLits.Text "Do not instantiate GenUnchecked, instantiate GenValid instead") =>
+         GenUnchecked SB.ByteString where
+    genUnchecked = error "unreachable"
+    shrinkUnchecked = error "unreachable"
+#endif
 -- | WARNING: Unchecked ByteStrings are __seriously__ broken.
 --
 -- The pointer may still point to something which is fine, but
@@ -63,23 +58,46 @@
 shrinkTrulyUncheckedStrictByteString (SB.PS p o l) =
     [SB.PS p o' l' | (o', l') <- shrinkUnchecked (o, l)]
 
-instance GenUnchecked LB.ByteString where
-    genUnchecked =
-        sized $ \n ->
-            case n of
-                0 -> pure LB.Empty
-                _ -> do
-                    (a, b) <- genSplit n
-                    sb <- resize a genUnchecked
-                    lb <- resize b genUnchecked
-                    pure $ LB.Chunk sb lb
-    shrinkUnchecked lb_ =
-        case lb_ of
-            LB.Empty -> []
-            (LB.Chunk sb lb) ->
-                LB.Empty :
-                [LB.Chunk sb' lb' | (sb', lb') <- shrinkUnchecked (sb, lb)]
-
 instance GenValid LB.ByteString where
     genValid = LB.pack <$> genValid
     shrinkValid = fmap LB.pack . shrinkValid . LB.unpack
+#if MIN_VERSION_base(4,9,0)
+-- If you see this error and want to learn more, have a look at docs/BYTESTRING.md
+instance GHC.TypeLits.TypeError ('GHC.TypeLits.Text "The GenUnchecked Data.ByteString.Lazy.ByteString is disabled:" 'GHC.TypeLits.:$$: 'GHC.TypeLits.Text "Do not instantiate GenUnchecked, instantiate GenValid instead") =>
+         GenUnchecked LB.ByteString where
+    genUnchecked = error "unreachable"
+    shrinkUnchecked = error "unreachable"
+#endif
+-- | WARNING: Unchecked ByteStrings are __seriously__ broken.
+--
+-- See 'genTrulyUncheckedStrictByteString'
+genTrulyUncheckedLazyByteString :: Gen LB.ByteString
+genTrulyUncheckedLazyByteString =
+    sized $ \n ->
+        case n of
+            0 -> pure LB.Empty
+            _ -> do
+                (a, b) <- genSplit n
+                sb <- resize a genTrulyUncheckedStrictByteString
+                lb <- resize b genTrulyUncheckedLazyByteString
+                pure $ LB.Chunk sb lb
+
+shrinkTrulyUncheckedLazyByteString :: LB.ByteString -> [LB.ByteString]
+shrinkTrulyUncheckedLazyByteString lb_ =
+    case lb_ of
+        LB.Empty -> []
+        (LB.Chunk sb lb) ->
+            LB.Empty :
+            [ LB.Chunk sb' lb'
+            | (sb', lb') <-
+                  shrinkTuple
+                      shrinkTrulyUncheckedStrictByteString
+                      shrinkTrulyUncheckedLazyByteString
+                      (sb, lb)
+            ]
+
+instance GenUnchecked Short.ShortByteString where
+    genUnchecked = Short.pack <$> genValid
+    shrinkUnchecked = fmap Short.pack . shrinkUnchecked . Short.unpack
+
+instance GenValid Short.ShortByteString
diff --git a/test/Data/GenValidity/ByteStringSpec.hs b/test/Data/GenValidity/ByteStringSpec.hs
--- a/test/Data/GenValidity/ByteStringSpec.hs
+++ b/test/Data/GenValidity/ByteStringSpec.hs
@@ -12,6 +12,7 @@
 
 import qualified Data.ByteString as SB (ByteString)
 import qualified Data.ByteString.Lazy as LB (ByteString)
+import qualified Data.ByteString.Short as Short (ShortByteString)
 
 checkable :: (Validity t, Show t, NFData t) => Gen t -> SpecWith ()
 checkable gen =
@@ -38,3 +39,28 @@
            showable (genValid :: Gen LB.ByteString)
            it "generates valid lazy bytestring" $
                forAll (genValid :: Gen LB.ByteString) isValid
+    describe "genUnchecked :: Gen Short.ShortByteString" $ do
+        checkable (genUnchecked :: Gen Short.ShortByteString)
+        showable (genUnchecked :: Gen Short.ShortByteString)
+    describe "genValid :: Gen Short.ShortByteString" $ do
+        checkable (genValid :: Gen Short.ShortByteString)
+        showable (genValid :: Gen Short.ShortByteString)
+        it "generates valid lazy bytestring" $
+            forAll (genValid :: Gen Short.ShortByteString) isValid
+
+-- Uncomment to test that the instances are poisoned
+--
+-- instance GenUnchecked SB.ByteString where
+--     genUnchecked = undefined
+--     shrinkUnchecked = undefined
+--
+-- instance GenUnchecked LB.ByteString where
+--     genUnchecked = undefined
+--     shrinkUnchecked = undefined
+--
+-- Uncomment to see the error message that you would get
+--
+-- data FooBar = FooBar SB.ByteString String
+--     deriving (Show, Eq, Generic)
+-- instance Validity FooBar
+-- instance GenUnchecked FooBar
