diff --git a/typo3/sysext/core/Classes/Page/PageLayoutResolver.php b/typo3/sysext/core/Classes/Page/PageLayoutResolver.php
index df7c330eb4a395256f46fa0ec56c13e8ebf3d8a0..1d5189179514048935243d90aa713f4487e944ff 100644
--- a/typo3/sysext/core/Classes/Page/PageLayoutResolver.php
+++ b/typo3/sysext/core/Classes/Page/PageLayoutResolver.php
@@ -131,4 +131,13 @@ class PageLayoutResolver
         }
         return $selectedLayout;
     }
+
+    public function getLayoutIdentifierForPageWithoutPrefix(array $page, array $rootLine): string
+    {
+        $selectedLayout = $this->getLayoutIdentifierForPage($page, $rootLine);
+        if (str_contains($selectedLayout, '__')) {
+            return explode('__', $selectedLayout, 2)[1] ?? '';
+        }
+        return $selectedLayout;
+    }
 }
diff --git a/typo3/sysext/core/Documentation/Changelog/13.1/Feature-103504-NewContentObjectPageView.rst b/typo3/sysext/core/Documentation/Changelog/13.1/Feature-103504-NewContentObjectPageView.rst
new file mode 100644
index 0000000000000000000000000000000000000000..0c5ac05ba73a43559577811199b9b956553201d1
--- /dev/null
+++ b/typo3/sysext/core/Documentation/Changelog/13.1/Feature-103504-NewContentObjectPageView.rst
@@ -0,0 +1,153 @@
+.. include:: /Includes.rst.txt
+
+.. _feature-103504-1712041725:
+
+=============================================
+Feature: #103504 - New ContentObject PAGEVIEW
+=============================================
+
+See :issue:`103504`
+
+Description
+===========
+
+A new Content Object for TypoScript :typoscript:`PAGEVIEW` has been added.
+
+This cObject is mainly intended for rendering a full page in the TYPO3 Frontend
+with fewer configuration options over the generic :typoscript:`FLUIDTEMPLATE`
+cObject.
+
+A basic usage of the :typoscript:`PAGEVIEW` cObject is as follows:
+
+.. code-block:: typoscript
+
+    page = PAGE
+    page.10 = PAGEVIEW
+    page.10.paths.100 = EXT:mysite/Resources/Private/Templates/
+
+:typoscript:`PAGEVIEW` wires certain parts automatically:
+
+1. The name of the used page layout (Backend Layout) is resolved automatically.
+
+If a page has a layout named "with_sidebar", the template file is then resolved
+to :file:`EXT:mysite/Resources/Private/Templates/Pages/With_sidebar.html`.
+
+2. Fluid features for Layouts and Partials are wired automatically, thus they
+can be placed into :file:`EXT:mysite/Resources/Private/Templates/Layouts/`
+and :file:`EXT:mysite/Resources/Private/Templates/Partials/`.
+
+In order to reduce the burdon for integrators, the folder names for "pages",
+"layouts" and "partials" can start with lower-case or upper-case.
+
+3. Default variables are available in the Fluid template:
+
+- :typoscript:`settings` - contains all TypoScript settings (= Constants)
+- :typoscript:`site` - the current Site object
+- :typoscript:`language` - the current Site Language object
+- :typoscript:`page` - the current Page record as object
+
+There is no special Extbase resolving done for the templates.
+
+Before
+------
+
+.. code-block:: typoscript
+
+    page = PAGE
+    page {
+        10 = FLUIDTEMPLATE
+        10 {
+            templateName = TEXT
+            templateName {
+                stdWrap {
+                    cObject = TEXT
+                    cObject {
+                        data = levelfield:-2, backend_layout_next_level, slide
+                        override {
+                            field = backend_layout
+                        }
+                        split {
+                            token = pagets__
+                            1 {
+                                current = 1
+                                wrap = |
+                            }
+                        }
+                    }
+                    ifEmpty = Standard
+                }
+            }
+
+            templateRootPaths {
+                100 = {$plugin.tx_mysite.paths.templates}
+            }
+
+            partialRootPaths {
+                100 = {$plugin.tx_mysite.paths.partials}
+            }
+
+            layoutRootPaths {
+                100 = {$plugin.tx_mysite.paths.layouts}
+            }
+
+            variables {
+                pageUid = TEXT
+                pageUid.data = page:uid
+
+                pageTitle = TEXT
+                pageTitle.data = page:title
+
+                pageSubtitle = TEXT
+                pageSubtitle.data = page:subtitle
+
+                parentPageTitle = TEXT
+                parentPageTitle.data = levelfield:-1:title
+            }
+
+            dataProcessing {
+                10 = menu
+                10.as = mainMenu
+            }
+        }
+    }
+
+After
+-----
+
+.. code-block:: typoscript
+
+    page = PAGE
+    page {
+        10 = PAGEVIEW
+        10 {
+            paths {
+                100 = {$plugin.tx_mysite.paths.templates}
+            }
+            variables {
+                parentPageTitle = TEXT
+                parentPageTitle.data = levelfield:-1:title
+            }
+            dataProcessing {
+                10 = menu
+                10.as = mainMenu
+            }
+        }
+    }
+
+In Fluid, the pageUid is available as :html:`{page.uid}` and pageTitle
+as :html:`{page.title}`.
+
+Impact
+======
+
+Creating new page templates based on Fluid follows conventions in order to
+reduce the amount of TypoScript needed to render a page in the TYPO3 Frontend.
+
+Sane defaults are applied, variables and settings are available at any time.
+
+.. note::
+
+    This cObject is marked as experimental until TYPO3 v13 LTS as some
+    functionality will be added.
+
+.. index:: TypoScript, ext:frontend
diff --git a/typo3/sysext/frontend/Classes/ContentObject/PageViewContentObject.php b/typo3/sysext/frontend/Classes/ContentObject/PageViewContentObject.php
new file mode 100644
index 0000000000000000000000000000000000000000..01116c70bb2b208f3bc59cfed9ed80826c290a67
--- /dev/null
+++ b/typo3/sysext/frontend/Classes/ContentObject/PageViewContentObject.php
@@ -0,0 +1,194 @@
+<?php
+
+declare(strict_types=1);
+
+/*
+ * 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!
+ */
+
+namespace TYPO3\CMS\Frontend\ContentObject;
+
+use TYPO3\CMS\Core\Domain\Page;
+use TYPO3\CMS\Core\Page\PageLayoutResolver;
+use TYPO3\CMS\Core\TypoScript\TypoScriptService;
+use TYPO3\CMS\Fluid\View\StandaloneView;
+use TYPO3\CMS\Frontend\ContentObject\Exception\ContentRenderingException;
+
+/**
+ * PAGEVIEW Content Object.
+ *
+ * Built to render a full page with Fluid, and does the following
+ * - uses the template from the given Page Layout / Backend Layout of the current page in a folder "pages/mylayout.html"
+ * - paths are resolved from "paths." configuration
+ * - automatically adds templateRootPaths to the layoutRootPaths and partialRootPaths as well with a suffix "layouts/" and "partials/"
+ * - injects pageInformation, site and siteLanguage (= language) as variables by default
+ * - adds all page settings (= TypoScript constants) into the settings variable of the View
+ *
+ * In contrast to FLUIDTEMPLATE, by design this cObject
+ * - does not handle custom layoutRootPaths and partialRootPaths
+ * - does not handle Extbase specialities
+ * - does not handle HeaderAssets and FooterAssets
+ * - does not handle "templateName.", "template." and "file." resolving from cObject
+ *
+ * @internal this cObject is considered experimental until TYPO3 v13 LTS
+ */
+class PageViewContentObject extends AbstractContentObject
+{
+    protected array $reservedVariables = ['site', 'language', 'page'];
+
+    public function __construct(
+        protected readonly ContentDataProcessor $contentDataProcessor,
+        protected readonly StandaloneView $view,
+        protected readonly TypoScriptService $typoScriptService,
+        protected readonly PageLayoutResolver $pageLayoutResolver,
+    ) {}
+
+    /**
+     * Rendering the cObject, PAGEVIEW
+     *
+     * Configuration properties:
+     *  - paths array to template files
+     *  - variables array of cObjects, the keys are the variable names in fluid
+     *  - dataProcessing array of data processors which are classes to manipulate $data
+     *
+     * Example:
+     * page.10 = PAGEVIEW
+     * page.10.paths.10 = EXT:site_configuration/Resources/Private/Templates/
+     * page.10.variables {
+     *   mylabel = TEXT
+     *   mylabel.value = Label from TypoScript
+     * }
+     *
+     * @param array $conf Array of TypoScript properties
+     * @return string The HTML output
+     */
+    public function render($conf = []): string
+    {
+        if (!is_array($conf)) {
+            $conf = [];
+        }
+        $this->view->setRequest($this->request);
+
+        $this->setTemplate($conf);
+        $this->assignSettings();
+        $variables = $this->getContentObjectVariables($conf);
+        $variables = $this->contentDataProcessor->process($this->cObj, $conf, $variables);
+
+        $this->view->assignMultiple($variables);
+
+        return $this->view->render();
+    }
+
+    protected function setTemplate(array $conf): void
+    {
+        if (is_array($conf['paths.'] ?? false) && $conf['paths.'] !== []) {
+            $this->view->setTemplateRootPaths($conf['paths.']);
+            $this->setLayoutPaths();
+            $this->setPartialPaths();
+        }
+        // Fetch the Fluid template by the name of the Page Layout and underneath "Pages"
+        $pageInformationObject = $this->request->getAttribute('frontend.page.information');
+        $pageLayoutName = $this->pageLayoutResolver->getLayoutIdentifierForPageWithoutPrefix(
+            $pageInformationObject->getPageRecord(),
+            $pageInformationObject->getRootLine()
+        );
+
+        $this->view->getRenderingContext()->setControllerAction($pageLayoutName);
+        $this->view->getRenderingContext()->setControllerName('pages');
+        // Also allow an upper case folder as fallback
+        if (!$this->view->hasTemplate()) {
+            $this->view->getRenderingContext()->setControllerName('Pages');
+        }
+        // If template still does not exist, rendering is not possible.
+        if (!$this->view->hasTemplate()) {
+            $configuredTemplateRootPaths = implode(', ', $this->view->getTemplateRootPaths());
+            throw new ContentRenderingException(
+                'Could not find template source for "pages/' . $pageLayoutName . '".'
+                . ' Configured templateRootPaths: ' . $configuredTemplateRootPaths,
+                1711797936
+            );
+        }
+    }
+
+    /**
+     * Set layout root paths from the template paths
+     */
+    protected function setLayoutPaths(): void
+    {
+        // Define the default root paths to be located in the base paths under "layouts/" subfolder
+        // Handle unix paths to allow upper-case folders as well
+        $templateRootPathsLowerCase = array_map(static fn(string $path): string => $path . 'layouts/', $this->view->getTemplateRootPaths());
+        $templateRootPathsUpperCase = array_map(static fn(string $path): string => $path . 'Layouts/', $this->view->getTemplateRootPaths());
+        $layoutPaths = array_merge($templateRootPathsUpperCase, $templateRootPathsLowerCase);
+        if ($layoutPaths !== []) {
+            $this->view->setLayoutRootPaths($layoutPaths);
+        }
+    }
+
+    /**
+     * Set partial root path from the template root paths
+     */
+    protected function setPartialPaths(): void
+    {
+        // Define the default root paths to be located in the base paths under "partials/" subfolder
+        // Handle unix paths to allow upper-case folders as well
+        $templateRootPathsLowerCase = array_map(static fn(string $path): string => $path . 'partials/', $this->view->getTemplateRootPaths());
+        $templateRootPathsUpperCase = array_map(static fn(string $path): string => $path . 'Partials/', $this->view->getTemplateRootPaths());
+        $partialPaths = array_merge($templateRootPathsUpperCase, $templateRootPathsLowerCase);
+        if ($partialPaths !== []) {
+            $this->view->setPartialRootPaths($partialPaths);
+        }
+    }
+
+    /**
+     * Compile rendered content objects in variables array ready to assign to the view
+     *
+     * @param array $conf Configuration array
+     * @return array the variables to be assigned
+     * @throws \InvalidArgumentException
+     */
+    protected function getContentObjectVariables(array $conf): array
+    {
+        $variables = [
+            'site' => $this->request->getAttribute('site'),
+            'language' => $this->request->getAttribute('language'),
+            'page' => new Page($this->request->getAttribute('frontend.page.information')->getPageRecord()),
+        ];
+        // Accumulate the variables to be process and loop them through cObjGetSingle
+        if (is_array($conf['variables.'] ?? false) && $conf['variables.'] !== []) {
+            foreach ($conf['variables.'] as $variableName => $cObjType) {
+                if (!is_string($cObjType)) {
+                    continue;
+                }
+                if (in_array($variableName, $this->reservedVariables, true)) {
+                    throw new \InvalidArgumentException(
+                        'Cannot use reserved name "' . $variableName . '" as variable name in PAGEVIEW.',
+                        1711748615
+                    );
+                }
+                $cObjConf = $conf['variables.'][$variableName . '.'] ?? [];
+                $variables[$variableName] = $this->cObj->cObjGetSingle($cObjType, $cObjConf, 'variables.' . $variableName);
+            }
+        }
+        return $variables;
+    }
+
+    /**
+     * Set any TypoScript settings to the view, which take precedence over the page-specific settings.
+     */
+    protected function assignSettings(): void
+    {
+        $pageSettings = $this->request->getAttribute('frontend.typoscript')->getSettingsTree()->toArray();
+        $pageSettings = $this->typoScriptService->convertTypoScriptArrayToPlainArray($pageSettings);
+        $this->view->assign('settings', $pageSettings);
+    }
+}
diff --git a/typo3/sysext/frontend/Configuration/Services.yaml b/typo3/sysext/frontend/Configuration/Services.yaml
index 52305edbb6a709bfa3bc805a60a3a037754af578..54cfbd6bf42384edf619a6facb6cdf6694b35b60 100644
--- a/typo3/sysext/frontend/Configuration/Services.yaml
+++ b/typo3/sysext/frontend/Configuration/Services.yaml
@@ -133,6 +133,11 @@ services:
       - name: frontend.contentobject
         identifier: 'FLUIDTEMPLATE'
 
+  TYPO3\CMS\Frontend\ContentObject\PageViewContentObject:
+    tags:
+      - name: frontend.contentobject
+        identifier: 'PAGEVIEW'
+
   TYPO3\CMS\Frontend\ContentObject\ScalableVectorGraphicsContentObject:
     tags:
       - name: frontend.contentobject
diff --git a/typo3/sysext/frontend/Tests/Functional/ContentObject/Fixtures/FluidPage/pages.csv b/typo3/sysext/frontend/Tests/Functional/ContentObject/Fixtures/FluidPage/pages.csv
new file mode 100644
index 0000000000000000000000000000000000000000..57f4b7c92687edf49f16d1c93a19334a1caa9920
--- /dev/null
+++ b/typo3/sysext/frontend/Tests/Functional/ContentObject/Fixtures/FluidPage/pages.csv
@@ -0,0 +1,4 @@
+pages
+,uid,pid,slug,title,sys_language_uid,l10n_parent,backend_layout,TSconfig
+,1,0,/,Fluid Root Page,0,0,pagets__Standard,@import "EXT:test_fluidpagerendering/Configuration/TypoScript/plain.typoscript"
+,2,0,/,Fluid Root Page FR,1,1,pagets__Standard,@import "EXT:test_fluidpagerendering/Configuration/TypoScript/plain.typoscript"
diff --git a/typo3/sysext/frontend/Tests/Functional/ContentObject/PageViewContentObjectTest.php b/typo3/sysext/frontend/Tests/Functional/ContentObject/PageViewContentObjectTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..7363c03b8ebf396a296efca4499d401c3aea2223
--- /dev/null
+++ b/typo3/sysext/frontend/Tests/Functional/ContentObject/PageViewContentObjectTest.php
@@ -0,0 +1,82 @@
+<?php
+
+declare(strict_types=1);
+
+/*
+ * 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!
+ */
+
+namespace TYPO3\CMS\Frontend\Tests\Functional\ContentObject;
+
+use PHPUnit\Framework\Attributes\Test;
+use TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait;
+use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\InternalRequest;
+use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
+
+final class PageViewContentObjectTest extends FunctionalTestCase
+{
+    use SiteBasedTestTrait;
+
+    protected const LANGUAGE_PRESETS = [
+        'EN' => ['id' => 0, 'title' => 'English', 'locale' => 'en-US'],
+        'FR' => ['id' => 1, 'title' => 'French', 'locale' => 'fr-FR'],
+    ];
+    protected const ROOT_PAGE_ID = 1;
+
+    protected array $testExtensionsToLoad = [
+        'typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering',
+    ];
+
+    public function setUp(): void
+    {
+        parent::setUp();
+        $this->importCSVDataSet(__DIR__ . '/Fixtures/FluidPage/pages.csv');
+        $this->writeSiteConfiguration(
+            'pageview_template',
+            $this->buildSiteConfiguration(self::ROOT_PAGE_ID, '/'),
+            [
+                $this->buildDefaultLanguageConfiguration('EN', '/'),
+                $this->buildLanguageConfiguration('FR', '/fr'),
+            ],
+        );
+    }
+
+    #[Test]
+    public function renderWorksWithPlainRenderingInMultipleLanguages(): void
+    {
+        $this->setUpFrontendRootPage(
+            self::ROOT_PAGE_ID,
+            [
+                'EXT:frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Configuration/TypoScript/plain.typoscript',
+            ]
+        );
+        $response = $this->executeFrontendSubRequest((new InternalRequest())->withPageId(self::ROOT_PAGE_ID));
+        self::assertStringContainsString('You are on page Fluid Root Page', (string)$response->getBody());
+        self::assertStringContainsString('This is a standard page with no content.', (string)$response->getBody());
+        $response = $this->executeFrontendSubRequest((new InternalRequest())->withPageId(self::ROOT_PAGE_ID)->withLanguageId(1));
+        self::assertStringContainsString('Vous êtes à la page Fluid Root Page FR', (string)$response->getBody());
+    }
+
+    #[Test]
+    public function renderWorksWithPlainRenderingWithLowerCasePaths(): void
+    {
+        $this->setUpFrontendRootPage(
+            self::ROOT_PAGE_ID,
+            [
+                'EXT:frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Configuration/TypoScript/plain.typoscript',
+            ]
+        );
+        $response = $this->executeFrontendSubRequest((new InternalRequest())->withPageId(self::ROOT_PAGE_ID)->withQueryParameter('type', 123));
+        self::assertStringContainsString('You are on page Fluid Root Page', (string)$response->getBody());
+        self::assertStringContainsString('This is a standard page with no content.', (string)$response->getBody());
+    }
+}
diff --git a/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Configuration/TypoScript/plain.typoscript b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Configuration/TypoScript/plain.typoscript
new file mode 100644
index 0000000000000000000000000000000000000000..e979d3035489363762bc17293f5a7ce127fcd4fd
--- /dev/null
+++ b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Configuration/TypoScript/plain.typoscript
@@ -0,0 +1,9 @@
+page = PAGE
+page.10 = PAGEVIEW
+page.10.paths.100 = EXT:test_fluidpagerendering/Resources/Private/Templates/
+
+lowercasepage = PAGE
+lowercasepage.typeNum = 123
+lowercasepage.10 = PAGEVIEW
+lowercasepage.10.paths.100 = EXT:test_fluidpagerendering/Resources/Private/templates_in_lowercase/
+
diff --git a/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Configuration/page.tsconfig b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Configuration/page.tsconfig
new file mode 100644
index 0000000000000000000000000000000000000000..9862ffc3126fec6599df591836e9a28ea3804a05
--- /dev/null
+++ b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Configuration/page.tsconfig
@@ -0,0 +1,63 @@
+mod.web_layout.BackendLayouts {
+  Standard {
+    title = Standard Test Page Layout
+    config {
+      backend_layout {
+        colCount = 3
+        rowCount = 3
+        rows {
+          1 {
+            columns {
+              1 {
+                name = Header
+                colspan = 3
+                colPos = 1
+                identifier = header
+              }
+            }
+          }
+          2 {
+            columns {
+              1 {
+                name = Main
+                colspan = 2
+                colPos = 0
+                identifier = main
+              }
+              2 {
+                name = Aside
+                rowspan = 2
+                colPos = 2
+                identifier = aside
+                slideMode = collect
+              }
+            }
+          }
+          3 {
+            columns {
+              1 {
+                name = Main Left
+                colPos = 5
+                identifier = mainLeft
+              }
+              2 {
+                name = Main Right
+                colPos = 6
+                identifier = mainRight
+              }
+            }
+          }
+          4 {
+            columns {
+              1 {
+                name = Footer
+                colspan = 3
+                colPos = 4
+                identifier = footer
+              }
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Resources/Private/Language/fr.page.xlf b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Resources/Private/Language/fr.page.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..a708ca2a4859d2a2c099389ea4c814422820694a
--- /dev/null
+++ b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Resources/Private/Language/fr.page.xlf
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+	<file source-language="en" datatype="plaintext" original="EXT:test_fluidpagerendering/Resources/Private/Language/page.xlf" date="2023-12-21T11:57:33Z" product-name="test_fluidpagerendering">
+		<header/>
+		<body>
+			<trans-unit id="headline" resname="headline">
+				<source>You are on page</source>
+				<target>Vous êtes à la page</target>
+			</trans-unit>
+		</body>
+	</file>
+</xliff>
diff --git a/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Resources/Private/Language/page.xlf b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Resources/Private/Language/page.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..4fda1cc9a0d774b85bb84c776a2d08d8586a3cfb
--- /dev/null
+++ b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Resources/Private/Language/page.xlf
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+	<file source-language="en" datatype="plaintext" original="EXT:test_fluidpagerendering/Resources/Private/Language/page.xlf" date="2023-12-21T11:57:33Z" product-name="test_fluidpagerendering">
+		<header/>
+		<body>
+			<trans-unit id="headline" resname="headline">
+				<source>You are on page</source>
+			</trans-unit>
+		</body>
+	</file>
+</xliff>
diff --git a/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Resources/Private/Templates/Layouts/Default.html b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Resources/Private/Templates/Layouts/Default.html
new file mode 100644
index 0000000000000000000000000000000000000000..e3632c8bca2dc4d5c11ec3597ed6794fbc9de359
--- /dev/null
+++ b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Resources/Private/Templates/Layouts/Default.html
@@ -0,0 +1,9 @@
+<div class="container">
+    <header>
+        <h1><f:translate key="LLL:EXT:test_fluidpagerendering/Resources/Private/Language/page.xlf:headline" /> {page.title}</h1>
+    </header>
+</div>
+
+<main>
+    <f:render section="content" />
+</main>
diff --git a/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Resources/Private/Templates/Pages/Standard.html b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Resources/Private/Templates/Pages/Standard.html
new file mode 100644
index 0000000000000000000000000000000000000000..85e9054a77377b02f33cb43b2bd6ec350526d6e1
--- /dev/null
+++ b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Resources/Private/Templates/Pages/Standard.html
@@ -0,0 +1,5 @@
+<f:layout name="Default" />
+
+<f:section name="content">
+    This is a standard page with no content.
+</f:section>
diff --git a/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Resources/Private/templates_in_lowercase/layouts/Default.html b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Resources/Private/templates_in_lowercase/layouts/Default.html
new file mode 100644
index 0000000000000000000000000000000000000000..e3632c8bca2dc4d5c11ec3597ed6794fbc9de359
--- /dev/null
+++ b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Resources/Private/templates_in_lowercase/layouts/Default.html
@@ -0,0 +1,9 @@
+<div class="container">
+    <header>
+        <h1><f:translate key="LLL:EXT:test_fluidpagerendering/Resources/Private/Language/page.xlf:headline" /> {page.title}</h1>
+    </header>
+</div>
+
+<main>
+    <f:render section="content" />
+</main>
diff --git a/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Resources/Private/templates_in_lowercase/pages/Standard.html b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Resources/Private/templates_in_lowercase/pages/Standard.html
new file mode 100644
index 0000000000000000000000000000000000000000..85e9054a77377b02f33cb43b2bd6ec350526d6e1
--- /dev/null
+++ b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/Resources/Private/templates_in_lowercase/pages/Standard.html
@@ -0,0 +1,5 @@
+<f:layout name="Default" />
+
+<f:section name="content">
+    This is a standard page with no content.
+</f:section>
diff --git a/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/composer.json b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..376ff524e21cacbeaad615974e7207ce9573517e
--- /dev/null
+++ b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/composer.json
@@ -0,0 +1,14 @@
+{
+	"name": "typo3tests/fixture-fluidpagerendering-test",
+	"type": "typo3-cms-extension",
+	"description": "Full Page Rendering via Fluid Test",
+	"license": "GPL-2.0-or-later",
+	"require": {
+		"typo3/cms-core": "13.1.*@dev"
+	},
+	"extra": {
+		"typo3/cms": {
+			"extension-key": "test_fluidpagerendering"
+		}
+	}
+}
diff --git a/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/ext_emconf.php b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/ext_emconf.php
new file mode 100644
index 0000000000000000000000000000000000000000..30bc59f5715c3f612b84e2cf7862ef0a67023e62
--- /dev/null
+++ b/typo3/sysext/frontend/Tests/Functional/Fixtures/Extensions/test_fluidpagerendering/ext_emconf.php
@@ -0,0 +1,18 @@
+<?php
+
+$EM_CONF[$_EXTKEY] = [
+    'title' => 'Fluidpage Rendering Test',
+    'description' => 'Fluidpage Rendering Test',
+    'category' => 'example',
+    'version' => '13.1.0',
+    'state' => 'stable',
+    'author' => 'Benni Mack',
+    'author_company' => '',
+    'constraints' => [
+        'depends' => [
+            'typo3' => '13.1.0',
+        ],
+        'conflicts' => [],
+        'suggests' => [],
+    ],
+];