diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+## Megaparsec 5.1.2
+
+* Stopped using property tests with `dbg` helper to avoid flood of debugging
+  info when test suite is run.
+
+* Fixed the build with `QuickCheck` versions older than 2.9.0.
+
 ## Megaparsec 5.1.1
 
 * Exported the `observing` primitive from `Text.Megaparsec`.
diff --git a/Text/Megaparsec/Error.hs b/Text/Megaparsec/Error.hs
--- a/Text/Megaparsec/Error.hs
+++ b/Text/Megaparsec/Error.hs
@@ -175,15 +175,20 @@
 instance (Arbitrary t, Ord t, Arbitrary e, Ord e)
     => Arbitrary (ParseError t e) where
   arbitrary = ParseError
-    <$>
-#if !MIN_VERSION_QuickCheck(2,9,0)
-      (NE.fromList . getNonEmpty <$> arbitrary)
+#if MIN_VERSION_QuickCheck(2,9,0)
+    <$> arbitrary
 #else
-      arbitrary
+    <$> (NE.fromList . getNonEmpty <$> arbitrary)
 #endif
+#if MIN_VERSION_QuickCheck(2,8,2)
     <*> arbitrary
     <*> arbitrary
     <*> arbitrary
+#else
+    <*> (E.fromList <$> arbitrary)
+    <*> (E.fromList <$> arbitrary)
+    <*> (E.fromList <$> arbitrary)
+#endif
 
 -- | Merge two error data structures into one joining their collections of
 -- message items and preferring longest match. In other words, earlier error
diff --git a/megaparsec.cabal b/megaparsec.cabal
--- a/megaparsec.cabal
+++ b/megaparsec.cabal
@@ -27,7 +27,7 @@
 -- POSSIBILITY OF SUCH DAMAGE.
 
 name:                 megaparsec
-version:              5.1.1
+version:              5.1.2
 cabal-version:        >= 1.10
 license:              BSD2
 license-file:         LICENSE.md
@@ -124,7 +124,7 @@
                     , exceptions   >= 0.6   && < 0.9
                     , hspec        >= 2.0   && < 3.0
                     , hspec-expectations >= 0.5 && < 0.8
-                    , megaparsec   >= 5.1.1
+                    , megaparsec   >= 5.1.2
                     , mtl          >= 2.0   && < 3.0
                     , scientific   >= 0.3.1 && < 0.4
                     , text         >= 0.2   && < 1.3
@@ -150,7 +150,7 @@
   build-depends:      base         >= 4.6  && < 5.0
                     , bytestring   >= 0.10 && < 0.11
                     , criterion    >= 0.6.2.1 && < 1.2
-                    , megaparsec   >= 5.1.1
+                    , megaparsec   >= 5.1.2
                     , text         >= 0.2  && < 1.3
   default-language:   Haskell2010
 
diff --git a/tests/Text/Megaparsec/PrimSpec.hs b/tests/Text/Megaparsec/PrimSpec.hs
--- a/tests/Text/Megaparsec/PrimSpec.hs
+++ b/tests/Text/Megaparsec/PrimSpec.hs
@@ -72,6 +72,12 @@
 import qualified Data.Text                   as T
 import qualified Data.Text.Lazy              as TL
 
+#if !MIN_VERSION_QuickCheck(2,8,2)
+instance (Arbitrary a, Ord a) => Arbitrary (E.Set a) where
+  arbitrary = E.fromList <$> arbitrary
+  shrink    = fmap E.fromList . shrink . E.toList
+#endif
+
 spec :: Spec
 spec = do
 
@@ -1204,12 +1210,11 @@
             s = "ab"
         prs  p s `shouldParse` 'a'
         prs' p s `succeedsLeaving` "b"
-      it "its hints are preserved" $
-        property $ \a b as -> a /= b ==> do
-          let p = dbg "many chars" (many (char a)) <* empty
-              s = a : b : as
-          prs  p s `shouldFailWith` err (posN (1 :: Int) s) (etok a)
-          prs' p s `failsLeaving` (b:as)
+      it "its hints are preserved" $ do
+        let p = dbg "many chars" (many (char 'a')) <* empty
+            s = "abcd"
+        prs  p s `shouldFailWith` err (posN (1 :: Int) s) (etok 'a')
+        prs' p s `failsLeaving` "bcd"
     context "when inner parser fails consuming input" $
       it "has no effect on how parser works" $ do
         let p = dbg "chars" (char 'a' *> char 'c')
@@ -1222,12 +1227,11 @@
             s = "abc"
         prs  p s `shouldParse` 'a'
         prs' p s `succeedsLeaving` s
-      it "its hints are preserved" $
-        property $ \a b as -> a /= b ==> do
-          let p = dbg "many chars" (many (char a)) <* empty
-              s = b : as
-          prs  p s `shouldFailWith` err posI (etok a)
-          prs' p s `failsLeaving` (b:as)
+      it "its hints are preserved" $ do
+        let p = dbg "many chars" (many (char 'a')) <* empty
+            s = "bcd"
+        prs  p s `shouldFailWith` err posI (etok 'a')
+        prs' p s `failsLeaving` "bcd"
     context "when inner parser fails without consuming" $
       it "has no effect on how parser works" $ do
         let p = dbg "empty" (void empty)
