diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/AbstractDeletionTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/AbstractDeletionTest.java
index 65c46537331db6d18e4133d8d9ca45c700d9a94b..64d5b6c51238dc12846d4f9a7cd2530d52885d91 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/AbstractDeletionTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/AbstractDeletionTest.java
@@ -29,6 +29,7 @@ import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.sample.SampleCreatio
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.fetchoptions.deletion.DeletionFetchOptions;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.fetchoptions.experiment.ExperimentFetchOptions;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.fetchoptions.sample.SampleFetchOptions;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.dataset.DataSetPermId;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.deletion.IDeletionId;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.entitytype.EntityTypePermId;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.experiment.ExperimentPermId;
@@ -44,7 +45,7 @@ import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.space.SpacePermId;
 public class AbstractDeletionTest extends AbstractTest
 {
 
-    protected ExperimentPermId createExperimentToDelete()
+    protected ExperimentPermId createCisdExperiment()
     {
         String sessionToken = v3api.login(TEST_USER, PASSWORD);
 
@@ -62,7 +63,7 @@ public class AbstractDeletionTest extends AbstractTest
         return permIds.get(0);
     }
 
-    protected SamplePermId createSampleToDelete(IExperimentId experimentId)
+    protected SamplePermId createCisdSample(IExperimentId experimentId)
     {
         final String sessionToken = v3api.login(TEST_USER, PASSWORD);
 
@@ -83,60 +84,93 @@ public class AbstractDeletionTest extends AbstractTest
 
     protected void assertExperimentExists(IExperimentId experimentId)
     {
-        String sessionToken = v3api.login(TEST_USER, PASSWORD);
-        List<Experiment> result = v3api.listExperiments(sessionToken, Collections.singletonList(experimentId), new ExperimentFetchOptions());
-        Assert.assertEquals(1, result.size());
+        assertExperimentExists(experimentId, true);
     }
 
     protected void assertExperimentDoesNotExist(IExperimentId experimentId)
+    {
+        assertExperimentExists(experimentId, false);
+    }
+
+    private void assertExperimentExists(IExperimentId experimentId, boolean exists)
     {
         String sessionToken = v3api.login(TEST_USER, PASSWORD);
         List<Experiment> result = v3api.listExperiments(sessionToken, Collections.singletonList(experimentId), new ExperimentFetchOptions());
-        Assert.assertEquals(0, result.size());
+        Assert.assertEquals(exists ? 1 : 0, result.size());
     }
 
     protected void assertSampleExists(ISampleId sampleId)
     {
-        String sessionToken = v3api.login(TEST_USER, PASSWORD);
-        List<Sample> result = v3api.listSamples(sessionToken, Collections.singletonList(sampleId), new SampleFetchOptions());
-        Assert.assertEquals(1, result.size());
+        assertSampleExists(sampleId, true);
     }
 
     protected void assertSampleDoesNotExist(ISampleId sampleId)
+    {
+        assertSampleExists(sampleId, false);
+    }
+
+    private void assertSampleExists(ISampleId sampleId, boolean exists)
     {
         String sessionToken = v3api.login(TEST_USER, PASSWORD);
         List<Sample> result = v3api.listSamples(sessionToken, Collections.singletonList(sampleId), new SampleFetchOptions());
-        Assert.assertEquals(0, result.size());
+        Assert.assertEquals(exists ? 1 : 0, result.size());
     }
 
-    protected void assertDeletionExists(IDeletionId deletionId)
+    protected void assertDataSetExists(DataSetPermId dataSetId)
     {
-        String sessionToken = v3api.login(TEST_USER, PASSWORD);
-        List<Deletion> result = v3api.listDeletions(sessionToken, new DeletionFetchOptions());
+        assertDataSetExists(dataSetId, true);
+    }
 
-        for (Deletion item : result)
-        {
-            if (item.getId().equals(deletionId))
-            {
-                return;
-            }
-        }
+    protected void assertDataSetDoesNotExist(DataSetPermId dataSetId)
+    {
+        assertDataSetExists(dataSetId, false);
+    }
+
+    private void assertDataSetExists(DataSetPermId dataSetId, boolean exists)
+    {
+        String sessionToken = generalInformationService.tryToAuthenticateForAllServices(TEST_USER, PASSWORD);
+
+        ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria criteria =
+                new ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria();
+        criteria.addMatchClause(ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClause.createAttributeMatch(
+                ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClauseAttribute.CODE, dataSetId.getPermId()));
+
+        List<ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet> result = generalInformationService.searchForDataSets(sessionToken, criteria);
+        Assert.assertEquals(exists ? 1 : 0, result.size());
+    }
 
-        Assert.fail("Deletion " + deletionId + " does not exist");
+    protected void assertDeletionExists(IDeletionId deletionId)
+    {
+        assertDeletionExists(deletionId, true);
     }
 
     protected void assertDeletionDoesNotExist(IDeletionId deletionId)
+    {
+        assertDeletionExists(deletionId, false);
+    }
+
+    private void assertDeletionExists(IDeletionId deletionId, boolean exists)
     {
         String sessionToken = v3api.login(TEST_USER, PASSWORD);
         List<Deletion> result = v3api.listDeletions(sessionToken, new DeletionFetchOptions());
+        Deletion found = null;
 
         for (Deletion item : result)
         {
             if (item.getId().equals(deletionId))
             {
-                Assert.fail("Deletion " + deletionId + " exists");
+                found = item;
+                break;
             }
         }
+
+        if (exists)
+        {
+            Assert.assertNotNull(found);
+        } else
+        {
+            Assert.assertNull(found);
+        }
     }
 
 }
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/AbstractTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/AbstractTest.java
index 92ca9ff9e2f86e81014ca44f73c4486001aa76a4..33bcc9a204669f6db5e4222be4c7c50b222904fd 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/AbstractTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/AbstractTest.java
@@ -23,11 +23,13 @@ import java.lang.reflect.Method;
 
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
 
+import ch.ethz.sis.openbis.generic.shared.api.v3.IApplicationServerApi;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.attachment.Attachment;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.experiment.Experiment;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.person.Person;
@@ -39,6 +41,7 @@ import ch.ethz.sis.openbis.generic.shared.api.v3.exceptions.UnauthorizedObjectAc
 import ch.systemsx.cisd.common.action.IDelegatedAction;
 import ch.systemsx.cisd.common.logging.BufferedAppender;
 import ch.systemsx.cisd.common.test.AssertionUtil;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService;
 import ch.systemsx.cisd.openbis.systemtest.SystemTestCase;
 
 /**
@@ -59,6 +62,12 @@ public class AbstractTest extends SystemTestCase
 
     private BufferedAppender logRecorder;
 
+    @Autowired
+    protected IApplicationServerApi v3api;
+
+    @Autowired
+    protected IGeneralInformationService generalInformationService;
+
     @BeforeClass
     public void beforeClass()
     {
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/ConfirmDeletionTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/ConfirmDeletionTest.java
index dc7f16c94fa899e3c8bc4c9e76262efb7e7d0b5b..88253fa488363bb1391dec846645290dedba5d5e 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/ConfirmDeletionTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/ConfirmDeletionTest.java
@@ -21,6 +21,8 @@ import java.util.Collections;
 import org.testng.annotations.Test;
 
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.deletion.experiment.ExperimentDeletionOptions;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.deletion.sample.SampleDeletionOptions;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.dataset.DataSetPermId;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.deletion.DeletionTechId;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.deletion.IDeletionId;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.experiment.ExperimentPermId;
@@ -34,15 +36,19 @@ public class ConfirmDeletionTest extends AbstractDeletionTest
 {
 
     @Test
-    public void testConfirmDeletion()
+    public void testConfirmDeletionOfExperimentWithSample()
     {
         String sessionToken = v3api.login(TEST_USER, PASSWORD);
 
-        ExperimentPermId experimentId = createExperimentToDelete();
-        SamplePermId sampleId = createSampleToDelete(experimentId);
+        ExperimentPermId experimentId = createCisdExperiment();
+        SamplePermId sampleId = createCisdSample(experimentId);
 
         ExperimentDeletionOptions deletionOptions = new ExperimentDeletionOptions();
         deletionOptions.setReason("It is just a test");
+
+        assertExperimentExists(experimentId);
+        assertSampleExists(sampleId);
+
         IDeletionId deletionId = v3api.deleteExperiments(sessionToken, Collections.singletonList(experimentId), deletionOptions);
 
         assertDeletionExists(deletionId);
@@ -56,6 +62,37 @@ public class ConfirmDeletionTest extends AbstractDeletionTest
         assertSampleDoesNotExist(sampleId);
     }
 
+    @Test
+    public void testConfirmDeletionOfSampleWithDataSet()
+    {
+        String sessionToken = v3api.login(TEST_USER, PASSWORD);
+
+        SamplePermId sampleId = new SamplePermId("200902091225616-1027");
+        DataSetPermId dataSetId1 = new DataSetPermId("20081105092159333-3");
+        DataSetPermId dataSetId2 = new DataSetPermId("20110805092359990-17");
+
+        SampleDeletionOptions deletionOptions = new SampleDeletionOptions();
+        deletionOptions.setReason("It is just a test");
+
+        assertSampleExists(sampleId);
+        assertDataSetExists(dataSetId1);
+        assertDataSetExists(dataSetId2);
+
+        IDeletionId deletionId = v3api.deleteSamples(sessionToken, Collections.singletonList(sampleId), deletionOptions);
+
+        assertDeletionExists(deletionId);
+        assertSampleDoesNotExist(sampleId);
+        assertDataSetDoesNotExist(dataSetId1);
+        assertDataSetDoesNotExist(dataSetId2);
+
+        v3api.confirmDeletions(sessionToken, Collections.singletonList(deletionId));
+
+        assertDeletionDoesNotExist(deletionId);
+        assertSampleDoesNotExist(sampleId);
+        assertDataSetDoesNotExist(dataSetId1);
+        assertDataSetDoesNotExist(dataSetId2);
+    }
+
     @Test
     public void testConfirmDeletionWithNonexistentDeletion()
     {
@@ -77,7 +114,7 @@ public class ConfirmDeletionTest extends AbstractDeletionTest
     {
         String sessionToken = v3api.login(TEST_USER, PASSWORD);
 
-        ExperimentPermId experimentId = createExperimentToDelete();
+        ExperimentPermId experimentId = createCisdExperiment();
 
         ExperimentDeletionOptions deletionOptions = new ExperimentDeletionOptions();
         deletionOptions.setReason("It is just a test");
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/DeleteExperimentTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/DeleteExperimentTest.java
index 0168a318448ea3e511275f52ce363952c0db9fda..b766c68c9e0494b0e59972f13962797a5377216c 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/DeleteExperimentTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/DeleteExperimentTest.java
@@ -17,26 +17,22 @@
 package ch.ethz.sis.openbis.systemtest.api.v3;
 
 import java.util.Collections;
-import java.util.List;
 
 import junit.framework.Assert;
 
 import org.testng.annotations.Test;
 
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.deletion.experiment.ExperimentDeletionOptions;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.experiment.Experiment;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.experiment.ExperimentCreation;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.fetchoptions.experiment.ExperimentFetchOptions;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.dataset.DataSetPermId;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.deletion.IDeletionId;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.entitytype.EntityTypePermId;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.experiment.ExperimentPermId;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.project.ProjectIdentifier;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.sample.SamplePermId;
 import ch.systemsx.cisd.common.action.IDelegatedAction;
 
 /**
  * @author pkupczyk
  */
-public class DeleteExperimentTest extends AbstractExperimentTest
+public class DeleteExperimentTest extends AbstractDeletionTest
 {
 
     @Test
@@ -44,22 +40,68 @@ public class DeleteExperimentTest extends AbstractExperimentTest
     {
         String sessionToken = v3api.login(TEST_USER, PASSWORD);
 
-        ExperimentPermId permId = createExperimentToDelete();
+        ExperimentPermId permId = createCisdExperiment();
 
         ExperimentDeletionOptions options = new ExperimentDeletionOptions();
         options.setReason("It is just a test");
 
+        assertExperimentExists(permId);
+
         IDeletionId deletionId = v3api.deleteExperiments(sessionToken, Collections.singletonList(permId), options);
         Assert.assertNotNull(deletionId);
 
-        List<Experiment> experiments = v3api.listExperiments(sessionToken, Collections.singletonList(permId), new ExperimentFetchOptions());
-        Assert.assertEquals(0, experiments.size());
+        assertExperimentDoesNotExist(permId);
+    }
+
+    @Test
+    public void testDeleteExperimentWithSample()
+    {
+        String sessionToken = v3api.login(TEST_USER, PASSWORD);
+
+        ExperimentPermId experimentPermId = createCisdExperiment();
+        SamplePermId samplePermId = createCisdSample(experimentPermId);
+
+        ExperimentDeletionOptions options = new ExperimentDeletionOptions();
+        options.setReason("It is just a test");
+
+        assertExperimentExists(experimentPermId);
+        assertSampleExists(samplePermId);
+
+        IDeletionId deletionId = v3api.deleteExperiments(sessionToken, Collections.singletonList(experimentPermId), options);
+        Assert.assertNotNull(deletionId);
+
+        assertExperimentDoesNotExist(experimentPermId);
+        assertSampleDoesNotExist(samplePermId);
+    }
+
+    @Test
+    public void testDeleteExperimentWithDataSet()
+    {
+        String sessionToken = v3api.login(TEST_USER, PASSWORD);
+
+        ExperimentPermId experimentPermId = new ExperimentPermId("200902091255058-1035");
+        DataSetPermId dataSetPermId1 = new DataSetPermId("20081105092159333-3");
+        DataSetPermId dataSetPermId2 = new DataSetPermId("20110805092359990-17");
+
+        ExperimentDeletionOptions options = new ExperimentDeletionOptions();
+        options.setReason("It is just a test");
+
+        assertExperimentExists(experimentPermId);
+        assertDataSetExists(dataSetPermId1);
+        assertDataSetExists(dataSetPermId2);
+
+        IDeletionId deletionId = v3api.deleteExperiments(sessionToken, Collections.singletonList(experimentPermId), options);
+        Assert.assertNotNull(deletionId);
+
+        assertExperimentDoesNotExist(experimentPermId);
+        assertDataSetDoesNotExist(dataSetPermId1);
+        assertDataSetDoesNotExist(dataSetPermId2);
     }
 
     @Test
     public void testDeleteExperimentWithUnauthorizedExperiment()
     {
-        final ExperimentPermId permId = createExperimentToDelete();
+        final ExperimentPermId permId = createCisdExperiment();
 
         assertUnauthorizedObjectAccessException(new IDelegatedAction()
             {
@@ -76,22 +118,4 @@ public class DeleteExperimentTest extends AbstractExperimentTest
             }, permId);
     }
 
-    private ExperimentPermId createExperimentToDelete()
-    {
-        String sessionToken = v3api.login(TEST_USER, PASSWORD);
-
-        ExperimentCreation creation = new ExperimentCreation();
-        creation.setCode("EXPERIMENT_TO_DELETE");
-        creation.setTypeId(new EntityTypePermId("SIRNA_HCS"));
-        creation.setProjectId(new ProjectIdentifier("/CISD/DEFAULT"));
-
-        List<ExperimentPermId> permIds = v3api.createExperiments(sessionToken, Collections.singletonList(creation));
-        List<Experiment> experiments = v3api.listExperiments(sessionToken, permIds, new ExperimentFetchOptions());
-
-        Assert.assertEquals(1, experiments.size());
-        Assert.assertEquals("EXPERIMENT_TO_DELETE", experiments.get(0).getCode());
-
-        return permIds.get(0);
-    }
-
 }
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/DeleteSampleTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/DeleteSampleTest.java
index f044d8d862f4136b5e59a8dd3a96bbaa7a3c93a8..b9a266c544edf990c9f8595fe0ca6d108a66c480 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/DeleteSampleTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/DeleteSampleTest.java
@@ -17,26 +17,22 @@
 package ch.ethz.sis.openbis.systemtest.api.v3;
 
 import java.util.Collections;
-import java.util.List;
 
 import junit.framework.Assert;
 
 import org.testng.annotations.Test;
 
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.deletion.sample.SampleDeletionOptions;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.sample.Sample;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.sample.SampleCreation;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.fetchoptions.sample.SampleFetchOptions;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.dataset.DataSetPermId;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.deletion.IDeletionId;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.entitytype.EntityTypePermId;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.experiment.ExperimentPermId;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.sample.SamplePermId;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.space.SpacePermId;
 import ch.systemsx.cisd.common.action.IDelegatedAction;
 
 /**
  * @author pkupczyk
  */
-public class DeleteSampleTest extends AbstractSampleTest
+public class DeleteSampleTest extends AbstractDeletionTest
 {
 
     @Test
@@ -44,22 +40,74 @@ public class DeleteSampleTest extends AbstractSampleTest
     {
         String sessionToken = v3api.login(TEST_USER, PASSWORD);
 
-        SamplePermId permId = createSampleToDelete();
+        ExperimentPermId experimentPermId = createCisdExperiment();
+        SamplePermId samplePermId = createCisdSample(experimentPermId);
 
         SampleDeletionOptions options = new SampleDeletionOptions();
         options.setReason("It is just a test");
 
-        IDeletionId deletionId = v3api.deleteSamples(sessionToken, Collections.singletonList(permId), options);
+        assertExperimentExists(experimentPermId);
+        assertSampleExists(samplePermId);
+
+        IDeletionId deletionId = v3api.deleteSamples(sessionToken, Collections.singletonList(samplePermId), options);
+        Assert.assertNotNull(deletionId);
+
+        assertExperimentExists(experimentPermId);
+        assertSampleDoesNotExist(samplePermId);
+    }
+
+    @Test
+    public void testDeleteSampleWithDataSet()
+    {
+        String sessionToken = v3api.login(TEST_USER, PASSWORD);
+
+        SamplePermId samplePermId = new SamplePermId("200902091225616-1027");
+        DataSetPermId dataSetPermId1 = new DataSetPermId("20081105092159333-3");
+        DataSetPermId dataSetPermId2 = new DataSetPermId("20110805092359990-17");
+
+        SampleDeletionOptions options = new SampleDeletionOptions();
+        options.setReason("It is just a test");
+
+        assertSampleExists(samplePermId);
+        assertDataSetExists(dataSetPermId1);
+        assertDataSetExists(dataSetPermId2);
+
+        IDeletionId deletionId = v3api.deleteSamples(sessionToken, Collections.singletonList(samplePermId), options);
+        Assert.assertNotNull(deletionId);
+
+        assertSampleDoesNotExist(samplePermId);
+        assertDataSetDoesNotExist(dataSetPermId1);
+        assertDataSetDoesNotExist(dataSetPermId2);
+    }
+
+    @Test
+    public void testDeleteSampleWithContainedSamples()
+    {
+        String sessionToken = v3api.login(TEST_USER, PASSWORD);
+
+        SamplePermId samplePermId = new SamplePermId("200811050919915-8");
+        SamplePermId containedPermId1 = new SamplePermId("200811050919915-9");
+        SamplePermId containedPermId2 = new SamplePermId("200811050919915-10");
+
+        SampleDeletionOptions options = new SampleDeletionOptions();
+        options.setReason("It is just a test");
+
+        assertSampleExists(samplePermId);
+        assertSampleExists(containedPermId1);
+        assertSampleExists(containedPermId2);
+
+        IDeletionId deletionId = v3api.deleteSamples(sessionToken, Collections.singletonList(samplePermId), options);
         Assert.assertNotNull(deletionId);
 
-        List<Sample> samples = v3api.listSamples(sessionToken, Collections.singletonList(permId), new SampleFetchOptions());
-        Assert.assertEquals(0, samples.size());
+        assertSampleDoesNotExist(samplePermId);
+        assertSampleDoesNotExist(containedPermId1);
+        assertSampleDoesNotExist(containedPermId2);
     }
 
     @Test
     public void testDeleteSampleWithUnauthorizedSample()
     {
-        final SamplePermId permId = createSampleToDelete();
+        final SamplePermId permId = createCisdSample(null);
 
         assertUnauthorizedObjectAccessException(new IDelegatedAction()
             {
@@ -76,22 +124,4 @@ public class DeleteSampleTest extends AbstractSampleTest
             }, permId);
     }
 
-    private SamplePermId createSampleToDelete()
-    {
-        final String sessionToken = v3api.login(TEST_USER, PASSWORD);
-
-        SampleCreation creation = new SampleCreation();
-        creation.setCode("SAMPLE_TO_DELETE");
-        creation.setTypeId(new EntityTypePermId("CELL_PLATE"));
-        creation.setSpaceId(new SpacePermId("CISD"));
-
-        List<SamplePermId> permIds = v3api.createSamples(sessionToken, Collections.singletonList(creation));
-        List<Sample> samples = v3api.listSamples(sessionToken, permIds, new SampleFetchOptions());
-
-        Assert.assertEquals(1, samples.size());
-        Assert.assertEquals("SAMPLE_TO_DELETE", samples.get(0).getCode());
-
-        return permIds.get(0);
-    }
-
 }
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/ListDeletionTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/ListDeletionTest.java
index 83d609021ac5b95133262558d72257b4f764c142..fcbb82bdaa01df6064f929b3bf7d09ce98f18f3c 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/ListDeletionTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/ListDeletionTest.java
@@ -45,8 +45,8 @@ public class ListDeletionTest extends AbstractDeletionTest
         DeletionFetchOptions fetchOptions = new DeletionFetchOptions();
         List<Deletion> beforeDeletions = v3api.listDeletions(sessionToken, fetchOptions);
 
-        ExperimentPermId experimentId = createExperimentToDelete();
-        SamplePermId sampleId = createSampleToDelete(experimentId);
+        ExperimentPermId experimentId = createCisdExperiment();
+        SamplePermId sampleId = createCisdSample(experimentId);
 
         ExperimentDeletionOptions deletionOptions = new ExperimentDeletionOptions();
         deletionOptions.setReason("It is just a test");
@@ -79,11 +79,15 @@ public class ListDeletionTest extends AbstractDeletionTest
         fetchOptions.fetchDeletedObjects();
         List<Deletion> beforeDeletions = v3api.listDeletions(sessionToken, fetchOptions);
 
-        ExperimentPermId experimentId = createExperimentToDelete();
-        SamplePermId sampleId = createSampleToDelete(experimentId);
+        ExperimentPermId experimentId = createCisdExperiment();
+        SamplePermId sampleId = createCisdSample(experimentId);
 
         ExperimentDeletionOptions deletionOptions = new ExperimentDeletionOptions();
         deletionOptions.setReason("It is just a test");
+
+        assertExperimentExists(experimentId);
+        assertSampleExists(sampleId);
+
         IDeletionId deletionId = v3api.deleteExperiments(sessionToken, Collections.singletonList(experimentId), deletionOptions);
 
         assertExperimentDoesNotExist(experimentId);
@@ -108,7 +112,7 @@ public class ListDeletionTest extends AbstractDeletionTest
 
         String adminSessionToken = v3api.login(TEST_USER, PASSWORD);
 
-        ExperimentPermId experimentId = createExperimentToDelete();
+        ExperimentPermId experimentId = createCisdExperiment();
         ExperimentDeletionOptions deletionOptions = new ExperimentDeletionOptions();
         deletionOptions.setReason("It is just a test");
         v3api.deleteExperiments(adminSessionToken, Collections.singletonList(experimentId), deletionOptions);
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/RevertDeletionTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/RevertDeletionTest.java
index 6cdb8a2b348543afaa0d48750777b112b353290a..19b28ee6045d9874cf464aff7f0fcbf0a2b800e8 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/RevertDeletionTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/RevertDeletionTest.java
@@ -21,6 +21,8 @@ import java.util.Collections;
 import org.testng.annotations.Test;
 
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.deletion.experiment.ExperimentDeletionOptions;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.deletion.sample.SampleDeletionOptions;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.dataset.DataSetPermId;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.deletion.DeletionTechId;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.deletion.IDeletionId;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.experiment.ExperimentPermId;
@@ -38,11 +40,15 @@ public class RevertDeletionTest extends AbstractDeletionTest
     {
         String sessionToken = v3api.login(TEST_USER, PASSWORD);
 
-        ExperimentPermId experimentId = createExperimentToDelete();
-        SamplePermId sampleId = createSampleToDelete(experimentId);
+        ExperimentPermId experimentId = createCisdExperiment();
+        SamplePermId sampleId = createCisdSample(experimentId);
 
         ExperimentDeletionOptions deletionOptions = new ExperimentDeletionOptions();
         deletionOptions.setReason("It is just a test");
+
+        assertExperimentExists(experimentId);
+        assertSampleExists(sampleId);
+
         IDeletionId deletionId = v3api.deleteExperiments(sessionToken, Collections.singletonList(experimentId), deletionOptions);
 
         assertDeletionExists(deletionId);
@@ -56,6 +62,37 @@ public class RevertDeletionTest extends AbstractDeletionTest
         assertSampleExists(sampleId);
     }
 
+    @Test
+    public void testRevertDeletionOfSampleWithDataSet()
+    {
+        String sessionToken = v3api.login(TEST_USER, PASSWORD);
+
+        SamplePermId sampleId = new SamplePermId("200902091225616-1027");
+        DataSetPermId dataSetId1 = new DataSetPermId("20081105092159333-3");
+        DataSetPermId dataSetId2 = new DataSetPermId("20110805092359990-17");
+
+        SampleDeletionOptions deletionOptions = new SampleDeletionOptions();
+        deletionOptions.setReason("It is just a test");
+
+        assertSampleExists(sampleId);
+        assertDataSetExists(dataSetId1);
+        assertDataSetExists(dataSetId2);
+
+        IDeletionId deletionId = v3api.deleteSamples(sessionToken, Collections.singletonList(sampleId), deletionOptions);
+
+        assertDeletionExists(deletionId);
+        assertSampleDoesNotExist(sampleId);
+        assertDataSetDoesNotExist(dataSetId1);
+        assertDataSetDoesNotExist(dataSetId2);
+
+        v3api.revertDeletions(sessionToken, Collections.singletonList(deletionId));
+
+        assertDeletionDoesNotExist(deletionId);
+        assertSampleExists(sampleId);
+        assertDataSetExists(dataSetId1);
+        assertDataSetExists(dataSetId2);
+    }
+
     @Test
     public void testRevertDeletionWithNonexistentDeletion()
     {
@@ -77,7 +114,7 @@ public class RevertDeletionTest extends AbstractDeletionTest
     {
         String sessionToken = v3api.login(TEST_USER, PASSWORD);
 
-        ExperimentPermId experimentId = createExperimentToDelete();
+        ExperimentPermId experimentId = createCisdExperiment();
 
         ExperimentDeletionOptions deletionOptions = new ExperimentDeletionOptions();
         deletionOptions.setReason("It is just a test");
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java
index 8dfbbaa6752e56ed9ff03f28531caeb7e6d26c4f..0f38d319ce50d898fbb0f1781b886529db6ab85a 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java
@@ -38,7 +38,6 @@ import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.BeforeSuite;
 
-import ch.ethz.sis.openbis.generic.shared.api.v3.IApplicationServerApi;
 import ch.systemsx.cisd.common.servlet.SpringRequestContextProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientService;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GridRowModels;
@@ -92,8 +91,6 @@ public abstract class SystemTestCase extends AbstractTransactionalTestNGSpringCo
 
     protected IServiceForDataStoreServer etlService;
 
-    protected IApplicationServerApi v3api;
-
     protected MockHttpServletRequest request;
 
     protected String systemSessionToken;
@@ -176,12 +173,6 @@ public abstract class SystemTestCase extends AbstractTransactionalTestNGSpringCo
 
     }
 
-    @Autowired
-    public void setApplicationServerApi(IApplicationServerApi applicationServerApi)
-    {
-        this.v3api = applicationServerApi;
-    }
-
     protected SessionContext logIntoCommonClientService()
     {
         SessionContext context = commonClientService.tryToLogin("test", "a");