diff --git a/typo3/sysext/core/Classes/DataHandling/DataHandler.php b/typo3/sysext/core/Classes/DataHandling/DataHandler.php
index 1b4ff291be8733b66072d42a85a92d697a5fb30b..38333453172bcf44de80b2860d98a96622a6819a 100644
--- a/typo3/sysext/core/Classes/DataHandling/DataHandler.php
+++ b/typo3/sysext/core/Classes/DataHandling/DataHandler.php
@@ -3415,6 +3415,7 @@ class DataHandler implements LoggerAwareInterface
     {
         // Copy the page itself:
         $theNewRootID = $this->copyRecord('pages', $uid, $destPid, $first);
+        $currentWorkspaceId = (int)$this->BE_USER->workspace;
         // If a new page was created upon the copy operation we will proceed with all the tables ON that page:
         if ($theNewRootID) {
             foreach ($copyTablesArray as $table) {
@@ -3435,9 +3436,15 @@ class DataHandler implements LoggerAwareInterface
                         }
                     }
                     $isTableWorkspaceEnabled = BackendUtility::isTableWorkspaceEnabled($table);
+                    if ($isTableWorkspaceEnabled) {
+                        $fields[] = 't3ver_oid';
+                        $fields[] = 't3ver_state';
+                        $fields[] = 't3ver_wsid';
+                        $fields[] = 't3ver_move_id';
+                    }
                     $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($table);
                     $this->addDeleteRestriction($queryBuilder->getRestrictions()->removeAll());
-                    $queryBuilder->getRestrictions()->add(GeneralUtility::makeInstance(WorkspaceRestriction::class, (int)$this->BE_USER->workspace));
+                    $queryBuilder->getRestrictions()->add(GeneralUtility::makeInstance(WorkspaceRestriction::class, $currentWorkspaceId));
                     $queryBuilder
                         ->select(...$fields)
                         ->from($table)
@@ -3454,11 +3461,27 @@ class DataHandler implements LoggerAwareInterface
                     try {
                         $result = $queryBuilder->execute();
                         $rows = [];
+                        $movedLiveIds = [];
+                        $movedLiveRecords = [];
                         while ($row = $result->fetch()) {
-                            $rows[$row['uid']] = $row;
+                            if ($isTableWorkspaceEnabled && (int)$row['t3ver_state'] === VersionState::MOVE_PLACEHOLDER) {
+                                $movedLiveIds[(int)$row['t3ver_move_id']] = (int)$row['uid'];
+                            }
+                            $rows[(int)$row['uid']] = $row;
                         }
                         // Resolve placeholders of workspace versions
-                        if (!empty($rows) && (int)$this->BE_USER->workspace !== 0 && $isTableWorkspaceEnabled) {
+                        if (!empty($rows) && $currentWorkspaceId > 0 && $isTableWorkspaceEnabled) {
+                            // If a record was moved within the page, the PlainDataResolver needs the move placeholder
+                            // but not the original live version, otherwise the move placeholder is not considered at all
+                            // For this reason, we find the live ids, where there was also a move placeholder in the SQL
+                            // query above in $movedLiveIds and now we removed them before handing them over to PlainDataResolver.
+                            // see changeContentSortingAndCopyDraftPage test
+                            foreach ($movedLiveIds as $liveId => $movePlaceHolderId) {
+                                if (isset($rows[$liveId])) {
+                                    $movedLiveRecords[$movePlaceHolderId] = $rows[$liveId];
+                                    unset($rows[$liveId]);
+                                }
+                            }
                             $rows = array_reverse(
                                 $this->resolveVersionedRecords(
                                     $table,
@@ -3468,6 +3491,9 @@ class DataHandler implements LoggerAwareInterface
                                 ),
                                 true
                             );
+                            foreach ($movedLiveRecords as $movePlaceHolderId => $liveRecord) {
+                                $rows[$movePlaceHolderId] = $liveRecord;
+                            }
                         }
                         if (is_array($rows)) {
                             $languageSourceMap = [];
@@ -3477,7 +3503,7 @@ class DataHandler implements LoggerAwareInterface
                                 // Skip localized records that will be processed in
                                 // copyL10nOverlayRecords() on copying the default language record
                                 $transOrigPointer = $row[$transOrigPointerField];
-                                if ($row[$languageField] > 0 && $transOrigPointer > 0 && isset($rows[$transOrigPointer])) {
+                                if ($row[$languageField] > 0 && $transOrigPointer > 0 && (isset($rows[$transOrigPointer]) || isset($movedLiveIds[$transOrigPointer]))) {
                                     continue;
                                 }
                                 // Copying each of the underlying records...
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingAndCopyDraftPage.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingAndCopyDraftPage.csv
index 0dd6f93d8e46aa7a843cb2fdc73597817bb655b9..3d452e23b5890a758331369d28095eb6f8564335 100644
--- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingAndCopyDraftPage.csv
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingAndCopyDraftPage.csv
@@ -26,18 +26,17 @@
 ,325,89,448,0,2,321,301,302,1,4,0,302,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
 ,326,89,544,0,2,297,0,0,1,3,0,0,302,"[MOVE-TO PLACEHOLDER for #302, WS#1]"
 ,327,91,256,0,0,0,0,299,1,1,0,0,0,"Regular Element #3"
-# @todo: Sorting is not correct here: should be Element 2 then Element 1 then Element 3
 ,328,91,256,0,0,0,0,299,1,-1,0,327,0,"Regular Element #3"
 ,329,91,128,0,1,327,327,300,1,1,0,0,0,"[Translate to Dansk:] Regular Element #3"
 ,330,91,128,0,1,327,327,300,1,-1,0,329,0,"[Translate to Dansk:] Regular Element #3"
-,331,91,64,0,0,0,0,298,1,1,0,0,0,"Regular Element #2"
-,332,91,64,0,0,0,0,298,1,-1,0,331,0,"Regular Element #2"
-,333,91,32,0,0,0,0,297,1,1,0,0,0,"Regular Element #1"
-,334,91,32,0,0,0,0,297,1,-1,0,333,0,"Regular Element #1"
-,335,91,16,0,1,333,333,301,1,1,0,0,0,"[Translate to Dansk:] Regular Element #1"
-,336,91,16,0,1,333,333,301,1,-1,0,335,0,"[Translate to Dansk:] Regular Element #1"
-,337,91,8,0,2,333,335,302,1,1,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
-,338,91,8,0,2,333,335,302,1,-1,0,337,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
+,331,91,64,0,0,0,0,297,1,1,0,0,0,"Regular Element #1"
+,332,91,64,0,0,0,0,297,1,-1,0,331,0,"Regular Element #1"
+,333,91,32,0,1,331,331,301,1,1,0,0,0,"[Translate to Dansk:] Regular Element #1"
+,334,91,32,0,1,331,331,301,1,-1,0,333,0,"[Translate to Dansk:] Regular Element #1"
+,335,91,16,0,2,331,333,302,1,1,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
+,336,91,16,0,2,331,333,302,1,-1,0,335,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
+,337,91,8,0,0,0,0,298,1,1,0,0,0,"Regular Element #2"
+,338,91,8,0,0,0,0,298,1,-1,0,337,0,"Regular Element #2"
 "sys_refindex",,,,,,,,,,,,,,
 ,"hash","tablename","recuid","field","sorting","deleted","workspace","ref_table","ref_uid",,,,,
 ,"25426f92d44dd2ccf416108462b446e3","sys_workspace",1,"custom_stages",0,0,0,"sys_workspace_stage",1,,,,,
@@ -46,5 +45,5 @@
 ,"cd92ab3ab5798dc139f98107e7c28cb7","tt_content",323,"l18n_parent",0,0,1,"tt_content",321,,,,,
 ,"1c8013278ae997181374e3c76322e114","tt_content",325,"l18n_parent",0,0,1,"tt_content",321,,,,,
 ,"893ed65ba064539a74c6c86b2dd3a9ed","tt_content",330,"l18n_parent",0,0,1,"tt_content",327,,,,,
-,"7d48ba6e36389495b8eb362a9f8f8d78","tt_content",336,"l18n_parent",0,0,1,"tt_content",333,,,,,
-,"3f864e649c25f88940bd245f6895b5cf","tt_content",338,"l18n_parent",0,0,1,"tt_content",333,,,,,
+,"b3c908a26827758805d70fd387de5143","tt_content",334,"l18n_parent",0,0,1,"tt_content",331,,,,,
+,"01a973226431a87669a5c5ebd9e2b351","tt_content",336,"l18n_parent",0,0,1,"tt_content",331,,,,,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/changeContentSortingAndCopyDraftPage.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/changeContentSortingAndCopyDraftPage.csv
index 5ffa7da31865bc7b904734155b613546f3aafc6e..73a1e931c5d1abfea9ba65d794512fcaaef34154 100644
--- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/changeContentSortingAndCopyDraftPage.csv
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/changeContentSortingAndCopyDraftPage.csv
@@ -24,18 +24,17 @@
 ,325,89,448,0,2,321,301,302,1,4,0,302,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
 ,326,89,544,0,2,297,0,0,1,3,0,0,302,"[MOVE-TO PLACEHOLDER for #302, WS#1]"
 ,327,91,256,0,0,0,0,299,1,1,0,0,0,"Regular Element #3"
-# @todo: Sorting is not correct here: should be Element 2 then Element 1 then Element 3
 ,328,91,256,0,0,0,0,299,1,-1,0,327,0,"Regular Element #3"
 ,329,91,128,0,1,327,327,300,1,1,0,0,0,"[Translate to Dansk:] Regular Element #3"
 ,330,91,128,0,1,327,327,300,1,-1,0,329,0,"[Translate to Dansk:] Regular Element #3"
-,331,91,64,0,0,0,0,298,1,1,0,0,0,"Regular Element #2"
-,332,91,64,0,0,0,0,298,1,-1,0,331,0,"Regular Element #2"
-,333,91,32,0,0,0,0,297,1,1,0,0,0,"Regular Element #1"
-,334,91,32,0,0,0,0,297,1,-1,0,333,0,"Regular Element #1"
-,335,91,16,0,1,333,333,301,1,1,0,0,0,"[Translate to Dansk:] Regular Element #1"
-,336,91,16,0,1,333,333,301,1,-1,0,335,0,"[Translate to Dansk:] Regular Element #1"
-,337,91,8,0,2,333,335,302,1,1,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
-,338,91,8,0,2,333,335,302,1,-1,0,337,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
+,331,91,64,0,0,0,0,297,1,1,0,0,0,"Regular Element #1"
+,332,91,64,0,0,0,0,297,1,-1,0,331,0,"Regular Element #1"
+,333,91,32,0,1,331,331,301,1,1,0,0,0,"[Translate to Dansk:] Regular Element #1"
+,334,91,32,0,1,331,331,301,1,-1,0,333,0,"[Translate to Dansk:] Regular Element #1"
+,335,91,16,0,2,331,333,302,1,1,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
+,336,91,16,0,2,331,333,302,1,-1,0,335,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
+,337,91,8,0,0,0,0,298,1,1,0,0,0,"Regular Element #2"
+,338,91,8,0,0,0,0,298,1,-1,0,337,0,"Regular Element #2"
 "sys_refindex",,,,,,,,,,,,,,
 ,"hash","tablename","recuid","field","sorting","deleted","workspace","ref_table","ref_uid",,,,,
 ,"25426f92d44dd2ccf416108462b446e3","sys_workspace",1,"custom_stages",0,0,0,"sys_workspace_stage",1,,,,,
@@ -44,5 +43,5 @@
 ,"cd92ab3ab5798dc139f98107e7c28cb7","tt_content",323,"l18n_parent",0,0,1,"tt_content",321,,,,,
 ,"1c8013278ae997181374e3c76322e114","tt_content",325,"l18n_parent",0,0,1,"tt_content",321,,,,,
 ,"893ed65ba064539a74c6c86b2dd3a9ed","tt_content",330,"l18n_parent",0,0,1,"tt_content",327,,,,,
-,"7d48ba6e36389495b8eb362a9f8f8d78","tt_content",336,"l18n_parent",0,0,1,"tt_content",333,,,,,
-,"3f864e649c25f88940bd245f6895b5cf","tt_content",338,"l18n_parent",0,0,1,"tt_content",333,,,,,
+,"b3c908a26827758805d70fd387de5143","tt_content",334,"l18n_parent",0,0,1,"tt_content",331,,,,,
+,"01a973226431a87669a5c5ebd9e2b351","tt_content",336,"l18n_parent",0,0,1,"tt_content",331,,,,,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/PublishAll/DataSet/changeContentSortingAndCopyDraftPage.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/PublishAll/DataSet/changeContentSortingAndCopyDraftPage.csv
index 07a002bf6c31a22f018e815ecbf3e9885ebf0bbb..a7a1963b4f21ff1664ed4174724bf0c5104e3811 100644
--- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/PublishAll/DataSet/changeContentSortingAndCopyDraftPage.csv
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/PublishAll/DataSet/changeContentSortingAndCopyDraftPage.csv
@@ -18,20 +18,19 @@
 ,311,90,512,0,1,0,310,310,0,0,0,0,0,"[Translate to Dansk:] Regular Element #10"
 ,312,90,768,0,2,0,311,311,0,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #10"
 ,320,89,512,0,0,0,0,298,2,2,0,298,0,"Regular Element #2"
-# @todo: Sorting is not correct here: should be Element 2 then Element 1 then Element 3
 ,327,91,256,0,0,0,0,299,0,0,0,0,0,"Regular Element #3"
 ,329,91,128,0,1,327,327,300,0,0,0,0,0,"[Translate to Dansk:] Regular Element #3"
-,331,91,64,0,0,0,0,298,0,0,0,0,0,"Regular Element #2"
-,333,91,32,0,0,0,0,297,0,0,0,0,0,"Regular Element #1"
-,335,91,16,0,1,333,333,301,0,0,0,0,0,"[Translate to Dansk:] Regular Element #1"
-,337,91,8,0,2,333,335,302,0,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
+,331,91,64,0,0,0,0,297,0,0,0,0,0,"Regular Element #1"
+,333,91,32,0,1,331,331,301,0,0,0,0,0,"[Translate to Dansk:] Regular Element #1"
+,335,91,16,0,2,331,333,302,0,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
+,337,91,8,0,0,0,0,298,0,0,0,0,0,"Regular Element #2"
 "sys_refindex",,,,,,,,,,,,,,
 ,"hash","tablename","recuid","field","sorting","deleted","workspace","ref_table","ref_uid",,,,,
 ,"25426f92d44dd2ccf416108462b446e3","sys_workspace",1,"custom_stages",0,0,0,"sys_workspace_stage",1,,,,,
 ,"01a3ce8c4e3b2bb1aa439dc29081f996","sys_workspace_stage",1,"responsible_persons",0,0,0,"be_users",3,,,,,
 ,"1b70a8e25c22645f7a49a79f57f3cf3f","sys_category",31,"parent",0,0,0,"sys_category",28,,,,,
 ,"691bd3ea92e56cae98fbcd3320abab16","tt_content",329,"l18n_parent",0,0,0,"tt_content",327,,,,,
-,"29336c6601631206b91ab727e3afd3ab","tt_content",335,"l18n_parent",0,0,0,"tt_content",333,,,,,
-,"06ef094e3198da6562845ccf7264c617","tt_content",337,"l18n_parent",0,0,0,"tt_content",333,,,,,
 ,"eb360eb09940bbb656509c7f6fda9b05","tt_content",301,"l18n_parent",0,0,0,"tt_content",297,,,,,
 ,"b6e55a3d99888c9a7007226ad685306c","tt_content",302,"l18n_parent",0,0,0,"tt_content",297,,,,,
+,"5ff17d2f286e6ca001fdfb2dea3a6fb5","tt_content",333,"l18n_parent",0,0,0,"tt_content",331,,,,,
+,"9922c9ce8e620250d1ca9d1dab1a2bff","tt_content",335,"l18n_parent",0,0,0,"tt_content",331,,,,,