diff --git a/typo3/sysext/core/Classes/DataHandling/DataHandler.php b/typo3/sysext/core/Classes/DataHandling/DataHandler.php
index 0cce838aedb19048fa003053189e79b9dcf9e711..ca79781e3903dd5b051589b6b5c5f203f5c7ac83 100644
--- a/typo3/sysext/core/Classes/DataHandling/DataHandler.php
+++ b/typo3/sysext/core/Classes/DataHandling/DataHandler.php
@@ -2425,6 +2425,26 @@ class DataHandler implements LoggerAwareInterface
                 $queryBuilder->expr()->eq($field, $queryBuilder->createPositionalParameter($value, \PDO::PARAM_STR)),
                 $queryBuilder->expr()->neq('uid', $queryBuilder->createPositionalParameter($uid, \PDO::PARAM_INT))
             );
+        // ignore translations of current record if field is configured with l10n_mode = "exclude"
+        if ($GLOBALS['TCA'][$table]['columns'][$field]['l10n_mode'] ?? '' === 'exclude'
+            && $GLOBALS['TCA'][$table]['ctrl']['transOrigPointerField'] ?? '' !== ''
+            && $GLOBALS['TCA'][$table]['columns'][$field]['languageField'] ?? '' !== '') {
+            $queryBuilder
+                ->andWhere(
+                    $queryBuilder->expr()->orX(
+                    // records without l10n_parent must be taken into account (in any language)
+                        $queryBuilder->expr()->eq(
+                            $GLOBALS['TCA'][$table]['ctrl']['transOrigPointerField'],
+                            $queryBuilder->createPositionalParameter(0, \PDO::PARAM_INT)
+                        ),
+                        // translations of other records must be taken into account
+                        $queryBuilder->expr()->neq(
+                            $GLOBALS['TCA'][$table]['ctrl']['transOrigPointerField'],
+                            $queryBuilder->createPositionalParameter($uid, \PDO::PARAM_INT)
+                        )
+                    )
+                );
+        }
         if ($pid !== 0) {
             $queryBuilder->andWhere(
                 $queryBuilder->expr()->eq('pid', $queryBuilder->createPositionalParameter($pid, \PDO::PARAM_INT))
@@ -2435,7 +2455,6 @@ class DataHandler implements LoggerAwareInterface
                 $queryBuilder->expr()->gte('pid', $queryBuilder->createPositionalParameter(0, \PDO::PARAM_INT))
             );
         }
-
         return $queryBuilder->execute();
     }
 
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/DataHandler/DataSet/LiveDefaultPages.csv b/typo3/sysext/core/Tests/Functional/DataHandling/DataHandler/DataSet/LiveDefaultPages.csv
index 2f118c797f9f127bb22e9fefaa29c4bf7c47e381..5eaacc9a803bd93dc2f71c5617509d44adaa58a1 100644
--- a/typo3/sysext/core/Tests/Functional/DataHandling/DataHandler/DataSet/LiveDefaultPages.csv
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/DataHandler/DataSet/LiveDefaultPages.csv
@@ -1,6 +1,6 @@
-"pages",,,,,,,,,,,,
-,"uid","pid","sorting","deleted","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","title","keywords"
-,1,0,256,0,0,0,0,0,0,0,"FunctionalTest","functional"
-,88,1,256,0,0,0,0,0,0,0,"DataHandlerTest","datahandler"
-,89,88,256,0,0,0,0,0,0,0,"Relations","relations"
-,90,88,512,0,0,0,0,0,0,0,"Target","target"
+"pages",,,,,,,,,,,,,
+,"uid","pid","sorting","deleted","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","title","keywords","nav_title"
+,1,0,256,0,0,0,0,0,0,0,"FunctionalTest","functional",""
+,88,1,256,0,0,0,0,0,0,0,"DataHandlerTest","datahandler","datahandler"
+,89,88,256,0,0,0,0,0,0,0,"Relations","relations",""
+,90,88,512,0,0,0,0,0,0,0,"Target","target",""
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/DataHandler/GetUniqueTranslationTest.php b/typo3/sysext/core/Tests/Functional/DataHandling/DataHandler/GetUniqueTranslationTest.php
index 01b9b81b0fadfdf7b41be96973e9ce931981ecdf..d08f52fd5f6f597fd92b957891959d182a04b7c7 100644
--- a/typo3/sysext/core/Tests/Functional/DataHandling/DataHandler/GetUniqueTranslationTest.php
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/DataHandler/GetUniqueTranslationTest.php
@@ -33,13 +33,90 @@ class GetUniqueTranslationTest extends AbstractDataHandlerActionTestCase
     {
         // Mis-using the "keywords" field in the scenario data-set to check for uniqueness
         $GLOBALS['TCA']['pages']['columns']['keywords']['l10n_mode'] = 'exclude';
+        $GLOBALS['TCA']['pages']['columns']['keywords']['transOrigPointerField'] = 'l10n_parent';
+        $GLOBALS['TCA']['pages']['columns']['keywords']['languageField'] = 'sys_language_uid';
         $GLOBALS['TCA']['pages']['columns']['keywords']['config']['eval'] = 'unique';
         $map = $this->actionService->localizeRecord('pages', self::PAGE_DATAHANDLER, 1);
         $newPageId = $map['pages'][self::PAGE_DATAHANDLER];
+
         $originalLanguageRecord = BackendUtility::getRecord('pages', self::PAGE_DATAHANDLER);
         $translatedRecord = BackendUtility::getRecord('pages', $newPageId);
 
         self::assertEquals('datahandler', $originalLanguageRecord['keywords']);
         self::assertEquals('datahandler', $translatedRecord['keywords']);
     }
+
+    /**
+     * @test
+     */
+    public function valueOfUniqueFieldExcludedInTranslationIsUntouchedInOriginalLanguage(): void
+    {
+        // Mis-using the "nav_title" field in the scenario data-set to check for uniqueness
+        $GLOBALS['TCA']['pages']['columns']['nav_title']['l10n_mode'] = 'exclude';
+        $GLOBALS['TCA']['pages']['columns']['nav_title']['transOrigPointerField'] = 'l10n_parent';
+        $GLOBALS['TCA']['pages']['columns']['nav_title']['languageField'] = 'sys_language_uid';
+        $GLOBALS['TCA']['pages']['columns']['nav_title']['config']['eval'] = 'unique';
+        $map = $this->actionService->localizeRecord('pages', self::PAGE_DATAHANDLER, 1);
+        $newPageId = $map['pages'][self::PAGE_DATAHANDLER];
+
+        $translatedRecord = BackendUtility::getRecord('pages', $newPageId);
+        $this->actionService->modifyRecord('pages', self::PAGE_DATAHANDLER, [
+            'title' => 'DataHandlerTest changed',
+            'nav_title' => 'datahandler'
+        ]);
+        $originalLanguageRecord = BackendUtility::getRecord('pages', self::PAGE_DATAHANDLER);
+
+        $this->assertEquals('DataHandlerTest changed', $originalLanguageRecord['title']);
+        $this->assertEquals('datahandler', $originalLanguageRecord['nav_title']);
+        $this->assertEquals('datahandler', $translatedRecord['nav_title']);
+    }
+
+    /**
+     * @test
+     */
+    public function valueOfUniqueFieldExcludedInTranslationIsIncrementedInNewOriginalRecord(): void
+    {
+        // Mis-using the "nav_title" field in the scenario data-set to check for uniqueness
+        $GLOBALS['TCA']['pages']['columns']['nav_title']['l10n_mode'] = 'exclude';
+        $GLOBALS['TCA']['pages']['columns']['nav_title']['transOrigPointerField'] = 'l10n_parent';
+        $GLOBALS['TCA']['pages']['columns']['nav_title']['languageField'] = 'sys_language_uid';
+        $GLOBALS['TCA']['pages']['columns']['nav_title']['config']['eval'] = 'unique';
+        $map = $this->actionService->createNewRecord('pages', -self::PAGE_DATAHANDLER, [
+            'title' => 'New Page',
+            'doktype' => 1
+        ]);
+        $newPageId = $map['pages'][0];
+
+        $this->actionService->modifyRecord('pages', $newPageId, [
+            'nav_title' => 'datahandler'
+        ]);
+        $originalLanguageRecord = BackendUtility::getRecord('pages', self::PAGE_DATAHANDLER);
+        $newRecord = BackendUtility::getRecord('pages', $newPageId);
+        $this->assertEquals('datahandler', $originalLanguageRecord['nav_title']);
+        $this->assertEquals('datahandler0', $newRecord['nav_title']);
+    }
+
+    /**
+     * @test
+     */
+    public function valueOfUniqueFieldExcludedInTranslationIsIncrementedInNewTranslatedRecord(): void
+    {
+        // Mis-using the "nav_title" field in the scenario data-set to check for uniqueness
+        $GLOBALS['TCA']['pages']['columns']['nav_title']['l10n_mode'] = 'exclude';
+        $GLOBALS['TCA']['pages']['columns']['nav_title']['transOrigPointerField'] = 'l10n_parent';
+        $GLOBALS['TCA']['pages']['columns']['nav_title']['languageField'] = 'sys_language_uid';
+        $GLOBALS['TCA']['pages']['columns']['nav_title']['config']['eval'] = 'unique';
+        $map = $this->actionService->createNewRecord('pages', -self::PAGE_DATAHANDLER, [
+            'title' => 'New Page',
+            'doktype' => 1,
+            'nav_title' => 'datahandler',
+            'sys_language_uid' => 1
+        ]);
+        $newPageId = $map['pages'][0];
+
+        $defaultLanguageRecord = BackendUtility::getRecord('pages', self::PAGE_DATAHANDLER);
+        $newRecord = BackendUtility::getRecord('pages', $newPageId);
+        $this->assertEquals('datahandler', $defaultLanguageRecord['nav_title']);
+        $this->assertEquals('datahandler0', $newRecord['nav_title']);
+    }
 }