diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,20 @@
 # Changelog
 
+## [0.21.0.0] - 2025-05-09
+
+This is technically a breaking change, but if you are not using the sydtest
+constructors directly, it should not break anything for you.
+
+### Added
+
+* `aroundAllWithAll`
+* `setupAroundAllWithAll`
+
+### Changed
+
+* Gave the 'DefAroundAllWithNode' constructor access to all outer resources
+  instead of just the latest one.
+
 ## [0.20.0.1] - 2025-05-09
 
 ### Added
diff --git a/src/Test/Syd.hs b/src/Test/Syd.hs
--- a/src/Test/Syd.hs
+++ b/src/Test/Syd.hs
@@ -133,6 +133,7 @@
     aroundAll,
     aroundAll_,
     aroundAllWith,
+    aroundAllWithAll,
 
     -- *** Dependencies around each of a group of tests
     before,
@@ -158,6 +159,7 @@
     -- ****** AroundAll
     setupAroundAll,
     setupAroundAllWith,
+    setupAroundAllWithAll,
 
     -- *** Declaring different test settings
     modifyMaxSuccess,
diff --git a/src/Test/Syd/Def/AroundAll.hs b/src/Test/Syd/Def/AroundAll.hs
--- a/src/Test/Syd/Def/AroundAll.hs
+++ b/src/Test/Syd/Def/AroundAll.hs
@@ -114,7 +114,8 @@
   TestDefM otherOuters inner result
 aroundAll func = wrapForest $ \forest -> DefAroundAllNode func forest
 
--- | Run a custom action before and/or after all spec items in a group to provide access to a resource 'a' while using a resource 'b'
+-- | Run a custom action before and/or after all spec items in a group to
+-- provide access to a resource 'a' while using a resource 'b'
 --
 -- See the @FOOTGUN@ note in the docs for 'around_'.
 aroundAllWith ::
@@ -123,7 +124,18 @@
   ((newOuter -> IO ()) -> (oldOuter -> IO ())) ->
   TestDefM (newOuter ': oldOuter ': otherOuters) inner result ->
   TestDefM (oldOuter ': otherOuters) inner result
-aroundAllWith func = wrapForest $ \forest -> DefAroundAllWithNode func forest
+aroundAllWith func = wrapForest $ \forest ->
+  DefAroundAllWithNode (\useNew (HCons x _) -> func useNew x) forest
+
+-- | Run a custom action before and/or after all spec items in a group to
+-- provide access to a resource 'a' while using all outer resources.
+aroundAllWithAll ::
+  forall newOuter oldOuter otherOuters inner result.
+  -- | The function that provides the new outer resource (once), using the old outer resource.
+  ((newOuter -> IO ()) -> (HList (oldOuter ': otherOuters) -> IO ())) ->
+  TestDefM (newOuter ': oldOuter ': otherOuters) inner result ->
+  TestDefM (oldOuter ': otherOuters) inner result
+aroundAllWithAll func = wrapForest $ \forest -> DefAroundAllWithNode func forest
 
 -- | Declare a node in the spec def forest
 wrapForest ::
diff --git a/src/Test/Syd/Def/SetupFunc.hs b/src/Test/Syd/Def/SetupFunc.hs
--- a/src/Test/Syd/Def/SetupFunc.hs
+++ b/src/Test/Syd/Def/SetupFunc.hs
@@ -111,3 +111,12 @@
 setupAroundAllWith sf = aroundAllWith $ \takeNewOuter oldOuter ->
   let SetupFunc provideNewOuter = sf oldOuter
    in provideNewOuter $ \newOuter -> takeNewOuter newOuter
+
+-- | Use 'aroundAllWithAll' with a 'SetupFunc'
+setupAroundAllWithAll ::
+  (HList (oldOuter ': outers) -> SetupFunc newOuter) ->
+  TestDefM (newOuter ': oldOuter ': outers) inner result ->
+  TestDefM (oldOuter ': outers) inner result
+setupAroundAllWithAll sf = aroundAllWithAll $ \takeNewOuter oldOuter ->
+  let SetupFunc provideNewOuter = sf oldOuter
+   in provideNewOuter $ \newOuter -> takeNewOuter newOuter
diff --git a/src/Test/Syd/Runner/Asynchronous.hs b/src/Test/Syd/Runner/Asynchronous.hs
--- a/src/Test/Syd/Runner/Asynchronous.hs
+++ b/src/Test/Syd/Runner/Asynchronous.hs
@@ -261,16 +261,16 @@
                 )
           DefAroundAllWithNode func sdf -> do
             e <- ask
-            let HCons x _ = eExternalResources e
+            let outers = eExternalResources e
             liftIO $
               func
                 ( \b -> do
                     runReaderT
                       (goForest sdf)
-                      (e {eExternalResources = HCons b (eExternalResources e)})
+                      (e {eExternalResources = HCons b outers})
                     waitForWorkersDone
                 )
-                x
+                outers
           DefAfterAllNode func sdf -> do
             e <- ask
             liftIO $
diff --git a/src/Test/Syd/Runner/Synchronous/Interleaved.hs b/src/Test/Syd/Runner/Synchronous/Interleaved.hs
--- a/src/Test/Syd/Runner/Synchronous/Interleaved.hs
+++ b/src/Test/Syd/Runner/Synchronous/Interleaved.hs
@@ -139,7 +139,7 @@
                 )
         DefAroundAllWithNode func sdf -> do
           e <- ask
-          let HCons x _ = eExternalResources e
+          let outers = eExternalResources e
           liftIO $
             fmap SubForestNode
               <$> applySimpleWrapper
@@ -147,9 +147,9 @@
                 ( \b ->
                     runReaderT
                       (goForest sdf)
-                      (e {eExternalResources = HCons b (eExternalResources e)})
+                      (e {eExternalResources = HCons b outers})
                 )
-                x
+                outers
         DefAfterAllNode func sdf -> do
           e <- ask
           let externalResources = eExternalResources e
diff --git a/src/Test/Syd/Runner/Synchronous/Separate.hs b/src/Test/Syd/Runner/Synchronous/Separate.hs
--- a/src/Test/Syd/Runner/Synchronous/Separate.hs
+++ b/src/Test/Syd/Runner/Synchronous/Separate.hs
@@ -98,7 +98,7 @@
               )
       DefAroundAllWithNode func sdf -> do
         e <- ask
-        let HCons x _ = eExternalResources e
+        let outers = eExternalResources e
         liftIO $
           fmap SubForestNode
             <$> applySimpleWrapper
@@ -106,9 +106,9 @@
               ( \b ->
                   runReaderT
                     (goForest sdf)
-                    (e {eExternalResources = HCons b (eExternalResources e)})
+                    (e {eExternalResources = HCons b outers})
               )
-              x
+              outers
       DefAfterAllNode func sdf -> do
         e <- ask
         let externalResources = eExternalResources e
diff --git a/src/Test/Syd/SpecDef.hs b/src/Test/Syd/SpecDef.hs
--- a/src/Test/Syd/SpecDef.hs
+++ b/src/Test/Syd/SpecDef.hs
@@ -107,7 +107,7 @@
     SpecDefTree otherOuters inner extra
   DefAroundAllWithNode ::
     -- | The function that provides the new outer resource (once), using the old outer resource.
-    ((newOuter -> IO ()) -> (oldOuter -> IO ())) ->
+    ((newOuter -> IO ()) -> (HList (oldOuter ': otherOuters) -> IO ())) ->
     SpecDefForest (newOuter ': oldOuter ': otherOuters) inner extra ->
     SpecDefTree (oldOuter ': otherOuters) inner extra
   DefAfterAllNode ::
diff --git a/sydtest.cabal b/sydtest.cabal
--- a/sydtest.cabal
+++ b/sydtest.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           sydtest
-version:        0.20.0.1
+version:        0.21.0.0
 synopsis:       A modern testing framework for Haskell with good defaults and advanced testing features.
 description:    A modern testing framework for Haskell with good defaults and advanced testing features. Sydtest aims to make the common easy and the hard possible. See https://github.com/NorfairKing/sydtest#readme for more information.
 category:       Testing
