diff --git a/src/lib/components/calculations/CalculationPane.svelte b/src/lib/components/calculations/CalculationPane.svelte
index b524dde9e65f7da568b5437f77b3404e6c1a74aa..8a1022f2fa22490033f085ff0132b6c04cd1615b 100644
--- a/src/lib/components/calculations/CalculationPane.svelte
+++ b/src/lib/components/calculations/CalculationPane.svelte
@@ -1,5 +1,5 @@
 <script lang="ts">
-  import { getContext } from "svelte"
+  import { getContext, setContext } from "svelte"
   import type { Writable } from "svelte/store"
 
   import { goto } from "$app/navigation"
@@ -14,6 +14,7 @@
   import VariableReferredParametersPane from "$lib/components/variables/VariableReferredParametersPane.svelte"
   import Waterfall from "$lib/components/waterfalls/Waterfall.svelte"
   import type { Decomposition } from "$lib/decompositions"
+  import type { SelfTargetAProps } from "$lib/urls"
 
   export let actions: string[] | undefined
   export let pane: "pane1" | "pane2" | "pane3" | "pane4"
@@ -24,10 +25,10 @@
 
   let component = undefined
   const decomposition = getContext("decomposition") as Writable<Decomposition>
+  const newSelfTargetAProps = newSelfTargetAPropsBuilder(pane)
+  setContext("newSelfTargetAProps", newSelfTargetAProps)
   let properties = undefined
 
-  $: newSelfTargetUrl = newSelfTargetUrlBuilder(pane)
-
   $: updateComponentAndProperties(actions, pane)
 
   function closeWindow() {
@@ -45,8 +46,8 @@
   }
 
   // eslint-disable-next-line @typescript-eslint/no-unused-vars
-  function newSelfTargetUrlBuilder(pane) {
-    return (urlPath: string): string => {
+  function newSelfTargetAPropsBuilder(pane) {
+    return (urlPath: string): SelfTargetAProps => {
       // Variable-related views are shown in pane3.
       if (
         urlPath === "/parameters" ||
@@ -55,12 +56,18 @@
         urlPath.startsWith("/variables/")
       ) {
         const actions = [...(query.pane3 ?? []), urlPath.replace(/^\/+/, "")]
-        return newCalculationUrl({
-          ...query,
-          pane3: actions,
-        })
+        return {
+          href: newCalculationUrl({
+            ...query,
+            pane3: actions,
+          }),
+          "sveltekit:noscroll": true,
+        }
+      }
+      return {
+        href: urlPath,
+        "sveltekit:prefetch": true,
       }
-      return urlPath
     }
   }
 
@@ -156,16 +163,15 @@
 {#if component === DecompositionTree}
   <DecompositionTree
     decomposition={$decomposition}
-    {newSelfTargetUrl}
     open={true}
     {showNulls}
     {vectorIndex}
     {...properties}
   />
 {:else if component === Latchkey}
-  <Latchkey {newSelfTargetUrl} {showNulls} {vectorIndex} {...properties} />
+  <Latchkey {showNulls} {vectorIndex} {...properties} />
 {:else if component === ParameterPane}
-  <ParameterPane {newSelfTargetUrl} {...properties} />
+  <ParameterPane {...properties} />
 {:else if component === TestCaseEdit}
   <TestCaseEdit
     on:changeAxes
@@ -176,11 +182,11 @@
     {...properties}
   />
 {:else if component === VariablePane}
-  <VariablePane {newSelfTargetUrl} {...properties} />
+  <VariablePane {...properties} />
 {:else if component === VariableReferredInputsPane}
-  <VariableReferredInputsPane {newSelfTargetUrl} {...properties} />
+  <VariableReferredInputsPane {...properties} />
 {:else if component === VariableReferredParametersPane}
-  <VariableReferredParametersPane {newSelfTargetUrl} {...properties} />
+  <VariableReferredParametersPane {...properties} />
 {:else if component === Waterfall}
-  <Waterfall {newSelfTargetUrl} {showNulls} {vectorIndex} {...properties} />
+  <Waterfall {showNulls} {vectorIndex} {...properties} />
 {/if}
diff --git a/src/lib/components/latchkeys/Arrow.svelte b/src/lib/components/latchkeys/Arrow.svelte
index cec11199aaf6cdfbd2d9a0c50414d1fde4d47175..87bb1c00835e886020381dcd024ab8fb7b8e0991 100644
--- a/src/lib/components/latchkeys/Arrow.svelte
+++ b/src/lib/components/latchkeys/Arrow.svelte
@@ -4,11 +4,11 @@
 
   import { goto } from "$app/navigation"
   import type { LatchkeyDataItem } from "$lib/decompositions"
+  import type { SelfTargetAProps } from "$lib/urls"
 
   export let height: number
   export let index: number
   export let item: LatchkeyDataItem
-  export let newSelfTargetUrl: (urlPath: string) => string
   export let vectorIndex: number
   export let x0: number
   export let x1: number
@@ -37,6 +37,9 @@
     signDisplay: "exceptZero",
     style: "currency",
   })
+  const newSelfTargetAProps = getContext("newSelfTargetAProps") as (
+    url: string,
+  ) => SelfTargetAProps
   const showColoredRects = getContext("showColoredRects") as Writable<boolean>
   const verticalLineStrokeWidth = 2
 
@@ -153,8 +156,12 @@
 
 {#if index > 0}
   <g
-    on:click={() =>
-      goto(newSelfTargetUrl(`/variables/${leaf.code}/parameters/${date}`))}
+    on:click={() => {
+      const aProps = newSelfTargetAProps(
+        `/variables/${leaf.code}/parameters/${date}`,
+      )
+      goto(aProps.href, { noscroll: aProps["sveltekit:noscroll"] })
+    }}
     transform={x0 < x1
       ? `rotate(180, ${x + width / 2}, ${y + height / 2})`
       : null}
@@ -199,8 +206,12 @@
 
 {#if index > 0}
   <g
-    on:click={() =>
-      goto(newSelfTargetUrl(`/variables/${leaf.code}/parameters/${date}`))}
+    on:click={() => {
+      const aProps = newSelfTargetAProps(
+        `/variables/${leaf.code}/parameters/${date}`,
+      )
+      goto(aProps.href, { noscroll: aProps["sveltekit:noscroll"] })
+    }}
     transform={x0 < x1
       ? `rotate(180, ${x + width / 2}, ${y + height / 2})`
       : null}
diff --git a/src/lib/components/latchkeys/Latchkey.svelte b/src/lib/components/latchkeys/Latchkey.svelte
index 4bebcc166711b0f5672a1b45db586d10fb71ee9f..16e91e11011acc242da22a4362d1569c63f171cb 100644
--- a/src/lib/components/latchkeys/Latchkey.svelte
+++ b/src/lib/components/latchkeys/Latchkey.svelte
@@ -10,7 +10,6 @@
   import AxisY from "./AxisY.svelte"
   import Rows from "./Rows.svelte"
 
-  export let newSelfTargetUrl: (urlPath: string) => string
   export let showNulls: boolean
   export let vectorIndex: number
 
@@ -169,7 +168,7 @@
       {yDomain}
     >
       <Svg>
-        <Rows {newSelfTargetUrl} {vectorIndex} />
+        <Rows {vectorIndex} />
         <AxisX />
         <AxisY gridlines={false} />
       </Svg>
diff --git a/src/lib/components/latchkeys/Rows.svelte b/src/lib/components/latchkeys/Rows.svelte
index 9e4869a406d3cc63e7e9ee9b4c59bf959f2397f6..6ef2084bd0f30556fe3d62256ce09923a9a2d712 100644
--- a/src/lib/components/latchkeys/Rows.svelte
+++ b/src/lib/components/latchkeys/Rows.svelte
@@ -3,7 +3,6 @@
 
   import Arrow from "./Arrow.svelte"
 
-  export let newSelfTargetUrl: (urlPath: string) => string
   export let vectorIndex: number
 
   const { data, xGet, xScale, yGet, yRange, yScale } = getContext("LayerCake")
@@ -41,7 +40,6 @@
       {height}
       {index}
       {item}
-      {newSelfTargetUrl}
       {vectorIndex}
       {x0}
       {x1}
diff --git a/src/lib/components/parameters/ParameterPane.svelte b/src/lib/components/parameters/ParameterPane.svelte
index 6971d46a2165a4bd09f076e93c786bb854e09ea2..13154d4651e4875d73975db1858c65b709744c43 100644
--- a/src/lib/components/parameters/ParameterPane.svelte
+++ b/src/lib/components/parameters/ParameterPane.svelte
@@ -5,7 +5,6 @@
   import { improveParameterWithAncestors } from "$lib/parameters"
 
   export let name: string
-  export let newSelfTargetUrl: (urlPath: string) => string
   // export let pane: string
 
   let parameter: AnyParameter | undefined = undefined
@@ -30,5 +29,5 @@
 </script>
 
 {#if parameter !== undefined}
-  <ParameterView editable={true} {newSelfTargetUrl} {parameter} />
+  <ParameterView editable={true} {parameter} />
 {/if}
diff --git a/src/lib/components/parameters/ParameterView.svelte b/src/lib/components/parameters/ParameterView.svelte
index 27d3c01ce8fb4d866e591e8344ac4b7081e76e12..036fe7b4a86004f4c4908d9bbda36d898c9e5ef6 100644
--- a/src/lib/components/parameters/ParameterView.svelte
+++ b/src/lib/components/parameters/ParameterView.svelte
@@ -5,11 +5,14 @@
   import type { AnyParameter } from "$lib/parameters"
   import { ParameterClass, iterParameterAncestors } from "$lib/parameters"
   import type { Reform } from "$lib/reforms"
+  import type { SelfTargetAProps } from "$lib/urls"
 
   export let editable: boolean
-  export let newSelfTargetUrl: (urlPath: string) => string
   export let parameter: AnyParameter
 
+  const newSelfTargetAProps = getContext("newSelfTargetAProps") as (
+    url: string,
+  ) => SelfTargetAProps
   const reform = getContext("reform") as Writable<Reform>
   const simulationRequested = getContext(
     "simulationRequested",
@@ -53,9 +56,10 @@
 <h1>
   Paramètre
   {#each [...iterParameterAncestors(parameter.parent)] as ancestor}
-    <a class="link" href={newSelfTargetUrl(`/parameters/${ancestor.name}`)}>
-      {ancestor.title}
-    </a>
+    <!-- svelte-ignore a11y-missing-attribute -->
+    <a class="link" {...newSelfTargetAProps(`/parameters/${ancestor.name}`)}
+      >{ancestor.title}</a
+    >
     &gt;
   {/each}
   {parameter.title}
@@ -103,7 +107,8 @@
     <ul class="ml-4">
       {#each Object.entries(parameter.children) as [childId, child]}
         <li class="my-2">
-          <a class="link" href={newSelfTargetUrl(`/parameters/${child.name}`)}>
+          <!-- svelte-ignore a11y-missing-attribute -->
+          <a class="link" {...newSelfTargetAProps(`/parameters/${child.name}`)}>
             {child.title}
           </a>
         </li>
@@ -211,7 +216,8 @@
     <ul class="list-disc list-inside">
       {#each parameter.referring_variables as variableName}
         <li>
-          <a class="link" href={newSelfTargetUrl(`/variables/${variableName}`)}
+          <!-- svelte-ignore a11y-missing-attribute -->
+          <a class="link" {...newSelfTargetAProps(`/variables/${variableName}`)}
             >{variableName}</a
           >
         </li>
diff --git a/src/lib/components/variables/VariablePane.svelte b/src/lib/components/variables/VariablePane.svelte
index 7c8bb811d14a23a9180d1e109e45142a017c1c43..7c9d66cdb5c27c4334ccfbeb0bacf324df902909 100644
--- a/src/lib/components/variables/VariablePane.svelte
+++ b/src/lib/components/variables/VariablePane.svelte
@@ -4,7 +4,6 @@
   import type { Variable } from "$lib/variables"
 
   export let name: string
-  export let newSelfTargetUrl: (urlPath: string) => string
   // export let pane: string
 
   let variable: Variable | undefined = undefined
@@ -28,5 +27,5 @@
 </script>
 
 {#if variable !== undefined}
-  <VariableView editable={true} {newSelfTargetUrl} {variable} />
+  <VariableView editable={true} {variable} />
 {/if}
diff --git a/src/lib/components/variables/VariableReferredInputs.svelte b/src/lib/components/variables/VariableReferredInputs.svelte
index 8a0d903d6043be0b08a378c20a911178e8ec64fa..284e9d4200b0891f4ed07a16da9d941e5167e278 100644
--- a/src/lib/components/variables/VariableReferredInputs.svelte
+++ b/src/lib/components/variables/VariableReferredInputs.svelte
@@ -1,9 +1,15 @@
 <script lang="ts">
+  import { getContext } from "svelte"
+
+  import type { SelfTargetAProps } from "$lib/urls"
   import type { Variable } from "$lib/variables"
 
-  export let newSelfTargetUrl: (urlPath: string) => string
   export let inputs: Variable[]
   export let variable: Variable
+
+  const newSelfTargetAProps = getContext("newSelfTargetAProps") as (
+    url: string,
+  ) => SelfTargetAProps
 </script>
 
 <h1 class="bg-blue-500 text-white">
@@ -22,7 +28,8 @@
   <ul>
     {#each inputs as input}
       <li>
-        <a class="link" href={newSelfTargetUrl(`/variables/${input.name}`)}
+        <!-- svelte-ignore a11y-missing-attribute -->
+        <a class="link" {...newSelfTargetAProps(`/variables/${input.name}`)}
           >{input.name}</a
         >
       </li>
diff --git a/src/lib/components/variables/VariableReferredInputsPane.svelte b/src/lib/components/variables/VariableReferredInputsPane.svelte
index 99f12328d7be605b00edf5249514fe80e9c7d62e..a3867815e5175b3df6ad42ef10845885bdc36ac6 100644
--- a/src/lib/components/variables/VariableReferredInputsPane.svelte
+++ b/src/lib/components/variables/VariableReferredInputsPane.svelte
@@ -5,7 +5,6 @@
 
   export let date: string
   export let name: string
-  export let newSelfTargetUrl: (urlPath: string) => string
   // export let pane: string
 
   let inputs: Variable[] | undefined = undefined
@@ -53,5 +52,5 @@
 </script>
 
 {#if inputs !== undefined && variable !== undefined}
-  <VariableReferredInputs {inputs} {newSelfTargetUrl} {variable} />
+  <VariableReferredInputs {inputs} {variable} />
 {/if}
diff --git a/src/lib/components/variables/VariableReferredNode.svelte b/src/lib/components/variables/VariableReferredNode.svelte
index 62ff34c21fe7dd8a1165a0668a95899abdf3960e..850f1e06efafaabe24ea85b80979b09cd6f40372 100644
--- a/src/lib/components/variables/VariableReferredNode.svelte
+++ b/src/lib/components/variables/VariableReferredNode.svelte
@@ -8,38 +8,26 @@
 
   export let date: string
   export let depth: number
-  export let newSelfTargetUrl: (urlPath: string) => string
   export let parameter: ParameterNode
 </script>
 
 <section>
-  <VariableReferredParameterHeader {depth} {newSelfTargetUrl} {parameter} />
+  <VariableReferredParameterHeader {depth} {parameter} />
 
   {#if parameter.children !== undefined}
     <ul>
       {#each Object.values(parameter.children) as child}
         <li>
           {#if child.class === ParameterClass.Node}
-            <svelte:self
-              {date}
-              depth={depth + 1}
-              {newSelfTargetUrl}
-              parameter={child}
-            />
+            <svelte:self {date} depth={depth + 1} parameter={child} />
           {:else if child.class === ParameterClass.Parameter}
             <VariableReferredParameter
               {date}
               depth={depth + 1}
-              {newSelfTargetUrl}
               parameter={child}
             />
           {:else if child.class === ParameterClass.Scale}
-            <VariableReferredScale
-              {date}
-              depth={depth + 1}
-              {newSelfTargetUrl}
-              parameter={child}
-            />
+            <VariableReferredScale {date} depth={depth + 1} parameter={child} />
           {/if}
         </li>
       {/each}
diff --git a/src/lib/components/variables/VariableReferredParameter.svelte b/src/lib/components/variables/VariableReferredParameter.svelte
index 8abe371a2cf8833983c9213ffeac70366c69d37f..984b643c59e650d3d090c2eb64f31a1863b4db1e 100644
--- a/src/lib/components/variables/VariableReferredParameter.svelte
+++ b/src/lib/components/variables/VariableReferredParameter.svelte
@@ -9,7 +9,6 @@
 
   export let date: string
   export let depth: number
-  export let newSelfTargetUrl: (urlPath: string) => string
   export let parameter: Parameter
 
   let openHistory = false
@@ -50,7 +49,7 @@
 </script>
 
 <section>
-  <VariableReferredParameterHeader {depth} {newSelfTargetUrl} {parameter} />
+  <VariableReferredParameterHeader {depth} {parameter} />
 
   <div
     class="bg-gray-100 flex items-baseline justify-between text-gray-600 text-xs"
diff --git a/src/lib/components/variables/VariableReferredParameterHeader.svelte b/src/lib/components/variables/VariableReferredParameterHeader.svelte
index d3eac3e821fa5451a327f65d192de2108d4c67c3..b614a4248db2bb366639d85ddacc2a3c621b6864 100644
--- a/src/lib/components/variables/VariableReferredParameterHeader.svelte
+++ b/src/lib/components/variables/VariableReferredParameterHeader.svelte
@@ -1,10 +1,16 @@
 <script lang="ts">
+  import { getContext } from "svelte"
+
   import type { AnyParameter } from "$lib/parameters"
   import { iterParameterAncestors } from "$lib/parameters"
+  import type { SelfTargetAProps } from "$lib/urls"
 
   export let depth: number
-  export let newSelfTargetUrl: (urlPath: string) => string
   export let parameter: AnyParameter
+
+  const newSelfTargetAProps = getContext("newSelfTargetAProps") as (
+    url: string,
+  ) => SelfTargetAProps
 </script>
 
 <h1
@@ -16,7 +22,8 @@
 >
   {#if depth === 0}
     {#each [...iterParameterAncestors(parameter.parent)] as ancestor}
-      <a class="link" href={newSelfTargetUrl(`/parameters/${ancestor.name}`)}>
+      <!-- svelte-ignore a11y-missing-attribute -->
+      <a class="link" {...newSelfTargetAProps(`/parameters/${ancestor.name}`)}>
         {ancestor.title}
       </a>
       &gt;
diff --git a/src/lib/components/variables/VariableReferredParameters.svelte b/src/lib/components/variables/VariableReferredParameters.svelte
index b6ac589792f97ff9f44cf6b987296d122273bc62..56c1eb9932b3ed84b3fb65b0c7ba971df3e99347 100644
--- a/src/lib/components/variables/VariableReferredParameters.svelte
+++ b/src/lib/components/variables/VariableReferredParameters.svelte
@@ -12,7 +12,6 @@
   import VariableReferredScale from "./VariableReferredScale.svelte"
 
   export let date: string
-  export let newSelfTargetUrl: (urlPath: string) => string
   export let parameters: AnyParameter[]
   export let variable: Variable
 
@@ -137,26 +136,11 @@
         {#each Object.values(rootDirectParameterById) as parameter}
           <li>
             {#if parameter.class === ParameterClass.Node}
-              <VariableReferredNode
-                {date}
-                depth={0}
-                {newSelfTargetUrl}
-                {parameter}
-              />
+              <VariableReferredNode {date} depth={0} {parameter} />
             {:else if parameter.class === ParameterClass.Parameter}
-              <VariableReferredParameter
-                {date}
-                depth={0}
-                {newSelfTargetUrl}
-                {parameter}
-              />
+              <VariableReferredParameter {date} depth={0} {parameter} />
             {:else if parameter.class === ParameterClass.Scale}
-              <VariableReferredScale
-                {date}
-                depth={0}
-                {newSelfTargetUrl}
-                {parameter}
-              />
+              <VariableReferredScale {date} depth={0} {parameter} />
             {/if}
           </li>
         {/each}
@@ -199,26 +183,11 @@
         {#each Object.values(rootParameterById) as parameter}
           <li>
             {#if parameter.class === ParameterClass.Node}
-              <VariableReferredNode
-                {date}
-                depth={0}
-                {newSelfTargetUrl}
-                {parameter}
-              />
+              <VariableReferredNode {date} depth={0} {parameter} />
             {:else if parameter.class === ParameterClass.Parameter}
-              <VariableReferredParameter
-                {date}
-                depth={0}
-                {newSelfTargetUrl}
-                {parameter}
-              />
+              <VariableReferredParameter {date} depth={0} {parameter} />
             {:else if parameter.class === ParameterClass.Scale}
-              <VariableReferredScale
-                {date}
-                depth={0}
-                {newSelfTargetUrl}
-                {parameter}
-              />
+              <VariableReferredScale {date} depth={0} {parameter} />
             {/if}
           </li>
         {/each}
diff --git a/src/lib/components/variables/VariableReferredParametersPane.svelte b/src/lib/components/variables/VariableReferredParametersPane.svelte
index 43b76f45d70902017f5fa026e45650f70d6a9ff1..aa9f82cd41145b4d5377a5b0447bee50d050e31a 100644
--- a/src/lib/components/variables/VariableReferredParametersPane.svelte
+++ b/src/lib/components/variables/VariableReferredParametersPane.svelte
@@ -7,7 +7,6 @@
 
   export let date: string
   export let name: string
-  export let newSelfTargetUrl: (urlPath: string) => string
   // export let pane: string
 
   let variable: Variable | undefined = undefined
@@ -56,10 +55,5 @@
 </script>
 
 {#if parameters !== undefined && variable !== undefined}
-  <VariableReferredParameters
-    {date}
-    {newSelfTargetUrl}
-    {parameters}
-    {variable}
-  />
+  <VariableReferredParameters {date} {parameters} {variable} />
 {/if}
diff --git a/src/lib/components/variables/VariableReferredScale.svelte b/src/lib/components/variables/VariableReferredScale.svelte
index 9cc55c9bfaf54e70f6753e21a70d130a81ec97a8..749b773394de63d9a81c5e46fc6bf275cfe05bda 100644
--- a/src/lib/components/variables/VariableReferredScale.svelte
+++ b/src/lib/components/variables/VariableReferredScale.svelte
@@ -5,7 +5,6 @@
 
   export let date: string
   export let depth: number
-  export let newSelfTargetUrl: (urlPath: string) => string
   export let parameter: Scale
 
   let openHistory = false
@@ -20,7 +19,7 @@
 </script>
 
 <section>
-  <VariableReferredParameterHeader {depth} {newSelfTargetUrl} {parameter} />
+  <VariableReferredParameterHeader {depth} {parameter} />
   <div class="bg-gray-100 flex items-baseline text-gray-600 text-xs">
     <div class="flex px-1">
       {#if latestBracket === undefined}
diff --git a/src/lib/components/variables/VariableView.svelte b/src/lib/components/variables/VariableView.svelte
index 32ff02596025e174cfd2b873075d1b54d8c1f1c2..af3448f6ca020b6be8608073c5334214be36fa1d 100644
--- a/src/lib/components/variables/VariableView.svelte
+++ b/src/lib/components/variables/VariableView.svelte
@@ -4,13 +4,16 @@
 
   import { pluralByEntityKey } from "$lib/entities"
   import type { SituationComplement, Situation } from "$lib/situations"
+  import type { SelfTargetAProps } from "$lib/urls"
   import type { Variable } from "$lib/variables"
 
   export let editable: boolean
-  export let newSelfTargetUrl: (urlPath: string) => string
   export let variable: Variable
 
   const date = new Date().toISOString().split("T")[0]
+  const newSelfTargetAProps = getContext("newSelfTargetAProps") as (
+    url: string,
+  ) => SelfTargetAProps
   const simulationRequested = getContext(
     "simulationRequested",
   ) as Writable<boolean>
@@ -141,16 +144,18 @@
 
   <section>
     <div>
+      <!-- svelte-ignore a11y-missing-attribute -->
       <a
         class="link"
-        href={newSelfTargetUrl(`/variables/${variable.name}/inputs/${date}`)}
+        {...newSelfTargetAProps(`/variables/${variable.name}/inputs/${date}`)}
         >Variables d'entrée influant sur la formule, à la date du {date}</a
       >
     </div>
     <div>
+      <!-- svelte-ignore a11y-missing-attribute -->
       <a
         class="link"
-        href={newSelfTargetUrl(
+        {...newSelfTargetAProps(
           `/variables/${variable.name}/parameters/${date}`,
         )}>Paramètres influant sur la formule, à la date du {date}</a
       >
diff --git a/src/lib/components/waterfalls/Waterfall.svelte b/src/lib/components/waterfalls/Waterfall.svelte
index acddbe146f788de9c8f82c7471cf06944605fe11..68ac9ab4a1f89c6cef6c3e0f801d6f0cb24f9e42 100644
--- a/src/lib/components/waterfalls/Waterfall.svelte
+++ b/src/lib/components/waterfalls/Waterfall.svelte
@@ -7,16 +7,20 @@
   import { LayerCake, Svg } from "$lib/components/layercake"
   import type { Decomposition } from "$lib/decompositions"
   import { walkDecomposition } from "$lib/decompositions"
+  import type { SelfTargetAProps } from "$lib/urls"
+
   import AxisX from "./AxisX.svelte"
   import AxisY from "./AxisY.svelte"
   import Columns from "./Columns.svelte"
 
-  export let newSelfTargetUrl: (urlPath: string) => string
   export let showNulls: boolean
   export let vectorIndex: number
 
   let adaptYScale = false
   const decomposition = getContext("decomposition") as Writable<Decomposition>
+  const newSelfTargetAProps = getContext("newSelfTargetAProps") as (
+    url: string,
+  ) => SelfTargetAProps
 
   $: data = [...walkDecomposition($decomposition, true, true)].filter(
     ({ delta }) => showNulls || delta.some((deltaItem) => deltaItem !== 0),
@@ -67,7 +71,8 @@
         !node.open,
       )
     }
-    goto(newSelfTargetUrl(`/variables/${node.code}`))
+    const aProps = newSelfTargetAProps(`/variables/${node.code}`)
+    goto(aProps.href, { noscroll: aProps["sveltekit:noscroll"] })
   }
 
   function toggleToNode(
diff --git a/src/lib/urls.ts b/src/lib/urls.ts
index ddb9d60d1dd02ee73ecff118a1db1e5c381351a8..a9e43a3c9e976182110fe7db5827cd845ed4c8ad 100644
--- a/src/lib/urls.ts
+++ b/src/lib/urls.ts
@@ -1,3 +1,16 @@
+export interface SelfTargetAProps {
+  href: string
+  "sveltekit:prefetch"?: boolean
+  "sveltekit:noscroll"?: boolean
+}
+
+export function newSelfTargetAProps(url: string): SelfTargetAProps {
+  return {
+    href: url,
+    "sveltekit:prefetch": true,
+  }
+}
+
 // export function parseQuery(
 //   queryString?: string,
 // ): { [key: string]: string | string[] } {
diff --git a/src/routes/parameters/[parameter].svelte b/src/routes/parameters/[parameter].svelte
index 31bf2ddc269f57fac99b7cbea5363fec334916b5..1878b303c0bb5ef9c938ff4d0b769b9bf6961d9b 100644
--- a/src/routes/parameters/[parameter].svelte
+++ b/src/routes/parameters/[parameter].svelte
@@ -27,11 +27,16 @@
 </script>
 
 <script lang="ts">
+  import { setContext } from "svelte"
+
   import { session } from "$app/stores"
   import ParameterView from "$lib/components/parameters/ParameterView.svelte"
   import type { AnyParameter } from "$lib/parameters"
+  import { newSelfTargetAProps } from "$lib/urls"
 
   export let parameter: AnyParameter
+
+  setContext("newSelfTargetAProps", newSelfTargetAProps)
 </script>
 
 <svelte:head>
@@ -39,5 +44,5 @@
 </svelte:head>
 
 <main>
-  <ParameterView editable={true} newSelfTargetUrl={(url) => url} {parameter} />
+  <ParameterView editable={true} {parameter} />
 </main>
diff --git a/src/routes/variables/[variable]/index.svelte b/src/routes/variables/[variable]/index.svelte
index b991aa97b87527171f9a9de066f814a1c0eaf4dc..a161cb81412992ca50033e75a31f6a5d0dc0b534 100644
--- a/src/routes/variables/[variable]/index.svelte
+++ b/src/routes/variables/[variable]/index.svelte
@@ -24,11 +24,16 @@
 </script>
 
 <script lang="ts">
+  import { setContext } from "svelte"
+
   import { session } from "$app/stores"
   import VariableView from "$lib/components/variables/VariableView.svelte"
+  import { newSelfTargetAProps } from "$lib/urls"
   import type { Variable } from "$lib/variables"
 
   export let variable: Variable
+
+  setContext("newSelfTargetAProps", newSelfTargetAProps)
 </script>
 
 <svelte:head>
@@ -36,5 +41,5 @@
 </svelte:head>
 
 <main>
-  <VariableView editable={true} newSelfTargetUrl={(url) => url} {variable} />
+  <VariableView editable={true} {variable} />
 </main>
diff --git a/src/routes/variables/[variable]/inputs/[date].svelte b/src/routes/variables/[variable]/inputs/[date].svelte
index 154b5bef0754da709499b57c576dc6c1041dc8fd..5aabc155a082778b78f3d87b94f5876a1c130cec 100644
--- a/src/routes/variables/[variable]/inputs/[date].svelte
+++ b/src/routes/variables/[variable]/inputs/[date].svelte
@@ -59,13 +59,18 @@
 </script>
 
 <script lang="ts">
+  import { setContext } from "svelte"
+
   import { page, session } from "$app/stores"
   import VariableReferredInputs from "$lib/components/variables/VariableReferredInputs.svelte"
+  import { newSelfTargetAProps } from "$lib/urls"
   import type { Variable } from "$lib/variables"
 
   export let variable: Variable
   export let inputs: Variable[]
 
+  setContext("newSelfTargetAProps", newSelfTargetAProps)
+
   $: params = $page.params
 
   $: date = params.date
@@ -80,5 +85,5 @@
 </svelte:head>
 
 <main>
-  <VariableReferredInputs {inputs} newSelfTargetUrl={(url) => url} {variable} />
+  <VariableReferredInputs {inputs} {variable} />
 </main>
diff --git a/src/routes/variables/[variable]/parameters/[date].svelte b/src/routes/variables/[variable]/parameters/[date].svelte
index e79afe9c7e03b215941b95598dfba2dfad7a9eb3..0736fc0b9d4936926385d71354506a5fc6a8291b 100644
--- a/src/routes/variables/[variable]/parameters/[date].svelte
+++ b/src/routes/variables/[variable]/parameters/[date].svelte
@@ -64,14 +64,19 @@
 </script>
 
 <script lang="ts">
+  import { setContext } from "svelte"
+
   import { page, session } from "$app/stores"
   import VariableReferredParameters from "$lib/components/variables/VariableReferredParameters.svelte"
   import type { AnyParameter } from "$lib/parameters"
+  import { newSelfTargetAProps } from "$lib/urls"
   import type { Variable } from "$lib/variables"
 
   export let parameters: AnyParameter[]
   export let variable: Variable
 
+  setContext("newSelfTargetAProps", newSelfTargetAProps)
+
   $: params = $page.params
 
   $: date = params.date
@@ -86,10 +91,5 @@
 </svelte:head>
 
 <main>
-  <VariableReferredParameters
-    {date}
-    newSelfTargetUrl={(url) => url}
-    {parameters}
-    {variable}
-  />
+  <VariableReferredParameters {date} {parameters} {variable} />
 </main>