diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java
index 0b7208b8f52dd4f392478a41092369f5465ee6f7..cd76fb228e312ddc809e5512f0b3dd9f90a9cbe6 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java
@@ -151,6 +151,8 @@ public final class TrashBOTest extends AbstractBOTest
     {
         final DeletionPE deletion = createDeletion();
         final List<TechId> experimentIds = EXAMPLE_ID_LIST;
+        final List<TechId> dataSetIds = TechId.createList(60, 61);
+        final RecordingMatcher<List<TechId>> dsIdsMatcher = new RecordingMatcher<List<TechId>>();
         context.checking(new Expectations()
             {
                 {
@@ -168,14 +170,19 @@ public final class TrashBOTest extends AbstractBOTest
                     will(returnValue(0));
 
                     // trash dependent data sets
-                    List<TechId> dataSetIds = TechId.createList(60, 61);
                     one(dataDAO).listDataSetIdsByExperimentIds(experimentIds);
                     will(returnValue(dataSetIds));
-                    one(deletionDAO).trash(EntityKind.DATA_SET, dataSetIds, deletion);
+                    oneOf(deletionDAO).trash(with(same(EntityKind.DATA_SET)), with(dsIdsMatcher),
+                            with(same(deletion)));
                     will(returnValue(0));
                 }
             });
         trashBO.trashExperiments(experimentIds);
+
+        // Check that the data set ids match
+        List<TechId> usedDsIds = dsIdsMatcher.getRecordedObjects().get(0);
+        assertEquals(new HashSet<TechId>().addAll(dataSetIds),
+                new HashSet<TechId>().addAll(usedDsIds));
         context.assertIsSatisfied();
     }
 
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java
index 2128b524d619720892c9d985b741447ad50e1496..9cd84b31fa18475daac56109c296faa8e83b5d96 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java
@@ -155,6 +155,8 @@ public class DatasetListerTest extends AbstractDAOTest
                 + "        20081105092359990-2 (HCS_IMAGE) [COMMENT: no comment]\n"
                 + "      20081105092259900-1 (HCS_IMAGE) [COMMENT: no comment]\n"
                 + "        20081105092359990-2 (HCS_IMAGE) [COMMENT: no comment]\n"
+                + "  20110805092359990-17 (HCS_IMAGE) [COMMENT: no comment]\n"
+                + "    20081105092259000-18 (HCS_IMAGE) [COMMENT: no comment]\n"
                 + "CP-TEST-2\n  20081105092159222-2 (HCS_IMAGE) [COMMENT: no comment]\n"
                 + "    20081105092259000-9 (HCS_IMAGE) [COMMENT: no comment]\n"
                 + "      20081105092259900-0 (HCS_IMAGE) [COMMENT: no comment]\n"
@@ -216,7 +218,7 @@ public class DatasetListerTest extends AbstractDAOTest
         assertEquals("20081105092259900-0", dataSets.get(0).getCode());
         assertEquals("STANDARD", dataSets.get(0).getDataStore().getCode());
         assertEquals(0, dataSets.get(0).getProperties().size());
-        assertEquals(6, dataSets.size());
+        assertEquals(8, dataSets.size());
     }
 
     @Test
@@ -235,7 +237,7 @@ public class DatasetListerTest extends AbstractDAOTest
         assertEquals("STANDARD", dataSets.get(0).getDataStore().getCode());
         assertEquals("no comment", dataSets.get(0).getProperties().get(0).tryGetOriginalValue());
         assertEquals(1, dataSets.get(0).getProperties().size());
-        assertEquals(1, dataSets.size());
+        assertEquals(2, dataSets.size());
     }
 
     @Test
@@ -319,7 +321,7 @@ public class DatasetListerTest extends AbstractDAOTest
         assertEquals("42", ((DataSet) dataSet).getShareId());
         assertEquals(4711L, ((DataSet) dataSet).getSize().longValue());
         assertEquals(DataSetArchivingStatus.AVAILABLE, ((DataSet) dataSet).getStatus());
-        assertEquals(12, list.size());
+        assertEquals(14, list.size());
     }
 
     private void assertSameDataSetsForSameCode(Map<String, ExternalData> dataSetsByCode,
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListingQueryTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListingQueryTest.java
index 253ca0c29832de0e22e4b793cee93c9d9e5153eb..908900d715225f26d7ef00cf4942dbe1707d82a0 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListingQueryTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListingQueryTest.java
@@ -157,7 +157,7 @@ public class DatasetListingQueryTest extends AbstractDAOTest
         }
 
         assertEquals(1, counters.getCountOf(experiment1.getId()));
-        assertEquals(1, counters.getCountOf(experiment2.getId()));
+        assertEquals(2, counters.getCountOf(experiment2.getId()));
         assertEquals(2, counters.getNumberOfDifferentObjectsCounted());
     }
 
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAOTest.java
index f8b5b80f977ad8daba468af416c4516604c42396..a914080dfca8e53f7c64ba6f704d454a896acfb6 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAOTest.java
@@ -42,20 +42,18 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Code;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetArchivingStatus;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetPropertyPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataStorePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.FileFormatTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.LocatorTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.StorageFormat;
+import ch.systemsx.cisd.openbis.generic.shared.dto.TableNames;
 import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyTermPE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.dto.types.DataSetTypeCode;
 
 /**
@@ -72,6 +70,8 @@ public final class DataDAOTest extends AbstractDAOTest
 
     private final String PARENT_CODE = "20081105092159333-3";
 
+    private final String PARENT_WITH_NO_CHILDREN_IN_TRASH = "20110805092359990-17";
+
     private final String CHILD_CODE = "20081105092259000-8";
 
     private final String CONTAINER_CODE = "20110509092359990-10";
@@ -338,8 +338,6 @@ public final class DataDAOTest extends AbstractDAOTest
         assertTrue(extractedParents.contains(anotherDataSet));
     }
 
-    @Test(groups = "broken-deletion")
-    // FIXME LMS-2440
     public final void testDeleteWithPropertiesButParentPreserved()
     {
         final IDataDAO dataDAO = daoFactory.getDataDAO();
@@ -348,6 +346,10 @@ public final class DataDAOTest extends AbstractDAOTest
         // Deleted data set should have all collections which prevent it from deletion empty.
         assertTrue(deletedData.getChildren().isEmpty());
 
+        // Remember how many rows are in the properties table before we delete
+        int beforeDeletionPropertiesRowCount =
+                countRowsInTable(TableNames.DATA_SET_PROPERTIES_TABLE);
+
         // delete
         dataDAO.delete(deletedData);
 
@@ -356,15 +358,9 @@ public final class DataDAOTest extends AbstractDAOTest
 
         // test successful deletion of data set properties
         assertFalse(deletedData.getProperties().isEmpty());
-        List<EntityTypePropertyTypePE> retrievedPropertyTypes =
-                daoFactory.getEntityPropertyTypeDAO(EntityKind.DATA_SET).listEntityPropertyTypes(
-                        deletedData.getEntityType());
-        for (DataSetPropertyPE property : deletedData.getProperties())
-        {
-            int index = retrievedPropertyTypes.indexOf(property.getEntityTypePropertyType());
-            EntityTypePropertyTypePE retrievedPropertyType = retrievedPropertyTypes.get(index);
-            assertFalse(retrievedPropertyType.getPropertyValues().contains(property));
-        }
+        int afterDeletionPropertiesRowCount =
+                countRowsInTable(TableNames.DATA_SET_PROPERTIES_TABLE);
+        assertEquals(beforeDeletionPropertiesRowCount - 1, afterDeletionPropertiesRowCount);
 
         // deleted data set had parent connected that should not have been deleted
         // NOTE: somehow cannot get parents even though connection is the same as with children
@@ -392,12 +388,10 @@ public final class DataDAOTest extends AbstractDAOTest
         assertNull(preservedComponent.getContainer());
     }
 
-    @Test(groups = "broken-deletion")
-    // FIXME LMS-2440
     public final void testDeleteParentPreservesChildren()
     {
         final IDataDAO dataDAO = daoFactory.getDataDAO();
-        final DataPE deletedData = findData(PARENT_CODE);
+        final DataPE deletedData = findData(PARENT_WITH_NO_CHILDREN_IN_TRASH);
 
         // Deleted data set should have 'child' data sets.
         assertFalse(deletedData.getChildren().isEmpty());
diff --git a/openbis/sourceTest/sql/postgresql/078/007=data_all.tsv b/openbis/sourceTest/sql/postgresql/078/007=data_all.tsv
index 950ba4ed8e6670c8edbffc685f42c3d1424af93d..d14c0bef91b11df4c96c2dd86b686e49379a6eba 100644
--- a/openbis/sourceTest/sql/postgresql/078/007=data_all.tsv
+++ b/openbis/sourceTest/sql/postgresql/078/007=data_all.tsv
@@ -11,3 +11,5 @@
 13	20110509092359990-10	4	\N	2011-05-09 10:22:59.203+02	2011-05-09 10:22:59.313+02	f	t	2011-05-09 16:34:44.462776+02	8	1	t	\N	\N	\N	\N	\N
 14	20110509092359990-11	2	\N	2011-05-09 10:22:59.203+02	2011-05-09 10:22:59.313+02	f	t	2011-05-09 16:34:44.462776+02	8	1	t	\N	\N	1	13	\N
 15	20110509092359990-12	2	\N	2011-05-09 10:22:59.203+02	2011-05-09 10:22:59.313+02	f	t	2011-05-09 16:34:44.462776+02	8	1	t	\N	\N	2	13	\N
+17	20110805092359990-17	2	\N	2008-11-05 09:21:59.203+01	2009-02-09 12:21:47.815468+01	f	t	2009-03-23 15:34:44.462776+01	20	1	f	1044	\N	\N	\N	\N
+18	20081105092259000-18	2	\N	2008-11-05 09:22:59.203+01	2008-11-05 09:22:59.313+01	f	t	2009-03-23 15:34:44.462776+01	8	1	t	\N	\N	\N	\N	\N
\ No newline at end of file
diff --git a/openbis/sourceTest/sql/postgresql/078/008=data_set_properties.tsv b/openbis/sourceTest/sql/postgresql/078/008=data_set_properties.tsv
index 6214057519a97d5511d7c7e9ed8bc6d3190f0d5d..10824215e9a306b68e18b181a512285c0722c5b2 100644
--- a/openbis/sourceTest/sql/postgresql/078/008=data_set_properties.tsv
+++ b/openbis/sourceTest/sql/postgresql/078/008=data_set_properties.tsv
@@ -13,3 +13,5 @@
 13	5	4	\N	12	\N	2	2009-09-15 08:45:48.059548+02	2009-09-15 08:45:48.639+02
 14	5	3	\N	\N	22	2	2009-09-15 08:45:48.059548+02	2009-09-15 08:45:48.64+02
 15	5	2	\N	\N	2498	2	2009-09-15 08:45:48.059548+02	2009-09-15 08:45:48.64+02
+19	17	1	no comment	\N	\N	2	2009-04-24 14:45:06.348563+02	2009-04-24 14:45:07.091+02
+20	18	1	no comment	\N	\N	2	2009-04-24 14:45:06.348563+02	2009-04-24 14:45:07.091+02
diff --git a/openbis/sourceTest/sql/postgresql/078/009=data_set_relationships.tsv b/openbis/sourceTest/sql/postgresql/078/009=data_set_relationships.tsv
index 0c2a7596fc73348d2673438a0b5c7023ce9a5ffe..13d2c414b1302755c91f3fecd7844b0dc205b2e3 100644
--- a/openbis/sourceTest/sql/postgresql/078/009=data_set_relationships.tsv
+++ b/openbis/sourceTest/sql/postgresql/078/009=data_set_relationships.tsv
@@ -8,3 +8,4 @@
 9	11
 10	12
 11	12
+17	18
diff --git a/openbis/sourceTest/sql/postgresql/078/024=external_data.tsv b/openbis/sourceTest/sql/postgresql/078/024=external_data.tsv
index a57b9749843d61182f58f9d5ca3912f7f64d2463..7403f2c08ffc8292089d90b6e3f5da09c0bb8132 100644
--- a/openbis/sourceTest/sql/postgresql/078/024=external_data.tsv
+++ b/openbis/sourceTest/sql/postgresql/078/024=external_data.tsv
@@ -10,3 +10,5 @@
 12	xml/result-12	8	1	4	U	\N	AVAILABLE	\N	\N	f	-50
 14	contained/1	8	1	4	U	\N	AVAILABLE	\N	\N	f	-50
 15	contained/2	8	1	4	U	\N	AVAILABLE	\N	\N	f	-50
+17	a/4	4	1	4	U	\N	AVAILABLE	\N	\N	f	-50
+18	xml/result-18	8	1	4	U	\N	AVAILABLE	\N	\N	f	-50
\ No newline at end of file