diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -4,9 +4,21 @@
 The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
 and this project adheres to the [Haskell Package Versioning Policy](https://pvp.haskell.org/).
 
-## [0.6.4.0] - 2019-09-13
+Note that since `quickcheck-classes` reexports larges parts of
+`quickcheck-classes-base`, changelog entries that deal with any of the
+classes from `base` are duplicated across the two changelogs.
+
+## [0.6.5.0] - 2021-04-12
 ### Added
-- laws for `abs` and `signum`
+- Laws for `abs` and `signum`
+- Storable Set-Set Law (resolves issue 101).
+- Add laws for `quotRem` and `divMod`.
+- Use non-commutative monoid for bifoldable tests (resolves issue 98)
+- `substitutiveEqLaws`, which tests for Eq substitutivity.
+- Negation law check for `Eq`.
+- Document that users can provide their own `Laws`.
+
+## [0.6.4.0] - 2019-09-13
 ### Changed
 - Use newer semirings
 
diff --git a/quickcheck-classes.cabal b/quickcheck-classes.cabal
--- a/quickcheck-classes.cabal
+++ b/quickcheck-classes.cabal
@@ -1,5 +1,6 @@
+cabal-version: 2.4
 name: quickcheck-classes
-version: 0.6.4.0
+version: 0.6.5.0
 synopsis: QuickCheck common typeclasses
 description:
   This library provides QuickCheck properties to ensure
@@ -14,7 +15,7 @@
   but on GHC >= 8.5, it uses `-XQuantifiedConstraints` to express these
   constraints more cleanly.
 homepage: https://github.com/andrewthad/quickcheck-classes#readme
-license: BSD3
+license: BSD-3-Clause
 license-file: LICENSE
 author: Andrew Martin, chessai
 maintainer: andrew.thaddeus@gmail.com
@@ -22,7 +23,6 @@
 category: Testing
 build-type: Simple
 extra-source-files: README.md
-cabal-version: >=1.10
 extra-source-files: changelog.md
 
 flag aeson
@@ -92,31 +92,31 @@
     Test.QuickCheck.Classes.Semiring
     Test.QuickCheck.Classes.Ring
   build-depends:
-      base >= 4.5 && < 5
-    , base-orphans >= 0.1
-    , bifunctors
-    , contravariant
+    , base >= 4.5 && < 5
     , QuickCheck >= 2.7
     , transformers >= 0.3 && < 0.6
     , primitive >= 0.6.4 && < 0.8
     , primitive-addr >= 0.1.0.2 && < 0.2
     , containers >= 0.4.2.1
-    , semigroups >= 0.17
-    , tagged
-    , fail
-    , quickcheck-classes-base >=0.6 && <0.7
+    , quickcheck-classes-base >=0.6.2 && <0.7
+  if impl(ghc < 8.0)
+    build-depends:
+      , semigroups >= 0.17
+      , fail
+  if impl(ghc < 7.8)
+    build-depends: tagged
   if impl(ghc > 7.4) && impl(ghc < 7.6)
     build-depends: ghc-prim
   if impl(ghc > 8.5)
     cpp-options: -DHAVE_QUANTIFIED_CONSTRAINTS
   if flag(unary-laws)
     build-depends:
-        transformers >= 0.4.0
+      , transformers >= 0.4.0
       , QuickCheck >= 2.10.0
     cpp-options: -DHAVE_UNARY_LAWS
   if flag(binary-laws)
     build-depends:
-        transformers >= 0.5.0
+      , transformers >= 0.5.0
       , QuickCheck >= 2.10.0
     cpp-options: -DHAVE_BINARY_LAWS
   if flag(aeson)
@@ -142,7 +142,7 @@
   other-modules:
     Spec.ShowRead
   build-depends:
-      base
+    , base
     , base-orphans >= 0.5
     , quickcheck-classes
     , QuickCheck
@@ -179,7 +179,7 @@
   main-is: Advanced.hs
   ghc-options: -O2
   build-depends:
-      QuickCheck
+    , QuickCheck
     , base >= 4.12
     , base-orphans >= 0.5
     , containers
diff --git a/src/Test/QuickCheck/Classes.hs b/src/Test/QuickCheck/Classes.hs
--- a/src/Test/QuickCheck/Classes.hs
+++ b/src/Test/QuickCheck/Classes.hs
@@ -22,6 +22,7 @@
   , QCB.bitsLaws
 #endif
   , QCB.eqLaws
+  , QCB.substitutiveEqLaws
   , QCB.numLaws
   , QCB.integralLaws
   , QCB.ixLaws
@@ -80,7 +81,7 @@
     -- ** Binary type constructors
   , QCB.bifoldableLaws
   , QCB.bifunctorLaws
-  , QCB.bitraversableLaws 
+  , QCB.bitraversableLaws
   , QCB.categoryLaws
   , QCB.commutativeCategoryLaws
 #if HAVE_SEMIGROUPOIDS
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -27,6 +27,9 @@
 #if HAVE_SEMIGROUPOIDS
 import Data.Functor.Apply (Apply((<.>)))
 #endif
+#if HAVE_BINARY_LAWS
+import Data.Functor.Const (Const(..))
+#endif
 #if HAVE_UNARY_LAWS
 import Data.Functor.Classes
 #endif
@@ -61,8 +64,23 @@
   [ ("Int",allLaws (Proxy :: Proxy Int))
   , ("Int64",allLaws (Proxy :: Proxy Int64))
   , ("Word",allLaws (Proxy :: Proxy Word))
-  , ("Tuple",[bitraversableLaws (Proxy :: Proxy (,))])
-  , ("Either",[bitraversableLaws (Proxy :: Proxy Either)])
+#if HAVE_BINARY_LAWS
+  , ("Tuple"
+    , [ bitraversableLaws (Proxy :: Proxy (,))
+      , bifoldableLaws (Proxy :: Proxy (,))
+      ]
+    )
+  , ("Const"
+    , [ bifoldableLaws (Proxy :: Proxy Const)
+      , bitraversableLaws (Proxy :: Proxy Const)
+      ]
+    )
+  , ("Either"
+    , [ bitraversableLaws (Proxy :: Proxy Either)
+      , bifoldableLaws (Proxy :: Proxy Either)
+      ]
+    )
+#endif
 #if HAVE_UNARY_LAWS
   , ("Maybe",allHigherLaws (Proxy1 :: Proxy1 Maybe))
   , ("List",allHigherLaws (Proxy1 :: Proxy1 []))
@@ -105,7 +123,7 @@
   , FiniteBits a
 #endif
   ) => Proxy a -> [Laws]
-allLaws p = 
+allLaws p =
   [ primLaws p
   , storableLaws p
   , semigroupLaws (Proxy :: Proxy (Sum a))
@@ -176,7 +194,7 @@
   )
 
 -- Note: when using base < 4.6, the Rogue type does
--- not really test anything. 
+-- not really test anything.
 instance Foldable Rogue where
   foldMap f (Rogue xs) = F.foldMap f xs
   foldl f x (Rogue xs) = F.foldl f x xs
