diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/AbstractActionTestCase.php b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/AbstractActionTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..11eff60be1fd94d33a70093a1f1b6f701a5bdcd9
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/AbstractActionTestCase.php
@@ -0,0 +1,410 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Functional\DataHandling\InlineRelationalRecordEditing\CommaSeparatedValue;
+
+/***************************************************************
+ * 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(dirname(dirname(__FILE__))) . '/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_1ncsv_hotel';
+	const TABLE_Offer = 'tx_irretutorial_1ncsv_offer';
+
+	const FIELD_ContentHotel = 'tx_irretutorial_1ncsv_hotels';
+	const FIELD_HotelOffer = 'offers';
+
+	/**
+	 * @var string
+	 */
+	protected $dataSetDirectory = 'typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/';
+
+	public function setUp() {
+		parent::setUp();
+		$this->importScenarioDataSet('LiveDefaultPages');
+		$this->importScenarioDataSet('LiveDefaultElements');
+
+		$this->setUpFrontendRootPage(1, array('typo3/sysext/core/Tests/Functional/Fixtures/Frontend/JsonRenderer.ts'));
+	}
+
+	/**
+	 * Parent content records
+	 */
+
+	/**
+	 * @test
+	 */
+	public function createParentContentRecord() {
+		$this->actionService->createNewRecord(self::TABLE_Content, self::VALUE_PageId, array('header' => 'Testing #1'));
+		$this->assertAssertionDataSet('createParentContentRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1');
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyParentContentRecord() {
+		$this->actionService->modifyRecord(self::TABLE_Content, self::VALUE_ContentIdLast, array('header' => 'Testing #1'));
+		$this->assertAssertionDataSet('modifyParentContentRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1');
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('Hotel #1')
+		);
+	}
+
+	/**
+	 * @test
+	 */
+	public function deleteParentContentRecord() {
+		$this->actionService->deleteRecord(self::TABLE_Content, self::VALUE_ContentIdLast);
+		$this->assertAssertionDataSet('deleteParentContentRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId)->getResponseContent();
+		$this->assertResponseContentDoesNotHaveRecords($responseContent, self::TABLE_Content, 'header', 'Regular Element #2');
+	}
+
+	/**
+	 * @test
+	 */
+	public function copyParentContentRecord() {
+		$newTableIds = $this->actionService->copyRecord(self::TABLE_Content, self::VALUE_ContentIdLast, self::VALUE_PageId);
+		$this->assertAssertionDataSet('copyParentContentRecord');
+
+		$newContentId = $newTableIds[self::TABLE_Content][self::VALUE_ContentIdLast];
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId)->getResponseContent();
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . $newContentId, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('Hotel #1')
+		);
+	}
+
+	/**
+	 * @test
+	 */
+	public function localizeParentContentRecord() {
+		$this->actionService->localizeRecord(self::TABLE_Content, self::VALUE_ContentIdLast, self::VALUE_LanguageId);
+		$this->assertAssertionDataSet('localizeParentContentRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, self::VALUE_LanguageId)->getResponseContent();
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('[Translate to Dansk:] Hotel #1')
+		);
+	}
+
+	/**
+	 * @test
+	 */
+	public function changeParentContentRecordSorting() {
+		$this->actionService->moveRecord(self::TABLE_Content, self::VALUE_ContentIdFirst, -self::VALUE_ContentIdLast);
+		$this->assertAssertionDataSet('changeParentContentRecordSorting');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId)->getResponseContent();
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+		);
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('Hotel #1')
+		);
+	}
+
+	/**
+	 * @test
+	 */
+	public function moveParentContentRecordToDifferentPage() {
+		$this->actionService->moveRecord(self::TABLE_Content, self::VALUE_ContentIdLast, self::VALUE_PageIdTarget);
+		$this->assertAssertionDataSet('moveParentContentRecordToDifferentPage');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageIdTarget)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Regular Element #2');
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('Hotel #1')
+		);
+	}
+
+	/**
+	 * @test
+	 */
+	public function moveParentContentRecordToDifferentPageAndChangeSorting() {
+		$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');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageIdTarget)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', array('Regular Element #2', 'Regular Element #1'));
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+		);
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('Hotel #1')
+		);
+	}
+
+	/**
+	 * Page records
+	 */
+
+	/**
+	 * @test
+	 */
+	public function modifyPageRecord() {
+		$this->actionService->modifyRecord(self::TABLE_Page, self::VALUE_PageId, array('title' => 'Testing #1'));
+		$this->assertAssertionDataSet('modifyPageRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Page, 'title', 'Testing #1');
+	}
+
+	/**
+	 * @test
+	 */
+	public function deletePageRecord() {
+		$this->actionService->deleteRecord(self::TABLE_Page, self::VALUE_PageId);
+		$this->assertAssertionDataSet('deletePageRecord');
+
+		$response = $this->getFrontendResponse(self::VALUE_PageId, 0, 0, 0, FALSE);
+		$this->assertContains('PageNotFoundException', $response->getError());
+	}
+
+	/**
+	 * @test
+	 */
+	public function copyPageRecord() {
+		$newTableIds = $this->actionService->copyRecord(self::TABLE_Page, self::VALUE_PageId, self::VALUE_PageIdTarget);
+		$this->assertAssertionDataSet('copyPageRecord');
+
+		$newPageId = $newTableIds[self::TABLE_Page][self::VALUE_PageId];
+		$responseContent = $this->getFrontendResponse($newPageId)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2', 'Hotel #1'));
+	}
+
+	/**
+	 * IRRE Child Records
+	 */
+
+	/**
+	 * @test
+	 */
+	public function createParentContentRecordWithHotelAndOfferChildRecords() {
+		$newTableIds = $this->actionService->createNewRecords(
+			self::VALUE_PageId,
+			array(
+				self::TABLE_Offer => array('title' => 'Offer #1'),
+				self::TABLE_Hotel => array('title' => 'Hotel #1', self::FIELD_HotelOffer => '__previousUid'),
+				self::TABLE_Content => array('header' => 'Testing #1', self::FIELD_ContentHotel => '__previousUid'),
+			)
+		);
+		$this->assertAssertionDataSet('createParentContentRecordWithHotelAndOfferChildRecords');
+
+		$newContentId = $newTableIds[self::TABLE_Content][0];
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1');
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . $newContentId, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', 'Hotel #1'
+		);
+	}
+
+	/**
+	 * @test
+	 */
+	public function createAndCopyParentContentRecordWithHotelAndOfferChildRecords() {
+		$newTableIds = $this->actionService->createNewRecords(
+			self::VALUE_PageId,
+			array(
+				self::TABLE_Offer => array('title' => 'Offer #1'),
+				self::TABLE_Hotel => array('title' => 'Hotel #1', self::FIELD_HotelOffer => '__previousUid'),
+				self::TABLE_Content => array('header' => 'Testing #1', self::FIELD_ContentHotel => '__previousUid'),
+			)
+		);
+		$newContentId = $newTableIds[self::TABLE_Content][0];
+		$newHotelId = $newTableIds[self::TABLE_Hotel][0];
+		$copiedTableIds = $this->actionService->copyRecord(self::TABLE_Content, $newContentId, self::VALUE_PageId);
+		$this->assertAssertionDataSet('createAndCopyParentContentRecordWithHotelAndOfferChildRecords');
+
+		$copiedContentId = $copiedTableIds[self::TABLE_Content][$newContentId];
+		$copiedHotelId = $copiedTableIds[self::TABLE_Hotel][$newHotelId];
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId)->getResponseContent();
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . $newContentId, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', 'Hotel #1'
+		);
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . $copiedContentId, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', 'Hotel #1'
+		);
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Hotel . ':' . $copiedHotelId, self::FIELD_HotelOffer,
+			self::TABLE_Offer, 'title', 'Offer #1'
+		);
+	}
+
+	/**
+	 * @test
+	 */
+	public function createAndLocalizeParentContentRecordWithHotelAndOfferChildRecords() {
+		// @todo Localizing 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', self::FIELD_HotelOffer => '__previousUid'),
+				self::TABLE_Content => array('header' => 'Testing #1', self::FIELD_ContentHotel => '__previousUid'),
+			)
+		);
+		$newContentId = $newTableIds[self::TABLE_Content][0];
+		$newHotelId = $newTableIds[self::TABLE_Hotel][0];
+		$localizedTableIds = $this->actionService->localizeRecord(self::TABLE_Content, $newContentId, self::VALUE_LanguageId);
+		$this->assertAssertionDataSet('createAndLocalizeParentContentRecordWithHotelAndOfferChildRecords');
+
+		$localizedContentId = $localizedTableIds[self::TABLE_Content][$newContentId];
+		$localizedHotelId = $localizedTableIds[self::TABLE_Hotel][$newHotelId];
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, self::VALUE_LanguageId)->getResponseContent();
+
+		// @todo Does not work since children don't point to live-default record
+		/*
+			$this->assertResponseContentStructureHasRecords(
+				$responseContent, self::TABLE_Content . ':' . $localizedContentId, self::FIELD_ContentHotel,
+				self::TABLE_Hotel, 'title', '[Translate to Dansk:] Hotel #1'
+			);
+			$this->assertResponseContentStructureHasRecords(
+				$responseContent, self::TABLE_Hotel . ':' . $localizedHotelId, self::FIELD_HotelOffer,
+				self::TABLE_Offer, 'title', '[Translate to Dansk:] Offer #1'
+			);
+		*/
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyOnlyHotelChildRecord() {
+		$this->actionService->modifyRecord(self::TABLE_Hotel, 4, array('title' => 'Testing #1'));
+		$this->assertAssertionDataSet('modifyOnlyHotelChildRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId)->getResponseContent();
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('Hotel #1', 'Testing #1')
+		);
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyParentRecordAndChangeHotelChildRecordsSorting() {
+		$this->actionService->modifyRecord(self::TABLE_Content, self::VALUE_ContentIdFirst, array(self::FIELD_ContentHotel => '4,3'));
+		$this->assertAssertionDataSet('modifyParentRecordAndChangeHotelChildRecordsSorting');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId)->getResponseContent();
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('Hotel #2', 'Hotel #1')
+		);
+	}
+
+	/**
+	 * @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_ContentIdFirst, self::FIELD_ContentHotel => '3,4'),
+			)
+		);
+		$this->assertAssertionDataSet('modifyParentRecordWithHotelChildRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId)->getResponseContent();
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('Hotel #1', 'Testing #1')
+		);
+	}
+
+	/**
+	 * @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, self::FIELD_ContentHotel => '5,__previousUid'),
+			)
+		);
+		$this->assertAssertionDataSet('modifyParentRecordAndAddHotelChildRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId)->getResponseContent();
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+		);
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyParentRecordAndDeleteHotelChildRecord() {
+		$this->actionService->modifyRecord(
+			self::TABLE_Content,
+			self::VALUE_ContentIdFirst,
+			array(self::FIELD_ContentHotel => '3'),
+			array(self::TABLE_Hotel => array(4))
+		);
+		$this->assertAssertionDataSet('modifyParentRecordAndDeleteHotelChildRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId)->getResponseContent();
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', 'Hotel #1'
+		);
+		$this->assertResponseContentStructureDoesNotHaveRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', 'Hotel #2'
+		);
+	}
+
+}
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/changeParentContentRecordSorting.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/changeParentContentRecordSorting.csv
new file mode 100644
index 0000000000000000000000000000000000000000..0a7647e49828c60c28ea5fa99aad0a6c6eaccba6
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/changeParentContentRecordSorting.csv
@@ -0,0 +1,24 @@
+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_1ncsv_hotels
+,297,89,768,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,"5"
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,16,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,32,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,4,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,8,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,16,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,64,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,256,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,512,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,768,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,1024,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,1280,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/copyPageRecord.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/copyPageRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..6750c480bbea1f79dc4c6f3ccf9cd15b42ee8c3c
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/copyPageRecord.csv
@@ -0,0 +1,47 @@
+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,0,0,0,0,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_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,91,256,0,0,0,0,0,0,0,0,"Regular Element #2",0,6
+,300,91,128,0,0,0,0,0,0,0,0,"Regular Element #1",0,"7,8"
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,91,64,0,0,0,0,0,0,0,0,"Hotel #1",9
+,7,91,256,0,0,0,0,0,0,0,0,"Hotel #1","10,11"
+,8,91,128,0,0,0,0,0,0,0,0,"Hotel #2",12
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,91,32,0,0,0,0,0,0,0,0,"Offer #1.1",14
+,10,91,256,0,0,0,0,0,0,0,0,"Offer #1.1","15,16,17"
+,11,91,128,0,0,0,0,0,0,0,0,"Offer #1.2","18,19"
+,12,91,64,0,0,0,0,0,0,0,0,"Offer #2.1",20
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,91,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,15,91,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,16,91,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,17,91,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,18,91,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,19,91,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,20,91,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/copyParentContentRecord.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/copyParentContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..8978eb344f711e00a22b61612f41d762001be8e4
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/copyParentContentRecord.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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,89,128,0,0,0,0,0,0,0,0,"Regular Element #2 (copy 1)",0,6
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,89,64,0,0,0,0,0,0,0,0,"Hotel #1",9
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",14
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createAndCopyParentContentRecordWithHotelAndOfferChildRecords.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createAndCopyParentContentRecordWithHotelAndOfferChildRecords.csv
new file mode 100644
index 0000000000000000000000000000000000000000..c9c8ce20c1aa7fc75c366c271cce684961f1181c
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createAndCopyParentContentRecordWithHotelAndOfferChildRecords.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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,89,128,0,0,0,0,0,0,0,0,"Testing #1",,6
+,300,89,64,0,0,0,0,0,0,0,0,"Testing #1 (copy 1)",0,7
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,89,32,0,0,0,0,0,0,0,0,"Hotel #1",9
+,7,89,32,0,0,0,0,0,0,0,0,"Hotel #1",10
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,89,16,0,0,0,0,0,0,0,0,"Offer #1",
+,10,89,16,0,0,0,0,0,0,0,0,"Offer #1",
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createAndLocalizeParentContentRecordWithHotelAndOfferChildRecords.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createAndLocalizeParentContentRecordWithHotelAndOfferChildRecords.csv
new file mode 100644
index 0000000000000000000000000000000000000000..666162173152bb281ea108dba4219af6c8203bc7
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createAndLocalizeParentContentRecordWithHotelAndOfferChildRecords.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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,89,128,0,0,0,0,0,0,0,0,"Testing #1",,6
+,300,89,192,0,1,299,0,0,0,0,0,"[Translate to Dansk:] Testing #1",0,7
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,89,32,0,0,0,0,0,0,0,0,"Hotel #1",9
+,7,89,48,0,1,6,0,0,0,0,0,"[Translate to Dansk:] Hotel #1",
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,89,16,0,0,0,0,0,0,0,0,"Offer #1",
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createParentContentRecord.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createParentContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..2064224f4b9f4f17795599d44ab07c1097e9b49b
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createParentContentRecord.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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,89,128,0,0,0,0,0,0,0,0,"Testing #1",,
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createParentContentRecordWithHotelAndOfferChildRecords.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createParentContentRecordWithHotelAndOfferChildRecords.csv
new file mode 100644
index 0000000000000000000000000000000000000000..5e7e0da22b1eb744de3c4b7eefa47cd781195894
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createParentContentRecordWithHotelAndOfferChildRecords.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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,89,128,0,0,0,0,0,0,0,0,"Testing #1",,6
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,89,32,0,0,0,0,0,0,0,0,"Hotel #1",9
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,89,16,0,0,0,0,0,0,0,0,"Offer #1",
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/deletePageRecord.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/deletePageRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..c6f77db2285d9bef1bb2c72d2d1ed02faf708e33
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/deletePageRecord.csv
@@ -0,0 +1,30 @@
+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,1000000000,1,0,0,0,0,0,Relations
+,90,88,512,0,0,0,0,0,0,Target
+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_1ncsv_hotels
+,297,89,1000000000,1,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,1000000000,1,0,0,0,0,0,0,0,"Regular Element #2",,5
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,1000000000,1,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,1000000000,1,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,1000000000,1,0,0,0,0,0,0,0,"Hotel #1",8
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,1000000000,1,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,1000000000,1,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,1000000000,1,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,1000000000,1,0,0,0,0,0,0,0,"Offer #1.1",13
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,1000000000,1,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,1000000000,1,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,1000000000,1,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,1000000000,1,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,1000000000,1,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,1000000000,1,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,1000000000,1,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/deleteParentContentRecord.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/deleteParentContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..2b44cf0a5caadc9bc1c47d99af459f9139125355
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/deleteParentContentRecord.csv
@@ -0,0 +1,24 @@
+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_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,1000000000,1,0,0,0,0,0,0,0,"Regular Element #2",,5
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,1000000000,1,0,0,0,0,0,0,0,"Hotel #1",8
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,1000000000,1,0,0,0,0,0,0,0,"Offer #1.1",13
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,1000000000,1,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/localizeParentContentRecord.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/localizeParentContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..7c46430246539013054a4e72edf9475bafe9ef60
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/localizeParentContentRecord.csv
@@ -0,0 +1,26 @@
+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_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,89,768,0,1,298,0,0,0,0,0,"[Translate to Dansk:] Regular Element #2",0,6
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,89,96,0,1,5,0,0,0,0,0,"[Translate to Dansk:] Hotel #1",
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyOnlyHotelChildRecord.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyOnlyHotelChildRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..fbc241ce875945be4e79dd8c6a13989be39591b0
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyOnlyHotelChildRecord.csv
@@ -0,0 +1,24 @@
+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_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Testing #1",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyPageRecord.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyPageRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..ed4fd56b0c6d12bd4d9ccf8d6380a6d27748ae77
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyPageRecord.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,"Testing #1"
+,90,88,512,0,0,0,0,0,0,Target
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentContentRecord.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..074640b8245d5069385c3d5f9fbbba1e3d3f7b58
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentContentRecord.csv
@@ -0,0 +1,4 @@
+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_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Testing #1",,5
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordAndAddHotelChildRecord.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordAndAddHotelChildRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..d3f526718da1ffcac0951170b6d304d49f643231
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordAndAddHotelChildRecord.csv
@@ -0,0 +1,25 @@
+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_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,"5,6"
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,89,32,0,0,0,0,0,0,0,0,"Hotel #2",
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordAndChangeHotelChildRecordsSorting.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordAndChangeHotelChildRecordsSorting.csv
new file mode 100644
index 0000000000000000000000000000000000000000..f82c638b2c6b01400a22583d2bf14b7f2da22696
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordAndChangeHotelChildRecordsSorting.csv
@@ -0,0 +1,24 @@
+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_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"4,3"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordAndDeleteHotelChildRecord.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordAndDeleteHotelChildRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..1bef707eff2a60246860831f2bb2fcfe175d9ff0
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordAndDeleteHotelChildRecord.csv
@@ -0,0 +1,24 @@
+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_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,3
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,1000000000,1,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,1000000000,1,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,1000000000,1,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordWithHotelChildRecord.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordWithHotelChildRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..fbc241ce875945be4e79dd8c6a13989be39591b0
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordWithHotelChildRecord.csv
@@ -0,0 +1,24 @@
+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_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Testing #1",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/moveParentContentRecordToDifferentPage.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/moveParentContentRecordToDifferentPage.csv
new file mode 100644
index 0000000000000000000000000000000000000000..80be9a1bbe1d6eb17f5ff5f75048cfcee123146d
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/moveParentContentRecordToDifferentPage.csv
@@ -0,0 +1,24 @@
+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_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,90,256,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,90,256,0,0,0,0,0,0,0,0,"Hotel #1",8
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,90,256,0,0,0,0,0,0,0,0,"Offer #1.1",13
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,90,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/moveParentContentRecordToDifferentPageAndChangeSorting.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/moveParentContentRecordToDifferentPageAndChangeSorting.csv
new file mode 100644
index 0000000000000000000000000000000000000000..73b40856e73ecfcdc479cafe63d0c1f4508cfcc4
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/moveParentContentRecordToDifferentPageAndChangeSorting.csv
@@ -0,0 +1,24 @@
+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_1ncsv_hotels
+,297,90,512,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,90,256,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,90,64,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,90,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,90,256,0,0,0,0,0,0,0,0,"Hotel #1",8
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,90,32,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,90,64,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,90,128,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,90,256,0,0,0,0,0,0,0,0,"Offer #1.1",13
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,90,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,90,8,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,90,16,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,90,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,90,64,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,90,128,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,90,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Scenario/LiveDefaultElements.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Scenario/LiveDefaultElements.csv
new file mode 100644
index 0000000000000000000000000000000000000000..4a196a4ca95ce0367b108be21c2e50cf695b25aa
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Scenario/LiveDefaultElements.csv
@@ -0,0 +1,28 @@
+"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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,"5"
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2","7"
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1","8"
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1","12"
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1","13"
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Scenario/LiveDefaultPages.csv b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Scenario/LiveDefaultPages.csv
new file mode 100644
index 0000000000000000000000000000000000000000..17b04d408c8e79510b60113f28e7b0a3ae6a15e5
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/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/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/LiveActionTest.php b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/LiveActionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..5fca3f6441e6aca922aab2c3d0b9e133070bd556
--- /dev/null
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/LiveActionTest.php
@@ -0,0 +1,39 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Functional\DataHandling\InlineRelationalRecordEditing\CommaSeparatedValue;
+
+/***************************************************************
+ * 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 LiveActionTest extends AbstractActionTestCase {
+
+	public function setUp() {
+		parent::setUp();
+		$this->backendUser->workspace = 0;
+	}
+
+}
diff --git a/typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/ExtTables/ext_tables.general.php b/typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/ExtTables/ext_tables.general.php
index 2ec9b2f50d630326c8cb0bb37e2fb57a001694ce..9f7a282b8a99ca40895c3acbc065719c5d204f5a 100644
--- a/typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/ExtTables/ext_tables.general.php
+++ b/typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/ExtTables/ext_tables.general.php
@@ -87,6 +87,25 @@ if (!defined('TYPO3_MODE')) {
 					'localizeChildrenAtParentLocalization' => TRUE,
 				),
 			)
+		),
+		 'tx_irretutorial_1ncsv_hotels' => array(
+			'exclude' => 1,
+			'label' => 'LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tt_content.tx_irretutorial_1ncsv_hotels',
+			'config' => array(
+				'type' => 'inline',
+				'foreign_table' => 'tx_irretutorial_1ncsv_hotel',
+				'maxitems' => 10,
+				'appearance' => array(
+					'showSynchronizationLink' => 1,
+					'showAllLocalizationLink' => 1,
+					'showPossibleLocalizationRecords' => 1,
+					'showRemovedLocalizationRecords' => 1,
+				),
+				'behaviour' => array(
+					'localizationMode' => 'select',
+					'localizeChildrenAtParentLocalization' => TRUE,
+				),
+			)
 		),
 		'tx_irretutorial_flexform' => array(
 			'exclude' => 1,
@@ -103,6 +122,6 @@ if (!defined('TYPO3_MODE')) {
 
 \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes(
 	'tt_content',
-	'--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tt_content.div.irre, tx_irretutorial_1nff_hotels;;;;1-1-1, tx_irretutorial_flexform'
+	'--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tt_content.div.irre, tx_irretutorial_1nff_hotels;;;;1-1-1, tx_irretutorial_1ncsv_hotels, tx_irretutorial_flexform'
 );
 ?>
\ No newline at end of file
diff --git a/typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Resources/Private/Language/locallang_db.xml b/typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Resources/Private/Language/locallang_db.xml
index 349e703eeb236d2944d33562d724eda2b7e5b767..279fd0240b8b5e51144cede3122ae249d8e91a93 100644
--- a/typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Resources/Private/Language/locallang_db.xml
+++ b/typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Resources/Private/Language/locallang_db.xml
@@ -12,7 +12,8 @@
 			<label index="pages.doktype.div.irre">IRRE Tutorial</label>
 			<label index="pages.doktype.I.233">IRRE Tutorial Test Page</label>
 			<label index="pages.tx_irretutorial_hotels">Hotels:</label>
-			<label index="tt_content.tx_irretutorial_1nff_hotels">Hotels:</label>
+			<label index="tt_content.tx_irretutorial_1nff_hotels">Hotels (1nff):</label>
+			<label index="tt_content.tx_irretutorial_1ncsv_hotels">Hotels (1ncsv):</label>
 			<label index="tt_content.tx_irretutorial_flexform">IRRE:</label>
 			<label index="tt_content.tx_irretutorial_flexform.hotels">IRRE:</label>
 			<label index="tt_content.div.irre">IRRE Tutorial</label>
diff --git a/typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/ext_tables.sql b/typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/ext_tables.sql
index 7616e15bc37f693a6cd6663c219f7c3151d68fb6..64fb75006e9878ceeb9e059646a7ba34c1094fa0 100644
--- a/typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/ext_tables.sql
+++ b/typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/ext_tables.sql
@@ -23,6 +23,7 @@ CREATE TABLE pages_language_overlay (
 #
 CREATE TABLE tt_content (
     tx_irretutorial_1nff_hotels int(11) DEFAULT '0' NOT NULL,
+    tx_irretutorial_1ncsv_hotels text NOT NULL,
     tx_irretutorial_flexform mediumtext
 );
 
diff --git a/typo3/sysext/core/Tests/Functional/Fixtures/Frontend/JsonRenderer.ts b/typo3/sysext/core/Tests/Functional/Fixtures/Frontend/JsonRenderer.ts
index 4e1ff319b921cf554cd9d1e553d5594fca87db7a..95452ce58fa31894065fad112009e91bc9b8735a 100644
--- a/typo3/sysext/core/Tests/Functional/Fixtures/Frontend/JsonRenderer.ts
+++ b/typo3/sysext/core/Tests/Functional/Fixtures/Frontend/JsonRenderer.ts
@@ -19,6 +19,9 @@ watcher {
 		tx_irretutorial_1nff_hotel = uid,_ORIG_uid,_LOCALIZED_UID,pid,sorting,sys_language_uid,title,offers
 		tx_irretutorial_1nff_offer = uid,_ORIG_uid,_LOCALIZED_UID,pid,sorting,sys_language_uid,title,prices
 		tx_irretutorial_1nff_price = uid,_ORIG_uid,_LOCALIZED_UID,pid,sorting,sys_language_uid,title,price
+		tx_irretutorial_1ncsv_hotel = uid,_ORIG_uid,_LOCALIZED_UID,pid,sorting,sys_language_uid,title,offers
+		tx_irretutorial_1ncsv_offer = uid,_ORIG_uid,_LOCALIZED_UID,pid,sorting,sys_language_uid,title,prices
+		tx_irretutorial_1ncsv_price = uid,_ORIG_uid,_LOCALIZED_UID,pid,sorting,sys_language_uid,title,price
 	}
 }
 
@@ -106,6 +109,42 @@ page {
 					}
 				}
 			}
+			30 = CONTENT
+			30 {
+				if.isTrue.field = tx_irretutorial_1ncsv_hotels
+				watcher.parentRecordField = tx_irretutorial_1ncsv_hotels
+				table = tx_irretutorial_1ncsv_hotel
+				select {
+					uidInList.data = field:tx_irretutorial_1ncsv_hotels
+					orderBy = sorting
+					# not including sys_language_uid lookup
+					# languageField = sys_language_uid
+				}
+				renderObj = CONTENT
+				renderObj {
+					if.isTrue.field = offers
+					watcher.parentRecordField = offers
+					table = tx_irretutorial_1ncsv_offer
+					select {
+						uidInList.data = field:offers
+						orderBy = sorting
+						# not including sys_language_uid lookup
+						# languageField = sys_language_uid
+					}
+					renderObj = CONTENT
+					renderObj {
+						if.isTrue.field = prices
+						watcher.parentRecordField = prices
+						table = tx_irretutorial_1ncsv_price
+						select {
+							uidInList.data = field:prices
+							orderBy = sorting
+							# not including sys_language_uid lookup
+							# languageField = sys_language_uid
+						}
+					}
+				}
+			}
 		}
 	}
 }
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/AbstractActionTestCase.php b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/AbstractActionTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..577062043f386bc1b8ea5045884118fe962e6df2
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/AbstractActionTestCase.php
@@ -0,0 +1,604 @@
+<?php
+namespace TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\InlineRelationalRecordEditing\CommaSeparatedValue;
+
+/***************************************************************
+ * 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 VALUE_WorkspaceId = 1;
+
+	const TABLE_Page = 'pages';
+	const TABLE_Content = 'tt_content';
+	const TABLE_Hotel = 'tx_irretutorial_1ncsv_hotel';
+	const TABLE_Offer = 'tx_irretutorial_1ncsv_offer';
+
+	const FIELD_ContentHotel = 'tx_irretutorial_1ncsv_hotels';
+	const FIELD_HotelOffer = 'offers';
+
+	/**
+	 * @var string
+	 */
+	protected $dataSetDirectory = 'typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/';
+
+	/**
+	 * @var array
+	 */
+	protected $coreExtensionsToLoad = array(
+		'version',
+		'workspaces',
+	);
+
+	public function setUp() {
+		parent::setUp();
+		$this->importScenarioDataSet('LiveDefaultPages');
+		$this->importScenarioDataSet('LiveDefaultElements');
+
+		$this->setUpFrontendRootPage(1, array('typo3/sysext/core/Tests/Functional/Fixtures/Frontend/JsonRenderer.ts'));
+	}
+
+	/**
+	 * Parent content records
+	 */
+
+	/**
+	 * @test
+	 */
+	public function createParentContentRecord() {
+		$this->actionService->createNewRecord(self::TABLE_Content, self::VALUE_PageId, array('header' => 'Testing #1'));
+		$this->assertAssertionDataSet('createParentContentRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1');
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyParentContentRecord() {
+		$this->actionService->modifyRecord(self::TABLE_Content, self::VALUE_ContentIdLast, array('header' => 'Testing #1'));
+		$this->assertAssertionDataSet('modifyParentContentRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1');
+
+		// @todo Cannot direct select workspace version due to frontend SQL query
+		// SELECT * FROM tx_irretutorial_1ncsv_hotel
+		// WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
+		// AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
+		// AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
+		/*
+			$this->assertResponseContentStructureHasRecords(
+				$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+				self::TABLE_Hotel, 'title', array('Hotel #1')
+			);
+		*/
+	}
+
+	/**
+	 * @test
+	 */
+	public function deleteParentContentRecord() {
+		$this->actionService->deleteRecord(self::TABLE_Content, self::VALUE_ContentIdLast);
+		$this->assertAssertionDataSet('deleteParentContentRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentDoesNotHaveRecords($responseContent, self::TABLE_Content, 'header', 'Regular Element #2');
+	}
+
+	/**
+	 * @test
+	 */
+	public function deleteParentContentRecordAndDiscardDeletedParentRecord() {
+		$newTableIds = $this->actionService->deleteRecord(self::TABLE_Content, self::VALUE_ContentIdLast);
+		$versionedDeletedContentId = $newTableIds[self::TABLE_Content][self::VALUE_ContentIdLast];
+		$this->actionService->clearWorkspaceRecord(self::TABLE_Content, $versionedDeletedContentId);
+		$this->assertAssertionDataSet('deleteParentContentRecordAndDiscardDeletedParentRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Regular Element #2');
+	}
+
+	/**
+	 * @test
+	 */
+	public function copyParentContentRecord() {
+		$newTableIds = $this->actionService->copyRecord(self::TABLE_Content, self::VALUE_ContentIdLast, self::VALUE_PageId);
+		$this->assertAssertionDataSet('copyParentContentRecord');
+
+		$newContentId = $newTableIds[self::TABLE_Content][self::VALUE_ContentIdLast];
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . $newContentId, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('Hotel #1')
+		);
+	}
+
+	/**
+	 * @test
+	 */
+	public function localizeParentContentRecord() {
+		$this->actionService->localizeRecord(self::TABLE_Content, self::VALUE_ContentIdLast, self::VALUE_LanguageId);
+		$this->assertAssertionDataSet('localizeParentContentRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, self::VALUE_LanguageId, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('[Translate to Dansk:] Hotel #1')
+		);
+	}
+
+	/**
+	 * @test
+	 */
+	public function changeParentContentRecordSorting() {
+		$this->actionService->moveRecord(self::TABLE_Content, self::VALUE_ContentIdFirst, -self::VALUE_ContentIdLast);
+		$this->assertAssertionDataSet('changeParentContentRecordSorting');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+
+		// @todo Cannot direct select workspace version due to frontend SQL query
+		// SELECT * FROM tx_irretutorial_1ncsv_hotel
+		// WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
+		// AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
+		// AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
+		/*
+			$this->assertResponseContentStructureHasRecords(
+				$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+				self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+			);
+			$this->assertResponseContentStructureHasRecords(
+				$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+				self::TABLE_Hotel, 'title', array('Hotel #1')
+			);
+		*/
+	}
+
+	/**
+	 * @test
+	 */
+	public function moveParentContentRecordToDifferentPage() {
+		$this->actionService->moveRecord(self::TABLE_Content, self::VALUE_ContentIdLast, self::VALUE_PageIdTarget);
+		$this->assertAssertionDataSet('moveParentContentRecordToDifferentPage');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageIdTarget, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Regular Element #2');
+
+		// @todo Workspace child records gets lost due to core bug
+		/*
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('Hotel #1')
+		);
+		*/
+	}
+
+	/**
+	 * @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');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageIdTarget, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', array('Regular Element #2', 'Regular Element #1'));
+
+		// @todo Cannot direct select workspace version due to frontend SQL query
+		// SELECT * FROM tx_irretutorial_1ncsv_hotel
+		// WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
+		// AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
+		// AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
+		/*
+			$this->assertResponseContentStructureHasRecords(
+				$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+				self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+			);
+			$this->assertResponseContentStructureHasRecords(
+				$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+				self::TABLE_Hotel, 'title', array('Hotel #1')
+			);
+		*/
+	}
+
+	/**
+	 * Page records
+	 */
+
+	/**
+	 * @test
+	 */
+	public function modifyPageRecord() {
+		$this->actionService->modifyRecord(self::TABLE_Page, self::VALUE_PageId, array('title' => 'Testing #1'));
+		$this->assertAssertionDataSet('modifyPageRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Page, 'title', 'Testing #1');
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+		);
+	}
+
+	/**
+	 * @test
+	 */
+	public function deletePageRecord() {
+		$this->actionService->deleteRecord(self::TABLE_Page, self::VALUE_PageId);
+		$this->assertAssertionDataSet('deletePageRecord');
+
+		$response = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId, FALSE);
+		$this->assertContains('RuntimeException', $response->getError());
+	}
+
+	/**
+	 * @test
+	 */
+	public function copyPageRecord() {
+		$newTableIds = $this->actionService->copyRecord(self::TABLE_Page, self::VALUE_PageId, self::VALUE_PageIdTarget);
+		$this->assertAssertionDataSet('copyPageRecord');
+
+		$newPageId = $newTableIds[self::TABLE_Page][self::VALUE_PageId];
+		$responseContent = $this->getFrontendResponse($newPageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2', 'Hotel #1'));
+	}
+
+	/**
+	 * IRRE Child Records
+	 */
+
+	/**
+	 * @test
+	 */
+	public function createParentContentRecordWithHotelAndOfferChildRecords() {
+		$newTableIds = $this->actionService->createNewRecords(
+			self::VALUE_PageId,
+			array(
+				self::TABLE_Offer => array('title' => 'Offer #1'),
+				self::TABLE_Hotel => array('title' => 'Hotel #1', self::FIELD_HotelOffer => '__previousUid'),
+				self::TABLE_Content => array('header' => 'Testing #1', self::FIELD_ContentHotel => '__previousUid'),
+			)
+		);
+		$this->assertAssertionDataSet('createParentContentRecordWithHotelAndOfferChildRecords');
+
+		$newContentId = $newTableIds[self::TABLE_Content][0];
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1');
+
+		// @todo Shadow fields are not correct on the new placeholder
+		/*
+			$this->assertResponseContentStructureHasRecords(
+				$responseContent, self::TABLE_Content . ':' . $newContentId, self::FIELD_ContentHotel,
+				self::TABLE_Hotel, 'title', 'Hotel #1'
+			);
+		*/
+	}
+
+	/**
+	 * @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', self::FIELD_HotelOffer => '__previousUid'),
+				self::TABLE_Content => array('header' => 'Testing #1', self::FIELD_ContentHotel => '__previousUid'),
+			)
+		);
+		$newContentId = $newTableIds[self::TABLE_Content][0];
+		$newHotelId = $newTableIds[self::TABLE_Hotel][0];
+		$copiedTableIds = $this->actionService->copyRecord(self::TABLE_Content, $newContentId, self::VALUE_PageId);
+		$this->assertAssertionDataSet('createAndCopyParentContentRecordWithHotelAndOfferChildRecords');
+
+		$copiedContentId = $copiedTableIds[self::TABLE_Content][$newContentId];
+		$copiedHotelId = $copiedTableIds[self::TABLE_Hotel][$newHotelId];
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1 (copy 1)');
+
+		// @todo Shadow fields are not correct on the new placeholder
+		/*
+			$this->assertResponseContentStructureHasRecords(
+				$responseContent, self::TABLE_Content . ':' . $newContentId, self::FIELD_ContentHotel,
+				self::TABLE_Hotel, 'title', 'Hotel #1'
+			);
+			$this->assertResponseContentStructureHasRecords(
+				$responseContent, self::TABLE_Content . ':' . $copiedContentId, self::FIELD_ContentHotel,
+				self::TABLE_Hotel, 'title', 'Hotel #1'
+			);
+			$this->assertResponseContentStructureHasRecords(
+				$responseContent, self::TABLE_Hotel . ':' . $copiedHotelId, self::FIELD_HotelOffer,
+				self::TABLE_Offer, 'title', 'Offer #1'
+			);
+		 */
+	}
+
+	/**
+	 * @test
+	 */
+	public function createAndCopyParentContentRecordWithHotelAndOfferChildRecordsAndDiscardCopiedParentRecord() {
+		// @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', self::FIELD_HotelOffer => '__previousUid'),
+				self::TABLE_Content => array('header' => 'Testing #1', self::FIELD_ContentHotel => '__previousUid'),
+			)
+		);
+		$newContentId = $newTableIds['tt_content'][0];
+		$copiedTableIds = $this->actionService->copyRecord(self::TABLE_Content, $newContentId, self::VALUE_PageId);
+		$copiedContentId = $copiedTableIds[self::TABLE_Content][$newContentId];
+		$versionedCopiedContentId = $this->actionService->getDataHander()->getAutoVersionId(self::TABLE_Content, $copiedContentId);
+		$this->actionService->clearWorkspaceRecord(self::TABLE_Content, $versionedCopiedContentId);
+		$this->assertAssertionDataSet('createAndCopyParentContentRecordWithHotelAndOfferChildRecordsAndDiscardCopiedParentRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentDoesNotHaveRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1 (copy 1)');
+	}
+
+	/**
+	 * @test
+	 */
+	public function createAndLocalizeParentContentRecordWithHotelAndOfferChildRecords() {
+		// @todo Localizing 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', self::FIELD_HotelOffer => '__previousUid'),
+				self::TABLE_Content => array('header' => 'Testing #1', self::FIELD_ContentHotel => '__previousUid'),
+			)
+		);
+		$newContentId = $newTableIds[self::TABLE_Content][0];
+		$newHotelId = $newTableIds[self::TABLE_Hotel][0];
+		$localizedTableIds = $this->actionService->localizeRecord(self::TABLE_Content, $newContentId, self::VALUE_LanguageId);
+		$this->assertAssertionDataSet('createAndLocalizeParentContentRecordWithHotelAndOfferChildRecords');
+
+		$localizedContentId = $localizedTableIds[self::TABLE_Content][$newContentId];
+		$localizedHotelId = $localizedTableIds[self::TABLE_Hotel][$newHotelId];
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, self::VALUE_LanguageId, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', '[Translate to Dansk:] Testing #1');
+
+		// @todo Does not work since children don't point to live-default record
+		/*
+			$this->assertResponseContentStructureHasRecords(
+				$responseContent, self::TABLE_Content . ':' . $localizedContentId, self::FIELD_ContentHotel,
+				self::TABLE_Hotel, 'title', '[Translate to Dansk:] Hotel #1'
+			);
+			$this->assertResponseContentStructureHasRecords(
+				$responseContent, self::TABLE_Hotel . ':' . $localizedHotelId, self::FIELD_HotelOffer,
+				self::TABLE_Offer, 'title', '[Translate to Dansk:] Offer #1'
+			);
+		*/
+	}
+
+	/**
+	 * @test
+	 */
+	public function createAndLocalizeParentContentRecordWithHotelAndOfferChildRecordsAndDiscardLocalizedParentRecord() {
+		// @todo Localizing 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', self::FIELD_HotelOffer => '__previousUid'),
+				self::TABLE_Content => array('header' => 'Testing #1', self::FIELD_ContentHotel => '__previousUid'),
+			)
+		);
+		$newContentId = $newTableIds[self::TABLE_Content][0];
+		$localizedTableIds = $this->actionService->localizeRecord(self::TABLE_Content, $newContentId, self::VALUE_LanguageId);
+		$localizedContentId = $localizedTableIds[self::TABLE_Content][$newContentId];
+		$versionedLocalizedContentId = $this->actionService->getDataHander()->getAutoVersionId(self::TABLE_Content, $localizedContentId);
+		$this->actionService->clearWorkspaceRecord(self::TABLE_Content, $versionedLocalizedContentId);
+		$this->assertAssertionDataSet('createAndLocalizeParentContentRecordWithHotelAndOfferChildRecordsAndDiscardLocalizedParentRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, self::VALUE_LanguageId, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentDoesNotHaveRecords($responseContent, self::TABLE_Content, 'header', '[Translate to Dansk:] Testing #1');
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyOnlyHotelChildRecord() {
+		$this->actionService->modifyRecord(self::TABLE_Hotel, 4, array('title' => 'Testing #1'));
+		$this->assertAssertionDataSet('modifyOnlyHotelChildRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('Hotel #1', 'Testing #1')
+		);
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyParentRecordAndChangeHotelChildRecordsSorting() {
+		$this->actionService->modifyRecord(self::TABLE_Content, self::VALUE_ContentIdFirst, array(self::FIELD_ContentHotel => '4,3'));
+		$this->assertAssertionDataSet('modifyParentRecordAndChangeHotelChildRecordsSorting');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+
+		// @todo Cannot direct select workspace version due to frontend SQL query
+		// SELECT * FROM tx_irretutorial_1ncsv_hotel
+		// WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
+		// AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
+		// AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
+		/*
+			$this->assertResponseContentStructureHasRecords(
+				$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+				self::TABLE_Hotel, 'title', array('Hotel #2', 'Hotel #1')
+			);
+		*/
+	}
+
+	/**
+	 * @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_ContentIdFirst, self::FIELD_ContentHotel => '3,4'),
+			)
+		);
+		$this->assertAssertionDataSet('modifyParentRecordWithHotelChildRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+
+		// @todo Cannot direct select workspace version due to frontend SQL query
+		// SELECT * FROM tx_irretutorial_1ncsv_hotel
+		// WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
+		// AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
+		// AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
+		/*
+			$this->assertResponseContentStructureHasRecords(
+				$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+				self::TABLE_Hotel, 'title', array('Hotel #1', 'Testing #1')
+			);
+		*/
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyParentRecordWithHotelChildRecordAndDiscardModifiedParentRecord() {
+		$this->actionService->modifyRecords(
+			self::VALUE_PageId,
+			array(
+				self::TABLE_Hotel => array('uid' => 4, 'title' => 'Testing #1'),
+				self::TABLE_Content => array('uid' => self::VALUE_ContentIdFirst, self::FIELD_ContentHotel => '3,4'),
+			)
+		);
+		$modifiedContentId = $this->actionService->getDataHander()->getAutoVersionId(self::TABLE_Content, self::VALUE_ContentIdFirst);
+		$this->actionService->clearWorkspaceRecord(self::TABLE_Content, $modifiedContentId);
+		$this->assertAssertionDataSet('modifyParentRecordWithHotelChildRecordAndDiscardModifiedParentRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Regular Element #1');
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('Hotel #1', 'Testing #1')
+			// @todo Discarding the parent record should discard the child records as well
+			// self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+		);
+		/*
+			$this->assertResponseContentStructureDoesNotHaveRecords(
+				$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+				self::TABLE_Hotel, 'title', 'Testing #1'
+			);
+		*/
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyParentRecordWithHotelChildRecordAndDiscardAllModifiedRecords() {
+		$this->actionService->modifyRecords(
+			self::VALUE_PageId,
+			array(
+				self::TABLE_Hotel => array('uid' => 4, 'title' => 'Testing #1'),
+				self::TABLE_Content => array('uid' => self::VALUE_ContentIdFirst, self::FIELD_ContentHotel => '3,4'),
+			)
+		);
+		$modifiedContentId = $this->actionService->getDataHander()->getAutoVersionId(self::TABLE_Content, self::VALUE_ContentIdFirst);
+		$modifiedHotelId = $this->actionService->getDataHander()->getAutoVersionId(self::TABLE_Hotel, 4);
+		$this->actionService->clearWorkspaceRecords(
+				array(
+					self::TABLE_Hotel => array($modifiedHotelId),
+					self::TABLE_Content => array($modifiedContentId),
+				)
+		);
+		$this->assertAssertionDataSet('modifyParentRecordWithHotelChildRecordAndDiscardAllModifiedRecords');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Regular Element #1');
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+		);
+	}
+
+	/**
+	 * @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, self::FIELD_ContentHotel => '5,__previousUid'),
+			)
+		);
+		$this->assertAssertionDataSet('modifyParentRecordAndAddHotelChildRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+
+		// @todo Child record cannot be selected since they do not point to the live record
+		/*
+			$this->assertResponseContentStructureHasRecords(
+				$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+				self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+			);
+		*/
+	}
+
+	/**
+	 * @test
+	 */
+	public function modifyParentRecordAndDeleteHotelChildRecord() {
+		$this->actionService->modifyRecord(
+			self::TABLE_Content,
+			self::VALUE_ContentIdFirst,
+			array(self::FIELD_ContentHotel => '3'),
+			array(self::TABLE_Hotel => array(4))
+		);
+		$this->assertAssertionDataSet('modifyParentRecordAndDeleteHotelChildRecord');
+
+		$responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+		$this->assertResponseContentStructureHasRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', 'Hotel #1'
+		);
+		$this->assertResponseContentStructureDoesNotHaveRecords(
+			$responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+			self::TABLE_Hotel, 'title', 'Hotel #2'
+		);
+	}
+
+}
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/changeParentContentRecordSorting.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/changeParentContentRecordSorting.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e05c2677084f2ed919294c9b95b7592337d8275f
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,-1,256,0,0,0,1,4,0,297,0,"Regular Element #1",0,"6,7"
+,300,89,768,0,0,0,1,3,0,0,297,"[MOVE-TO PLACEHOLDER for #297, WS#1]",,
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","9,10"
+,7,-1,128,0,0,0,1,0,0,4,0,"Hotel #2",11
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","14,15,16"
+,10,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","17,18"
+,11,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",19
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,-1,256,0,0,0,1,0,0,7,0,"Price #1.1.1"
+,15,-1,128,0,0,0,1,0,0,8,0,"Price #1.1.2"
+,16,-1,64,0,0,0,1,0,0,9,0,"Price #1.1.3"
+,17,-1,32,0,0,0,1,0,0,10,0,"Price #1.2.1"
+,18,-1,16,0,0,0,1,0,0,11,0,"Price #1.2.2"
+,19,-1,8,0,0,0,1,0,0,12,0,"Price #2.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/copyPageRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/copyPageRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..37c11f7d3cc5cb9d3ac749152520171210f6c463
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,91,256,0,0,0,1,1,0,0,0,"Regular Element #2",,
+,300,-1,256,0,0,0,1,-1,0,299,0,"Regular Element #2",0,6
+,301,91,128,0,0,0,1,1,0,0,0,"Regular Element #1",,
+,302,-1,128,0,0,0,1,-1,0,301,0,"Regular Element #1",0,"7,8"
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,91,64,0,0,0,0,0,0,0,0,"Hotel #1",9
+,7,91,256,0,0,0,0,0,0,0,0,"Hotel #1","10,11"
+,8,91,128,0,0,0,0,0,0,0,0,"Hotel #2",12
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,91,32,0,0,0,0,0,0,0,0,"Offer #1.1",14
+,10,91,256,0,0,0,0,0,0,0,0,"Offer #1.1","15,16,17"
+,11,91,128,0,0,0,0,0,0,0,0,"Offer #1.2","18,19"
+,12,91,64,0,0,0,0,0,0,0,0,"Offer #2.1",20
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,91,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,15,91,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,16,91,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,17,91,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,18,91,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,19,91,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,20,91,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/copyParentContentRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/copyParentContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e67567aeddbcc8dca5a1b1bca1fd8b855e18997c
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,89,128,0,0,0,1,1,0,0,0,"Regular Element #2 (copy 1)",,
+,300,-1,128,0,0,0,1,-1,0,299,0,"Regular Element #2 (copy 1)",0,6
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,89,64,0,0,0,0,0,0,0,0,"Hotel #1",9
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",14
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createAndCopyParentContentRecordWithHotelAndOfferChildRecords.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createAndCopyParentContentRecordWithHotelAndOfferChildRecords.csv
new file mode 100644
index 0000000000000000000000000000000000000000..827ba8ed9556e0589c7bb4aacb36f6e565d3d4bd
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createAndCopyParentContentRecordWithHotelAndOfferChildRecords.csv
@@ -0,0 +1,34 @@
+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_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",,
+,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",,7
+,301,89,64,0,0,0,1,1,0,0,0,"Testing #1 (copy 1)",,
+,302,-1,64,0,0,0,1,-1,0,301,0,"Testing #1 (copy 1)",0,8
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,89,32,0,0,0,1,1,0,0,0,"Hotel #1",
+,7,-1,32,0,0,0,1,-1,0,6,0,"Hotel #1",10
+,8,89,32,0,0,0,1,-1,0,6,0,"Hotel #1",11
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,89,16,0,0,0,1,1,0,0,0,"Offer #1",
+,10,-1,16,0,0,0,1,-1,0,9,0,"Offer #1",
+,11,89,16,0,0,0,1,-1,0,9,0,"Offer #1",
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createAndCopyParentContentRecordWithHotelAndOfferChildRecordsAndDiscardCopiedParentRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createAndCopyParentContentRecordWithHotelAndOfferChildRecordsAndDiscardCopiedParentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..06473ecfa2471e0b83d5a22d42a963b7f3d6ae77
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createAndCopyParentContentRecordWithHotelAndOfferChildRecordsAndDiscardCopiedParentRecord.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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",,
+,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",,7
+,301,89,1000000000,1,0,0,0,1,0,0,0,"Testing #1 (copy 1)",,
+,302,-1,1000000000,1,0,0,0,-1,0,301,0,"Testing #1 (copy 1)",0,8
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,89,32,0,0,0,1,1,0,0,0,"Hotel #1",
+,7,-1,32,0,0,0,1,-1,0,6,0,"Hotel #1",10
+,8,89,32,0,0,0,1,-1,0,6,0,"Hotel #1",11
+,9,-1,32,0,0,0,1,2,0,8,0,"Hotel #1",12
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,89,16,0,0,0,1,1,0,0,0,"Offer #1",
+,10,-1,16,0,0,0,1,-1,0,9,0,"Offer #1",
+,11,89,16,0,0,0,1,-1,0,9,0,"Offer #1",
+,12,-1,16,0,0,0,1,2,0,11,0,"Offer #1",
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createAndLocalizeParentContentRecordWithHotelAndOfferChildRecords.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createAndLocalizeParentContentRecordWithHotelAndOfferChildRecords.csv
new file mode 100644
index 0000000000000000000000000000000000000000..75ce1ab4bb5e1efd8d95972f1fca68d08b56b6d5
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createAndLocalizeParentContentRecordWithHotelAndOfferChildRecords.csv
@@ -0,0 +1,34 @@
+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_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",,
+,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",,7
+,301,89,192,0,1,299,1,1,0,0,0,"[Translate to Dansk:] Testing #1",,
+,302,-1,192,0,1,299,1,-1,0,301,0,"[Translate to Dansk:] Testing #1",0,8
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,89,32,0,0,0,1,1,0,0,0,"Hotel #1",
+,7,-1,32,0,0,0,1,-1,0,6,0,"Hotel #1",10
+,8,89,48,0,1,7,1,1,0,0,0,"[Translate to Dansk:] Hotel #1",
+,9,-1,48,0,1,7,1,-1,0,8,0,"[Translate to Dansk:] Hotel #1",
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,89,16,0,0,0,1,1,0,0,0,"Offer #1",
+,10,-1,16,0,0,0,1,-1,0,9,0,"Offer #1",
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createAndLocalizeParentContentRecordWithHotelAndOfferChildRecordsAndDiscardLocalizedParentRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createAndLocalizeParentContentRecordWithHotelAndOfferChildRecordsAndDiscardLocalizedParentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..a9d31e971bc8ccb5751607df5099d02b4b39be61
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createAndLocalizeParentContentRecordWithHotelAndOfferChildRecordsAndDiscardLocalizedParentRecord.csv
@@ -0,0 +1,34 @@
+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_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",,
+,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",,7
+,301,89,1000000000,1,1,299,0,1,0,0,0,"[Translate to Dansk:] Testing #1",,
+,302,-1,1000000000,1,1,299,0,-1,0,301,0,"[Translate to Dansk:] Testing #1",0,8
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,89,32,0,0,0,1,1,0,0,0,"Hotel #1",
+,7,-1,32,0,0,0,1,-1,0,6,0,"Hotel #1",10
+,8,89,1000000000,1,1,7,0,1,0,0,0,"[Translate to Dansk:] Hotel #1",
+,9,-1,1000000000,1,1,7,0,-1,0,8,0,"[Translate to Dansk:] Hotel #1",
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,89,16,0,0,0,1,1,0,0,0,"Offer #1",
+,10,-1,16,0,0,0,1,-1,0,9,0,"Offer #1",
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createParentContentRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createParentContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..39081ebbc8b129df081b08355797ac49cd7f41dd
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",,
+,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",,
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createParentContentRecordWithHotelAndOfferChildRecords.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/createParentContentRecordWithHotelAndOfferChildRecords.csv
new file mode 100644
index 0000000000000000000000000000000000000000..656034c1ad16c1210beb41ca3e39d47403f3bb5b
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",,
+,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",,7
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,89,32,0,0,0,1,1,0,0,0,"Hotel #1",
+,7,-1,32,0,0,0,1,-1,0,6,0,"Hotel #1",10
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,89,16,0,0,0,1,1,0,0,0,"Offer #1",
+,10,-1,16,0,0,0,1,-1,0,9,0,"Offer #1",
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/deletePageRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/deletePageRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..c4b2bac6b2f32d79cdf059cadb823aabd4730f95
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/deleteParentContentRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/deleteParentContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..bf1b7cc2cd6f2044f4283a6f7c5e76c5b340da2b
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,-1,512,0,0,0,1,2,0,298,0,"Regular Element #2",0,6
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,-1,64,0,0,0,1,2,0,5,0,"Hotel #1",9
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,-1,32,0,0,0,1,2,0,8,0,"Offer #1.1",14
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,-1,4,0,0,0,1,2,0,13,0,"Price #1.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/deleteParentContentRecordAndDiscardDeletedParentRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/deleteParentContentRecordAndDiscardDeletedParentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..18d7724ffc5e3331d90f5cffac1dc5030d55ecf0
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/deleteParentContentRecordAndDiscardDeletedParentRecord.csv
@@ -0,0 +1,24 @@
+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_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/localizeParentContentRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/localizeParentContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..4fa119f1cf2487c93590953723da9c8666873504
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/localizeParentContentRecord.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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,89,768,0,1,298,1,1,0,0,0,"[Translate to Dansk:] Regular Element #2",,
+,300,-1,768,0,1,298,1,-1,0,299,0,"[Translate to Dansk:] Regular Element #2",0,6
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,89,96,0,1,5,1,1,0,0,0,"[Translate to Dansk:] Hotel #1",
+,7,-1,96,0,1,5,1,-1,0,6,0,"[Translate to Dansk:] Hotel #1",
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyOnlyHotelChildRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyOnlyHotelChildRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..56c78fde0a1db85302c96405d73e0c9283aa3264
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,-1,128,0,0,0,1,0,0,4,0,"Testing #1",9
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",14
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,-1,8,0,0,0,1,0,0,12,0,"Price #2.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyPageRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyPageRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..07c6f4c0d18f100b0af619c8035995b2c9031ff7
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentContentRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentContentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..a3fc4e403df0efc71ef5cf9dbef6f22f18b21f64
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,-1,512,0,0,0,1,0,0,298,0,"Testing #1",0,6
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,-1,64,0,0,0,1,0,0,5,0,"Hotel #1",9
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,-1,32,0,0,0,1,0,0,8,0,"Offer #1.1",14
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,-1,4,0,0,0,1,0,0,13,0,"Price #1.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordAndAddHotelChildRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordAndAddHotelChildRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..0a121783d32a54e374eef563499c3bbcc28bc8f8
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,-1,512,0,0,0,1,0,0,298,0,"Regular Element #2",0,"8,7"
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,89,32,0,0,0,1,1,0,0,0,"Hotel #2",
+,7,-1,32,0,0,0,1,-1,0,6,0,"Hotel #2",
+,8,-1,64,0,0,0,1,0,0,5,0,"Hotel #1",9
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,-1,32,0,0,0,1,0,0,8,0,"Offer #1.1",14
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,-1,4,0,0,0,1,0,0,13,0,"Price #1.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordAndChangeHotelChildRecordsSorting.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordAndChangeHotelChildRecordsSorting.csv
new file mode 100644
index 0000000000000000000000000000000000000000..261dce82c713143820e3257cda3931c56b9b1fe3
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,-1,256,0,0,0,1,0,0,297,0,"Regular Element #1",0,"7,6"
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","9,10"
+,7,-1,128,0,0,0,1,0,0,4,0,"Hotel #2",11
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","14,15,16"
+,10,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","17,18"
+,11,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",19
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,-1,256,0,0,0,1,0,0,7,0,"Price #1.1.1"
+,15,-1,128,0,0,0,1,0,0,8,0,"Price #1.1.2"
+,16,-1,64,0,0,0,1,0,0,9,0,"Price #1.1.3"
+,17,-1,32,0,0,0,1,0,0,10,0,"Price #1.2.1"
+,18,-1,16,0,0,0,1,0,0,11,0,"Price #1.2.2"
+,19,-1,8,0,0,0,1,0,0,12,0,"Price #2.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordAndDeleteHotelChildRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordAndDeleteHotelChildRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..82879c40b2a7f43458f596eef44f4b69deca62b5
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,-1,256,0,0,0,1,0,0,297,0,"Regular Element #1",0,6
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","9,10"
+,7,-1,128,0,0,0,1,2,0,4,0,"Hotel #2",11
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","14,15,16"
+,10,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","17,18"
+,11,-1,64,0,0,0,1,2,0,7,0,"Offer #2.1",19
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,-1,256,0,0,0,1,0,0,7,0,"Price #1.1.1"
+,15,-1,128,0,0,0,1,0,0,8,0,"Price #1.1.2"
+,16,-1,64,0,0,0,1,0,0,9,0,"Price #1.1.3"
+,17,-1,32,0,0,0,1,0,0,10,0,"Price #1.2.1"
+,18,-1,16,0,0,0,1,0,0,11,0,"Price #1.2.2"
+,19,-1,8,0,0,0,1,2,0,12,0,"Price #2.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordWithHotelChildRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordWithHotelChildRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..20523d5442dc36e46945a222180ce4179c043851
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordWithHotelChildRecord.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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,-1,256,0,0,0,1,0,0,297,0,"Regular Element #1",0,"7,6"
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,-1,128,0,0,0,1,0,0,4,0,"Testing #1",9
+,7,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","10,11"
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",14
+,10,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","15,16,17"
+,11,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","18,19"
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,-1,8,0,0,0,1,0,0,12,0,"Price #2.1.1"
+,15,-1,256,0,0,0,1,0,0,7,0,"Price #1.1.1"
+,16,-1,128,0,0,0,1,0,0,8,0,"Price #1.1.2"
+,17,-1,64,0,0,0,1,0,0,9,0,"Price #1.1.3"
+,18,-1,32,0,0,0,1,0,0,10,0,"Price #1.2.1"
+,19,-1,16,0,0,0,1,0,0,11,0,"Price #1.2.2"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordWithHotelChildRecordAndDiscardAllModifiedRecords.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordWithHotelChildRecordAndDiscardAllModifiedRecords.csv
new file mode 100644
index 0000000000000000000000000000000000000000..129c33bd7a6515f3898389b136f2e7fb520f7cba
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordWithHotelChildRecordAndDiscardAllModifiedRecords.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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1",0,"7,6"
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,-1,128,0,0,0,0,0,0,4,0,"Testing #1",9
+,7,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","10,11"
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",14
+,10,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","15,16,17"
+,11,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","18,19"
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,-1,8,0,0,0,1,0,0,12,0,"Price #2.1.1"
+,15,-1,256,0,0,0,1,0,0,7,0,"Price #1.1.1"
+,16,-1,128,0,0,0,1,0,0,8,0,"Price #1.1.2"
+,17,-1,64,0,0,0,1,0,0,9,0,"Price #1.1.3"
+,18,-1,32,0,0,0,1,0,0,10,0,"Price #1.2.1"
+,19,-1,16,0,0,0,1,0,0,11,0,"Price #1.2.2"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordWithHotelChildRecordAndDiscardModifiedParentRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordWithHotelChildRecordAndDiscardModifiedParentRecord.csv
new file mode 100644
index 0000000000000000000000000000000000000000..4d1c8e22038b987a20db7c44375e841ea68461d7
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/modifyParentRecordWithHotelChildRecordAndDiscardModifiedParentRecord.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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1",0,"7,6"
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,-1,128,0,0,0,1,0,0,4,0,"Testing #1",9
+,7,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","10,11"
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",14
+,10,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","15,16,17"
+,11,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","18,19"
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,-1,8,0,0,0,1,0,0,12,0,"Price #2.1.1"
+,15,-1,256,0,0,0,1,0,0,7,0,"Price #1.1.1"
+,16,-1,128,0,0,0,1,0,0,8,0,"Price #1.1.2"
+,17,-1,64,0,0,0,1,0,0,9,0,"Price #1.1.3"
+,18,-1,32,0,0,0,1,0,0,10,0,"Price #1.2.1"
+,19,-1,16,0,0,0,1,0,0,11,0,"Price #1.2.2"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/moveParentContentRecordToDifferentPage.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/moveParentContentRecordToDifferentPage.csv
new file mode 100644
index 0000000000000000000000000000000000000000..b3eebab6c214c790c80aeaaf01fac2591e0f02ca
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,-1,512,0,0,0,1,4,0,298,0,"Regular Element #2",0,6
+,300,90,256,0,0,0,1,3,0,0,298,"[MOVE-TO PLACEHOLDER for #298, WS#1]",,
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,-1,64,0,0,0,1,0,0,5,0,"Hotel #1",9
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,-1,32,0,0,0,1,0,0,8,0,"Offer #1.1",14
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,-1,4,0,0,0,1,0,0,13,0,"Price #1.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/moveParentContentRecordToDifferentPageAndChangeSorting.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Assertion/moveParentContentRecordToDifferentPageAndChangeSorting.csv
new file mode 100644
index 0000000000000000000000000000000000000000..cff7194b0a226b80f7557fc8d0829bd573fc66b0
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,5
+,299,-1,512,0,0,0,1,4,0,298,0,"Regular Element #2",0,6
+,300,90,256,0,0,0,1,3,0,0,298,"[MOVE-TO PLACEHOLDER for #298, WS#1]",,
+,301,-1,256,0,0,0,1,4,0,297,0,"Regular Element #1",0,"7,8"
+,302,90,512,0,0,0,1,3,0,0,297,"[MOVE-TO PLACEHOLDER for #297, WS#1]",,
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,-1,64,0,0,0,1,0,0,5,0,"Hotel #1",9
+,7,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","10,11"
+,8,-1,128,0,0,0,1,0,0,4,0,"Hotel #2",12
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,-1,32,0,0,0,1,0,0,8,0,"Offer #1.1",14
+,10,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","15,16,17"
+,11,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","18,19"
+,12,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",20
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,-1,4,0,0,0,1,0,0,13,0,"Price #1.1.1"
+,15,-1,256,0,0,0,1,0,0,7,0,"Price #1.1.1"
+,16,-1,128,0,0,0,1,0,0,8,0,"Price #1.1.2"
+,17,-1,64,0,0,0,1,0,0,9,0,"Price #1.1.3"
+,18,-1,32,0,0,0,1,0,0,10,0,"Price #1.2.1"
+,19,-1,16,0,0,0,1,0,0,11,0,"Price #1.2.2"
+,20,-1,8,0,0,0,1,0,0,12,0,"Price #2.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Scenario/LiveDefaultElements.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Scenario/LiveDefaultElements.csv
new file mode 100644
index 0000000000000000000000000000000000000000..3bfb765622533163e168ebf7d01574f51e49b654
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/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,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",,"3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",,"5"
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2","7"
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1","8"
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1","12"
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1","13"
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Scenario/LiveDefaultPages.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/DataSet/Scenario/LiveDefaultPages.csv
new file mode 100644
index 0000000000000000000000000000000000000000..17b04d408c8e79510b60113f28e7b0a3ae6a15e5
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/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/CommaSeparatedValue/WorkspaceActionTest.php b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/WorkspaceActionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b11fab590702529f282b6e8a934b098ce9fd4409
--- /dev/null
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/InlineRelationalRecordEditing/CommaSeparatedValue/WorkspaceActionTest.php
@@ -0,0 +1,39 @@
+<?php
+namespace TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\InlineRelationalRecordEditing\CommaSeparatedValue;
+
+/***************************************************************
+ * 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 = self::VALUE_WorkspaceId;
+	}
+
+}