diff --git a/typo3/sysext/backend/Classes/Controller/Page/TreeController.php b/typo3/sysext/backend/Classes/Controller/Page/TreeController.php
index 0ef009119105e0685607c2ff61d87bfbf3367889..bf3e79d6b83b3462430fd27188796697f4e28b79 100644
--- a/typo3/sysext/backend/Classes/Controller/Page/TreeController.php
+++ b/typo3/sysext/backend/Classes/Controller/Page/TreeController.php
@@ -123,6 +123,9 @@ class TreeController
 
     protected UriBuilder $uriBuilder;
 
+    protected PageTreeRepository $pageTreeRepository;
+    protected bool $userHasAccessToModifyPagesAndToDefaultLanguage = false;
+
     /**
      * Constructor to set up common objects needed in various places.
      */
@@ -164,6 +167,7 @@ class TreeController
             $stateHash = $backendUserPageTreeState['stateHash'] ?? [];
             $this->expandedState = is_array($stateHash) ? $stateHash : [];
         }
+        $this->userHasAccessToModifyPagesAndToDefaultLanguage = $this->getBackendUser()->check('tables_modify', 'pages') && $this->getBackendUser()->checkLanguageAccess(0);
     }
 
     /**
@@ -268,14 +272,15 @@ class TreeController
             $parentDepth = (int)($request->getQueryParams()['pidDepth'] ?? 0);
             $this->levelsToFetch = $parentDepth + $this->levelsToFetch;
             foreach ($entryPoints as $page) {
-                $items = array_merge($items, $this->pagesToFlatArray($page, $mountPid, $parentDepth));
+                $items[] = $this->pagesToFlatArray($page, $mountPid, $parentDepth);
             }
         } else {
             $entryPoints = $this->getAllEntryPointPageTrees();
             foreach ($entryPoints as $page) {
-                $items = array_merge($items, $this->pagesToFlatArray($page, (int)$page['uid']));
+                $items[] = $this->pagesToFlatArray($page, (int)$page['uid']);
             }
         }
+        $items = array_merge(...$items);
 
         return new JsonResponse($items);
     }
@@ -301,9 +306,10 @@ class TreeController
 
         foreach ($entryPoints as $page) {
             if (!empty($page)) {
-                $items = array_merge($items, $this->pagesToFlatArray($page, (int)$page['uid']));
+                $items[] = $this->pagesToFlatArray($page, (int)$page['uid']);
             }
         }
+        $items = array_merge(...$items);
 
         return new JsonResponse($items);
     }
@@ -411,15 +417,13 @@ class TreeController
             'siblingsCount' => $page['siblingsCount'] ?? 1,
             'siblingsPosition' => $page['siblingsPosition'] ?? 1,
             'allowDelete' => $backendUser->doesUserHaveAccess($page, Permission::PAGE_DELETE),
-            'allowEdit' => $backendUser->doesUserHaveAccess($page, Permission::PAGE_EDIT)
-                && $backendUser->check('tables_modify', 'pages')
-                && $backendUser->checkLanguageAccess(0),
+            'allowEdit' => $this->userHasAccessToModifyPagesAndToDefaultLanguage && $backendUser->doesUserHaveAccess($page, Permission::PAGE_EDIT),
         ];
 
-        if (!empty($page['_children']) || $this->getPageTreeRepository()->hasChildren($pageId)) {
+        if (!empty($page['_children']) || $this->pageTreeRepository->hasChildren($pageId)) {
             $item['hasChildren'] = true;
             if ($depth >= $this->levelsToFetch) {
-                $page = $this->getPageTreeRepository()->getTreeLevels($page, 1);
+                $page = $this->pageTreeRepository->getTreeLevels($page, 1);
             }
         }
         if (!empty($prefix)) {
@@ -435,13 +439,13 @@ class TreeController
             $item['overlayIcon'] = $icon->getOverlayIcon()->getIdentifier();
         }
         if ($expanded && is_array($page['_children']) && !empty($page['_children'])) {
-            $item['expanded'] = $expanded;
+            $item['expanded'] = true;
         }
         if ($backgroundColor) {
             $item['backgroundColor'] = htmlspecialchars($backgroundColor);
         }
         if ($stopPageTree) {
-            $item['stopPageTree'] = $stopPageTree;
+            $item['stopPageTree'] = true;
         }
         $class = $this->resolvePageCssClassNames($page);
         if (!empty($class)) {
@@ -469,14 +473,14 @@ class TreeController
         return $items;
     }
 
-    protected function getPageTreeRepository(): PageTreeRepository
+    protected function initializePageTreeRepository(): PageTreeRepository
     {
         $backendUser = $this->getBackendUser();
         $userTsConfig = $backendUser->getTSConfig();
         $excludedDocumentTypes = GeneralUtility::intExplode(',', $userTsConfig['options.']['pageTree.']['excludeDoktypes'] ?? '', true);
 
         $additionalQueryRestrictions = [];
-        if (!empty($excludedDocumentTypes)) {
+        if ($excludedDocumentTypes !== []) {
             $additionalQueryRestrictions[] = GeneralUtility::makeInstance(DocumentTypeExclusionRestriction::class, $excludedDocumentTypes);
         }
 
@@ -497,6 +501,7 @@ class TreeController
      */
     protected function getAllEntryPointPageTrees(int $startPid = 0, string $query = ''): array
     {
+        $this->pageTreeRepository ??= $this->initializePageTreeRepository();
         $backendUser = $this->getBackendUser();
         if ($startPid === 0) {
             $startPid = (int)($backendUser->uc['pageTree_temporaryMountPoint'] ?? 0);
@@ -509,11 +514,10 @@ class TreeController
             $entryPointIds = $this->alternativeEntryPoints;
         }
 
-        $repository = $this->getPageTreeRepository();
         $permClause = $backendUser->getPagePermsClause(Permission::PAGE_SHOW);
         if ($query !== '') {
             $this->levelsToFetch = 999;
-            $repository->fetchFilteredTree(
+            $this->pageTreeRepository->fetchFilteredTree(
                 $query,
                 $this->getAllowedMountPoints(),
                 $permClause
@@ -540,9 +544,9 @@ class TreeController
 
         if ($entryPointIds === null) {
             if ($query !== '') {
-                $rootRecord = $repository->getTree(0, null, $mountPoints, true);
+                $rootRecord = $this->pageTreeRepository->getTree(0, null, $mountPoints, true);
             } else {
-                $rootRecord = $repository->getTreeLevels($rootRecord, $this->levelsToFetch, $mountPoints);
+                $rootRecord = $this->pageTreeRepository->getTreeLevels($rootRecord, $this->levelsToFetch, $mountPoints);
             }
 
             $mountPointOrdering = array_flip($mountPoints);
@@ -572,9 +576,9 @@ class TreeController
 
                 $entryPointRecord['uid'] = (int)$entryPointRecord['uid'];
                 if ($query === '') {
-                    $entryPointRecord = $repository->getTreeLevels($entryPointRecord, $this->levelsToFetch);
+                    $entryPointRecord = $this->pageTreeRepository->getTreeLevels($entryPointRecord, $this->levelsToFetch);
                 } else {
-                    $entryPointRecord = $repository->getTree($entryPointRecord['uid'], null, $entryPointIds, true);
+                    $entryPointRecord = $this->pageTreeRepository->getTree($entryPointRecord['uid'], null, $entryPointIds, true);
                 }
 
                 if (is_array($entryPointRecord) && !empty($entryPointRecord)) {
@@ -588,7 +592,7 @@ class TreeController
 
     protected function calculateBackgroundColors(array $pageIds)
     {
-        foreach ($pageIds as $k => $pageId) {
+        foreach ($pageIds as $pageId) {
             if (!empty($this->backgroundColors) && is_array($this->backgroundColors)) {
                 try {
                     $entryPointRootLine = GeneralUtility::makeInstance(RootlineUtility::class, $pageId)->get();