diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractSearchPropertyTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractSearchPropertyTest.java
index 3ae5dad0fdc972a20be3f5671972febf72b8dcc7..3d0fd0816d8c0de0d110f77c8eb8c0e09a9fac6c 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractSearchPropertyTest.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractSearchPropertyTest.java
@@ -27,12 +27,14 @@ import java.util.Arrays;
 import java.util.Calendar;
 import java.util.Collections;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.id.IObjectId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.id.ObjectPermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IPermIdHolder;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.AbstractEntitySearchCriteria;
@@ -41,12 +43,19 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.ControlledVocabula
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.DateFieldSearchCriteria;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.NumberFieldSearchCriteria;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.StringFieldSearchCriteria;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.id.IDeletionId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.EntityKind;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.IEntityTypeId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.material.create.MaterialCreation;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.material.id.MaterialPermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.DataType;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.id.PropertyTypePermId;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.create.SampleCreation;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.delete.SampleDeletionOptions;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.ISampleId;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.SamplePermId;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.id.SpacePermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.vocabulary.create.VocabularyCreation;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.vocabulary.create.VocabularyTermCreation;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.vocabulary.id.VocabularyPermId;
@@ -917,16 +926,67 @@ public abstract class AbstractSearchPropertyTest extends AbstractTest
     public void testSearchWithSampleProperty()
     {
         final String sessionToken = v3api.login(TEST_USER, PASSWORD);
-        final PropertyTypePermId propertyTypeId = createASamplePropertyType(sessionToken, null);
 
-        createEntity(sessionToken, propertyTypeId, "/CISD/CL1");
+        final String samplePropertyCode1 = "Sample1";
+        final String samplePropertyCode2 = "Sample2";
+
+        final EntityTypePermId propertySampleType = createASampleType(sessionToken, false);
+        final PropertyTypePermId samplePropertyTypeId1 = createASamplePropertyType(sessionToken, propertySampleType,
+                samplePropertyCode1);
+        final PropertyTypePermId samplePropertyTypeId2 = createASamplePropertyType(sessionToken, propertySampleType,
+                samplePropertyCode2);
+
+        final EntityTypePermId searchTest1EntityTypeId = createEntityType(sessionToken, samplePropertyTypeId1,
+                samplePropertyTypeId2);
+
+        final SamplePermId sample1 = createSample(sessionToken, samplePropertyCode1, propertySampleType, Map.of());
+        final SamplePermId sample2 = createSample(sessionToken, samplePropertyCode2, propertySampleType, Map.of());
+
+        final ObjectPermId entity1 = createEntity(sessionToken, "Entity", searchTest1EntityTypeId,
+                new HashMap<>(Map.of(samplePropertyTypeId1.getPermId(), sample1.getPermId(),
+                        samplePropertyTypeId2.getPermId(), sample2.getPermId())));
+
+        final EntityTypePermId searchTest2EntityTypeId = createEntityType(sessionToken, samplePropertyTypeId1,
+                samplePropertyTypeId2);
+        final ObjectPermId entity2 = createEntity(sessionToken, "Sample4", searchTest2EntityTypeId,
+                new HashMap<>(Map.of(samplePropertyTypeId1.getPermId(), sample1.getPermId())));
 
         final AbstractEntitySearchCriteria<?> searchCriteria = createSearchCriteria();
         searchCriteria.withOrOperator();
-        searchCriteria.withSampleProperty(propertyTypeId.getPermId()).thatEquals("/CISD/CL1");
+        searchCriteria.withSampleProperty(searchTest1EntityTypeId.getPermId()).thatEquals(sample1.getPermId());
 
-        final List<? extends IPermIdHolder> entities = search(sessionToken, searchCriteria);
-        assertEquals(entities.size(), 1);
+        try
+        {
+            final List<? extends IPermIdHolder> entities = search(sessionToken, searchCriteria);
+            assertEquals(entities.size(), 1);
+            assertEquals(entities.get(0).getPermId(), entity1);
+        } finally
+        {
+            final IDeletionId entitiesDeletion = deleteEntities(sessionToken, entity1, entity2);
+            final IDeletionId samplesDeletion = deleteSamples(sessionToken, sample1, sample2);
+            v3api.confirmDeletions(sessionToken, List.of(entitiesDeletion, samplesDeletion));
+            deleteEntityTypes(sessionToken, searchTest1EntityTypeId, searchTest2EntityTypeId);
+            deletePropertyTypes(sessionToken, samplePropertyTypeId1, samplePropertyTypeId2);
+            deleteSampleTypes(sessionToken, propertySampleType);
+        }
+    }
+
+    protected SamplePermId createSample(final String sessionToken, final String code,
+            final EntityTypePermId entityTypeId, final Map<String, String> propertyMap)
+    {
+        final SampleCreation sampleCreation = new SampleCreation();
+        sampleCreation.setCode(code);
+        sampleCreation.setTypeId(entityTypeId);
+        sampleCreation.setSpaceId(new SpacePermId("CISD"));
+        sampleCreation.setProperties(propertyMap);
+        return v3api.createSamples(sessionToken, List.of(sampleCreation)).get(0);
+    }
+
+    protected IDeletionId deleteSamples(final String sessionToken, final ISampleId... entityIds)
+    {
+        final SampleDeletionOptions deletionOptions = new SampleDeletionOptions();
+        deletionOptions.setReason("Test");
+        return v3api.deleteSamples(sessionToken, List.of(entityIds), deletionOptions);
     }
 
     @Test
@@ -1174,11 +1234,18 @@ public abstract class AbstractSearchPropertyTest extends AbstractTest
         return createEntity(sessionToken, "ENTITY_TO_BE_DELETED", entityTypeId, propertyTypeId.getPermId(), value);
     }
 
-    protected abstract EntityTypePermId createEntityType(String sessionToken, PropertyTypePermId propertyTypeId);
+    protected abstract EntityTypePermId createEntityType(String sessionToken, PropertyTypePermId... propertyTypeIds);
+
+    protected abstract void deleteEntityTypes(String sessionToken, IEntityTypeId... entityTypeIds);
+
+    protected abstract ObjectPermId createEntity(String sessionToken, String code, EntityTypePermId entityTypeId,
+            Map<String, String> propertyMap);
 
     protected abstract ObjectPermId createEntity(String sessionToken, String code, EntityTypePermId entityTypeId,
             String propertyType, String value);
 
+    protected abstract IDeletionId deleteEntities(String sessionToken, IObjectId... entityIds);
+
     protected abstract AbstractEntitySearchCriteria<?> createSearchCriteria();
 
     protected abstract List<? extends IPermIdHolder> search(String sessionToken,
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractTest.java
index 2595a3936a351c56e708bb4a774582991877f02a..869d77d9eef748f5b8d26907ca20f30531234d3e 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractTest.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractTest.java
@@ -79,6 +79,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.ISemanticAnnot
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.ISpaceHolder;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.ITagsHolder;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IValidationPluginHolder;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.update.ListUpdateValue;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.DataSet;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.DataSetKind;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.create.DataSetCreation;
@@ -120,11 +121,15 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.PropertyAssignment;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.PropertyType;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.create.PropertyAssignmentCreation;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.create.PropertyTypeCreation;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.delete.PropertyTypeDeletionOptions;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.id.IPropertyTypeId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.id.PropertyTypePermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.Query;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.roleassignment.RoleAssignment;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.Sample;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.create.SampleTypeCreation;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.delete.SampleTypeDeletionOptions;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.update.SampleTypeUpdate;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.semanticannotation.SemanticAnnotation;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.Space;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.tag.Tag;
@@ -1480,10 +1485,16 @@ public class AbstractTest extends SystemTestCase
         return v3api.createPropertyTypes(sessionToken, Collections.singletonList(creation)).get(0);
     }
 
-    protected PropertyTypePermId createASamplePropertyType(String sessionToken, IEntityTypeId sampleTypeId)
+    protected PropertyTypePermId createASamplePropertyType(final String sessionToken, final IEntityTypeId sampleTypeId)
+    {
+        return createASamplePropertyType(sessionToken, sampleTypeId, "TYPE-" + System.currentTimeMillis());
+    }
+
+    protected PropertyTypePermId createASamplePropertyType(final String sessionToken,
+            final IEntityTypeId sampleTypeId, final String code)
     {
         PropertyTypeCreation creation = new PropertyTypeCreation();
-        creation.setCode("TYPE-" + System.currentTimeMillis());
+        creation.setCode(code);
         creation.setDataType(DataType.SAMPLE);
         creation.setSampleTypeId(sampleTypeId);
         creation.setLabel("label");
@@ -1491,6 +1502,13 @@ public class AbstractTest extends SystemTestCase
         return v3api.createPropertyTypes(sessionToken, Collections.singletonList(creation)).get(0);
     }
 
+    protected void deletePropertyTypes(final String sessionToken, final IPropertyTypeId... propertyTypeIds)
+    {
+        final PropertyTypeDeletionOptions deletionOptions = new PropertyTypeDeletionOptions();
+        deletionOptions.setReason("Test");
+        v3api.deletePropertyTypes(sessionToken, List.of(propertyTypeIds), deletionOptions);
+    }
+
     protected PropertyTypePermId createAMaterialPropertyType(final String sessionToken,
             final IEntityTypeId materialTypeId)
     {
@@ -1503,7 +1521,8 @@ public class AbstractTest extends SystemTestCase
         return v3api.createPropertyTypes(sessionToken, Collections.singletonList(creation)).get(0);
     }
 
-    protected EntityTypePermId createASampleType(String sessionToken, boolean mandatory, PropertyTypePermId... propertyTypes)
+    protected EntityTypePermId createASampleType(String sessionToken, boolean mandatory,
+            PropertyTypePermId... propertyTypes)
     {
         SampleTypeCreation creation = new SampleTypeCreation();
         creation.setCode("SAMPLE-TYPE-" + System.currentTimeMillis());
@@ -1519,6 +1538,13 @@ public class AbstractTest extends SystemTestCase
         return v3api.createSampleTypes(sessionToken, Arrays.asList(creation)).get(0);
     }
 
+    protected void deleteSampleTypes(final String sessionToken, final IEntityTypeId... entityTypeIds)
+    {
+        final SampleTypeDeletionOptions deletionOptions = new SampleTypeDeletionOptions();
+        deletionOptions.setReason("Test");
+        v3api.deleteSampleTypes(sessionToken, List.of(entityTypeIds), deletionOptions);
+    }
+
     protected EntityTypePermId createAnExperimentType(String sessionToken, boolean mandatory, PropertyTypePermId... propertyTypes)
     {
         ExperimentTypeCreation creation = new ExperimentTypeCreation();
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DataSetSearchPropertyTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DataSetSearchPropertyTest.java
index 0c4b17e2527f61f0b7914e2d85138b924648d84f..5782ad8eb25abeb5a12e566edcb6ac849c3c6143 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DataSetSearchPropertyTest.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DataSetSearchPropertyTest.java
@@ -17,15 +17,24 @@
 package ch.ethz.sis.openbis.systemtest.asapi.v3;
 
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.id.IObjectId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.id.ObjectPermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IPermIdHolder;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.AbstractEntitySearchCriteria;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.create.DataSetCreation;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.delete.DataSetDeletionOptions;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.delete.DataSetTypeDeletionOptions;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.fetchoptions.DataSetFetchOptions;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.id.IDataSetId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.search.DataSetSearchCriteria;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.id.IDeletionId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.IEntityTypeId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.id.PropertyTypePermId;
 
 /**
@@ -35,21 +44,46 @@ public class DataSetSearchPropertyTest extends AbstractSearchPropertyTest
 {
 
     @Override
-    protected EntityTypePermId createEntityType(String sessionToken, PropertyTypePermId propertyTypeId)
+    protected EntityTypePermId createEntityType(final String sessionToken, final PropertyTypePermId... propertyTypeIds)
     {
-        return createADataSetType(sessionToken, false, propertyTypeId);
+        return createADataSetType(sessionToken, false, propertyTypeIds);
+    }
+
+    @Override 
+    protected void deleteEntityTypes(final String sessionToken, final IEntityTypeId... entityTypeIds)
+    {
+        final DataSetTypeDeletionOptions deletionOptions = new DataSetTypeDeletionOptions();
+        deletionOptions.setReason("Test");
+        v3api.deleteDataSetTypes(sessionToken, List.of(entityTypeIds), deletionOptions);
     }
 
     @Override
-    protected ObjectPermId createEntity(String sessionToken, String code, EntityTypePermId entityTypeId,
-            String propertyType, String value)
+    protected ObjectPermId createEntity(final String sessionToken, final String code, final EntityTypePermId entityTypeId,
+            final Map<String, String> propertyMap)
     {
-        DataSetCreation dataSetCreation = physicalDataSetCreation();
+        final DataSetCreation dataSetCreation = physicalDataSetCreation();
         dataSetCreation.setTypeId(entityTypeId);
-        dataSetCreation.setProperty(propertyType, value);
+        dataSetCreation.setProperties(new HashMap<>(propertyMap));
         return v3api.createDataSets(sessionToken, Arrays.asList(dataSetCreation)).get(0);
     }
 
+    @Override
+    protected ObjectPermId createEntity(String sessionToken, String code, EntityTypePermId entityTypeId,
+            String propertyType, String value)
+    {
+        return createEntity(sessionToken, code, entityTypeId, Map.of(propertyType, value));
+    }
+
+    @Override
+    protected IDeletionId deleteEntities(final String sessionToken, final IObjectId... entityIds)
+    {
+        final DataSetDeletionOptions deletionOptions = new DataSetDeletionOptions();
+        deletionOptions.setReason("Test");
+        return v3api.deleteDataSets(sessionToken,
+                Arrays.stream(entityIds).map(entityId -> (IDataSetId) entityId).collect(Collectors.toList()),
+                deletionOptions);
+    }
+
     @Override
     protected AbstractEntitySearchCriteria<?> createSearchCriteria()
     {
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExperimentSearchPropertyTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExperimentSearchPropertyTest.java
index 36209cbaf128a5742790926f378d0bb3c7a5271d..12ad1fc8dcc02dde88a408af1bb4c58040a9a8f3 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExperimentSearchPropertyTest.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExperimentSearchPropertyTest.java
@@ -17,14 +17,23 @@
 package ch.ethz.sis.openbis.systemtest.asapi.v3;
 
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.id.IObjectId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.id.ObjectPermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IPermIdHolder;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.AbstractEntitySearchCriteria;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.id.IDeletionId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.IEntityTypeId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.create.ExperimentCreation;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.delete.ExperimentDeletionOptions;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.delete.ExperimentTypeDeletionOptions;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.fetchoptions.ExperimentFetchOptions;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.IExperimentId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.search.ExperimentSearchCriteria;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.ProjectIdentifier;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.id.PropertyTypePermId;
@@ -36,23 +45,48 @@ public class ExperimentSearchPropertyTest extends AbstractSearchPropertyTest
 {
 
     @Override
-    protected EntityTypePermId createEntityType(String sessionToken, PropertyTypePermId propertyTypeId)
+    protected EntityTypePermId createEntityType(final String sessionToken, final PropertyTypePermId... propertyTypeIds)
     {
-        return createAnExperimentType(sessionToken, false, propertyTypeId);
+        return createAnExperimentType(sessionToken, false, propertyTypeIds);
     }
 
     @Override
-    protected ObjectPermId createEntity(String sessionToken, String code, EntityTypePermId entityTypeId,
-            String propertyType, String value)
+    protected void deleteEntityTypes(final String sessionToken, final IEntityTypeId... entityTypeIds)
+    {
+        final ExperimentTypeDeletionOptions deletionOptions = new ExperimentTypeDeletionOptions();
+        deletionOptions.setReason("Test");
+        v3api.deleteExperimentTypes(sessionToken, List.of(entityTypeIds), deletionOptions);
+    }
+
+    @Override
+    protected ObjectPermId createEntity(final String sessionToken, final String code, final EntityTypePermId entityTypeId,
+            final Map<String, String> propertyMap)
     {
-        ExperimentCreation experimentCreation = new ExperimentCreation();
+        final ExperimentCreation experimentCreation = new ExperimentCreation();
         experimentCreation.setCode("TEST-EXPERIMENT-" + System.currentTimeMillis());
         experimentCreation.setTypeId(entityTypeId);
         experimentCreation.setProjectId(new ProjectIdentifier("/CISD/NEMO"));
-        experimentCreation.setProperty(propertyType, value);
+        experimentCreation.setProperties(new HashMap<>(propertyMap));
         return v3api.createExperiments(sessionToken, Arrays.asList(experimentCreation)).get(0);
     }
 
+    @Override
+    protected ObjectPermId createEntity(String sessionToken, String code, EntityTypePermId entityTypeId,
+            String propertyType, String value)
+    {
+        return createEntity(sessionToken, code, entityTypeId, Map.of(propertyType, value));
+    }
+
+    @Override
+    protected IDeletionId deleteEntities(final String sessionToken, final IObjectId... entityIds)
+    {
+        final ExperimentDeletionOptions deletionOptions = new ExperimentDeletionOptions();
+        deletionOptions.setReason("Test");
+        return v3api.deleteExperiments(sessionToken,
+                Arrays.stream(entityIds).map(entityId -> (IExperimentId) entityId).collect(Collectors.toList()),
+                deletionOptions);
+    }
+
     @Override
     protected AbstractEntitySearchCriteria<?> createSearchCriteria()
     {
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SampleSearchPropertyTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SampleSearchPropertyTest.java
index bd356d1168804e59d52f3ac2ba9a4b5197c67f1e..9c6bb172f29d6f7a91e12aeb0f7211a26e4497b2 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SampleSearchPropertyTest.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SampleSearchPropertyTest.java
@@ -17,15 +17,24 @@
 package ch.ethz.sis.openbis.systemtest.asapi.v3;
 
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.id.IObjectId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.id.ObjectPermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IPermIdHolder;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.AbstractEntitySearchCriteria;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.id.IDeletionId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.IEntityTypeId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.id.PropertyTypePermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.create.SampleCreation;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.delete.SampleDeletionOptions;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.delete.SampleTypeDeletionOptions;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleFetchOptions;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.ISampleId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search.SampleSearchCriteria;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.id.SpacePermId;
 
@@ -36,21 +45,46 @@ public class SampleSearchPropertyTest extends AbstractSearchPropertyTest
 {
 
     @Override
-    protected EntityTypePermId createEntityType(String sessionToken, PropertyTypePermId propertyTypeId)
+    protected EntityTypePermId createEntityType(final String sessionToken, final PropertyTypePermId... propertyTypeIds)
     {
-        return createASampleType(sessionToken, false, propertyTypeId);
+        return createASampleType(sessionToken, false, propertyTypeIds);
     }
 
     @Override
-    protected ObjectPermId createEntity(String sessionToken, String code, EntityTypePermId entityTypeId,
-            String propertyType, String value)
+    protected void deleteEntityTypes(final String sessionToken, final IEntityTypeId... entityTypeIds)
+    {
+        final SampleTypeDeletionOptions deletionOptions = new SampleTypeDeletionOptions();
+        deletionOptions.setReason("Test");
+        v3api.deleteSampleTypes(sessionToken, List.of(entityTypeIds), deletionOptions);
+    }
+
+    @Override
+    protected ObjectPermId createEntity(final String sessionToken, final String code,
+            final EntityTypePermId entityTypeId, final Map<String, String> propertyMap)
     {
-        SampleCreation sampleCreation = new SampleCreation();
+        final SampleCreation sampleCreation = new SampleCreation();
         sampleCreation.setCode("TEST-SAMPLE-" + System.currentTimeMillis());
         sampleCreation.setTypeId(entityTypeId);
         sampleCreation.setSpaceId(new SpacePermId("CISD"));
-        sampleCreation.setProperty(propertyType, value);
-        return v3api.createSamples(sessionToken, Arrays.asList(sampleCreation)).get(0);
+        sampleCreation.setProperties(new HashMap<>(propertyMap));
+        return v3api.createSamples(sessionToken, List.of(sampleCreation)).get(0);
+    }
+
+    @Override
+    protected ObjectPermId createEntity(String sessionToken, String code, EntityTypePermId entityTypeId,
+            String propertyType, String value)
+    {
+        return createEntity(sessionToken, code, entityTypeId, Map.of(propertyType, value));
+    }
+
+    @Override
+    protected IDeletionId deleteEntities(final String sessionToken, final IObjectId... entityIds)
+    {
+        final SampleDeletionOptions deletionOptions = new SampleDeletionOptions();
+        deletionOptions.setReason("Test");
+        return v3api.deleteSamples(sessionToken,
+                Arrays.stream(entityIds).map(entityId -> (ISampleId) entityId).collect(Collectors.toList()),
+                deletionOptions);
     }
 
     @Override