diff --git a/Build/Sources/Sass/component/_treelist.scss b/Build/Sources/Sass/component/_treelist.scss
index d986bcb2bdd51b96571cbfb324a920f8705b6174..941f2b8b9373aaa5279c77850803cad810f2631a 100644
--- a/Build/Sources/Sass/component/_treelist.scss
+++ b/Build/Sources/Sass/component/_treelist.scss
@@ -205,14 +205,6 @@
     typo3-backend-icon {
         --icon-color-primary: var(--treelist-color);
     }
-
-    &[aria-expanded="true"] typo3-backend-icon[identifier="actions-chevron-right"] {
-        display: none;
-    }
-
-    &[aria-expanded="false"] typo3-backend-icon[identifier="actions-chevron-down"] {
-        display: none;
-    }
 }
 
 .treelist-root {
diff --git a/Build/Sources/TypeScript/backend/tree/tree-node-toggle.ts b/Build/Sources/TypeScript/backend/tree/tree-node-toggle.ts
new file mode 100644
index 0000000000000000000000000000000000000000..45a4cebca6d395a78a68cb538b6457fb0f1f1a52
--- /dev/null
+++ b/Build/Sources/TypeScript/backend/tree/tree-node-toggle.ts
@@ -0,0 +1,31 @@
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+import { customElement, property } from 'lit/decorators';
+import { html, LitElement, TemplateResult } from 'lit';
+import '@typo3/backend/element/icon-element';
+
+@customElement('typo3-backend-tree-node-toggle')
+export default class TreeNodeToggle extends LitElement {
+  @property({ type: String, reflect: true, attribute: 'aria-expanded' }) expanded: string = 'false';
+
+  public render(): TemplateResult | symbol {
+    return html`<typo3-backend-icon size="small" identifier="${this.expanded === 'true' ? 'actions-chevron-down' : 'actions-chevron-right'}"></typo3-backend-icon>`;
+  }
+}
+
+declare global {
+  interface HTMLElementTagNameMap {
+    'typo3-backend-tree-node-toggle': TreeNodeToggle;
+  }
+}
diff --git a/typo3/sysext/backend/Resources/Private/Templates/PageTsConfig/Active.html b/typo3/sysext/backend/Resources/Private/Templates/PageTsConfig/Active.html
index 1d6f1ecb5a45a5cb053c5286e9c7d780a0234683..944911236ff79c6da5e2ad393fca3f6d59f11f2d 100644
--- a/typo3/sysext/backend/Resources/Private/Templates/PageTsConfig/Active.html
+++ b/typo3/sysext/backend/Resources/Private/Templates/PageTsConfig/Active.html
@@ -12,7 +12,7 @@
         includeJavaScriptModules="{
             0: '@typo3/backend/context-menu.js',
             1: '@typo3/backend/element/immediate-action-element.js',
-            2: '@typo3/backend/element/icon-element.js',
+            2: '@typo3/backend/tree/tree-node-toggle.js',
             3: '@typo3/backend/utility/collapse-state-persister.js',
             4: '@typo3/backend/utility/collapse-state-search.js'
         }"
@@ -361,15 +361,12 @@
         </f:if>
         <li>
             <f:if condition="{child.children}">
-                <a
+                <typo3-backend-tree-node-toggle
                     class="treelist-control collapsed"
                     data-bs-toggle="collapse"
                     data-bs-target="#collapse-list-{child.identifier}"
-                    aria-expanded="false"
-                >
-                    <typo3-backend-icon size="small" identifier="actions-chevron-right"></typo3-backend-icon>
-                    <typo3-backend-icon size="small" identifier="actions-chevron-down"></typo3-backend-icon>
-                </a>
+                    aria-expanded="false">
+                </typo3-backend-tree-node-toggle>
             </f:if>
             <span class="treelist-group treelist-group-monospace">
                 <span class="treelist-label">{child.name}</span>
diff --git a/typo3/sysext/backend/Resources/Private/Templates/PageTsConfig/Includes.html b/typo3/sysext/backend/Resources/Private/Templates/PageTsConfig/Includes.html
index 70823655f610e752b3c3a6dc3e2ea4e8dcba5b76..733809b9bc5adb09709c6e70938d88f0e356d24c 100644
--- a/typo3/sysext/backend/Resources/Private/Templates/PageTsConfig/Includes.html
+++ b/typo3/sysext/backend/Resources/Private/Templates/PageTsConfig/Includes.html
@@ -12,7 +12,7 @@
         includeJavaScriptModules="{
             0: '@typo3/backend/context-menu.js',
             1: '@typo3/backend/element/immediate-action-element.js',
-            2: '@typo3/backend/element/icon-element.js',
+            2: '@typo3/backend/tree/tree-node-toggle.js',
             3: '@typo3/backend/utility/collapse-state-persister.js',
             4: '@typo3/backend/pagetsconfig/pagetsconfig-includes.js'
         }"
@@ -113,15 +113,12 @@
         <f:for each="{tree.nextChild}" as="child">
             <li>
                 <f:if condition="{child.children}">
-                    <a
+                    <typo3-backend-tree-node-toggle
                         class="treelist-control treelist-control-collapsed"
                         data-bs-toggle="collapse"
                         data-bs-target="#collapse-list-{child.identifier}"
-                        aria-expanded="false"
-                    >
-                        <typo3-backend-icon size="small" identifier="actions-chevron-down"></typo3-backend-icon>
-                        <typo3-backend-icon size="small" identifier="actions-chevron-right"></typo3-backend-icon>
-                    </a>
+                        aria-expanded="false">
+                    </typo3-backend-tree-node-toggle>
                 </f:if>
                 <div class="row justify-content-between">
                     <div class="col">
diff --git a/typo3/sysext/backend/Resources/Public/Css/backend.css b/typo3/sysext/backend/Resources/Public/Css/backend.css
index 916fbf18b131d17682207ff77516fd610888ecd3..9ad4f9ae91b560bdb7fd4ac40a4d3641bd086a3c 100644
--- a/typo3/sysext/backend/Resources/Public/Css/backend.css
+++ b/typo3/sysext/backend/Resources/Public/Css/backend.css
@@ -3840,8 +3840,6 @@ typo3-backend-live-search-result-item-action>* .livesearch-result-item-title .sm
 .treelist-control:before,.treelist-control:target:before{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:var(--treelist-control-size);height:var(--treelist-control-size);background-color:var(--treelist-bg)}
 .treelist-control:active,.treelist-control:focus,.treelist-control:hover{cursor:pointer;outline:0;text-decoration:none}
 .treelist-control typo3-backend-icon{--icon-color-primary:var(--treelist-color)}
-.treelist-control[aria-expanded=true] typo3-backend-icon[identifier=actions-chevron-right]{display:none}
-.treelist-control[aria-expanded=false] typo3-backend-icon[identifier=actions-chevron-down]{display:none}
 .treelist-root{padding-left:0}
 .treelist-root:before{display:none}
 .treelist-root>li{padding-left:var(--treelist-control-size)}
diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/tree/tree-node-toggle.js b/typo3/sysext/backend/Resources/Public/JavaScript/tree/tree-node-toggle.js
new file mode 100644
index 0000000000000000000000000000000000000000..d486a2925111ec49efd943dd2f7aef3e4c91c0a2
--- /dev/null
+++ b/typo3/sysext/backend/Resources/Public/JavaScript/tree/tree-node-toggle.js
@@ -0,0 +1,13 @@
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+var __decorate=function(e,t,o,r){var n,c=arguments.length,d=c<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,o):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)d=Reflect.decorate(e,t,o,r);else for(var l=e.length-1;l>=0;l--)(n=e[l])&&(d=(c<3?n(d):c>3?n(t,o,d):n(t,o))||d);return c>3&&d&&Object.defineProperty(t,o,d),d};import{customElement,property}from"lit/decorators.js";import{html,LitElement}from"lit";import"@typo3/backend/element/icon-element.js";let TreeNodeToggle=class extends LitElement{constructor(){super(...arguments),this.expanded="false"}render(){return html`<typo3-backend-icon size="small" identifier="${"true"===this.expanded?"actions-chevron-down":"actions-chevron-right"}"></typo3-backend-icon>`}};__decorate([property({type:String,reflect:!0,attribute:"aria-expanded"})],TreeNodeToggle.prototype,"expanded",void 0),TreeNodeToggle=__decorate([customElement("typo3-backend-tree-node-toggle")],TreeNodeToggle);export default TreeNodeToggle;
\ No newline at end of file
diff --git a/typo3/sysext/core/Tests/Acceptance/Application/Template/TemplateCest.php b/typo3/sysext/core/Tests/Acceptance/Application/Template/TemplateCest.php
index ca0210bf89d9d7592b69380abfac290a69dea902..72958ccd2fd1cf94401875b734f14e458de78274 100644
--- a/typo3/sysext/core/Tests/Acceptance/Application/Template/TemplateCest.php
+++ b/typo3/sysext/core/Tests/Acceptance/Application/Template/TemplateCest.php
@@ -108,10 +108,10 @@ final class TemplateCest
         $I->waitForText('Setup');
         // find and open page in tree
         $I->waitForText('page = PAGE');
-        $I->click('//span[@class="treelist-label"]/a[text()=\'page\']/../../../a');
+        $I->click('//span[@class="treelist-label"]/a[text()=\'page\']/../../../typo3-backend-tree-node-toggle');
         // find and open page.10 in tree
         $I->waitForText('10 = TEXT');
-        $I->click('//span[@class="treelist-label"]/a[text()=\'page\']/../../../div/ul//span[@class="treelist-label"]/a[text()=\'10\']/../../../a');
+        $I->click('//span[@class="treelist-label"]/a[text()=\'page\']/../../../div/ul//span[@class="treelist-label"]/a[text()=\'10\']/../../../typo3-backend-tree-node-toggle');
         // find and edit page.10.value in tree
         $I->waitForText('value = Hello Acceptance Test!');
         $I->click('//span[@class="treelist-label"]/a[text()=\'10\']/../../../div/ul//span[@class="treelist-label"]/a[text()=\'value\']');
diff --git a/typo3/sysext/lowlevel/Classes/Controller/ConfigurationController.php b/typo3/sysext/lowlevel/Classes/Controller/ConfigurationController.php
index 7c73156fcfec600e42a861d726912e26c886c2d4..cf95cd8c79eafad879cd95ee17624f246a3c55cc 100644
--- a/typo3/sysext/lowlevel/Classes/Controller/ConfigurationController.php
+++ b/typo3/sysext/lowlevel/Classes/Controller/ConfigurationController.php
@@ -101,10 +101,13 @@ final class ConfigurationController
             $newIdentifier = '';
             if ($isValueIterable && !empty($value)) {
                 $newIdentifier = hash('xxh3', $incomingIdentifier . $key);
-                $html .= '<a class="treelist-control collapsed" data-bs-toggle="collapse" data-bs-target="#collapse-list-' . $newIdentifier . '" aria-expanded="false">' .
-                    '<typo3-backend-icon size="small" identifier="actions-chevron-right"></typo3-backend-icon>' .
-                    '<typo3-backend-icon size="small" identifier="actions-chevron-down"></typo3-backend-icon>' .
-                    '</a>';
+                $html .= '
+                    <typo3-backend-tree-node-toggle
+                        class="treelist-control collapsed"
+                        data-bs-toggle="collapse"
+                        data-bs-target="#collapse-list-' . $newIdentifier . '"
+                        aria-expanded="false">
+                    </typo3-backend-tree-node-toggle>';
             }
             $html .= '<span class="treelist-group treelist-group-monospace">';
             $html .= '<span class="treelist-label">' . htmlspecialchars((string)$key) . '</span>';
diff --git a/typo3/sysext/lowlevel/Resources/Private/Templates/Configuration.html b/typo3/sysext/lowlevel/Resources/Private/Templates/Configuration.html
index dac60a5038bce58d872e4e3f55d763cddfec37e3..6c347010ba5678da8412a0813b89a72121c44668 100644
--- a/typo3/sysext/lowlevel/Resources/Private/Templates/Configuration.html
+++ b/typo3/sysext/lowlevel/Resources/Private/Templates/Configuration.html
@@ -10,7 +10,7 @@
 
     <f:be.pageRenderer
         includeJavaScriptModules="{
-            0: '@typo3/backend/element/icon-element.js',
+            0: '@typo3/backend/tree/tree-node-toggle.js',
             1: '@typo3/backend/utility/collapse-state-persister.js',
             2: '@typo3/backend/utility/collapse-state-search.js'
         }"
diff --git a/typo3/sysext/tstemplate/Resources/Private/Partials/ActiveTree.html b/typo3/sysext/tstemplate/Resources/Private/Partials/ActiveTree.html
index 0f63168a145448d4add75c0480768cb348d20609..d9d3faa0658f062312bcd2ac930814e1795d5838 100644
--- a/typo3/sysext/tstemplate/Resources/Private/Partials/ActiveTree.html
+++ b/typo3/sysext/tstemplate/Resources/Private/Partials/ActiveTree.html
@@ -31,15 +31,12 @@
     </f:if>
     <li>
         <f:if condition="{child.children}">
-            <a
+            <typo3-backend-tree-node-toggle
                 class="treelist-control collapsed"
                 data-bs-toggle="collapse"
                 data-bs-target="#collapse-list-{child.identifier}"
-                aria-expanded="false"
-            >
-                <typo3-backend-icon size="small" identifier="actions-chevron-right"></typo3-backend-icon>
-                <typo3-backend-icon size="small"identifier="actions-chevron-down"></typo3-backend-icon>
-            </a>
+                aria-expanded="false">
+            </typo3-backend-tree-node-toggle>
         </f:if>
         <span class="treelist-group treelist-group-monospace">
 
diff --git a/typo3/sysext/tstemplate/Resources/Private/Partials/AnalyzerTree.html b/typo3/sysext/tstemplate/Resources/Private/Partials/AnalyzerTree.html
index 5618f9ab7e92cd130cfa138bbb974c0e875c3c47..0737c03e0e0668741cbf9cd90427921a2d1a2c6d 100644
--- a/typo3/sysext/tstemplate/Resources/Private/Partials/AnalyzerTree.html
+++ b/typo3/sysext/tstemplate/Resources/Private/Partials/AnalyzerTree.html
@@ -7,7 +7,7 @@
 
 <f:be.pageRenderer
     includeJavaScriptModules="{
-        0: '@typo3/backend/element/icon-element.js',
+        0: '@typo3/backend/tree/tree-node-toggle.js',
         1: '@typo3/backend/utility/collapse-state-persister.js'
     }"
 />
@@ -18,15 +18,12 @@
     <f:for each="{tree.nextChild}" as="child">
         <li>
             <f:if condition="{child.children}">
-                <a
+                <typo3-backend-tree-node-toggle
                     class="treelist-control treelist-control-collapsed"
                     data-bs-toggle="collapse"
                     data-bs-target="#collapse-list-{child.identifier}"
-                    aria-expanded="false"
-                >
-                    <typo3-backend-icon size="small" identifier="actions-chevron-down"></typo3-backend-icon>
-                    <typo3-backend-icon size="small" identifier="actions-chevron-right"></typo3-backend-icon>
-                </a>
+                    aria-expanded="false">
+                </typo3-backend-tree-node-toggle>
             </f:if>
             <div class="row justify-content-between">
                 <div class="col">
diff --git a/typo3/sysext/tstemplate/Resources/Private/Templates/ActiveMain.html b/typo3/sysext/tstemplate/Resources/Private/Templates/ActiveMain.html
index 92ad7746e8842a0c8b3952c44a7ed73c79297ede..6110a25bcb7c6106bbbcfdd6244a9d3b49cd5645 100644
--- a/typo3/sysext/tstemplate/Resources/Private/Templates/ActiveMain.html
+++ b/typo3/sysext/tstemplate/Resources/Private/Templates/ActiveMain.html
@@ -10,7 +10,7 @@
         includeJavaScriptModules="{
             0: '@typo3/backend/context-menu.js',
             1: '@typo3/backend/element/immediate-action-element.js',
-            3: '@typo3/backend/element/icon-element.js',
+            3: '@typo3/backend/tree/tree-node-toggle.js',
             4: '@typo3/backend/utility/collapse-state-persister.js',
             5: '@typo3/backend/utility/collapse-state-search.js'
         }"