diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/Framework/ActionService.php b/typo3/sysext/core/Tests/Functional/DataHandling/Framework/ActionService.php
index 071c65dfdc73cdc73709ffa3d8f25367556094f0..bdbdc2f49ca971b753e015e0b4a458cf89fc7fd4 100644
--- a/typo3/sysext/core/Tests/Functional/DataHandling/Framework/ActionService.php
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/Framework/ActionService.php
@@ -69,18 +69,31 @@ class ActionService {
 	/**
 	 * @param integer $pageId
 	 * @param array $tableRecordData
+	 * @return array
 	 */
 	public function createNewRecords($pageId, array $tableRecordData) {
 		$dataMap = array();
+		$newTableIds = array();
 		$currentUid = NULL;
 		foreach ($tableRecordData as $tableName => $recordData) {
 			$recordData = $this->resolvePreviousUid($recordData, $currentUid);
 			$recordData['pid'] = $pageId;
 			$currentUid = uniqid('NEW');
+			$newTableIds[$tableName][] = $currentUid;
 			$dataMap[$tableName][$currentUid] = $recordData;
 		}
 		$this->dataHandler->start($dataMap, array());
 		$this->dataHandler->process_datamap();
+
+		foreach ($newTableIds as $tableName => &$ids) {
+			foreach ($ids as &$id) {
+				if (!empty($this->dataHandler->substNEWwithIDs[$id])) {
+					$id = $this->dataHandler->substNEWwithIDs[$id];
+				}
+			}
+		}
+
+		return $newTableIds;
 	}
 
 	/**
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/Framework/DataSet.php b/typo3/sysext/core/Tests/Functional/DataHandling/Framework/DataSet.php
index ad5254026f2ffa6ce507cf51252d9373412e5877..214346cb191d13976b89decefb9986b39688e381 100644
--- a/typo3/sysext/core/Tests/Functional/DataHandling/Framework/DataSet.php
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/Framework/DataSet.php
@@ -85,6 +85,10 @@ class DataSet {
 		$idIndex = NULL;
 		foreach ($rawData as $values) {
 			if (!empty($values[0])) {
+				// Skip comment lines, starting with "#"
+				if ($values[0]{0} === '#') {
+					continue;
+				}
 				$tableName = $values[0];
 				$fieldCount = NULL;
 				$idIndex = NULL;
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/AbstractActionTestCase.php b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/AbstractActionTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..8c7e19b50d532aa5480536cf799ecaef39a2c379
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/AbstractActionTestCase.php
@@ -0,0 +1,257 @@
+<?php
+namespace TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\InlineRelationalRecordEditing\ForeignField;
+
+/***************************************************************
+ * Copyright notice
+ *
+ * (c) 2014 Oliver Hader <oliver.hader@typo3.org>
+ * All rights reserved
+ *
+ * This script is part of the TYPO3 project. The TYPO3 project is
+ * free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * The GNU General Public License can be found at
+ * http://www.gnu.org/copyleft/gpl.html.
+ *
+ * This script is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+require_once __DIR__ . '/../../../../../../core/Tests/Functional/DataHandling/AbstractDataHandlerActionTestCase.php';
+
+/**
+ * Functional test for the DataHandler
+ */
+abstract class AbstractActionTestCase extends \TYPO3\CMS\Core\Tests\Functional\DataHandling\AbstractDataHandlerActionTestCase {
+
+	const VALUE_PageId = 89;
+	const VALUE_PageIdTarget = 90;
+	const VALUE_PageIdWebsite = 1;
+	const VALUE_ContentIdFirst = 297;
+	const VALUE_ContentIdLast = 298;
+	const VALUE_LanguageId = 1;
+
+	const TABLE_Page = 'pages';
+	const TABLE_Content = 'tt_content';
+	const TABLE_Hotel = 'tx_irretutorial_1nff_hotel';
+	const TABLE_Offer = 'tx_irretutorial_1nff_offer';
+
+	/**
+	 * @var string
+	 */
+	protected $dataSetDirectory = 'typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/';
+
+	/**
+	 * @var array
+	 */
+	protected $coreExtensionsToLoad = array(
+		'version',
+		'workspaces',
+	);
+
+	public function setUp() {
+		parent::setUp();
+		$this->importScenarioDataSet('LiveDefaultPages');
+		$this->importScenarioDataSet('LiveDefaultElements');
+	}
+
+	/**
+	 * Parent content records
+	 */
+
+	/**
+	 * @test
+	 */
+	public function createParentContentRecord() {
+		$this->actionService->createNewRecord(self::TABLE_Content, self::VALUE_PageId, array('header' => 'Testing #1'));
+		$this->assertAssertionDataSet('createParentContentRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyParentContentRecord() {
+		$this->actionService->modifyRecord(self::TABLE_Content, self::VALUE_ContentIdLast, array('header' => 'Testing #1'));
+		$this->assertAssertionDataSet('modifyParentContentRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function deleteParentContentRecord() {
+		$this->actionService->deleteRecord(self::TABLE_Content, self::VALUE_ContentIdLast);
+		$this->assertAssertionDataSet('deleteParentContentRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function copyParentContentRecord() {
+		$this->actionService->copyRecord(self::TABLE_Content, self::VALUE_ContentIdLast, self::VALUE_PageId);
+		$this->assertAssertionDataSet('copyParentContentRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function localizeParentContentRecord() {
+		$this->actionService->localizeRecord(self::TABLE_Content, self::VALUE_ContentIdLast, self::VALUE_LanguageId);
+		$this->assertAssertionDataSet('localizeParentContentRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function changeParentContentRecordSorting() {
+		$this->actionService->moveRecord(self::TABLE_Content, self::VALUE_ContentIdFirst, -self::VALUE_ContentIdLast);
+		$this->assertAssertionDataSet('changeParentContentRecordSorting');
+	}
+
+	/**
+	 * @test
+	 */
+	public function moveParentContentRecordToDifferentPage() {
+		$this->actionService->moveRecord(self::TABLE_Content, self::VALUE_ContentIdLast, self::VALUE_PageIdTarget);
+		$this->assertAssertionDataSet('moveParentContentRecordToDifferentPage');
+	}
+
+	/**
+	 * @test
+	 */
+	public function moveParentContentRecordToDifferentPageAndChangeSorting() {
+		$this->markTestSkipped('Something seems to be wrong here...');
+		$this->actionService->moveRecord(self::TABLE_Content, self::VALUE_ContentIdLast, self::VALUE_PageIdTarget);
+		$this->actionService->moveRecord(self::TABLE_Content, self::VALUE_ContentIdFirst, -self::VALUE_ContentIdLast);
+		$this->assertAssertionDataSet('moveParentContentRecordToDifferentPageAndChangeSorting');
+	}
+
+	/**
+	 * Page records
+	 */
+
+	/**
+	 * @test
+	 */
+	public function modifyPageRecord() {
+		$this->actionService->modifyRecord(self::TABLE_Page, self::VALUE_PageId, array('title' => 'Testing #1'));
+		$this->assertAssertionDataSet('modifyPageRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function deletePageRecord() {
+		$this->actionService->deleteRecord(self::TABLE_Page, self::VALUE_PageId);
+		$this->assertAssertionDataSet('deletePageRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function copyPageRecord() {
+		$this->actionService->copyRecord(self::TABLE_Page, self::VALUE_PageId, self::VALUE_PageIdTarget);
+		$this->assertAssertionDataSet('copyPageRecord');
+	}
+
+	/**
+	 * IRRE Child Records
+	 */
+
+	/**
+	 * @test
+	 */
+	public function createParentContentRecordWithHotelAndOfferChildRecords() {
+		$this->actionService->createNewRecords(
+			self::VALUE_PageId,
+			array(
+				self::TABLE_Offer => array('title' => 'Offer #1'),
+				self::TABLE_Hotel => array('title' => 'Hotel #1', 'offers' => '__previousUid'),
+				self::TABLE_Content => array('header' => 'Testing #1', 'tx_irretutorial_hotels' => '__previousUid'),
+			)
+		);
+		$this->assertAssertionDataSet('createParentContentRecordWithHotelAndOfferChildRecords');
+	}
+
+	/**
+	 * @test
+	 */
+	public function createAndCopyParentContentRecordWithHotelAndOfferChildRecords() {
+		// @todo Copying the new child records is broken in the Core
+		$newTableIds = $this->actionService->createNewRecords(
+			self::VALUE_PageId,
+			array(
+				self::TABLE_Offer => array('title' => 'Offer #1'),
+				self::TABLE_Hotel => array('title' => 'Hotel #1', 'offers' => '__previousUid'),
+				self::TABLE_Content => array('header' => 'Testing #1', 'tx_irretutorial_hotels' => '__previousUid'),
+			)
+		);
+		$newContentId = $newTableIds['tt_content'][0];
+		$this->actionService->copyRecord(self::TABLE_Content, $newContentId, self::VALUE_PageId);
+		$this->assertAssertionDataSet('createAndCopyParentContentRecordWithHotelAndOfferChildRecords');
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyOnlyHotelChildRecord() {
+		$this->actionService->modifyRecord(self::TABLE_Hotel, 4, array('title' => 'Testing #1'));
+		$this->assertAssertionDataSet('modifyOnlyHotelChildRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyParentRecordAndChangeHotelChildRecordsSorting() {
+		$this->actionService->modifyRecord(self::TABLE_Content, self::VALUE_ContentIdFirst, array('tx_irretutorial_hotels' => '4,3'));
+		$this->assertAssertionDataSet('modifyParentRecordAndChangeHotelChildRecordsSorting');
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyParentRecordWithHotelChildRecord() {
+		$this->actionService->modifyRecords(
+			self::VALUE_PageId,
+			array(
+				self::TABLE_Hotel => array('uid' => 4, 'title' => 'Testing #1'),
+				self::TABLE_Content => array('uid' => self::VALUE_ContentIdLast, 'tx_irretutorial_hotels' => '3,4'),
+			)
+		);
+		$this->assertAssertionDataSet('modifyParentRecordWithHotelChildRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyParentRecordAndAddHotelChildRecord() {
+		$this->actionService->modifyRecords(
+			self::VALUE_PageId,
+			array(
+				self::TABLE_Hotel => array('uid' => '__NEW', 'title' => 'Hotel #2'),
+				self::TABLE_Content => array('uid' => self::VALUE_ContentIdLast, 'tx_irretutorial_hotels' => '5,__previousUid'),
+			)
+		);
+		$this->assertAssertionDataSet('modifyParentRecordAndAddHotelChildRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyParentRecordAndDeleteHotelChildRecord() {
+		$this->actionService->modifyRecord(
+			self::TABLE_Content,
+			self::VALUE_ContentIdFirst,
+			array('tx_irretutorial_hotels' => '3'),
+			array(self::TABLE_Hotel => array(4))
+		);
+		$this->assertAssertionDataSet('modifyParentRecordAndDeleteHotelChildRecord');
+	}
+
+}
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/changeParentContentRecordSorting.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/changeParentContentRecordSorting.csv
new file mode 100644
index 0000000000000000000000000000000000000000..0cdf9e8585fa5b979041bfea9957962b30d89b47
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/changeParentContentRecordSorting.csv
@@ -0,0 +1,37 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,1
+,299,-1,256,0,0,0,1,4,0,297,0,"Regular Element #1",0,0,2
+,300,89,768,0,0,0,1,3,0,0,297,"[MOVE-TO PLACEHOLDER for #297, WS#1]",,0,0
+tx_irretutorial_1nff_hotel
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,offers
+,3,89,1,0,0,0,0,0,0,0,"Hotel #1",297,tt_content,,2
+,4,89,2,0,0,0,0,0,0,0,"Hotel #2",297,tt_content,,1
+,5,89,1,0,0,0,0,0,0,0,"Hotel #1",298,tt_content,,1
+,6,-1,1,0,0,1,0,0,3,0,"Hotel #1",299,tt_content,,2
+,7,-1,2,0,0,1,0,0,4,0,"Hotel #2",299,tt_content,,1
+tx_irretutorial_1nff_offer
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,prices
+,5,89,1,0,0,0,0,0,0,0,"Offer #1.1",3,tx_irretutorial_1nff_hotel,,3
+,6,89,2,0,0,0,0,0,0,0,"Offer #1.2",3,tx_irretutorial_1nff_hotel,,2
+,7,89,1,0,0,0,0,0,0,0,"Offer #2.1",4,tx_irretutorial_1nff_hotel,,1
+,8,89,1,0,0,0,0,0,0,0,"Offer #1.1",5,tx_irretutorial_1nff_hotel,,1
+,9,-1,1,0,0,1,0,0,5,0,"Offer #1.1",6,tx_irretutorial_1nff_hotel,,3
+,10,-1,2,0,0,1,0,0,6,0,"Offer #1.2",6,tx_irretutorial_1nff_hotel,,2
+,11,-1,1,0,0,1,0,0,7,0,"Offer #2.1",7,tx_irretutorial_1nff_hotel,,1
+tx_irretutorial_1nff_price
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier
+,7,89,1,0,0,0,0,0,0,0,"Price #1.1.1",5,tx_irretutorial_1nff_offer,
+,8,89,2,0,0,0,0,0,0,0,"Price #1.1.2",5,tx_irretutorial_1nff_offer,
+,9,89,3,0,0,0,0,0,0,0,"Price #1.1.3",5,tx_irretutorial_1nff_offer,
+,10,89,1,0,0,0,0,0,0,0,"Price #1.2.1",6,tx_irretutorial_1nff_offer,
+,11,89,2,0,0,0,0,0,0,0,"Price #1.2.2",6,tx_irretutorial_1nff_offer,
+,12,89,1,0,0,0,0,0,0,0,"Price #2.1.1",7,tx_irretutorial_1nff_offer,
+,13,89,1,0,0,0,0,0,0,0,"Price #1.1.1",8,tx_irretutorial_1nff_offer,
+,14,-1,1,0,0,1,0,0,7,0,"Price #1.1.1",9,tx_irretutorial_1nff_offer,
+,15,-1,2,0,0,1,0,0,8,0,"Price #1.1.2",9,tx_irretutorial_1nff_offer,
+,16,-1,3,0,0,1,0,0,9,0,"Price #1.1.3",9,tx_irretutorial_1nff_offer,
+,17,-1,1,0,0,1,0,0,10,0,"Price #1.2.1",10,tx_irretutorial_1nff_offer,
+,18,-1,2,0,0,1,0,0,11,0,"Price #1.2.2",10,tx_irretutorial_1nff_offer,
+,19,-1,1,0,0,1,0,0,12,0,"Price #2.1.1",11,tx_irretutorial_1nff_offer,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/copyPageRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/copyPageRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..187db54d97085ccee78c3986e75f6d8aaba18916
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/copyPageRecord.csv
@@ -0,0 +1,50 @@
+pages
+,uid,pid,sorting,deleted,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,1,0,256,0,0,0,0,0,0,FunctionalTest
+,88,1,256,0,0,0,0,0,0,DataHandlerTest
+,89,88,256,0,0,0,0,0,0,Relations
+,90,88,512,0,0,0,0,0,0,Target
+,91,90,256,0,1,1,0,0,0,Relations
+,92,-1,256,0,1,-1,0,91,0,Relations
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,1
+,299,91,256,0,0,0,1,1,0,0,0,"Regular Element #2",,0,0
+,300,-1,256,0,0,0,1,-1,0,299,0,"Regular Element #2",0,0,1
+,301,91,128,0,0,0,1,1,0,0,0,"Regular Element #1",,0,0
+,302,-1,128,0,0,0,1,-1,0,301,0,"Regular Element #1",0,0,2
+tx_irretutorial_1nff_hotel
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,offers
+,3,89,1,0,0,0,0,0,0,0,"Hotel #1",297,tt_content,,2
+,4,89,2,0,0,0,0,0,0,0,"Hotel #2",297,tt_content,,1
+,5,89,1,0,0,0,0,0,0,0,"Hotel #1",298,tt_content,,1
+,6,91,1,0,0,0,0,0,0,0,"Hotel #1",299,tt_content,,1
+,7,91,1,0,0,0,0,0,0,0,"Hotel #1",301,tt_content,,2
+,8,91,2,0,0,0,0,0,0,0,"Hotel #2",301,tt_content,,1
+tx_irretutorial_1nff_offer
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,prices
+,5,89,1,0,0,0,0,0,0,0,"Offer #1.1",3,tx_irretutorial_1nff_hotel,,3
+,6,89,2,0,0,0,0,0,0,0,"Offer #1.2",3,tx_irretutorial_1nff_hotel,,2
+,7,89,1,0,0,0,0,0,0,0,"Offer #2.1",4,tx_irretutorial_1nff_hotel,,1
+,8,89,1,0,0,0,0,0,0,0,"Offer #1.1",5,tx_irretutorial_1nff_hotel,,1
+,9,91,1,0,0,0,0,0,0,0,"Offer #1.1",6,tx_irretutorial_1nff_hotel,,1
+,10,91,1,0,0,0,0,0,0,0,"Offer #1.1",7,tx_irretutorial_1nff_hotel,,3
+,11,91,2,0,0,0,0,0,0,0,"Offer #1.2",7,tx_irretutorial_1nff_hotel,,2
+,12,91,1,0,0,0,0,0,0,0,"Offer #2.1",8,tx_irretutorial_1nff_hotel,,1
+tx_irretutorial_1nff_price
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier
+,7,89,1,0,0,0,0,0,0,0,"Price #1.1.1",5,tx_irretutorial_1nff_offer,
+,8,89,2,0,0,0,0,0,0,0,"Price #1.1.2",5,tx_irretutorial_1nff_offer,
+,9,89,3,0,0,0,0,0,0,0,"Price #1.1.3",5,tx_irretutorial_1nff_offer,
+,10,89,1,0,0,0,0,0,0,0,"Price #1.2.1",6,tx_irretutorial_1nff_offer,
+,11,89,2,0,0,0,0,0,0,0,"Price #1.2.2",6,tx_irretutorial_1nff_offer,
+,12,89,1,0,0,0,0,0,0,0,"Price #2.1.1",7,tx_irretutorial_1nff_offer,
+,13,89,1,0,0,0,0,0,0,0,"Price #1.1.1",8,tx_irretutorial_1nff_offer,
+,14,91,1,0,0,0,0,0,0,0,"Price #1.1.1",9,tx_irretutorial_1nff_offer,
+,15,91,1,0,0,0,0,0,0,0,"Price #1.1.1",10,tx_irretutorial_1nff_offer,
+,16,91,2,0,0,0,0,0,0,0,"Price #1.1.2",10,tx_irretutorial_1nff_offer,
+,17,91,3,0,0,0,0,0,0,0,"Price #1.1.3",10,tx_irretutorial_1nff_offer,
+,18,91,1,0,0,0,0,0,0,0,"Price #1.2.1",11,tx_irretutorial_1nff_offer,
+,19,91,2,0,0,0,0,0,0,0,"Price #1.2.2",11,tx_irretutorial_1nff_offer,
+,20,91,1,0,0,0,0,0,0,0,"Price #2.1.1",12,tx_irretutorial_1nff_offer,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/copyParentContentRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/copyParentContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..5127a9dde40d2f65affae37f2da75064442bdeb8
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/copyParentContentRecord.csv
@@ -0,0 +1,29 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,1
+,299,89,128,0,0,0,1,1,0,0,0,"Regular Element #2 (copy 1)",,0,0
+,300,-1,128,0,0,0,1,-1,0,299,0,"Regular Element #2 (copy 1)",0,0,1
+tx_irretutorial_1nff_hotel
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,offers
+,3,89,1,0,0,0,0,0,0,0,"Hotel #1",297,tt_content,,2
+,4,89,2,0,0,0,0,0,0,0,"Hotel #2",297,tt_content,,1
+,5,89,1,0,0,0,0,0,0,0,"Hotel #1",298,tt_content,,1
+,6,89,1,0,0,0,0,0,0,0,"Hotel #1",299,tt_content,,1
+tx_irretutorial_1nff_offer
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,prices
+,5,89,1,0,0,0,0,0,0,0,"Offer #1.1",3,tx_irretutorial_1nff_hotel,,3
+,6,89,2,0,0,0,0,0,0,0,"Offer #1.2",3,tx_irretutorial_1nff_hotel,,2
+,7,89,1,0,0,0,0,0,0,0,"Offer #2.1",4,tx_irretutorial_1nff_hotel,,1
+,8,89,1,0,0,0,0,0,0,0,"Offer #1.1",5,tx_irretutorial_1nff_hotel,,1
+,9,89,1,0,0,0,0,0,0,0,"Offer #1.1",6,tx_irretutorial_1nff_hotel,,1
+tx_irretutorial_1nff_price
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier
+,7,89,1,0,0,0,0,0,0,0,"Price #1.1.1",5,tx_irretutorial_1nff_offer,
+,8,89,2,0,0,0,0,0,0,0,"Price #1.1.2",5,tx_irretutorial_1nff_offer,
+,9,89,3,0,0,0,0,0,0,0,"Price #1.1.3",5,tx_irretutorial_1nff_offer,
+,10,89,1,0,0,0,0,0,0,0,"Price #1.2.1",6,tx_irretutorial_1nff_offer,
+,11,89,2,0,0,0,0,0,0,0,"Price #1.2.2",6,tx_irretutorial_1nff_offer,
+,12,89,1,0,0,0,0,0,0,0,"Price #2.1.1",7,tx_irretutorial_1nff_offer,
+,13,89,1,0,0,0,0,0,0,0,"Price #1.1.1",8,tx_irretutorial_1nff_offer,
+,14,89,1,0,0,0,0,0,0,0,"Price #1.1.1",9,tx_irretutorial_1nff_offer,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/createAndCopyParentContentRecordWithHotelAndOfferChildRecords.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/createAndCopyParentContentRecordWithHotelAndOfferChildRecords.csv
new file mode 100644
index 0000000000000000000000000000000000000000..bd1572fd2ab3ab02e373455cfd92bd6e5591ead3
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/createAndCopyParentContentRecordWithHotelAndOfferChildRecords.csv
@@ -0,0 +1,32 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,1
+,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",,0,0
+,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",,0,1
+,301,89,64,0,0,0,1,1,0,0,0,"Testing #1 (copy 1)",,0,0
+,302,-1,64,0,0,0,1,-1,0,301,0,"Testing #1 (copy 1)",0,0,0
+tx_irretutorial_1nff_hotel
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,offers
+,3,89,1,0,0,0,0,0,0,0,"Hotel #1",297,tt_content,,2
+,4,89,2,0,0,0,0,0,0,0,"Hotel #2",297,tt_content,,1
+,5,89,1,0,0,0,0,0,0,0,"Hotel #1",298,tt_content,,1
+,6,89,1,0,0,1,1,0,0,0,"Hotel #1",0,,,0
+,7,-1,1,0,0,1,-1,0,6,0,"Hotel #1",300,tt_content,,1
+tx_irretutorial_1nff_offer
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,prices
+,5,89,1,0,0,0,0,0,0,0,"Offer #1.1",3,tx_irretutorial_1nff_hotel,,3
+,6,89,2,0,0,0,0,0,0,0,"Offer #1.2",3,tx_irretutorial_1nff_hotel,,2
+,7,89,1,0,0,0,0,0,0,0,"Offer #2.1",4,tx_irretutorial_1nff_hotel,,1
+,8,89,1,0,0,0,0,0,0,0,"Offer #1.1",5,tx_irretutorial_1nff_hotel,,1
+,9,89,1,0,0,1,1,0,0,0,"Offer #1",0,,,0
+,10,-1,1,0,0,1,-1,0,9,0,"Offer #1",7,tx_irretutorial_1nff_hotel,,0
+tx_irretutorial_1nff_price
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier
+,7,89,1,0,0,0,0,0,0,0,"Price #1.1.1",5,tx_irretutorial_1nff_offer,
+,8,89,2,0,0,0,0,0,0,0,"Price #1.1.2",5,tx_irretutorial_1nff_offer,
+,9,89,3,0,0,0,0,0,0,0,"Price #1.1.3",5,tx_irretutorial_1nff_offer,
+,10,89,1,0,0,0,0,0,0,0,"Price #1.2.1",6,tx_irretutorial_1nff_offer,
+,11,89,2,0,0,0,0,0,0,0,"Price #1.2.2",6,tx_irretutorial_1nff_offer,
+,12,89,1,0,0,0,0,0,0,0,"Price #2.1.1",7,tx_irretutorial_1nff_offer,
+,13,89,1,0,0,0,0,0,0,0,"Price #1.1.1",8,tx_irretutorial_1nff_offer,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/createParentContentRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/createParentContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..0ed8958f369530cfe89f8002cf1a09f505bdd4b9
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/createParentContentRecord.csv
@@ -0,0 +1,6 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,1
+,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",,0,0
+,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",,0,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/createParentContentRecordWithHotelAndOfferChildRecords.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/createParentContentRecordWithHotelAndOfferChildRecords.csv
new file mode 100644
index 0000000000000000000000000000000000000000..64e5d9ca6e0136d71bbd0ee351d0d182cf12e12a
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/createParentContentRecordWithHotelAndOfferChildRecords.csv
@@ -0,0 +1,30 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,1
+,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",,0,0
+,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",,0,1
+tx_irretutorial_1nff_hotel
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,offers
+,3,89,1,0,0,0,0,0,0,0,"Hotel #1",297,tt_content,,2
+,4,89,2,0,0,0,0,0,0,0,"Hotel #2",297,tt_content,,1
+,5,89,1,0,0,0,0,0,0,0,"Hotel #1",298,tt_content,,1
+,6,89,1,0,0,1,1,0,0,0,"Hotel #1",0,,,0
+,7,-1,1,0,0,1,-1,0,6,0,"Hotel #1",300,tt_content,,1
+tx_irretutorial_1nff_offer
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,prices
+,5,89,1,0,0,0,0,0,0,0,"Offer #1.1",3,tx_irretutorial_1nff_hotel,,3
+,6,89,2,0,0,0,0,0,0,0,"Offer #1.2",3,tx_irretutorial_1nff_hotel,,2
+,7,89,1,0,0,0,0,0,0,0,"Offer #2.1",4,tx_irretutorial_1nff_hotel,,1
+,8,89,1,0,0,0,0,0,0,0,"Offer #1.1",5,tx_irretutorial_1nff_hotel,,1
+,9,89,1,0,0,1,1,0,0,0,"Offer #1",0,,,0
+,10,-1,1,0,0,1,-1,0,9,0,"Offer #1",7,tx_irretutorial_1nff_hotel,,0
+tx_irretutorial_1nff_price
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier
+,7,89,1,0,0,0,0,0,0,0,"Price #1.1.1",5,tx_irretutorial_1nff_offer,
+,8,89,2,0,0,0,0,0,0,0,"Price #1.1.2",5,tx_irretutorial_1nff_offer,
+,9,89,3,0,0,0,0,0,0,0,"Price #1.1.3",5,tx_irretutorial_1nff_offer,
+,10,89,1,0,0,0,0,0,0,0,"Price #1.2.1",6,tx_irretutorial_1nff_offer,
+,11,89,2,0,0,0,0,0,0,0,"Price #1.2.2",6,tx_irretutorial_1nff_offer,
+,12,89,1,0,0,0,0,0,0,0,"Price #2.1.1",7,tx_irretutorial_1nff_offer,
+,13,89,1,0,0,0,0,0,0,0,"Price #1.1.1",8,tx_irretutorial_1nff_offer,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/deletePageRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/deletePageRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..99de9ab7b61059065ae3fa9a74f29898f53d6010
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/deletePageRecord.csv
@@ -0,0 +1,31 @@
+pages
+,uid,pid,sorting,deleted,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,1,0,256,0,0,0,0,0,0,FunctionalTest
+,88,1,256,0,0,0,0,0,0,DataHandlerTest
+,89,88,256,0,0,0,0,0,0,Relations
+,90,88,512,0,0,0,0,0,0,Target
+,91,-1,256,0,1,2,0,89,0,Relations
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,1
+tx_irretutorial_1nff_hotel
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,offers
+,3,89,1,0,0,0,0,0,0,0,"Hotel #1",297,tt_content,,2
+,4,89,2,0,0,0,0,0,0,0,"Hotel #2",297,tt_content,,1
+,5,89,1,0,0,0,0,0,0,0,"Hotel #1",298,tt_content,,1
+tx_irretutorial_1nff_offer
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,prices
+,5,89,1,0,0,0,0,0,0,0,"Offer #1.1",3,tx_irretutorial_1nff_hotel,,3
+,6,89,2,0,0,0,0,0,0,0,"Offer #1.2",3,tx_irretutorial_1nff_hotel,,2
+,7,89,1,0,0,0,0,0,0,0,"Offer #2.1",4,tx_irretutorial_1nff_hotel,,1
+,8,89,1,0,0,0,0,0,0,0,"Offer #1.1",5,tx_irretutorial_1nff_hotel,,1
+tx_irretutorial_1nff_price
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier
+,7,89,1,0,0,0,0,0,0,0,"Price #1.1.1",5,tx_irretutorial_1nff_offer,
+,8,89,2,0,0,0,0,0,0,0,"Price #1.1.2",5,tx_irretutorial_1nff_offer,
+,9,89,3,0,0,0,0,0,0,0,"Price #1.1.3",5,tx_irretutorial_1nff_offer,
+,10,89,1,0,0,0,0,0,0,0,"Price #1.2.1",6,tx_irretutorial_1nff_offer,
+,11,89,2,0,0,0,0,0,0,0,"Price #1.2.2",6,tx_irretutorial_1nff_offer,
+,12,89,1,0,0,0,0,0,0,0,"Price #2.1.1",7,tx_irretutorial_1nff_offer,
+,13,89,1,0,0,0,0,0,0,0,"Price #1.1.1",8,tx_irretutorial_1nff_offer,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/deleteParentContentRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/deleteParentContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..469f9cd48e4a580dd1c3fe54fdc28e7cbc189d5e
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/deleteParentContentRecord.csv
@@ -0,0 +1,28 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,1
+,299,-1,512,0,0,0,1,2,0,298,0,"Regular Element #2",0,0,1
+tx_irretutorial_1nff_hotel
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,offers
+,3,89,1,0,0,0,0,0,0,0,"Hotel #1",297,tt_content,,2
+,4,89,2,0,0,0,0,0,0,0,"Hotel #2",297,tt_content,,1
+,5,89,1,0,0,0,0,0,0,0,"Hotel #1",298,tt_content,,1
+,6,-1,1,0,0,1,2,0,5,0,"Hotel #1",299,tt_content,,1
+tx_irretutorial_1nff_offer
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,prices
+,5,89,1,0,0,0,0,0,0,0,"Offer #1.1",3,tx_irretutorial_1nff_hotel,,3
+,6,89,2,0,0,0,0,0,0,0,"Offer #1.2",3,tx_irretutorial_1nff_hotel,,2
+,7,89,1,0,0,0,0,0,0,0,"Offer #2.1",4,tx_irretutorial_1nff_hotel,,1
+,8,89,1,0,0,0,0,0,0,0,"Offer #1.1",5,tx_irretutorial_1nff_hotel,,1
+,9,-1,1,0,0,1,2,0,8,0,"Offer #1.1",6,tx_irretutorial_1nff_hotel,,1
+tx_irretutorial_1nff_price
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier
+,7,89,1,0,0,0,0,0,0,0,"Price #1.1.1",5,tx_irretutorial_1nff_offer,
+,8,89,2,0,0,0,0,0,0,0,"Price #1.1.2",5,tx_irretutorial_1nff_offer,
+,9,89,3,0,0,0,0,0,0,0,"Price #1.1.3",5,tx_irretutorial_1nff_offer,
+,10,89,1,0,0,0,0,0,0,0,"Price #1.2.1",6,tx_irretutorial_1nff_offer,
+,11,89,2,0,0,0,0,0,0,0,"Price #1.2.2",6,tx_irretutorial_1nff_offer,
+,12,89,1,0,0,0,0,0,0,0,"Price #2.1.1",7,tx_irretutorial_1nff_offer,
+,13,89,1,0,0,0,0,0,0,0,"Price #1.1.1",8,tx_irretutorial_1nff_offer,
+,14,-1,1,0,0,1,2,0,13,0,"Price #1.1.1",9,tx_irretutorial_1nff_offer,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/localizeParentContentRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/localizeParentContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e5a63c8c985b642327d13fa8641e14ac2bc3a157
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/localizeParentContentRecord.csv
@@ -0,0 +1,32 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,1
+,299,89,768,0,1,298,1,1,0,0,0,"[Translate to Dansk:] Regular Element #2",,0,0
+,300,-1,768,0,1,298,1,-1,0,299,0,"[Translate to Dansk:] Regular Element #2",0,0,1
+tx_irretutorial_1nff_hotel
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,offers
+,3,89,512,0,0,0,0,0,0,0,"Hotel #1",297,tt_content,,2
+,4,89,1280,0,0,0,0,0,0,0,"Hotel #2",297,tt_content,,1
+,5,89,768,0,0,0,0,0,0,0,"Hotel #1",298,tt_content,,1
+,6,89,1,0,1,1,1,0,0,0,"[Translate to Dansk:] Hotel #1",299,tt_content,,0
+,7,-1,1024,0,1,1,-1,0,6,0,"[Translate to Dansk:] Hotel #1",298,tt_content,,1
+tx_irretutorial_1nff_offer
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,prices
+,5,89,512,0,0,0,0,0,0,0,"Offer #1.1",3,tx_irretutorial_1nff_hotel,,3
+,6,89,1536,0,0,0,0,0,0,0,"Offer #1.2",3,tx_irretutorial_1nff_hotel,,2
+,7,89,768,0,0,0,0,0,0,0,"Offer #2.1",4,tx_irretutorial_1nff_hotel,,1
+,8,89,1024,0,0,0,0,0,0,0,"Offer #1.1",5,tx_irretutorial_1nff_hotel,,1
+,9,89,1,0,1,1,1,0,0,0,"[Translate to Dansk:] Offer #1.1",6,tx_irretutorial_1nff_hotel,,0
+,10,-1,1280,0,1,1,-1,0,9,0,"[Translate to Dansk:] Offer #1.1",5,tx_irretutorial_1nff_hotel,,1
+tx_irretutorial_1nff_price
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier
+,7,89,512,0,0,0,0,0,0,0,"Price #1.1.1",5,tx_irretutorial_1nff_offer,
+,8,89,1792,0,0,0,0,0,0,0,"Price #1.1.2",5,tx_irretutorial_1nff_offer,
+,9,89,2304,0,0,0,0,0,0,0,"Price #1.1.3",5,tx_irretutorial_1nff_offer,
+,10,89,768,0,0,0,0,0,0,0,"Price #1.2.1",6,tx_irretutorial_1nff_offer,
+,11,89,2048,0,0,0,0,0,0,0,"Price #1.2.2",6,tx_irretutorial_1nff_offer,
+,12,89,1024,0,0,0,0,0,0,0,"Price #2.1.1",7,tx_irretutorial_1nff_offer,
+,13,89,1280,0,0,0,0,0,0,0,"Price #1.1.1",8,tx_irretutorial_1nff_offer,
+,14,89,1,0,1,1,1,0,0,0,"[Translate to Dansk:] Price #1.1.1",9,tx_irretutorial_1nff_offer,
+,15,-1,1536,0,1,1,-1,0,14,0,"[Translate to Dansk:] Price #1.1.1",8,tx_irretutorial_1nff_offer,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyOnlyHotelChildRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyOnlyHotelChildRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..367a5b03f6bb07dd502c968593e9c2dbe64c42cd
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyOnlyHotelChildRecord.csv
@@ -0,0 +1,27 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,1
+tx_irretutorial_1nff_hotel
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,offers
+,3,89,1,0,0,0,0,0,0,0,"Hotel #1",297,tt_content,,2
+,4,89,2,0,0,0,0,0,0,0,"Hotel #2",297,tt_content,,1
+,5,89,1,0,0,0,0,0,0,0,"Hotel #1",298,tt_content,,1
+,6,-1,2,0,0,1,0,0,4,0,"Testing #1",297,tt_content,,1
+tx_irretutorial_1nff_offer
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,prices
+,5,89,1,0,0,0,0,0,0,0,"Offer #1.1",3,tx_irretutorial_1nff_hotel,,3
+,6,89,2,0,0,0,0,0,0,0,"Offer #1.2",3,tx_irretutorial_1nff_hotel,,2
+,7,89,1,0,0,0,0,0,0,0,"Offer #2.1",4,tx_irretutorial_1nff_hotel,,1
+,8,89,1,0,0,0,0,0,0,0,"Offer #1.1",5,tx_irretutorial_1nff_hotel,,1
+,9,-1,1,0,0,1,0,0,7,0,"Offer #2.1",6,tx_irretutorial_1nff_hotel,,1
+tx_irretutorial_1nff_price
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier
+,7,89,1,0,0,0,0,0,0,0,"Price #1.1.1",5,tx_irretutorial_1nff_offer,
+,8,89,2,0,0,0,0,0,0,0,"Price #1.1.2",5,tx_irretutorial_1nff_offer,
+,9,89,3,0,0,0,0,0,0,0,"Price #1.1.3",5,tx_irretutorial_1nff_offer,
+,10,89,1,0,0,0,0,0,0,0,"Price #1.2.1",6,tx_irretutorial_1nff_offer,
+,11,89,2,0,0,0,0,0,0,0,"Price #1.2.2",6,tx_irretutorial_1nff_offer,
+,12,89,1,0,0,0,0,0,0,0,"Price #2.1.1",7,tx_irretutorial_1nff_offer,
+,13,89,1,0,0,0,0,0,0,0,"Price #1.1.1",8,tx_irretutorial_1nff_offer,
+,14,-1,1,0,0,1,0,0,12,0,"Price #2.1.1",9,tx_irretutorial_1nff_offer,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyPageRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyPageRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..26001a9181ffdde4c68388f094800e632e1a9356
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyPageRecord.csv
@@ -0,0 +1,31 @@
+pages
+,uid,pid,sorting,deleted,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,1,0,256,0,0,0,0,0,0,FunctionalTest
+,88,1,256,0,0,0,0,0,0,DataHandlerTest
+,89,88,256,0,0,0,0,0,0,Relations
+,90,88,512,0,0,0,0,0,0,Target
+,91,-1,256,0,1,0,0,89,0,"Testing #1"
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,1
+tx_irretutorial_1nff_hotel
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,offers
+,3,89,1,0,0,0,0,0,0,0,"Hotel #1",297,tt_content,,2
+,4,89,2,0,0,0,0,0,0,0,"Hotel #2",297,tt_content,,1
+,5,89,1,0,0,0,0,0,0,0,"Hotel #1",298,tt_content,,1
+tx_irretutorial_1nff_offer
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,prices
+,5,89,1,0,0,0,0,0,0,0,"Offer #1.1",3,tx_irretutorial_1nff_hotel,,3
+,6,89,2,0,0,0,0,0,0,0,"Offer #1.2",3,tx_irretutorial_1nff_hotel,,2
+,7,89,1,0,0,0,0,0,0,0,"Offer #2.1",4,tx_irretutorial_1nff_hotel,,1
+,8,89,1,0,0,0,0,0,0,0,"Offer #1.1",5,tx_irretutorial_1nff_hotel,,1
+tx_irretutorial_1nff_price
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier
+,7,89,1,0,0,0,0,0,0,0,"Price #1.1.1",5,tx_irretutorial_1nff_offer,
+,8,89,2,0,0,0,0,0,0,0,"Price #1.1.2",5,tx_irretutorial_1nff_offer,
+,9,89,3,0,0,0,0,0,0,0,"Price #1.1.3",5,tx_irretutorial_1nff_offer,
+,10,89,1,0,0,0,0,0,0,0,"Price #1.2.1",6,tx_irretutorial_1nff_offer,
+,11,89,2,0,0,0,0,0,0,0,"Price #1.2.2",6,tx_irretutorial_1nff_offer,
+,12,89,1,0,0,0,0,0,0,0,"Price #2.1.1",7,tx_irretutorial_1nff_offer,
+,13,89,1,0,0,0,0,0,0,0,"Price #1.1.1",8,tx_irretutorial_1nff_offer,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyParentContentRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyParentContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..af499b890880d0785dd27d8e0dcaf767b73068c1
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyParentContentRecord.csv
@@ -0,0 +1,28 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,1
+,299,-1,512,0,0,0,1,0,0,298,0,"Testing #1",0,0,1
+tx_irretutorial_1nff_hotel
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,offers
+,3,89,1,0,0,0,0,0,0,0,"Hotel #1",297,tt_content,,2
+,4,89,2,0,0,0,0,0,0,0,"Hotel #2",297,tt_content,,1
+,5,89,1,0,0,0,0,0,0,0,"Hotel #1",298,tt_content,,1
+,6,-1,1,0,0,1,0,0,5,0,"Hotel #1",299,tt_content,,1
+tx_irretutorial_1nff_offer
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,prices
+,5,89,1,0,0,0,0,0,0,0,"Offer #1.1",3,tx_irretutorial_1nff_hotel,,3
+,6,89,2,0,0,0,0,0,0,0,"Offer #1.2",3,tx_irretutorial_1nff_hotel,,2
+,7,89,1,0,0,0,0,0,0,0,"Offer #2.1",4,tx_irretutorial_1nff_hotel,,1
+,8,89,1,0,0,0,0,0,0,0,"Offer #1.1",5,tx_irretutorial_1nff_hotel,,1
+,9,-1,1,0,0,1,0,0,8,0,"Offer #1.1",6,tx_irretutorial_1nff_hotel,,1
+tx_irretutorial_1nff_price
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier
+,7,89,1,0,0,0,0,0,0,0,"Price #1.1.1",5,tx_irretutorial_1nff_offer,
+,8,89,2,0,0,0,0,0,0,0,"Price #1.1.2",5,tx_irretutorial_1nff_offer,
+,9,89,3,0,0,0,0,0,0,0,"Price #1.1.3",5,tx_irretutorial_1nff_offer,
+,10,89,1,0,0,0,0,0,0,0,"Price #1.2.1",6,tx_irretutorial_1nff_offer,
+,11,89,2,0,0,0,0,0,0,0,"Price #1.2.2",6,tx_irretutorial_1nff_offer,
+,12,89,1,0,0,0,0,0,0,0,"Price #2.1.1",7,tx_irretutorial_1nff_offer,
+,13,89,1,0,0,0,0,0,0,0,"Price #1.1.1",8,tx_irretutorial_1nff_offer,
+,14,-1,1,0,0,1,0,0,13,0,"Price #1.1.1",9,tx_irretutorial_1nff_offer,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyParentRecordAndAddHotelChildRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyParentRecordAndAddHotelChildRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..0dbf527c669b0a4531a7a6fda68c5ef05fee9c80
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyParentRecordAndAddHotelChildRecord.csv
@@ -0,0 +1,30 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,1
+,299,-1,512,0,0,0,1,0,0,298,0,"Regular Element #2",0,0,2
+tx_irretutorial_1nff_hotel
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,offers
+,3,89,1,0,0,0,0,0,0,0,"Hotel #1",297,tt_content,,2
+,4,89,2,0,0,0,0,0,0,0,"Hotel #2",297,tt_content,,1
+,5,89,1,0,0,0,0,0,0,0,"Hotel #1",298,tt_content,,1
+,6,89,2,0,0,1,1,0,0,0,"Hotel #2",0,,,0
+,7,-1,2,0,0,1,-1,0,6,0,"Hotel #2",299,tt_content,,0
+,8,-1,1,0,0,1,0,0,5,0,"Hotel #1",299,tt_content,,1
+tx_irretutorial_1nff_offer
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,prices
+,5,89,1,0,0,0,0,0,0,0,"Offer #1.1",3,tx_irretutorial_1nff_hotel,,3
+,6,89,2,0,0,0,0,0,0,0,"Offer #1.2",3,tx_irretutorial_1nff_hotel,,2
+,7,89,1,0,0,0,0,0,0,0,"Offer #2.1",4,tx_irretutorial_1nff_hotel,,1
+,8,89,1,0,0,0,0,0,0,0,"Offer #1.1",5,tx_irretutorial_1nff_hotel,,1
+,9,-1,1,0,0,1,0,0,8,0,"Offer #1.1",8,tx_irretutorial_1nff_hotel,,1
+tx_irretutorial_1nff_price
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier
+,7,89,1,0,0,0,0,0,0,0,"Price #1.1.1",5,tx_irretutorial_1nff_offer,
+,8,89,2,0,0,0,0,0,0,0,"Price #1.1.2",5,tx_irretutorial_1nff_offer,
+,9,89,3,0,0,0,0,0,0,0,"Price #1.1.3",5,tx_irretutorial_1nff_offer,
+,10,89,1,0,0,0,0,0,0,0,"Price #1.2.1",6,tx_irretutorial_1nff_offer,
+,11,89,2,0,0,0,0,0,0,0,"Price #1.2.2",6,tx_irretutorial_1nff_offer,
+,12,89,1,0,0,0,0,0,0,0,"Price #2.1.1",7,tx_irretutorial_1nff_offer,
+,13,89,1,0,0,0,0,0,0,0,"Price #1.1.1",8,tx_irretutorial_1nff_offer,
+,14,-1,1,0,0,1,0,0,13,0,"Price #1.1.1",9,tx_irretutorial_1nff_offer,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyParentRecordAndChangeHotelChildRecordsSorting.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyParentRecordAndChangeHotelChildRecordsSorting.csv
new file mode 100644
index 0000000000000000000000000000000000000000..5cafcb99449cc35a27b15a789eeae1ec70728fb4
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyParentRecordAndChangeHotelChildRecordsSorting.csv
@@ -0,0 +1,36 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,1
+,299,-1,256,0,0,0,1,0,0,297,0,"Regular Element #1",0,0,2
+tx_irretutorial_1nff_hotel
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,offers
+,3,89,1,0,0,0,0,0,0,0,"Hotel #1",297,tt_content,,2
+,4,89,2,0,0,0,0,0,0,0,"Hotel #2",297,tt_content,,1
+,5,89,1,0,0,0,0,0,0,0,"Hotel #1",298,tt_content,,1
+,6,-1,2,0,0,1,0,0,3,0,"Hotel #1",299,tt_content,,2
+,7,-1,1,0,0,1,0,0,4,0,"Hotel #2",299,tt_content,,1
+tx_irretutorial_1nff_offer
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,prices
+,5,89,1,0,0,0,0,0,0,0,"Offer #1.1",3,tx_irretutorial_1nff_hotel,,3
+,6,89,2,0,0,0,0,0,0,0,"Offer #1.2",3,tx_irretutorial_1nff_hotel,,2
+,7,89,1,0,0,0,0,0,0,0,"Offer #2.1",4,tx_irretutorial_1nff_hotel,,1
+,8,89,1,0,0,0,0,0,0,0,"Offer #1.1",5,tx_irretutorial_1nff_hotel,,1
+,9,-1,1,0,0,1,0,0,5,0,"Offer #1.1",6,tx_irretutorial_1nff_hotel,,3
+,10,-1,2,0,0,1,0,0,6,0,"Offer #1.2",6,tx_irretutorial_1nff_hotel,,2
+,11,-1,1,0,0,1,0,0,7,0,"Offer #2.1",7,tx_irretutorial_1nff_hotel,,1
+tx_irretutorial_1nff_price
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier
+,7,89,1,0,0,0,0,0,0,0,"Price #1.1.1",5,tx_irretutorial_1nff_offer,
+,8,89,2,0,0,0,0,0,0,0,"Price #1.1.2",5,tx_irretutorial_1nff_offer,
+,9,89,3,0,0,0,0,0,0,0,"Price #1.1.3",5,tx_irretutorial_1nff_offer,
+,10,89,1,0,0,0,0,0,0,0,"Price #1.2.1",6,tx_irretutorial_1nff_offer,
+,11,89,2,0,0,0,0,0,0,0,"Price #1.2.2",6,tx_irretutorial_1nff_offer,
+,12,89,1,0,0,0,0,0,0,0,"Price #2.1.1",7,tx_irretutorial_1nff_offer,
+,13,89,1,0,0,0,0,0,0,0,"Price #1.1.1",8,tx_irretutorial_1nff_offer,
+,14,-1,1,0,0,1,0,0,7,0,"Price #1.1.1",9,tx_irretutorial_1nff_offer,
+,15,-1,2,0,0,1,0,0,8,0,"Price #1.1.2",9,tx_irretutorial_1nff_offer,
+,16,-1,3,0,0,1,0,0,9,0,"Price #1.1.3",9,tx_irretutorial_1nff_offer,
+,17,-1,1,0,0,1,0,0,10,0,"Price #1.2.1",10,tx_irretutorial_1nff_offer,
+,18,-1,2,0,0,1,0,0,11,0,"Price #1.2.2",10,tx_irretutorial_1nff_offer,
+,19,-1,1,0,0,1,0,0,12,0,"Price #2.1.1",11,tx_irretutorial_1nff_offer,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyParentRecordAndDeleteHotelChildRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyParentRecordAndDeleteHotelChildRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..42034454a2c5f9995b51eb132389b6dfbff8e8e0
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyParentRecordAndDeleteHotelChildRecord.csv
@@ -0,0 +1,36 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,1
+,299,-1,256,0,0,0,1,0,0,297,0,"Regular Element #1",0,0,1
+tx_irretutorial_1nff_hotel
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,offers
+,3,89,1,0,0,0,0,0,0,0,"Hotel #1",297,tt_content,,2
+,4,89,2,0,0,0,0,0,0,0,"Hotel #2",297,tt_content,,1
+,5,89,1,0,0,0,0,0,0,0,"Hotel #1",298,tt_content,,1
+,6,-1,1,0,0,1,0,0,3,0,"Hotel #1",299,tt_content,,2
+,7,-1,2,0,0,1,2,0,4,0,"Hotel #2",297,tt_content,,1
+tx_irretutorial_1nff_offer
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,prices
+,5,89,1,0,0,0,0,0,0,0,"Offer #1.1",3,tx_irretutorial_1nff_hotel,,3
+,6,89,2,0,0,0,0,0,0,0,"Offer #1.2",3,tx_irretutorial_1nff_hotel,,2
+,7,89,1,0,0,0,0,0,0,0,"Offer #2.1",4,tx_irretutorial_1nff_hotel,,1
+,8,89,1,0,0,0,0,0,0,0,"Offer #1.1",5,tx_irretutorial_1nff_hotel,,1
+,9,-1,1,0,0,1,0,0,5,0,"Offer #1.1",6,tx_irretutorial_1nff_hotel,,3
+,10,-1,2,0,0,1,0,0,6,0,"Offer #1.2",6,tx_irretutorial_1nff_hotel,,2
+,11,-1,1,0,0,1,2,0,7,0,"Offer #2.1",7,tx_irretutorial_1nff_hotel,,1
+tx_irretutorial_1nff_price
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier
+,7,89,1,0,0,0,0,0,0,0,"Price #1.1.1",5,tx_irretutorial_1nff_offer,
+,8,89,2,0,0,0,0,0,0,0,"Price #1.1.2",5,tx_irretutorial_1nff_offer,
+,9,89,3,0,0,0,0,0,0,0,"Price #1.1.3",5,tx_irretutorial_1nff_offer,
+,10,89,1,0,0,0,0,0,0,0,"Price #1.2.1",6,tx_irretutorial_1nff_offer,
+,11,89,2,0,0,0,0,0,0,0,"Price #1.2.2",6,tx_irretutorial_1nff_offer,
+,12,89,1,0,0,0,0,0,0,0,"Price #2.1.1",7,tx_irretutorial_1nff_offer,
+,13,89,1,0,0,0,0,0,0,0,"Price #1.1.1",8,tx_irretutorial_1nff_offer,
+,14,-1,1,0,0,1,0,0,7,0,"Price #1.1.1",9,tx_irretutorial_1nff_offer,
+,15,-1,2,0,0,1,0,0,8,0,"Price #1.1.2",9,tx_irretutorial_1nff_offer,
+,16,-1,3,0,0,1,0,0,9,0,"Price #1.1.3",9,tx_irretutorial_1nff_offer,
+,17,-1,1,0,0,1,0,0,10,0,"Price #1.2.1",10,tx_irretutorial_1nff_offer,
+,18,-1,2,0,0,1,0,0,11,0,"Price #1.2.2",10,tx_irretutorial_1nff_offer,
+,19,-1,1,0,0,1,2,0,12,0,"Price #2.1.1",11,tx_irretutorial_1nff_offer,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyParentRecordWithHotelChildRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyParentRecordWithHotelChildRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..6d4cecba7072f00eb0509d594ecc6599caebf96b
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/modifyParentRecordWithHotelChildRecord.csv
@@ -0,0 +1,31 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,1
+,299,-1,512,0,0,0,1,0,0,298,0,"Regular Element #2",0,0,2
+tx_irretutorial_1nff_hotel
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,offers
+,3,89,1,0,0,0,0,0,0,0,"Hotel #1",299,tt_content,,2
+,4,89,2,0,0,0,0,0,0,0,"Hotel #2",297,tt_content,,1
+,5,89,1,0,0,0,0,0,0,0,"Hotel #1",298,tt_content,,1
+,6,-1,2,0,0,1,0,0,4,0,"Testing #1",299,tt_content,,1
+,7,-1,1,0,0,1,0,0,5,0,"Hotel #1",299,tt_content,,1
+tx_irretutorial_1nff_offer
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,prices
+,5,89,1,0,0,0,0,0,0,0,"Offer #1.1",3,tx_irretutorial_1nff_hotel,,3
+,6,89,2,0,0,0,0,0,0,0,"Offer #1.2",3,tx_irretutorial_1nff_hotel,,2
+,7,89,1,0,0,0,0,0,0,0,"Offer #2.1",4,tx_irretutorial_1nff_hotel,,1
+,8,89,1,0,0,0,0,0,0,0,"Offer #1.1",5,tx_irretutorial_1nff_hotel,,1
+,9,-1,1,0,0,1,0,0,7,0,"Offer #2.1",6,tx_irretutorial_1nff_hotel,,1
+,10,-1,1,0,0,1,0,0,8,0,"Offer #1.1",7,tx_irretutorial_1nff_hotel,,1
+tx_irretutorial_1nff_price
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier
+,7,89,1,0,0,0,0,0,0,0,"Price #1.1.1",5,tx_irretutorial_1nff_offer,
+,8,89,2,0,0,0,0,0,0,0,"Price #1.1.2",5,tx_irretutorial_1nff_offer,
+,9,89,3,0,0,0,0,0,0,0,"Price #1.1.3",5,tx_irretutorial_1nff_offer,
+,10,89,1,0,0,0,0,0,0,0,"Price #1.2.1",6,tx_irretutorial_1nff_offer,
+,11,89,2,0,0,0,0,0,0,0,"Price #1.2.2",6,tx_irretutorial_1nff_offer,
+,12,89,1,0,0,0,0,0,0,0,"Price #2.1.1",7,tx_irretutorial_1nff_offer,
+,13,89,1,0,0,0,0,0,0,0,"Price #1.1.1",8,tx_irretutorial_1nff_offer,
+,14,-1,1,0,0,1,0,0,12,0,"Price #2.1.1",9,tx_irretutorial_1nff_offer,
+,15,-1,1,0,0,1,0,0,13,0,"Price #1.1.1",10,tx_irretutorial_1nff_offer,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/moveParentContentRecordToDifferentPage.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/moveParentContentRecordToDifferentPage.csv
new file mode 100644
index 0000000000000000000000000000000000000000..6383d9a30ecb96d2c9aa47543023671121b3afdb
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/moveParentContentRecordToDifferentPage.csv
@@ -0,0 +1,29 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,1
+,299,-1,512,0,0,0,1,4,0,298,0,"Regular Element #2",0,0,1
+,300,90,256,0,0,0,1,3,0,0,298,"[MOVE-TO PLACEHOLDER for #298, WS#1]",,0,0
+tx_irretutorial_1nff_hotel
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,offers
+,3,89,1,0,0,0,0,0,0,0,"Hotel #1",297,tt_content,,2
+,4,89,2,0,0,0,0,0,0,0,"Hotel #2",297,tt_content,,1
+,5,89,1,0,0,0,0,0,0,0,"Hotel #1",298,tt_content,,1
+,6,-1,1,0,0,1,0,0,5,0,"Hotel #1",299,tt_content,,1
+tx_irretutorial_1nff_offer
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,prices
+,5,89,1,0,0,0,0,0,0,0,"Offer #1.1",3,tx_irretutorial_1nff_hotel,,3
+,6,89,2,0,0,0,0,0,0,0,"Offer #1.2",3,tx_irretutorial_1nff_hotel,,2
+,7,89,1,0,0,0,0,0,0,0,"Offer #2.1",4,tx_irretutorial_1nff_hotel,,1
+,8,89,1,0,0,0,0,0,0,0,"Offer #1.1",5,tx_irretutorial_1nff_hotel,,1
+,9,-1,1,0,0,1,0,0,8,0,"Offer #1.1",6,tx_irretutorial_1nff_hotel,,1
+tx_irretutorial_1nff_price
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier
+,7,89,1,0,0,0,0,0,0,0,"Price #1.1.1",5,tx_irretutorial_1nff_offer,
+,8,89,2,0,0,0,0,0,0,0,"Price #1.1.2",5,tx_irretutorial_1nff_offer,
+,9,89,3,0,0,0,0,0,0,0,"Price #1.1.3",5,tx_irretutorial_1nff_offer,
+,10,89,1,0,0,0,0,0,0,0,"Price #1.2.1",6,tx_irretutorial_1nff_offer,
+,11,89,2,0,0,0,0,0,0,0,"Price #1.2.2",6,tx_irretutorial_1nff_offer,
+,12,89,1,0,0,0,0,0,0,0,"Price #2.1.1",7,tx_irretutorial_1nff_offer,
+,13,89,1,0,0,0,0,0,0,0,"Price #1.1.1",8,tx_irretutorial_1nff_offer,
+,14,-1,1,0,0,1,0,0,13,0,"Price #1.1.1",9,tx_irretutorial_1nff_offer,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/moveParentContentRecordToDifferentPageAndChangeSorting.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/moveParentContentRecordToDifferentPageAndChangeSorting.csv
new file mode 100644
index 0000000000000000000000000000000000000000..bdccd66038a5f9f10b12686ee45f999c1f3121df
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Assertion/moveParentContentRecordToDifferentPageAndChangeSorting.csv
@@ -0,0 +1,42 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,90,384,0,0,0,0,0,0,0,0,"Regular Element #1",,0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,1
+,299,-1,512,0,0,0,1,4,0,298,0,"Regular Element #2",0,0,1
+,300,90,256,0,0,0,1,3,0,0,298,"[MOVE-TO PLACEHOLDER for #298, WS#1]",,0,0
+,301,-1,256,0,0,0,1,4,0,297,0,"Regular Element #1",0,0,2
+,302,90,512,0,0,0,1,3,0,0,297,"[MOVE-TO PLACEHOLDER for #297, WS#1]",,0,0
+tx_irretutorial_1nff_hotel
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,offers
+,3,89,1,0,0,0,0,0,0,0,"Hotel #1",297,tt_content,,2
+,4,89,2,0,0,0,0,0,0,0,"Hotel #2",297,tt_content,,1
+,5,89,1,0,0,0,0,0,0,0,"Hotel #1",298,tt_content,,1
+,6,-1,1,0,0,1,0,0,5,0,"Hotel #1",299,tt_content,,1
+,7,-1,1,0,0,1,0,0,3,0,"Hotel #1",301,tt_content,,2
+,8,-1,2,0,0,1,0,0,4,0,"Hotel #2",301,tt_content,,1
+tx_irretutorial_1nff_offer
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier,prices
+,5,89,1,0,0,0,0,0,0,0,"Offer #1.1",3,tx_irretutorial_1nff_hotel,,3
+,6,89,2,0,0,0,0,0,0,0,"Offer #1.2",3,tx_irretutorial_1nff_hotel,,2
+,7,89,1,0,0,0,0,0,0,0,"Offer #2.1",4,tx_irretutorial_1nff_hotel,,1
+,8,89,1,0,0,0,0,0,0,0,"Offer #1.1",5,tx_irretutorial_1nff_hotel,,1
+,9,-1,1,0,0,1,0,0,8,0,"Offer #1.1",6,tx_irretutorial_1nff_hotel,,1
+,10,-1,1,0,0,1,0,0,5,0,"Offer #1.1",7,tx_irretutorial_1nff_hotel,,3
+,11,-1,2,0,0,1,0,0,6,0,"Offer #1.2",7,tx_irretutorial_1nff_hotel,,2
+,12,-1,1,0,0,1,0,0,7,0,"Offer #2.1",8,tx_irretutorial_1nff_hotel,,1
+tx_irretutorial_1nff_price
+,uid,pid,sorting,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parentid,parenttable,parentidentifier
+,7,89,1,0,0,0,0,0,0,0,"Price #1.1.1",5,tx_irretutorial_1nff_offer,
+,8,89,2,0,0,0,0,0,0,0,"Price #1.1.2",5,tx_irretutorial_1nff_offer,
+,9,89,3,0,0,0,0,0,0,0,"Price #1.1.3",5,tx_irretutorial_1nff_offer,
+,10,89,1,0,0,0,0,0,0,0,"Price #1.2.1",6,tx_irretutorial_1nff_offer,
+,11,89,2,0,0,0,0,0,0,0,"Price #1.2.2",6,tx_irretutorial_1nff_offer,
+,12,89,1,0,0,0,0,0,0,0,"Price #2.1.1",7,tx_irretutorial_1nff_offer,
+,13,89,1,0,0,0,0,0,0,0,"Price #1.1.1",8,tx_irretutorial_1nff_offer,
+,14,-1,1,0,0,1,0,0,13,0,"Price #1.1.1",9,tx_irretutorial_1nff_offer,
+,15,-1,1,0,0,1,0,0,7,0,"Price #1.1.1",10,tx_irretutorial_1nff_offer,
+,16,-1,2,0,0,1,0,0,8,0,"Price #1.1.2",10,tx_irretutorial_1nff_offer,
+,17,-1,3,0,0,1,0,0,9,0,"Price #1.1.3",10,tx_irretutorial_1nff_offer,
+,18,-1,1,0,0,1,0,0,10,0,"Price #1.2.1",11,tx_irretutorial_1nff_offer,
+,19,-1,2,0,0,1,0,0,11,0,"Price #1.2.2",11,tx_irretutorial_1nff_offer,
+,20,-1,1,0,0,1,0,0,12,0,"Price #2.1.1",12,tx_irretutorial_1nff_offer,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Scenario/LiveDefaultElements.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Scenario/LiveDefaultElements.csv
new file mode 100644
index 0000000000000000000000000000000000000000..81f889fd3905b275b13adec755b7bcd8ca1ef300
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Scenario/LiveDefaultElements.csv
@@ -0,0 +1,35 @@
+sys_workspace
+,uid,pid,deleted,title,adminusers,members,reviewers,db_mountpoints,file_mountpoints,freeze,live_edit,vtypes,disable_autocreate,swap_modes,publish_access,custom_stages,stagechg_notification,edit_notification_mode,edit_notification_defaults,edit_allow_notificaton_settings,publish_notification_mode,publish_notification_defaults,publish_allow_notificaton_settings
+,1,0,0,"Workspace #1",,,,,,0,0,0,0,0,0,0,0,0,,0,0,,0
+,2,0,0,"Workspace #2",,,,,,0,0,0,0,0,0,0,0,0,,0,0,,0
+sys_workspace_stage
+,uid,pid,tstamp,deleted,sorting,title,responsible_persons,default_mailcomment,parentid,parenttable,notification_mode,notification_defaults,allow_notificaton_settings
+,1,0,1290048921,0,1,"Stage 1",be_users_3,,1,sys_workspace,0,,0
+"sys_language",,,,,,,,,,,,,,,
+,"uid","pid","hidden","title","flag",,,,,,,,,,
+,1,0,0,"Dansk","dk",,,,,,,,,,
+,2,0,0,"Deutsch","de",,,,,,,,,,
+"tt_content",,,,,,,,,,,,,,,
+,"uid","pid","sorting","deleted","sys_language_uid","l18n_parent","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","header","image","categories","tx_irretutorial_hotels"
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","\NULL",0,2
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2","\NULL",0,1
+"tx_irretutorial_1nff_hotel",,,,,,,,,,,,,,,
+,"uid","pid","sorting","deleted","sys_language_uid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","title","parentid","parenttable","parentidentifier","offers"
+,3,89,1,0,0,0,0,0,0,0,"Hotel #1",297,"tt_content",,2
+,4,89,2,0,0,0,0,0,0,0,"Hotel #2",297,"tt_content",,1
+,5,89,1,0,0,0,0,0,0,0,"Hotel #1",298,"tt_content",,1
+"tx_irretutorial_1nff_offer",,,,,,,,,,,,,,,
+,"uid","pid","sorting","deleted","sys_language_uid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","title","parentid","parenttable","parentidentifier","prices"
+,5,89,1,0,0,0,0,0,0,0,"Offer #1.1",3,"tx_irretutorial_1nff_hotel",,3
+,6,89,2,0,0,0,0,0,0,0,"Offer #1.2",3,"tx_irretutorial_1nff_hotel",,2
+,7,89,1,0,0,0,0,0,0,0,"Offer #2.1",4,"tx_irretutorial_1nff_hotel",,1
+,8,89,1,0,0,0,0,0,0,0,"Offer #1.1",5,"tx_irretutorial_1nff_hotel",,1
+"tx_irretutorial_1nff_price",,,,,,,,,,,,,,,
+,"uid","pid","sorting","deleted","sys_language_uid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","title","parentid","parenttable","parentidentifier",
+,7,89,1,0,0,0,0,0,0,0,"Price #1.1.1",5,"tx_irretutorial_1nff_offer",,
+,8,89,2,0,0,0,0,0,0,0,"Price #1.1.2",5,"tx_irretutorial_1nff_offer",,
+,9,89,3,0,0,0,0,0,0,0,"Price #1.1.3",5,"tx_irretutorial_1nff_offer",,
+,10,89,1,0,0,0,0,0,0,0,"Price #1.2.1",6,"tx_irretutorial_1nff_offer",,
+,11,89,2,0,0,0,0,0,0,0,"Price #1.2.2",6,"tx_irretutorial_1nff_offer",,
+,12,89,1,0,0,0,0,0,0,0,"Price #2.1.1",7,"tx_irretutorial_1nff_offer",,
+,13,89,1,0,0,0,0,0,0,0,"Price #1.1.1",8,"tx_irretutorial_1nff_offer",,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Scenario/LiveDefaultPages.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Scenario/LiveDefaultPages.csv
new file mode 100644
index 0000000000000000000000000000000000000000..17b04d408c8e79510b60113f28e7b0a3ae6a15e5
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/DataSet/Scenario/LiveDefaultPages.csv
@@ -0,0 +1,6 @@
+pages
+,uid,pid,sorting,deleted,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,1,0,256,0,0,0,0,0,0,FunctionalTest
+,88,1,256,0,0,0,0,0,0,DataHandlerTest
+,89,88,256,0,0,0,0,0,0,Relations
+,90,88,512,0,0,0,0,0,0,Target
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/WorkspaceActionTest.php b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/WorkspaceActionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b34ca1d4628b4ac7b7eba27874578d1c56542948
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/ForeignField/WorkspaceActionTest.php
@@ -0,0 +1,39 @@
+<?php
+namespace TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\InlineRelationalRecordEditing\ForeignField;
+
+/***************************************************************
+ * Copyright notice
+ *
+ * (c) 2014 Oliver Hader <oliver.hader@typo3.org>
+ * All rights reserved
+ *
+ * This script is part of the TYPO3 project. The TYPO3 project is
+ * free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * The GNU General Public License can be found at
+ * http://www.gnu.org/copyleft/gpl.html.
+ *
+ * This script is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+require_once dirname(__FILE__) . '/AbstractActionTestCase.php';
+
+/**
+ * Functional test for the DataHandler
+ */
+class WorkspaceActionTest extends AbstractActionTestCase {
+
+	public function setUp() {
+		parent::setUp();
+		$this->backendUser->workspace = 1;
+	}
+
+}
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/AbstractActionTestCase.php b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/AbstractActionTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..13d0eea6ac29a027604d56a9ce8afe432adbfb31
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/AbstractActionTestCase.php
@@ -0,0 +1,229 @@
+<?php
+namespace TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\ManyToMany;
+
+/***************************************************************
+ * Copyright notice
+ *
+ * (c) 2014 Oliver Hader <oliver.hader@typo3.org>
+ * All rights reserved
+ *
+ * This script is part of the TYPO3 project. The TYPO3 project is
+ * free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * The GNU General Public License can be found at
+ * http://www.gnu.org/copyleft/gpl.html.
+ *
+ * This script is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+require_once __DIR__ . '/../../../../../core/Tests/Functional/DataHandling/AbstractDataHandlerActionTestCase.php';
+
+/**
+ * Functional test for the DataHandler
+ */
+abstract class AbstractActionTestCase extends \TYPO3\CMS\Core\Tests\Functional\DataHandling\AbstractDataHandlerActionTestCase {
+
+	const VALUE_PageId = 89;
+	const VALUE_PageIdTarget = 90;
+	const VALUE_ContentIdFirst = 297;
+	const VALUE_ContentIdLast = 298;
+	const VALUE_LanguageId = 1;
+	const VALUE_CategoryIdFirst = 28;
+	const VALUE_CategoryIdSecond = 29;
+
+	const TABLE_Content = 'tt_content';
+	const TABLE_Category = 'sys_category';
+	const TABLE_ContentCategory_ManyToMany = 'sys_category_record_mm';
+
+	/**
+	 * @var string
+	 */
+	protected $dataSetDirectory = 'typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/';
+
+	/**
+	 * @var array
+	 */
+	protected $coreExtensionsToLoad = array(
+		'version',
+		'workspaces',
+	);
+
+	public function setUp() {
+		parent::setUp();
+		$this->importScenarioDataSet('LiveDefaultPages');
+		$this->importScenarioDataSet('LiveDefaultElements');
+	}
+
+	/**
+	 * MM Relations
+	 */
+
+	/**
+	 * @test
+	 */
+	public function addCategoryRelation() {
+		$this->actionService->modifyReferences(
+			self::TABLE_Content, self::VALUE_ContentIdFirst, 'categories', array(self::VALUE_CategoryIdFirst, self::VALUE_CategoryIdSecond, 31)
+		);
+		$this->assertAssertionDataSet('addCategoryRelation');
+	}
+
+	/**
+	 * @test
+	 */
+	public function deleteCategoryRelation() {
+		$this->actionService->modifyReferences(
+			self::TABLE_Content, self::VALUE_ContentIdFirst, 'categories', array(self::VALUE_CategoryIdFirst)
+		);
+		$this->assertAssertionDataSet('deleteCategoryRelation');
+	}
+
+	/**
+	 * @test
+	 */
+	public function changeCategoryRelationSorting() {
+		$this->actionService->modifyReferences(
+			self::TABLE_Content, self::VALUE_ContentIdFirst, 'categories', array(self::VALUE_CategoryIdSecond, self::VALUE_CategoryIdFirst)
+		);
+		$this->assertAssertionDataSet('changeCategoryRelationSorting');
+	}
+
+	/**
+	 * @test
+	 */
+	public function createContentRecordAndAddCategoryRelation() {
+		$this->actionService->createNewRecord(
+			self::TABLE_Content, self::VALUE_PageId, array('header' => 'Testing #1', 'categories' => self::VALUE_CategoryIdSecond)
+		);
+		$this->assertAssertionDataSet('createContentRecordAndAddCategoryRelation');
+	}
+
+	/**
+	 * @test
+	 */
+	public function createCategoryRecordAndAddCategoryRelation() {
+		$this->actionService->createNewRecord(
+			self::TABLE_Category, 0, array('title' => 'Testing #1', 'items' => 'tt_content_' . self::VALUE_ContentIdFirst)
+		);
+		$this->assertAssertionDataSet('createCategoryRecordAndAddCategoryRelation');
+	}
+
+	/**
+	 * @test
+	 */
+	public function createContentRecordAndCreateCategoryRelation() {
+		$this->actionService->createNewRecords(
+			self::VALUE_PageId,
+			array(
+				self::TABLE_Category => array('title' => 'Testing #1'),
+				self::TABLE_Content => array('header' => 'Testing #1', 'categories' => '__previousUid'),
+			)
+		);
+		$this->assertAssertionDataSet('createContentRecordAndCreateCategoryRelation');
+	}
+
+	/**
+	 * @test
+	 */
+	public function createCategoryRecordAndCreateCategoryRelation() {
+		$this->markTestSkipped('The new content record cannot be referenced in the new category record');
+		$this->actionService->createNewRecords(
+			self::VALUE_PageId,
+			array(
+				self::TABLE_Content => array('header' => 'Testing #1',),
+				self::TABLE_Category => array('title' => 'Testing #1', 'items' => 'tt_content___previousUid'),
+			)
+		);
+		$this->assertAssertionDataSet('createCategoryRecordAndCreateCategoryRelation');
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyCategoryRecordOfCategoryRelation() {
+		$this->actionService->modifyRecord(self::TABLE_Category, self::VALUE_CategoryIdFirst, array('title' => 'Testing #1'));
+		$this->assertAssertionDataSet('modifyCategoryRecordOfCategoryRelation');
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyContentRecordOfCategoryRelation() {
+		$this->actionService->modifyRecord(self::TABLE_Content, self::VALUE_ContentIdFirst, array('header' => 'Testing #1'));
+		$this->assertAssertionDataSet('modifyContentRecordOfCategoryRelation');
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyBothRecordsOfCategoryRelation() {
+		$this->actionService->modifyRecord(self::TABLE_Category, self::VALUE_CategoryIdFirst, array('title' => 'Testing #1'));
+		$this->actionService->modifyRecord(self::TABLE_Content, self::VALUE_ContentIdFirst, array('header' => 'Testing #1'));
+		$this->assertAssertionDataSet('modifyBothRecordsOfCategoryRelation');
+	}
+
+	/**
+	 * @test
+	 */
+	public function deleteContentRecordOfCategoryRelation() {
+		$this->actionService->deleteRecord(self::TABLE_Content, self::VALUE_ContentIdLast);
+		$this->assertAssertionDataSet('deleteContentRecordOfCategoryRelation');
+	}
+
+	/**
+	 * @test
+	 */
+	public function deleteCategoryRecordOfCategoryRelation() {
+		$this->actionService->deleteRecord(self::TABLE_Category, self::VALUE_CategoryIdFirst);
+		$this->assertAssertionDataSet('deleteCategoryRecordOfCategoryRelation');
+	}
+
+	/**
+	 * @test
+	 */
+	public function copyContentRecordOfCategoryRelation() {
+		$this->actionService->copyRecord(self::TABLE_Content, self::VALUE_ContentIdLast, self::VALUE_PageId);
+		$this->assertAssertionDataSet('copyContentRecordOfCategoryRelation');
+	}
+
+	/**
+	 * @test
+	 */
+	public function copyCategoryRecordOfCategoryRelation() {
+		$this->actionService->copyRecord(self::TABLE_Category, self::VALUE_CategoryIdFirst, 0);
+		$this->assertAssertionDataSet('copyCategoryRecordOfCategoryRelation');
+	}
+
+	/**
+	 * @test
+	 */
+	public function localizeContentRecordOfCategoryRelation() {
+		$this->actionService->localizeRecord(self::TABLE_Content, self::VALUE_ContentIdLast, self::VALUE_LanguageId);
+		$this->assertAssertionDataSet('localizeContentRecordOfCategoryRelation');
+	}
+
+	/**
+	 * @test
+	 */
+	public function localizeCategoryRecordOfCategoryRelation() {
+		$this->actionService->localizeRecord(self::TABLE_Category, self::VALUE_CategoryIdFirst, self::VALUE_LanguageId);
+		$this->assertAssertionDataSet('localizeCategoryRecordOfCategoryRelation');
+	}
+
+	/**
+	 * @test
+	 */
+	public function moveContentRecordOfCategoryRelationToDifferentPage() {
+		$this->actionService->moveRecord(self::TABLE_Content, self::VALUE_ContentIdLast, self::VALUE_PageIdTarget);
+		$this->assertAssertionDataSet('moveContentRecordOfCategoryRelationToDifferentPage');
+	}
+
+}
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/addCategoryRelation.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/addCategoryRelation.csv
new file mode 100644
index 0000000000000000000000000000000000000000..6cb9587e0ad111880d49db6486a2e61c59d10787
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/addCategoryRelation.csv
@@ -0,0 +1,21 @@
+sys_category
+,uid,pid,sorting,deleted,sys_language_uid,l10n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parent,items
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0
+sys_category_record_mm
+,uid_local,uid_foreign,tablenames,sorting,sorting_foreign,fieldname
+,28,297,tt_content,0,1,categories
+,29,297,tt_content,0,2,categories
+,29,298,tt_content,0,1,categories
+,30,298,tt_content,0,2,categories
+# --- workspace change ---
+,28,299,tt_content,0,1,categories
+,29,299,tt_content,0,2,categories
+,31,299,tt_content,0,3,categories
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,2,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,2,0
+,299,-1,256,0,0,0,1,0,0,297,0,"Regular Element #1",0,3,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/changeCategoryRelationSorting.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/changeCategoryRelationSorting.csv
new file mode 100644
index 0000000000000000000000000000000000000000..5d03a131d6d22c9c0cc38f9ac012ebc1bfcd1da6
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/changeCategoryRelationSorting.csv
@@ -0,0 +1,20 @@
+sys_category
+,uid,pid,sorting,deleted,sys_language_uid,l10n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parent,items
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0
+sys_category_record_mm
+,uid_local,uid_foreign,tablenames,sorting,sorting_foreign,fieldname
+,28,297,tt_content,0,1,categories
+,29,297,tt_content,0,2,categories
+,29,298,tt_content,0,1,categories
+,30,298,tt_content,0,2,categories
+# --- Sorting relation in workspace ---
+,28,299,tt_content,0,2,categories
+,29,299,tt_content,0,1,categories
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,2,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,2,0
+,299,-1,256,0,0,0,1,0,0,297,0,"Regular Element #1",0,2,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/copyCategoryRecordOfCategoryRelation.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/copyCategoryRecordOfCategoryRelation.csv
new file mode 100644
index 0000000000000000000000000000000000000000..77e2520cdece472665460ca5808dab5b7ab4a92f
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/copyCategoryRecordOfCategoryRelation.csv
@@ -0,0 +1,20 @@
+sys_category
+,uid,pid,sorting,deleted,sys_language_uid,l10n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parent,items
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0
+,32,0,128,0,0,0,1,1,0,0,0,"Category A",0,1
+,33,-1,128,0,0,0,1,-1,0,32,0,"Category A",0,1
+sys_category_record_mm
+,uid_local,uid_foreign,tablenames,sorting,sorting_foreign,fieldname
+,28,297,tt_content,0,1,categories
+,29,297,tt_content,0,2,categories
+,29,298,tt_content,0,1,categories
+,30,298,tt_content,0,2,categories
+# --- workspace change ---
+,33,297,tt_content,1,0,\*categories
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,2,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,2,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/copyContentRecordOfCategoryRelation.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/copyContentRecordOfCategoryRelation.csv
new file mode 100644
index 0000000000000000000000000000000000000000..76698ad0998ba0a72caa6ce8a2ec674f0f82c167
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/copyContentRecordOfCategoryRelation.csv
@@ -0,0 +1,21 @@
+sys_category
+,uid,pid,sorting,deleted,sys_language_uid,l10n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parent,items
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0
+sys_category_record_mm
+,uid_local,uid_foreign,tablenames,sorting,sorting_foreign,fieldname
+,28,297,tt_content,0,1,categories
+,29,297,tt_content,0,2,categories
+,29,298,tt_content,0,1,categories
+,30,298,tt_content,0,2,categories
+# --- workspace change ---
+,29,300,tt_content,0,1,categories
+,30,300,tt_content,0,2,categories
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,2,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,2,0
+,299,89,128,0,0,0,1,1,0,0,0,"Regular Element #2 (copy 1)",,2,0
+,300,-1,128,0,0,0,1,-1,0,299,0,"Regular Element #2 (copy 1)",0,2,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/createCategoryRecordAndAddCategoryRelation.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/createCategoryRecordAndAddCategoryRelation.csv
new file mode 100644
index 0000000000000000000000000000000000000000..9ffd942e2d6ff651358cb0c08fc98a3915a1b0d5
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/createCategoryRecordAndAddCategoryRelation.csv
@@ -0,0 +1,20 @@
+sys_category
+,uid,pid,sorting,deleted,sys_language_uid,l10n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parent,items
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0
+,32,0,128,0,0,0,1,1,0,0,0,"Testing #1",0,1
+,33,-1,128,0,0,0,1,-1,0,32,0,"Testing #1",0,1
+sys_category_record_mm
+,uid_local,uid_foreign,tablenames,sorting,sorting_foreign,fieldname
+,28,297,tt_content,0,1,categories
+,29,297,tt_content,0,2,categories
+,29,298,tt_content,0,1,categories
+,30,298,tt_content,0,2,categories
+# --- workspace change ---
+,33,297,tt_content,1,0,\*categories
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,2,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,2,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/createCategoryRecordAndCreateCategoryRelation.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/createCategoryRecordAndCreateCategoryRelation.csv
new file mode 100644
index 0000000000000000000000000000000000000000..c6e5c1c89d4f65560d4dc0e7d29acb7e603120cc
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/createCategoryRecordAndCreateCategoryRelation.csv
@@ -0,0 +1,22 @@
+sys_category
+,uid,pid,sorting,deleted,sys_language_uid,l10n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parent,items
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0
+,32,89,256,0,0,0,1,1,0,0,0,"Testing #1",0,0
+,33,-1,256,0,0,0,1,-1,0,32,0,"Testing #1",0,0
+sys_category_record_mm
+,uid_local,uid_foreign,tablenames,sorting,sorting_foreign,fieldname
+,28,297,tt_content,0,1,categories
+,29,297,tt_content,0,2,categories
+,29,298,tt_content,0,1,categories
+,30,298,tt_content,0,2,categories
+# --- workspace changes ---
+,33,300,tt_content,0,1,categories
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,2,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,2,0
+,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",,0,0
+,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",,0,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/createContentRecordAndAddCategoryRelation.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/createContentRecordAndAddCategoryRelation.csv
new file mode 100644
index 0000000000000000000000000000000000000000..ceca2b4017f5b32124156446b4022ed442b3c5f6
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/createContentRecordAndAddCategoryRelation.csv
@@ -0,0 +1,20 @@
+sys_category
+,uid,pid,sorting,deleted,sys_language_uid,l10n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parent,items
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0
+sys_category_record_mm
+,uid_local,uid_foreign,tablenames,sorting,sorting_foreign,fieldname
+,28,297,tt_content,0,1,categories
+,29,297,tt_content,0,2,categories
+,29,298,tt_content,0,1,categories
+,30,298,tt_content,0,2,categories
+# --- workspace changes ---
+,29,300,tt_content,0,1,categories
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,2,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,2,0
+,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",,1,0
+,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",,1,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/createContentRecordAndCreateCategoryRelation.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/createContentRecordAndCreateCategoryRelation.csv
new file mode 100644
index 0000000000000000000000000000000000000000..eca9432c7eb67cbd9bc76d64affd93c75e670afc
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/createContentRecordAndCreateCategoryRelation.csv
@@ -0,0 +1,22 @@
+sys_category
+,uid,pid,sorting,deleted,sys_language_uid,l10n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parent,items
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0
+,32,89,256,0,0,0,1,1,0,0,0,"Testing #1",0,0
+,33,-1,256,0,0,0,1,-1,0,32,0,"Testing #1",0,0
+sys_category_record_mm
+,uid_local,uid_foreign,tablenames,sorting,sorting_foreign,fieldname
+,28,297,tt_content,0,1,categories
+,29,297,tt_content,0,2,categories
+,29,298,tt_content,0,1,categories
+,30,298,tt_content,0,2,categories
+# --- workspace change ---
+,33,300,tt_content,0,1,categories
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,2,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,2,0
+,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",,0,0
+,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",,1,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/deleteCategoryRecordOfCategoryRelation.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/deleteCategoryRecordOfCategoryRelation.csv
new file mode 100644
index 0000000000000000000000000000000000000000..484c6960cf0656c19cc7c9c08937a30691c493a1
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/deleteCategoryRecordOfCategoryRelation.csv
@@ -0,0 +1,19 @@
+sys_category
+,uid,pid,sorting,deleted,sys_language_uid,l10n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parent,items
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0
+,32,-1,256,0,0,0,1,2,0,28,0,"Category A",0,1
+sys_category_record_mm
+,uid_local,uid_foreign,tablenames,sorting,sorting_foreign,fieldname
+,28,297,tt_content,0,1,categories
+,29,297,tt_content,0,2,categories
+,29,298,tt_content,0,1,categories
+,30,298,tt_content,0,2,categories
+# --- workspace change ---
+,32,297,tt_content,1,0,\*categories
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,2,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,2,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/deleteCategoryRelation.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/deleteCategoryRelation.csv
new file mode 100644
index 0000000000000000000000000000000000000000..aa8cb977769bf6a8389eb8e1ffb9b12216cc99e4
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/deleteCategoryRelation.csv
@@ -0,0 +1,19 @@
+sys_category
+,uid,pid,sorting,deleted,sys_language_uid,l10n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parent,items
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0
+sys_category_record_mm
+,uid_local,uid_foreign,tablenames,sorting,sorting_foreign,fieldname
+,28,297,tt_content,0,1,categories
+,29,297,tt_content,0,2,categories
+,29,298,tt_content,0,1,categories
+,30,298,tt_content,0,2,categories
+# --- workspace change ---
+,28,299,tt_content,0,1,categories
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,2,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,2,0
+,299,-1,256,0,0,0,1,0,0,297,0,"Regular Element #1",0,1,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/deleteContentRecordOfCategoryRelation.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/deleteContentRecordOfCategoryRelation.csv
new file mode 100644
index 0000000000000000000000000000000000000000..d9e5181609bb4e4ecba3d0095fdf0169962bb7c0
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/deleteContentRecordOfCategoryRelation.csv
@@ -0,0 +1,20 @@
+sys_category
+,uid,pid,sorting,deleted,sys_language_uid,l10n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parent,items
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0
+sys_category_record_mm
+,uid_local,uid_foreign,tablenames,sorting,sorting_foreign,fieldname
+,28,297,tt_content,0,1,categories
+,29,297,tt_content,0,2,categories
+,29,298,tt_content,0,1,categories
+,30,298,tt_content,0,2,categories
+# --- workspace change ---
+,29,299,tt_content,0,1,categories
+,30,299,tt_content,0,2,categories
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,2,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,2,0
+,299,-1,512,0,0,0,1,2,0,298,0,"Regular Element #2",0,2,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/localizeCategoryRecordOfCategoryRelation.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/localizeCategoryRecordOfCategoryRelation.csv
new file mode 100644
index 0000000000000000000000000000000000000000..156a35c410b176b21a3b797947098638c9d26930
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/localizeCategoryRecordOfCategoryRelation.csv
@@ -0,0 +1,20 @@
+sys_category
+,uid,pid,sorting,deleted,sys_language_uid,l10n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parent,items
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0
+,32,0,384,0,1,28,1,1,0,0,0,"Category A",0,1
+,33,-1,384,0,1,28,1,-1,0,32,0,"Category A",0,1
+sys_category_record_mm
+,uid_local,uid_foreign,tablenames,sorting,sorting_foreign,fieldname
+,28,297,tt_content,0,1,categories
+,29,297,tt_content,0,2,categories
+,29,298,tt_content,0,1,categories
+,30,298,tt_content,0,2,categories
+# --- workspace change ----
+,33,297,tt_content,1,0,\*categories
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,2,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,2,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/localizeContentRecordOfCategoryRelation.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/localizeContentRecordOfCategoryRelation.csv
new file mode 100644
index 0000000000000000000000000000000000000000..95253c7fad1e6e0f6f230a4d7f18091fee6461a2
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/localizeContentRecordOfCategoryRelation.csv
@@ -0,0 +1,21 @@
+sys_category
+,uid,pid,sorting,deleted,sys_language_uid,l10n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parent,items
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0
+sys_category_record_mm
+,uid_local,uid_foreign,tablenames,sorting,sorting_foreign,fieldname
+,28,297,tt_content,0,1,categories
+,29,297,tt_content,0,2,categories
+,29,298,tt_content,0,1,categories
+,30,298,tt_content,0,2,categories
+# --- workspace change ---
+,29,300,tt_content,0,1,categories
+,30,300,tt_content,0,2,categories
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,2,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,2,0
+,299,89,768,0,1,298,1,1,0,0,0,"[Translate to Dansk:] Regular Element #2",,2,0
+,300,-1,768,0,1,298,1,-1,0,299,0,"[Translate to Dansk:] Regular Element #2",0,2,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/modifyBothRecordsOfCategoryRelation.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/modifyBothRecordsOfCategoryRelation.csv
new file mode 100644
index 0000000000000000000000000000000000000000..84ad339b97e18781921e2c3d9890e67c5d178f6b
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/modifyBothRecordsOfCategoryRelation.csv
@@ -0,0 +1,22 @@
+sys_category
+,uid,pid,sorting,deleted,sys_language_uid,l10n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parent,items
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0
+,32,-1,256,0,0,0,1,0,0,28,0,"Testing #1",0,1
+sys_category_record_mm
+,uid_local,uid_foreign,tablenames,sorting,sorting_foreign,fieldname
+,28,297,tt_content,0,1,categories
+,29,297,tt_content,0,2,categories
+,29,298,tt_content,0,1,categories
+,30,298,tt_content,0,2,categories
+# --- workspace change ---
+,32,297,tt_content,1,0,\*categories
+,28,299,tt_content,0,1,categories
+,29,299,tt_content,0,2,categories
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,2,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,2,0
+,299,-1,256,0,0,0,1,0,0,297,0,"Testing #1",0,2,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/modifyCategoryRecordOfCategoryRelation.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/modifyCategoryRecordOfCategoryRelation.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e0a7d3fc89a7eeab302505bf4a9054884471f8b0
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/modifyCategoryRecordOfCategoryRelation.csv
@@ -0,0 +1,19 @@
+sys_category
+,uid,pid,sorting,deleted,sys_language_uid,l10n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parent,items
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0
+,32,-1,256,0,0,0,1,0,0,28,0,"Testing #1",0,1
+sys_category_record_mm
+,uid_local,uid_foreign,tablenames,sorting,sorting_foreign,fieldname
+,28,297,tt_content,0,1,categories
+,29,297,tt_content,0,2,categories
+,29,298,tt_content,0,1,categories
+,30,298,tt_content,0,2,categories
+# --- workspace change ---
+,32,297,tt_content,1,0,\*categories
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,2,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,2,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/modifyContentRecordOfCategoryRelation.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/modifyContentRecordOfCategoryRelation.csv
new file mode 100644
index 0000000000000000000000000000000000000000..aa1b0be7bff24588757908cea695c881fbb62ef2
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/modifyContentRecordOfCategoryRelation.csv
@@ -0,0 +1,20 @@
+sys_category
+,uid,pid,sorting,deleted,sys_language_uid,l10n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parent,items
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0
+sys_category_record_mm
+,uid_local,uid_foreign,tablenames,sorting,sorting_foreign,fieldname
+,28,297,tt_content,0,1,categories
+,29,297,tt_content,0,2,categories
+,29,298,tt_content,0,1,categories
+,30,298,tt_content,0,2,categories
+# --- workspace change ---
+,28,299,tt_content,0,1,categories
+,29,299,tt_content,0,2,categories
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,2,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,2,0
+,299,-1,256,0,0,0,1,0,0,297,0,"Testing #1",0,2,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/moveContentRecordOfCategoryRelationToDifferentPage.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/moveContentRecordOfCategoryRelationToDifferentPage.csv
new file mode 100644
index 0000000000000000000000000000000000000000..5f23a0f4fd423315e10f77f4ac7b1b3f2798ecd2
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Assertion/moveContentRecordOfCategoryRelationToDifferentPage.csv
@@ -0,0 +1,21 @@
+sys_category
+,uid,pid,sorting,deleted,sys_language_uid,l10n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,parent,items
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0
+sys_category_record_mm
+,uid_local,uid_foreign,tablenames,sorting,sorting_foreign,fieldname
+,28,297,tt_content,0,1,categories
+,29,297,tt_content,0,2,categories
+,29,298,tt_content,0,1,categories
+,30,298,tt_content,0,2,categories
+# --- workspace change ---
+,29,299,tt_content,0,1,categories
+,30,299,tt_content,0,2,categories
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,2,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,2,0
+,299,-1,512,0,0,0,1,4,0,298,0,"Regular Element #2",0,2,0
+,300,90,256,0,0,0,1,3,0,0,298,"[MOVE-TO PLACEHOLDER for #298, WS#1]",,0,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Scenario/LiveDefaultElements.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Scenario/LiveDefaultElements.csv
new file mode 100644
index 0000000000000000000000000000000000000000..b04c8c0d18071802b02b1e4e8c235426889f3f12
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Scenario/LiveDefaultElements.csv
@@ -0,0 +1,27 @@
+sys_workspace
+,uid,pid,deleted,title,adminusers,members,reviewers,db_mountpoints,file_mountpoints,freeze,live_edit,vtypes,disable_autocreate,swap_modes,publish_access,custom_stages,stagechg_notification,edit_notification_mode,edit_notification_defaults,edit_allow_notificaton_settings,publish_notification_mode,publish_notification_defaults,publish_allow_notificaton_settings
+,1,0,0,"Workspace #1",,,,,,0,0,0,0,0,0,0,0,0,,0,0,,0
+,2,0,0,"Workspace #2",,,,,,0,0,0,0,0,0,0,0,0,,0,0,,0
+sys_workspace_stage
+,uid,pid,tstamp,deleted,sorting,title,responsible_persons,default_mailcomment,parentid,parenttable,notification_mode,notification_defaults,allow_notificaton_settings
+,1,0,1290048921,0,1,"Stage 1",be_users_3,,1,sys_workspace,0,,0
+"sys_language",,,,,,,,,,,,,,,
+,"uid","pid","hidden","title","flag",,,,,,,,,,
+,1,0,0,"Dansk","dk",,,,,,,,,,
+,2,0,0,"Deutsch","de",,,,,,,,,,
+"sys_category",,,,,,,,,,,,,,,
+,"uid","pid","sorting","deleted","sys_language_uid","l10n_parent","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","title","parent","items",
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0,
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0,
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0,
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0,
+"sys_category_record_mm",,,,,,,,,,,,,,,
+,"uid_local","uid_foreign","tablenames","sorting","sorting_foreign","fieldname",,,,,,,,,
+,28,297,"tt_content",0,1,"categories",,,,,,,,,
+,29,297,"tt_content",0,2,"categories",,,,,,,,,
+,29,298,"tt_content",0,1,"categories",,,,,,,,,
+,30,298,"tt_content",0,2,"categories",,,,,,,,,
+"tt_content",,,,,,,,,,,,,,,
+,"uid","pid","sorting","deleted","sys_language_uid","l18n_parent","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","header","image","categories","tx_irretutorial_hotels"
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","\NULL",2,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2","\NULL",2,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Scenario/LiveDefaultPages.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Scenario/LiveDefaultPages.csv
new file mode 100644
index 0000000000000000000000000000000000000000..17b04d408c8e79510b60113f28e7b0a3ae6a15e5
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/DataSet/Scenario/LiveDefaultPages.csv
@@ -0,0 +1,6 @@
+pages
+,uid,pid,sorting,deleted,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,1,0,256,0,0,0,0,0,0,FunctionalTest
+,88,1,256,0,0,0,0,0,0,DataHandlerTest
+,89,88,256,0,0,0,0,0,0,Relations
+,90,88,512,0,0,0,0,0,0,Target
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/WorkspaceActionTest.php b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/WorkspaceActionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..16f34a513d711a827c69eacf07b6a5e6d2cab5a9
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/ManyToMany/WorkspaceActionTest.php
@@ -0,0 +1,39 @@
+<?php
+namespace TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\ManyToMany;
+
+/***************************************************************
+ * Copyright notice
+ *
+ * (c) 2014 Oliver Hader <oliver.hader@typo3.org>
+ * All rights reserved
+ *
+ * This script is part of the TYPO3 project. The TYPO3 project is
+ * free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * The GNU General Public License can be found at
+ * http://www.gnu.org/copyleft/gpl.html.
+ *
+ * This script is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+require_once dirname(__FILE__) . '/AbstractActionTestCase.php';
+
+/**
+ * Functional test for the DataHandler
+ */
+class WorkspaceActionTest extends AbstractActionTestCase {
+
+	public function setUp() {
+		parent::setUp();
+		$this->backendUser->workspace = 1;
+	}
+
+}
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/AbstractActionTestCase.php b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/AbstractActionTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..50f71296e641501aa0077c8233b7ed72726a0154
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/AbstractActionTestCase.php
@@ -0,0 +1,205 @@
+<?php
+namespace TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\Regular;
+
+/***************************************************************
+ * Copyright notice
+ *
+ * (c) 2014 Oliver Hader <oliver.hader@typo3.org>
+ * All rights reserved
+ *
+ * This script is part of the TYPO3 project. The TYPO3 project is
+ * free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * The GNU General Public License can be found at
+ * http://www.gnu.org/copyleft/gpl.html.
+ *
+ * This script is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+require_once __DIR__ . '/../../../../../core/Tests/Functional/DataHandling/AbstractDataHandlerActionTestCase.php';
+
+/**
+ * Functional test for the DataHandler
+ */
+abstract class AbstractActionTestCase extends \TYPO3\CMS\Core\Tests\Functional\DataHandling\AbstractDataHandlerActionTestCase {
+
+	const VALUE_PageId = 89;
+	const VALUE_PageIdTarget = 90;
+	const VALUE_PageIdWebsite = 1;
+	const VALUE_ContentIdFirst = 297;
+	const VALUE_ContentIdLast = 298;
+	const VALUE_LanguageId = 1;
+
+	const TABLE_Page = 'pages';
+	const TABLE_Content = 'tt_content';
+
+	/**
+	 * @var array
+	 */
+	protected $coreExtensionsToLoad = array(
+		'version',
+		'workspaces',
+	);
+
+	/**
+	 * @var string
+	 */
+	protected $dataSetDirectory = 'typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/';
+
+	public function setUp() {
+		parent::setUp();
+		$this->importScenarioDataSet('LiveDefaultPages');
+		$this->importScenarioDataSet('LiveDefaultElements');
+	}
+
+	/**
+	 * Content records
+	 */
+
+	/**
+	 * @test
+	 */
+	public function createContentRecords() {
+		// Creating record at the beginning of the page
+		$this->actionService->createNewRecord(self::TABLE_Content, self::VALUE_PageId, array('header' => 'Testing #1'));
+		// Creating record at the end of the page (after last one)
+		$this->actionService->createNewRecord(self::TABLE_Content, -self::VALUE_ContentIdLast, array('header' => 'Testing #2'));
+		$this->assertAssertionDataSet('createContentRecords');
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyContentRecord() {
+		$this->actionService->modifyRecord(self::TABLE_Content, self::VALUE_ContentIdLast, array('header' => 'Testing #1'));
+		$this->assertAssertionDataSet('modifyContentRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function deleteContentRecord() {
+		$this->actionService->deleteRecord(self::TABLE_Content, self::VALUE_ContentIdLast);
+		$this->assertAssertionDataSet('deleteContentRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function copyContentRecord() {
+		$this->actionService->copyRecord(self::TABLE_Content, self::VALUE_ContentIdLast, self::VALUE_PageId);
+		$this->assertAssertionDataSet('copyContentRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function localizeContentRecord() {
+		$this->actionService->localizeRecord(self::TABLE_Content, self::VALUE_ContentIdLast, self::VALUE_LanguageId);
+		$this->assertAssertionDataSet('localizeContentRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function changeContentRecordSorting() {
+		$this->actionService->moveRecord(self::TABLE_Content, self::VALUE_ContentIdFirst, -self::VALUE_ContentIdLast);
+		$this->assertAssertionDataSet('changeContentRecordSorting');
+	}
+
+	/**
+	 * @test
+	 */
+	public function moveContentRecordToDifferentPage() {
+		$this->actionService->moveRecord(self::TABLE_Content, self::VALUE_ContentIdLast, self::VALUE_PageIdTarget);
+		$this->assertAssertionDataSet('moveContentRecordToDifferentPage');
+	}
+
+	/**
+	 * @test
+	 */
+	public function moveContentRecordToDifferentPageAndChangeSorting() {
+		$this->markTestSkipped('Something seems to be wrong here...');
+		$this->actionService->moveRecord(self::TABLE_Content, self::VALUE_ContentIdLast, self::VALUE_PageIdTarget);
+		$this->actionService->moveRecord(self::TABLE_Content, self::VALUE_ContentIdFirst, -self::VALUE_ContentIdLast);
+		$this->assertAssertionDataSet('moveContentRecordToDifferentPageAndChangeSorting');
+	}
+
+	/**
+	 * Page records
+	 */
+
+	/**
+	 * @test
+	 */
+	public function createPageRecord() {
+		$this->actionService->createNewRecord(self::TABLE_Page, self::VALUE_PageId, array('title' => 'Testing #1'));
+		$this->assertAssertionDataSet('createPageRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyPageRecord() {
+		$this->actionService->modifyRecord(self::TABLE_Page, self::VALUE_PageId, array('title' => 'Testing #1'));
+		$this->assertAssertionDataSet('modifyPageRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function deletePageRecord() {
+		$this->actionService->deleteRecord(self::TABLE_Page, self::VALUE_PageId);
+		$this->assertAssertionDataSet('deletePageRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function copyPageRecord() {
+		$this->actionService->copyRecord(self::TABLE_Page, self::VALUE_PageId, self::VALUE_PageIdTarget);
+		$this->assertAssertionDataSet('copyPageRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function localizePageRecord() {
+		$this->actionService->localizeRecord(self::TABLE_Page, self::VALUE_PageId, self::VALUE_LanguageId);
+		$this->assertAssertionDataSet('localizePageRecord');
+	}
+
+	/**
+	 * @test
+	 */
+	public function changePageRecordSorting() {
+		$this->actionService->moveRecord(self::TABLE_Page, self::VALUE_PageId, -self::VALUE_PageIdTarget);
+		$this->assertAssertionDataSet('changePageRecordSorting');
+	}
+
+	/**
+	 * @test
+	 */
+	public function movePageRecordToDifferentPage() {
+		$this->actionService->moveRecord(self::TABLE_Page, self::VALUE_PageId, self::VALUE_PageIdTarget);
+		$this->assertAssertionDataSet('movePageRecordToDifferentPage');
+	}
+
+	/**
+	 * @test
+	 */
+	public function movePageRecordToDifferentPageAndChangeSorting() {
+		$this->actionService->moveRecord(self::TABLE_Page, self::VALUE_PageIdTarget, self::VALUE_PageIdWebsite);
+		$this->actionService->moveRecord(self::TABLE_Page, self::VALUE_PageId, -self::VALUE_PageIdTarget);
+		$this->assertAssertionDataSet('movePageRecordToDifferentPageAndChangeSorting');
+	}
+
+}
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/changeContentRecordSorting.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/changeContentRecordSorting.csv
new file mode 100644
index 0000000000000000000000000000000000000000..5405bc298022732c1bc67a0c85e62c61c005a340
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/changeContentRecordSorting.csv
@@ -0,0 +1,6 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,0
+,299,-1,256,0,0,0,1,4,0,297,0,"Regular Element #1",0,0,0
+,300,89,768,0,0,0,1,3,0,0,297,"[MOVE-TO PLACEHOLDER for #297, WS#1]",,0,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/changePageRecordSorting.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/changePageRecordSorting.csv
new file mode 100644
index 0000000000000000000000000000000000000000..04b042cd42bda6c6e44550bba33d7108c54ae6b9
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/changePageRecordSorting.csv
@@ -0,0 +1,12 @@
+pages
+,uid,pid,sorting,deleted,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,1,0,256,0,0,0,0,0,0,FunctionalTest
+,88,1,256,0,0,0,0,0,0,DataHandlerTest
+,89,88,256,0,0,0,0,0,0,Relations
+,90,88,512,0,0,0,0,0,0,Target
+,91,-1,256,0,1,4,0,89,0,Relations
+,92,88,768,0,1,3,0,0,89,"[MOVE-TO PLACEHOLDER for #89, WS#1]"
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/copyContentRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/copyContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e125733954d07f08b7128af80013714e01b57cfc
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/copyContentRecord.csv
@@ -0,0 +1,6 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,0
+,299,89,128,0,0,0,1,1,0,0,0,"Regular Element #2 (copy 1)",,0,0
+,300,-1,128,0,0,0,1,-1,0,299,0,"Regular Element #2 (copy 1)",0,0,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/copyPageRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/copyPageRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..b0953ebb49a50fe8f17d707c0c97512fd66b92b3
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/copyPageRecord.csv
@@ -0,0 +1,16 @@
+pages
+,uid,pid,sorting,deleted,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,1,0,256,0,0,0,0,0,0,FunctionalTest
+,88,1,256,0,0,0,0,0,0,DataHandlerTest
+,89,88,256,0,0,0,0,0,0,Relations
+,90,88,512,0,0,0,0,0,0,Target
+,91,90,256,0,1,1,0,0,0,Relations
+,92,-1,256,0,1,-1,0,91,0,Relations
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,0
+,299,91,256,0,0,0,1,1,0,0,0,"Regular Element #2",,0,0
+,300,-1,256,0,0,0,1,-1,0,299,0,"Regular Element #2",0,0,0
+,301,91,128,0,0,0,1,1,0,0,0,"Regular Element #1",,0,0
+,302,-1,128,0,0,0,1,-1,0,301,0,"Regular Element #1",0,0,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/createContentRecords.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/createContentRecords.csv
new file mode 100644
index 0000000000000000000000000000000000000000..c354ebeb6750264023275157c6d21eff7e7aa51d
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/createContentRecords.csv
@@ -0,0 +1,8 @@
+"tt_content",,,,,,,,,,,,,,
+,"uid","pid","sorting","deleted","sys_language_uid","l18n_parent","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","header","image","categories","tx_irretutorial_hotels"
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","\NULL",0,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2","\NULL",0,0
+,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",,0,0
+,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",,0,0
+,301,89,768,0,0,0,1,1,0,0,0,"Testing #2",,0,0
+,302,-1,768,0,0,0,1,-1,0,301,0,"Testing #2",,0,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/createPageRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/createPageRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..1b7a46a71726e83ac146ae25648e9929fd6401c8
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/createPageRecord.csv
@@ -0,0 +1,8 @@
+pages
+,uid,pid,sorting,deleted,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,1,0,256,0,0,0,0,0,0,FunctionalTest
+,88,1,256,0,0,0,0,0,0,DataHandlerTest
+,89,88,256,0,0,0,0,0,0,Relations
+,90,88,512,0,0,0,0,0,0,Target
+,91,89,256,0,1,1,0,0,0,"Testing #1"
+,92,-1,256,0,1,-1,0,91,0,"Testing #1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/deleteContentRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/deleteContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e2223a7be329ea86c0b3a488c3559dfe23471727
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/deleteContentRecord.csv
@@ -0,0 +1,5 @@
+"tt_content",,,,,,,,,,,,,,,
+,"uid","pid","sorting","deleted","sys_language_uid","l18n_parent","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","header","image","categories","tx_irretutorial_hotels"
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,0
+,299,-1,512,0,0,0,1,2,0,298,0,"Regular Element #2",0,0,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/deletePageRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/deletePageRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e6962cfef9704666b36c85da0b7f0ad1b20489cd
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/deletePageRecord.csv
@@ -0,0 +1,11 @@
+pages
+,uid,pid,sorting,deleted,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,1,0,256,0,0,0,0,0,0,FunctionalTest
+,88,1,256,0,0,0,0,0,0,DataHandlerTest
+,89,88,256,0,0,0,0,0,0,Relations
+,90,88,512,0,0,0,0,0,0,Target
+,91,-1,256,0,1,2,0,89,0,Relations
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/localizeContentRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/localizeContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..ff2ba00a895c6525478a3f78e22b67c2a1613fe9
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/localizeContentRecord.csv
@@ -0,0 +1,6 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,0
+,299,89,768,0,1,298,1,1,0,0,0,"[Translate to Dansk:] Regular Element #2",,0,0
+,300,-1,768,0,1,298,1,-1,0,299,0,"[Translate to Dansk:] Regular Element #2",0,0,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/localizePageRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/localizePageRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..076e4e270bd7e293d8d6fd59fc5832e92771aa53
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/localizePageRecord.csv
@@ -0,0 +1,14 @@
+pages
+,uid,pid,sorting,deleted,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,1,0,256,0,0,0,0,0,0,FunctionalTest
+,88,1,256,0,0,0,0,0,0,DataHandlerTest
+,89,88,256,0,0,0,0,0,0,Relations
+,90,88,512,0,0,0,0,0,0,Target
+pages_language_overlay
+,uid,pid,deleted,sys_language_uid,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,title
+,1,89,0,1,1,1,0,0,"[Translate to Dansk:] Relations"
+,2,-1,0,1,1,-1,0,1,"[Translate to Dansk:] Relations"
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/modifyContentRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/modifyContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..621942a3a3a04f451019233fa73287932e8ddeed
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/modifyContentRecord.csv
@@ -0,0 +1,5 @@
+"tt_content",,,,,,,,,,,,,,
+,"uid","pid","sorting","deleted","sys_language_uid","l18n_parent","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","header","image","categories","tx_irretutorial_hotels"
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,0
+,299,-1,512,0,0,0,1,0,0,298,0,"Testing #1",0,0,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/modifyPageRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/modifyPageRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..920549c596e7b308434abc439ed5f23004e42d19
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/modifyPageRecord.csv
@@ -0,0 +1,7 @@
+pages
+,uid,pid,sorting,deleted,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,1,0,256,0,0,0,0,0,0,FunctionalTest
+,88,1,256,0,0,0,0,0,0,DataHandlerTest
+,89,88,256,0,0,0,0,0,0,Relations
+,90,88,512,0,0,0,0,0,0,Target
+,91,-1,256,0,1,0,0,89,0,"Testing #1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/moveContentRecordToDifferentPage.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/moveContentRecordToDifferentPage.csv
new file mode 100644
index 0000000000000000000000000000000000000000..374fde92b271ef2152ecae02a80c0dd211cce104
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/moveContentRecordToDifferentPage.csv
@@ -0,0 +1,6 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,0
+,299,-1,512,0,0,0,1,4,0,298,0,"Regular Element #2",0,0,0
+,300,90,256,0,0,0,1,3,0,0,298,"[MOVE-TO PLACEHOLDER for #298, WS#1]",,0,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/moveContentRecordToDifferentPageAndChangeSorting.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/moveContentRecordToDifferentPageAndChangeSorting.csv
new file mode 100644
index 0000000000000000000000000000000000000000..efbf94a64b1b059d87645334eb67942c76328577
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/moveContentRecordToDifferentPageAndChangeSorting.csv
@@ -0,0 +1,8 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,0
+,299,-1,512,0,0,0,1,4,0,298,0,"Regular Element #2",0,0,0
+,300,90,256,0,0,0,1,3,0,0,298,"[MOVE-TO PLACEHOLDER for #298, WS#1]",,0,0
+,301,-1,256,0,0,0,1,4,0,297,0,"Regular Element #1",0,0,0
+,302,90,512,0,0,0,1,3,0,0,297,"[MOVE-TO PLACEHOLDER for #297, WS#1]",,0,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/movePageRecordToDifferentPage.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/movePageRecordToDifferentPage.csv
new file mode 100644
index 0000000000000000000000000000000000000000..f43ab9f6d28dffa4bd873b77b6303201385cd340
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/movePageRecordToDifferentPage.csv
@@ -0,0 +1,12 @@
+pages
+,uid,pid,sorting,deleted,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,1,0,256,0,0,0,0,0,0,FunctionalTest
+,88,1,256,0,0,0,0,0,0,DataHandlerTest
+,89,88,256,0,0,0,0,0,0,Relations
+,90,88,512,0,0,0,0,0,0,Target
+,91,-1,256,0,1,4,0,89,0,Relations
+,92,90,256,0,1,3,0,0,89,"[MOVE-TO PLACEHOLDER for #89, WS#1]"
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/movePageRecordToDifferentPageAndChangeSorting.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/movePageRecordToDifferentPageAndChangeSorting.csv
new file mode 100644
index 0000000000000000000000000000000000000000..b720ab1a489d3ea769db586fc31839509f450b11
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Assertion/movePageRecordToDifferentPageAndChangeSorting.csv
@@ -0,0 +1,14 @@
+pages
+,uid,pid,sorting,deleted,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,1,0,256,0,0,0,0,0,0,FunctionalTest
+,88,1,256,0,0,0,0,0,0,DataHandlerTest
+,89,1,160,0,0,0,0,0,0,Relations
+,90,88,512,0,0,0,0,0,0,Target
+,91,-1,512,0,1,4,0,90,0,Target
+,92,1,128,0,1,3,0,0,90,"[MOVE-TO PLACEHOLDER for #90, WS#1]"
+,93,-1,256,0,1,4,0,89,0,Relations
+,94,1,192,0,1,3,0,0,89,"[MOVE-TO PLACEHOLDER for #89, WS#1]"
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,image,categories,tx_irretutorial_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,0,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,0,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Scenario/LiveDefaultElements.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Scenario/LiveDefaultElements.csv
new file mode 100644
index 0000000000000000000000000000000000000000..eae28bd106653577c0e5fffa5aa9b0a8a74a3188
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Scenario/LiveDefaultElements.csv
@@ -0,0 +1,21 @@
+sys_workspace
+,uid,pid,deleted,title,adminusers,members,reviewers,db_mountpoints,file_mountpoints,freeze,live_edit,vtypes,disable_autocreate,swap_modes,publish_access,custom_stages,stagechg_notification,edit_notification_mode,edit_notification_defaults,edit_allow_notificaton_settings,publish_notification_mode,publish_notification_defaults,publish_allow_notificaton_settings
+,1,0,0,"Workspace #1",,,,,,0,0,0,0,0,0,0,0,0,,0,0,,0
+,2,0,0,"Workspace #2",,,,,,0,0,0,0,0,0,0,0,0,,0,0,,0
+sys_workspace_stage
+,uid,pid,tstamp,deleted,sorting,title,responsible_persons,default_mailcomment,parentid,parenttable,notification_mode,notification_defaults,allow_notificaton_settings
+,1,0,1290048921,0,1,"Stage 1",be_users_3,,1,sys_workspace,0,,0
+"sys_language",,,,,,,,,,,,,,,
+,"uid","pid","hidden","title","flag",,,,,,,,,,
+,1,0,0,"Dansk","dk",,,,,,,,,,
+,2,0,0,"Deutsch","de",,,,,,,,,,
+"sys_category",,,,,,,,,,,,,,,
+,"uid","pid","sorting","deleted","sys_language_uid","l10n_parent","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","title","parent","items",
+,28,0,256,0,0,0,0,0,0,0,0,"Category A",0,0,
+,29,0,512,0,0,0,0,0,0,0,0,"Category B",0,0,
+,30,0,768,0,0,0,0,0,0,0,0,"Category C",0,0,
+,31,0,1024,0,0,0,0,0,0,0,0,"Category A.A",28,0,
+"tt_content",,,,,,,,,,,,,,,
+,"uid","pid","sorting","deleted","sys_language_uid","l18n_parent","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","header","image","categories","tx_irretutorial_hotels"
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","\NULL",0,0
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2","\NULL",0,0
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Scenario/LiveDefaultPages.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Scenario/LiveDefaultPages.csv
new file mode 100644
index 0000000000000000000000000000000000000000..17b04d408c8e79510b60113f28e7b0a3ae6a15e5
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/DataSet/Scenario/LiveDefaultPages.csv
@@ -0,0 +1,6 @@
+pages
+,uid,pid,sorting,deleted,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,1,0,256,0,0,0,0,0,0,FunctionalTest
+,88,1,256,0,0,0,0,0,0,DataHandlerTest
+,89,88,256,0,0,0,0,0,0,Relations
+,90,88,512,0,0,0,0,0,0,Target
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/WorkspaceActionTest.php b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/WorkspaceActionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..48eac21b9a176341570e199b634f2d7acf764a12
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/WorkspaceActionTest.php
@@ -0,0 +1,39 @@
+<?php
+namespace TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\Regular;
+
+/***************************************************************
+ * Copyright notice
+ *
+ * (c) 2014 Oliver Hader <oliver.hader@typo3.org>
+ * All rights reserved
+ *
+ * This script is part of the TYPO3 project. The TYPO3 project is
+ * free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * The GNU General Public License can be found at
+ * http://www.gnu.org/copyleft/gpl.html.
+ *
+ * This script is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+require_once dirname(__FILE__) . '/AbstractActionTestCase.php';
+
+/**
+ * Functional test for the DataHandler
+ */
+class WorkspaceActionTest extends AbstractActionTestCase {
+
+	public function setUp() {
+		parent::setUp();
+		$this->backendUser->workspace = 1;
+	}
+
+}