diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Revision history for data-findcycle
 
+## 0.1.2.1 -- 2026-09-16
+
+* Use a `newtype` rather than `data` in the implementation for `nivash`
+  finders.
+* Bump dependency bounds.
+
 ## 0.1.2.0 -- 2025-05-31
 
 * Correct unfortunate misspelling of "Nivasch" as "Nivash".
diff --git a/data-findcycle.cabal b/data-findcycle.cabal
--- a/data-findcycle.cabal
+++ b/data-findcycle.cabal
@@ -1,6 +1,6 @@
 cabal-version:      1.18
 name:               data-findcycle
-version:            0.1.2.0
+version:            0.1.2.1
 synopsis:           Find cycles in periodic functions (and lists)
 description:
   Any function @f :: a -> a@ where the type @a@ has finitely many values
@@ -35,7 +35,7 @@
     -- Data.Functor.Identity used to be in transformers instead of base.
     if impl(ghc<7.10.1)
         build-depends:
-            transformers >= 0.3 && < 0.5
+            transformers >= 0.3 && < 0.7
     hs-source-dirs:   src
     default-language: Haskell2010
     ghc-options: -Wall
@@ -48,7 +48,7 @@
     build-depends:
         base,
         data-findcycle,
-        QuickCheck >= 2.7 && < 2.16,
+        QuickCheck >= 2.7 && < 2.20,
         primes >= 0.2 && < 0.3,
         tasty >= 0.10 && < 1.6,
         tasty-quickcheck >= 0.8 && < 0.12
@@ -63,7 +63,7 @@
         base,
         data-findcycle,
         tasty,
-        tasty-bench >= 0.4 && < 0.5,
+        tasty-bench >= 0.4 && < 0.6,
         primes,
         deepseq >= 1.5 && < 1.6
     ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-A64m -fproc-alignment=64
diff --git a/src/Data/FindCycle.hs b/src/Data/FindCycle.hs
--- a/src/Data/FindCycle.hs
+++ b/src/Data/FindCycle.hs
@@ -348,7 +348,7 @@
 class NivaschSt st m where
     checkSt :: (Ord a) => a -> Int -> st a -> m (Either Int (st a))
 
-data NivaschStack a = NivaschStack [(a, Int)]
+newtype NivaschStack a = NivaschStack [(a, Int)]
 
 instance (Monad m) => NivaschSt NivaschStack m where
     {-# INLINE checkSt #-}
