diff --git a/hspec-core.cabal b/hspec-core.cabal
--- a/hspec-core.cabal
+++ b/hspec-core.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:             hspec-core
-version:          2.7.3
+version:          2.7.4
 license:          MIT
 license-file:     LICENSE
 copyright:        (c) 2011-2019 Simon Hengel,
diff --git a/src/Test/Hspec/Core/Runner.hs b/src/Test/Hspec/Core/Runner.hs
--- a/src/Test/Hspec/Core/Runner.hs
+++ b/src/Test/Hspec/Core/Runner.hs
@@ -317,10 +317,4 @@
 randomizeForest :: Integer -> [Tree c a] -> [Tree c a]
 randomizeForest seed t = runST $ do
   ref <- newSTRef (mkStdGen $ fromIntegral seed)
-  mapM (randomizeTree ref) t
-
-randomizeTree :: STRef s StdGen -> Tree c a -> ST s (Tree c a)
-randomizeTree ref t = case t of
-  Node d xs -> Node d <$> shuffle ref xs
-  NodeWithCleanup c xs -> NodeWithCleanup c <$> shuffle ref xs
-  Leaf {} -> return t
+  shuffleForest ref t
diff --git a/src/Test/Hspec/Core/Shuffle.hs b/src/Test/Hspec/Core/Shuffle.hs
--- a/src/Test/Hspec/Core/Shuffle.hs
+++ b/src/Test/Hspec/Core/Shuffle.hs
@@ -1,18 +1,29 @@
 {-# LANGUAGE CPP #-}
 module Test.Hspec.Core.Shuffle (
-  shuffle
+  shuffleForest
 #ifdef TEST
+, shuffle
 , mkArray
 #endif
 ) where
 
 import           Prelude ()
 import           Test.Hspec.Core.Compat
+import           Test.Hspec.Core.Tree
 
 import           System.Random
 import           Control.Monad.ST
 import           Data.STRef
 import           Data.Array.ST
+
+shuffleForest :: STRef s StdGen -> [Tree c a] -> ST s [Tree c a]
+shuffleForest ref xs = (shuffle ref xs >>= mapM (shuffleTree ref))
+
+shuffleTree :: STRef s StdGen -> Tree c a -> ST s (Tree c a)
+shuffleTree ref t = case t of
+  Node d xs -> Node d <$> shuffleForest ref xs
+  NodeWithCleanup c xs -> NodeWithCleanup c <$> shuffleForest ref xs
+  Leaf {} -> return t
 
 shuffle :: STRef s StdGen -> [a] -> ST s [a]
 shuffle ref xs = do
diff --git a/test/Test/Hspec/Core/ShuffleSpec.hs b/test/Test/Hspec/Core/ShuffleSpec.hs
--- a/test/Test/Hspec/Core/ShuffleSpec.hs
+++ b/test/Test/Hspec/Core/ShuffleSpec.hs
@@ -4,6 +4,7 @@
 import           Helper
 
 import qualified Test.Hspec.Core.Shuffle as H
+import           Test.Hspec.Core.Tree
 
 import           Data.Array.ST
 import           Control.Monad.ST
@@ -12,6 +13,28 @@
 
 spec :: Spec
 spec = do
+  describe "shuffleForest" $ do
+    let
+      shuffleForest :: Int -> [Tree () Int] -> [Tree () Int]
+      shuffleForest seed xs = runST $ do
+        gen <- newSTRef (mkStdGen seed)
+        H.shuffleForest gen xs
+
+    it "shuffles a forest" $ do
+      shuffleForest 2
+        [Leaf 1, Leaf 2, Leaf 3] `shouldBe`
+        [Leaf 3, Leaf 1, Leaf 2]
+
+    it "recurses into Node" $ do
+      shuffleForest 1
+        [Node "foo" [Node "bar" [Leaf 1, Leaf 2, Leaf 3]]] `shouldBe`
+        [Node "foo" [Node "bar" [Leaf 2, Leaf 3, Leaf 1]]]
+
+    it "recurses into NodeWithCleanup" $ do
+      shuffleForest 1
+        [NodeWithCleanup () [NodeWithCleanup () [Leaf 1, Leaf 2, Leaf 3]]] `shouldBe`
+        [NodeWithCleanup () [NodeWithCleanup () [Leaf 2, Leaf 3, Leaf 1]]]
+
   describe "shuffle" $ do
     it "shuffles a list" $ do
       runST $ do
