diff --git a/QuickCheck.cabal b/QuickCheck.cabal
--- a/QuickCheck.cabal
+++ b/QuickCheck.cabal
@@ -1,5 +1,5 @@
 Name: QuickCheck
-Version: 2.17.0.0
+Version: 2.17.1.0
 Cabal-Version: >= 1.10
 Build-type: Simple
 License: BSD3
@@ -72,7 +72,7 @@
 
 library
   Hs-source-dirs: src
-  Build-depends: base >=4.9 && <5, containers
+  Build-depends: base >=4.14 && <5, containers
   Default-language: Haskell2010
 
   -- New vs old random.
diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+QuickCheck 2.17.1
+	* Fix random-1.2 support (thanks bodigrim)
+	* Update docs (thanks effectfully)
+
 QuickCheck 2.17
 	* Lower the memory use of `arbitrary` for `Double` and `Float` (thanks
 	ChickenProp)
diff --git a/src/Test/QuickCheck/Arbitrary.hs b/src/Test/QuickCheck/Arbitrary.hs
--- a/src/Test/QuickCheck/Arbitrary.hs
+++ b/src/Test/QuickCheck/Arbitrary.hs
@@ -286,8 +286,8 @@
   -- > shrink (Branch x l r) =
   -- >   -- shrink Branch to Nil
   -- >   [Nil] ++
-  -- >   -- shrink to subterms
-  -- >   [l, r] ++
+  -- >   -- shrink to non-Nil subterms
+  -- >   [t | t@Branch{} <- [l, r]] ++
   -- >   -- recursively shrink subterms
   -- >   [Branch x' l' r' | (x', l', r') <- shrink (x, l, r)]
   --
@@ -1298,10 +1298,14 @@
   arbitrary = elements [ latin1, utf8, utf8_bom, utf16, utf16le, utf16be, utf32, utf32le, utf32be, localeEncoding, char8 ]
 
 instance Arbitrary BufferMode where
-  arbitrary = oneof [ pure NoBuffering, pure LineBuffering, BlockBuffering <$> arbitrary ]
+  arbitrary = oneof [ pure NoBuffering
+                    , pure LineBuffering
+                    , pure $ BlockBuffering Nothing
+                    , BlockBuffering . Just . (+1) . fromIntegral <$> (arbitrary :: Gen Natural)
+                    ]
   shrink NoBuffering = []
   shrink LineBuffering = [ NoBuffering ]
-  shrink (BlockBuffering m) = [ NoBuffering, LineBuffering ] ++ map BlockBuffering (shrink m)
+  shrink (BlockBuffering m) = [ NoBuffering, LineBuffering ] ++ map BlockBuffering (filter (maybe True (>0)) $ shrink m)
 
 instance Arbitrary IOMode where
   arbitrary = elements [ReadMode, WriteMode, AppendMode, ReadWriteMode]
diff --git a/src/Test/QuickCheck/Random.hs b/src/Test/QuickCheck/Random.hs
--- a/src/Test/QuickCheck/Random.hs
+++ b/src/Test/QuickCheck/Random.hs
@@ -38,7 +38,7 @@
 #endif
 
 instance RandomGen QCGen where
-#ifdef OLD_RANDOM
+#if !MIN_VERSION_random(1,3,0)
   split = splitImpl
 #endif
 #ifdef NO_SPLITMIX
@@ -55,11 +55,13 @@
   genWord64 = wrapQCGen genWord64
   genWord32R r = wrapQCGen (genWord32R r)
   genWord64R r = wrapQCGen (genWord64R r)
+#if MIN_VERSION_random(1,3,0)
   genShortByteString n = wrapQCGen (uniformShortByteString n)
 #endif
 #endif
+#endif
 
-#ifndef OLD_RANDOM
+#if MIN_VERSION_random(1,3,0)
 instance SplitGen QCGen where
   splitGen = splitImpl
 #endif
