diff --git a/source b/source
index b7d731bcacb..7910d1777e1 100644
--- a/source
+++ b/source
@@ -95068,7 +95068,7 @@ interface <dfn interface>BeforeUnloadEvent</dfn> : <span>Event</span> {
    <li><p><span>Inform the navigation API about child navigable destruction</span> given
    <var>navigable</var>.</p></li>
 
-   <li><p><span data-x="destroy a document">Destroy</span> <var>navigable</var>'s <span
+   <li><p><span>Destroy a document and its descendants</span> given <var>navigable</var>'s <span
    data-x="nav-document">active document</span>.</p></li>
 
    <li><p>Let <var>parentDocState</var> be <var>container</var>'s <span>node navigable</span>'s
@@ -95110,8 +95110,8 @@ interface <dfn interface>BeforeUnloadEvent</dfn> : <span>Event</span> {
      <li><p>Let <var>document</var> be <var>historyEntry</var>'s <span
      data-x="she-document">document</span>.</p></li>
 
-     <li><p>If <var>document</var> is not null, then <span data-x="destroy a
-     document">destroy</span> <var>document</var>.</p></li>
+     <li><p>If <var>document</var> is not null, then <span>destroy a document and its
+     descendants</span> given <var>document</var>.</p></li>
     </ol>
    </li>
 
@@ -95139,12 +95139,18 @@ interface <dfn interface>BeforeUnloadEvent</dfn> : <span>Event</span> {
    <li><p>If the result of <span>checking if unloading is canceled</span> for <var>toUnload</var> is
    true, then return.</p></li>
 
-   <li><p><span data-x="unload a document">Unload</span> the <span data-x="nav-document">active
-   documents</span> of each of <var>toUnload</var>.  <span class="XXX" data-x="">In what
-   order?</span></p></li>
+   <li>
+    <p><span data-x="tn-append-session-history-traversal-steps">Append the following session
+    history traversal steps</span> to <var>traversable</var>:</p>
 
-   <li><p><span data-x="destroy a top-level traversable">Destroy</span>
-   <var>traversable</var>.</p></li>
+    <ol>
+     <li><p>Let <var>afterAllUnloads</var> be an algorithm step which <span data-x="destroy a
+     top-level traversable">destroys</span> <var>traversable</var>.</p></li>
+
+     <li><p><span>Unload a document and its descendants</span> given <var>traversable</var>'s <span
+     data-x="nav-document">active document</span>, null, and <var>afterAllUnloads</var>.</p></li>
+    </ol>
+   </li>
   </ol>
 
 
@@ -96363,7 +96369,7 @@ interface <dfn interface>BeforeUnloadEvent</dfn> : <span>Event</span> {
    name</dfn> string, initially the empty string.</p></li>
   </ul>
 
-  <p>User agents may <span data-x="destroy a Document">destroy</span> the <span
+  <p>User agents may <span>destroy a document and its descendants</span> given the <span
   data-x="document-state-document">documents</span> of <span data-x="document state">document
   states</span> with non-null <span data-x="document-state-document">documents</span>, as long as
   the <code>Document</code> is not <span>fully active</span>.</p>
@@ -97446,7 +97452,7 @@ location.href = '#foo';</code></pre>
 
      <li><p><span>Queue a global task</span> on the <span>navigation and traversal task
      source</span> given <var>navigable</var>'s <span data-x="nav-window">active window</span> to
-     <span data-x="abort a document">abort</span> <var>navigable</var>'s <span
+     <span>abort a document and its descendants</span> given <var>navigable</var>'s <span
      data-x="nav-document">active document</span>.</p></li>
 
      <li id="navigation-create-document-state">
@@ -100511,36 +100517,24 @@ location.href = '#foo';</code></pre>
      <var>targetStep</var>.</p></li>
 
      <li>
-      <p><span>Queue a global task</span> on the <span>navigation and traversal task source</span>
-      given <var>navigable</var>'s <span data-x="nav-window">active window</span> to run the
-      steps:</p>
+      <p>If <var>changingNavigableContinuation</var>'s <span
+      data-x="changing-nav-continuation-update-only">update-only</span> is false, and
+      <var>targetEntry</var>'s <span data-x="she-document">document</span> does not equal
+      <var>displayedDocument</var>, then <span>unload a document and its descendants</span> given
+      <var>displayedDocument</var>, <var>targetEntry</var>'s <span
+      data-x="she-document">document</span>, and <var>afterPotentialUnloads</var>.</p>
 
-      <ol>
-       <li>
-        <p>If <var>changingNavigableContinuation</var>'s <span
-        data-x="changing-nav-continuation-update-only">update-only</span> is false, then:</p>
+      <p>Otherwise, <span>queue a global task</span> on the <span>navigation and traversal task
+      source</span> given <var>navigable</var>'s <span data-x="nav-window">active window</span> to
+      perform <var>afterPotentialUnloads</var>.</p>
 
-        <ol>
-         <li>
-          <p>If <var>targetEntry</var>'s <span data-x="she-document">document</span> does not equal
-          <var>displayedDocument</var>, then:</p>
+      <p>In both cases, let <var>afterPotentialUnloads</var> be the following steps:</p>
 
-          <ol>
-           <li><p><span data-x="unload a document">Unload</span> <var>displayedDocument</var> given
-           <var>targetEntry</var>'s <span data-x="she-document">document</span>.</p></li>
-
-           <li><p>For each <var>childNavigable</var> of <var>displayedDocument</var>'s
-           <span>descendant navigables</span>, <span>queue a global task</span> on the
-           <span>navigation and traversal task source</span> given <var>childNavigable</var>'s
-           <span data-x="nav-window">active window</span> to <span data-x="unload a
-           document">unload</span> <var>childNavigable</var>'s <span data-x="nav-document">active
-           document</span>.</p></li>
-          </ol>
-
-         <li><p><span>Activate history entry</span> <var>targetEntry</var> for
-         <var>navigable</var>.</p></li>
-        </ol>
-       </li>
+      <ol>
+       <li><p>If <var>changingNavigableContinuation</var>'s <span
+       data-x="changing-nav-continuation-update-only">update-only</span> is false, then
+       <span>activate history entry</span> <var>targetEntry</var> for
+       <var>navigable</var>.</p></li>
 
        <li><p>Let <var>updateDocument</var> be an algorithm step which performs <span>update
        document for history step application</span> given <var>targetEntry</var>'s <span
@@ -102188,7 +102182,8 @@ new PaymentRequest(&hellip;); // Allowed to use
 
   <ol>
    <li><p><span>Assert</span>: this is running as part of a <span data-x="concept-task">task</span>
-   queued on <var>oldDocument</var>'s <span>event loop</span>.</p></li>
+   queued on <var>oldDocument</var>'s <span>relevant agent</span>'s <span
+   data-x="concept-agent-event-loop">event loop</span>.</p></li>
 
    <li><p>Let <var>unloadTimingInfo</var> be a new <span>document unload timing
    info</span>.</p></li>
@@ -102295,6 +102290,54 @@ new PaymentRequest(&hellip;); // Allowed to use
    <var>unloadTimingInfo</var>.</p></li>
   </ol>
 
+  <p>To <dfn>unload a document and its descendants</dfn>, given a <code>Document</code>
+  <var>document</var>, an optional <code>Document</code>-or-null <var>newDocument</var> (default
+  null), and an optional set of steps <var>afterAllUnloads</var>:</p>
+
+  <ol>
+   <li><p><span>Assert</span>: this is running within <var>document</var>'s <span>node
+   navigable</span>'s <span data-x="nav-traversable">traversable navigable</span>'s <span
+   data-x="tn-session-history-traversal-queue">session history traversal queue</span>.</p></li>
+
+   <li><p>Let <var>childNavigables</var> be <var>document</var>'s <span data-x="child
+   navigable">child navigables</span>.</p></li>
+
+   <li><p>Let <var>numberUnloaded</var> be 0.</p></li>
+
+   <li>
+    <p><span data-x="list iterate">For each</span> <var>childNavigable</var> of
+    <var>childNavigable</var>'s <span class="XXX" data-x="">in what order?</span>, <span>queue a
+    global task</span> on the <span>navigation and traversal task source</span> given
+    <var>childNavigable</var>'s <span data-x="nav-window">active window</span> to perform the
+    following steps:</p>
+
+    <ol>
+     <li><p>Let <var>incrementUnloaded</var> be an algorithm step which increments
+     <var>numberUnloaded</var>.</p></li>
+
+     <li><p><span>Unload a document and its descendants</span> given <var>childNavigable</var>'s
+     <span data-x="nav-document">active document</span>, null, and
+     <var>incrementUnloaded</var>.</p></li>
+    </ol>
+   </li>
+
+   <li><p>Wait until <var>numberUnloaded</var> equals <var>childNavigable</var>'s <span
+   data-x="list size">size</span>.</p></li>
+
+   <li>
+    <p><span>Queue a global task</span> on the <span>navigation and traversal task source</span>
+    given <var>document</var>'s <span>relevant global object</span> to perform the following
+    steps:</p>
+
+    <ol>
+     <li><p><span data-x="unload a document">Unload</span> <var>document</var>, passing along
+     <var>newDocument</var> if it is not null.</p></li>
+
+     <li><p>If <var>afterAllUnloads</var> was given, then run it.</p></li>
+    </ol>
+   </li>
+  </ol>
+
   <p>This specification defines the following <dfn export>unloading document cleanup steps</dfn>.
   Other specifications can define more. Given a <code>Document</code> <var>document</var>:</p>
 
@@ -102354,9 +102397,11 @@ new PaymentRequest(&hellip;); // Allowed to use
   <code>Document</code> <var>document</var>:</p>
 
   <ol>
-   <li><p><span data-x="destroy a document">Destroy</span> the <span
-   data-x="nav-document">active documents</span> of each of <var>document</var>'s <span>descendant
-   navigables</span>. <span class="XXX" data-x="">In what order?</span></p></li>
+   <li><p><span>Assert</span>: this is running as part of a <span data-x="concept-task">task</span>
+   queued on <var>document</var>'s <span>relevant agent</span>'s <span
+   data-x="concept-agent-event-loop">event loop</span>.</p></li>
+
+   <li><p><span data-x="abort a document">Abort</span> <var>document</var>.</p></li>
 
    <li><p>Set <var>document</var>'s <i data-x="concept-document-salvageable">salvageable</i> state
    to false.</p></li>
@@ -102364,8 +102409,6 @@ new PaymentRequest(&hellip;); // Allowed to use
    <li><p>Run any <span>unloading document cleanup steps</span> for <var>document</var> that
    are defined by this specification and <span>other applicable specifications</span>.</p></li>
 
-   <li><p><span data-x="abort a document">Abort</span> <var>document</var>.</p></li>
-
    <li><p>Remove any <span data-x="concept-task">tasks</span> whose <span
    data-x="concept-task-document">document</span> is <var>document</var> from any <span>task
    queue</span> (without running those tasks).</p></li>
@@ -102392,22 +102435,61 @@ new PaymentRequest(&hellip;); // Allowed to use
   accessible to script, in the case where we are <span data-x="destroy a child
   navigable">destroying a child navigable</span>.</p>
 
+  <p>To <dfn>destroy a document and its descendants</dfn> given a <code>Document</code>
+  <var>document</var> and an optional set of steps <var>afterAllDestruction</var>, perform the
+  following steps <span>in parallel</span>:</p>
+
+  <ol>
+   <li><p>Let <var>childNavigables</var> be <var>document</var>'s <span data-x="child
+   navigable">child navigables</span>.</p></li>
+
+   <li><p>Let <var>numberDestroyed</var> be 0.</p></li>
+
+   <li>
+    <p><span data-x="list iterate">For each</span> <var>childNavigable</var> of
+    <var>childNavigable</var>'s <span class="XXX" data-x="">in what order?</span>, <span>queue a
+    global task</span> on the <span>navigation and traversal task source</span> given
+    <var>childNavigable</var>'s <span data-x="nav-window">active window</span> to perform the
+    following steps:</p>
+
+    <ol>
+     <li><p>Let <var>incrementDestroyed</var> be an algorithm step which increments
+     <var>numberDestroyed</var>.</p></li>
+
+     <li><p><span>Destroy a document and its descendants</span> given <var>childNavigable</var>'s
+     <span data-x="nav-document">active document</span> and <var>incrementDestroyed</var>.</p></li>
+    </ol>
+   </li>
+
+   <li><p>Wait until <var>numberDestroyed</var> equals <var>childNavigable</var>'s <span
+   data-x="list size">size</span>.</p></li>
+
+   <li>
+    <p><span>Queue a global task</span> on the <span>navigation and traversal task source</span>
+    given <var>document</var>'s <span>relevant global object</span> to perform the following
+    steps:</p>
+
+    <ol>
+     <li><p><span data-x="destroy a document">Destroy</span> <var>document</var>.</p></li>
+
+     <li><p>If <var>afterAllDestruction</var> was given, then run it.</p></li>
+    </ol>
+   </li>
+  </ol>
+
   <h4>Aborting a document load</h4>
 
   <p>To <dfn data-x="abort a document">abort</dfn> a <code>Document</code> <var>document</var>:</p>
 
   <ol>
-   <li><p><span data-x="abort a document">Abort</span> the <span data-x="nav-document">active
-   documents</span> of each of <var>document</var>'s <span>descendant navigables</span>. <span
-   class="XXX" data-x="">In what order?</span> If this results in any of those <code>Document</code>
-   objects having their <i data-x="concept-document-salvageable">salvageable</i> state set to false,
-   then set <var>document</var>'s <i data-x="concept-document-salvageable">salvageable</i> state to
-   false also.</p></li>
+   <li><p><span>Assert</span>: this is running as part of a <span data-x="concept-task">task</span>
+   queued on <var>document</var>'s <span>relevant agent</span>'s <span
+   data-x="concept-agent-event-loop">event loop</span>.</p></li>
 
    <li><p>Cancel any instances of the <span data-x="concept-fetch">fetch</span> algorithm in the
-   context of <var>document</var>, discarding any <span data-x="concept-task">tasks</span>
-   <span data-x="queue a task">queued</span> for them, and discarding any further data received from
-   the network for them. If this resulted in any instances of the <span
+   context of <var>document</var>, discarding any <span data-x="concept-task">tasks</span> <span
+   data-x="queue a task">queued</span> for them, and discarding any further data received from the
+   network for them. If this resulted in any instances of the <span
    data-x="concept-fetch">fetch</span> algorithm being canceled or any <span data-x="queue a
    task">queued</span> <span data-x="concept-task">tasks</span> or any network data getting
    discarded, then set <var>document</var>'s <i
@@ -102440,10 +102522,42 @@ new PaymentRequest(&hellip;); // Allowed to use
 
      <li><p><span data-x="abort a parser">Abort that parser</span>.</p></li>
 
-     <li><p>Set <var>document</var>'s <i data-x="concept-document-salvageable">salvageable</i> state
-     to false.</p></li>
+     <li><p>Set <var>document</var>'s <i data-x="concept-document-salvageable">salvageable</i> to
+     false.</p></li>
+    </ol>
+   </li>
+  </ol>
+
+  <p>To <dfn>abort a document and its descendants</dfn> given a <code>Document</code>
+  <var>document</var>:</p>
+
+  <ol>
+   <li><p><span>Assert</span>: this is running as part of a <span data-x="concept-task">task</span>
+   queued on <var>document</var>'s <span>relevant agent</span>'s <span
+   data-x="concept-agent-event-loop">event loop</span>.</p></li>
+
+   <li><p>Let <var>descendantNavigables</var> be <var>document</var>'s <span>descendant
+   navigables</span>.</p></li>
+
+   <li>
+    <p><span data-x="list iterate">For each</span> <var>descendantNavigable</var> of
+    <var>descendantNavigables</var> <span class="XXX" data-x="">in what order?</span>, <span>queue
+    a global task</span> on the <span>navigation and traversal task source</span> given
+    <var>descendantNavigable</var>'s <span data-x="nav-window">active window</span> to perform the
+    following steps:</p>
+
+    <ol>
+     <li><p><span data-x="abort a document">Abort</span> <var>descendantNavigable</var>'s <span
+     data-x="nav-document">active document</span>.</p></li>
+
+     <li><p>If <var>descendantNavigable</var>'s <span data-x="nav-document">active
+     document</span>'s <i data-x="concept-document-salvageable">salvageable</i> is false, then set
+     <var>document</var>'s <i data-x="concept-document-salvageable">salvageable</i> to
+     false.</p></li>
     </ol>
    </li>
+
+   <li><p><span data-x="abort a document">Abort</span> <var>document</var>.</p></li>
   </ol>
 
   <p id="stop-document-loading">To <dfn data-x="nav-stop">stop loading</dfn> a
@@ -102463,7 +102577,7 @@ new PaymentRequest(&hellip;); // Allowed to use
     navigation</span> will cause further work to be abandoned.</p>
    </li>
 
-   <li><p><span data-x="abort a document">Abort</span> <var>document</var>.</p></li>
+   <li><p><span>Abort a document and its descendants</span> given <var>document</var>.</p></li>
   </ol>
 
   <p class="XXX">Through their <a href="#nav-traversal-ui">user interface</a>, user agents also