diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityPropertyTypeDAOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityPropertyTypeDAOTest.java
index 80fb9a6a3adf5e7d2d309b4066820ef850ece111..0de7ea4c2ff484f8d2b36fb83b2453ef4e37838d 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityPropertyTypeDAOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityPropertyTypeDAOTest.java
@@ -34,9 +34,9 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.EntityPropertyPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE;
 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.ExperimentPropertyPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityPropertiesHolder;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE;
+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.VocabularyTermWithStats;
@@ -170,25 +170,20 @@ public class EntityPropertyTypeDAOTest extends AbstractDAOTest
         assertEquals("FLY", properties.get(0).getVocabularyTerm().getCode());
     }
 
-    @Test(groups = "broken-deletion")
-    // FIXME LMS-2440
+    @Test
     public void testDelete()
     {
         EntityTypePropertyTypePE assignment =
                 tryToGetAssignment(EntityKind.EXPERIMENT, "SIRNA_HCS", "DESCRIPTION");
-        assertEquals(false, assignment.getPropertyValues().isEmpty());
-        ExperimentPropertyPE propertyValue =
-                (ExperimentPropertyPE) (assignment.getPropertyValues().iterator().next());
-        ExperimentPE experiment = propertyValue.getEntity();
-        long id = experiment.getId();
-        int totalProps = experiment.getProperties().size();
-
+        // Remember how many rows are in the properties table before we delete
+        int beforeDeletionPropertiesRowCount =
+                countRowsInTable(TableNames.EXPERIMENT_PROPERTIES_TABLE);
+        assertEquals(true, beforeDeletionPropertiesRowCount > 0);
         daoFactory.getEntityPropertyTypeDAO(EntityKind.EXPERIMENT).delete(assignment);
 
-        // load the experiment once again - it was cleared from session
-        experiment = new ExperimentPE();
-        daoFactory.getSessionFactory().getCurrentSession().load(experiment, id);
-        assertEquals(totalProps - 1, experiment.getProperties().size());
+        int afterDeletionPropertiesRowCount =
+                countRowsInTable(TableNames.EXPERIMENT_PROPERTIES_TABLE);
+        assertEquals(beforeDeletionPropertiesRowCount - 7, afterDeletionPropertiesRowCount);
     }
 
     private EntityTypePropertyTypePE tryToGetAssignment(EntityKind entityKind,
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAOTest.java
index 301835128cf123e9b26d77522a7dc980cb0af547..04ddd1e7ab2fef9724d963474461bee750f05c05 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAOTest.java
@@ -42,13 +42,12 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AttachmentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE;
-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.ExperimentPropertyPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.TableNames;
 import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.dto.types.ExperimentTypeCode;
 
@@ -152,7 +151,7 @@ public class ExperimentDAOTest extends AbstractDAOTest
                 daoFactory.getExperimentDAO().listExperimentsWithProperties(expType,
                         projectDefault, null);
         Collections.sort(experiments);
-        assertEquals(2, experiments.size());
+        assertEquals(3, experiments.size());
         assertContains(experiments, CISD_CISD_DEFAULT_EXP_REUSE);
         assertNotContains(experiments, CISD_CISD_DEFAULT_EXP_X);
     }
@@ -176,7 +175,7 @@ public class ExperimentDAOTest extends AbstractDAOTest
                 daoFactory.getExperimentDAO().listExperimentsWithProperties(expType, null,
                         spaceCisd);
         Collections.sort(experiments);
-        assertEquals(6, experiments.size());
+        assertEquals(7, experiments.size());
         assertContains(experiments, CISD_CISD_NEMO_EXP10);
         assertContains(experiments, CISD_CISD_NEMO_EXP11);
         assertContains(experiments, CISD_CISD_DEFAULT_EXP_REUSE);
@@ -244,35 +243,29 @@ public class ExperimentDAOTest extends AbstractDAOTest
         return experiment;
     }
 
-    @Test(groups = "broken-deletion")
-    // FIXME LMS-2440
+    @Test
     public final void testDeleteWithProperties()
     {
         final IExperimentDAO experimentDAO = daoFactory.getExperimentDAO();
-        final ExperimentPE deletedExperiment = findExperiment("/CISD/DEFAULT/EXP-X");
+        final ExperimentPE deletedExperiment = findExperiment("/CISD/DEFAULT/EXP-Y");
 
         // Deleted experiment should have all collections which prevent it from deletion empty.
-        assertTrue(deletedExperiment.getAttachments().isEmpty());
         assertTrue(deletedExperiment.getDataSets().isEmpty());
         assertTrue(deletedExperiment.getSamples().isEmpty());
 
+        // Remember how many rows are in the properties table before we delete
+        int beforeDeletionPropertiesRowCount =
+                countRowsInTable(TableNames.EXPERIMENT_PROPERTIES_TABLE);
+
         // delete
         experimentDAO.delete(deletedExperiment);
 
         // test successful deletion of experiment
         assertNull(experimentDAO.tryGetByTechId(TechId.create(deletedExperiment)));
 
-        // test successful deletion of sample properties
-        assertFalse(deletedExperiment.getProperties().isEmpty());
-        List<EntityTypePropertyTypePE> retrievedPropertyTypes =
-                daoFactory.getEntityPropertyTypeDAO(EntityKind.EXPERIMENT).listEntityPropertyTypes(
-                        deletedExperiment.getEntityType());
-        for (ExperimentPropertyPE property : deletedExperiment.getProperties())
-        {
-            int index = retrievedPropertyTypes.indexOf(property.getEntityTypePropertyType());
-            EntityTypePropertyTypePE retrievedPropertyType = retrievedPropertyTypes.get(index);
-            assertFalse(retrievedPropertyType.getPropertyValues().contains(property));
-        }
+        int afterDeletionPropertiesRowCount =
+                countRowsInTable(TableNames.EXPERIMENT_PROPERTIES_TABLE);
+        assertEquals(beforeDeletionPropertiesRowCount - 1, afterDeletionPropertiesRowCount);
     }
 
     private static final String ATT_CONTENTS_TABLE = "attachment_contents";
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAOTest.java
index 0b55167c63c66fb57e5810f63fb4df8e90fb7bb9..d6d2ce436a74b71cd470e9d1299312a831f2648a 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAOTest.java
@@ -42,7 +42,6 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleDAO;
 import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 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.EventPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EventPE.EntityType;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EventType;
@@ -53,7 +52,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePropertyPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SampleRelationshipPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind;
+import ch.systemsx.cisd.openbis.generic.shared.dto.TableNames;
 import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils;
 
 /**
@@ -340,8 +339,7 @@ public final class SampleDAOTest extends AbstractDAOTest
         return eventDAO.tryFind(sample.getPermId(), EntityType.SAMPLE, EventType.DELETION);
     }
 
-    @Test(groups = "broken-deletion")
-    // FIXME LMS-2440
+    @Test
     public final void testDeleteWithProperties()
     {
         final ISampleDAO sampleDAO = daoFactory.getSampleDAO();
@@ -354,6 +352,9 @@ public final class SampleDAOTest extends AbstractDAOTest
         assertTrue(deletedSample.getContained().isEmpty());
         assertFalse(deletedSample.getProperties().isEmpty());
 
+        // Remember how many rows are in the properties table before we delete
+        int beforeDeletionPropertiesRowCount = countRowsInTable(TableNames.SAMPLE_PROPERTIES_TABLE);
+
         // delete
         deleteSample(deletedSample);
 
@@ -361,15 +362,10 @@ public final class SampleDAOTest extends AbstractDAOTest
         assertNull(sampleDAO.tryGetByTechId(TechId.create(deletedSample)));
 
         // test successful deletion of sample properties
-        List<EntityTypePropertyTypePE> retrievedPropertyTypes =
-                daoFactory.getEntityPropertyTypeDAO(EntityKind.SAMPLE).listEntityPropertyTypes(
-                        deletedSample.getEntityType());
-        for (SamplePropertyPE property : deletedSample.getProperties())
-        {
-            int index = retrievedPropertyTypes.indexOf(property.getEntityTypePropertyType());
-            EntityTypePropertyTypePE retrievedPropertyType = retrievedPropertyTypes.get(index);
-            assertFalse(retrievedPropertyType.getPropertyValues().contains(property));
-        }
+        int afterDeletionPropertiesRowCount = countRowsInTable(TableNames.SAMPLE_PROPERTIES_TABLE);
+
+        assertEquals(afterDeletionPropertiesRowCount, beforeDeletionPropertiesRowCount
+                - deletedSample.getProperties().size());
     }
 
     private static final String ATT_CONTENTS_TABLE = "attachment_contents";
@@ -421,11 +417,10 @@ public final class SampleDAOTest extends AbstractDAOTest
         deleteSample(deletedSample);
     }
 
-    @Test(groups = "broken-deletion")
-    // FIXME LMS-2440
+    @Test
     public final void testDeleteWithGeneratedSamples()
     {
-        final SamplePE deletedSample = findSample("3VCP2", "CISD");
+        final SamplePE deletedSample = findSample("3VCP2-NEW", "CISD");
 
         // Deleted sample should have 'generated' samples which prevent it from deletion.
         // Other connections which also prevent sample deletion should be empty in this test.
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/ExperimentBrowsingTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/ExperimentBrowsingTest.java
index 88c22550ee8fd809627acf7ec0733394a478eb3f..5271b98537d08c4405c899a3384ecf9ce812054e 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/ExperimentBrowsingTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/ExperimentBrowsingTest.java
@@ -78,8 +78,8 @@ public class ExperimentBrowsingTest extends SystemTestCase
         assertEquals(null, e1.getDeletion());
         assertObjectWithCodeDoesNotExists(resultSet, "EXP-X"); // deleted
         assertEquals(false, resultSet.getResultSet().isPartial());
-        assertEquals(2, resultSet.getResultSet().getTotalLength());
-        assertEquals(2, resultSet.getResultSet().getList().size());
+        assertEquals(3, resultSet.getResultSet().getTotalLength());
+        assertEquals(3, resultSet.getResultSet().getList().size());
     }
 
     @Test
diff --git a/openbis/sourceTest/sql/postgresql/078/020=experiment_properties.tsv b/openbis/sourceTest/sql/postgresql/078/020=experiment_properties.tsv
index 49a8ad788d3e1c4af11086fa0ffe7b5663ee40f5..3b4dc448c8a2b70aaf4daa9029c2f6e1639c5025 100644
--- a/openbis/sourceTest/sql/postgresql/078/020=experiment_properties.tsv
+++ b/openbis/sourceTest/sql/postgresql/078/020=experiment_properties.tsv
@@ -12,3 +12,4 @@
 17	20	1	very important expertiment	\N	2	2009-02-09 12:17:55.058768+01	2009-03-18 10:50:19.475958+01	\N
 19	20	5	\N	12	2	2009-02-09 12:17:55.058768+01	2009-03-18 10:50:19.475958+01	\N
 18	20	3	2009-02-09 00:00:00 +0100	\N	2	2009-02-09 12:17:55.058768+01	2009-03-18 10:50:19.475958+01	\N
+20	22	1	A simple experiment	\N	2	2008-11-05 09:22:37.246+01	2009-03-18 10:50:19.475958+01	\N
diff --git a/openbis/sourceTest/sql/postgresql/078/040=sample_relationships.tsv b/openbis/sourceTest/sql/postgresql/078/040=sample_relationships.tsv
index a3f5c810823260b1677607868585ea581ff78856..35c04b997e55e609b60d2aecea6e9ed2498dd796 100644
--- a/openbis/sourceTest/sql/postgresql/078/040=sample_relationships.tsv
+++ b/openbis/sourceTest/sql/postgresql/078/040=sample_relationships.tsv
@@ -3,7 +3,7 @@
 7	979	1	989
 16	4	1	977
 26	1025	1	1030
-12	983	1	992
+12	1053	1	992
 23	1020	1	1025
 5	979	1	987
 9	982	1	990
@@ -22,7 +22,7 @@
 1	325	1	979
 4	979	1	986
 8	977	1	982
-11	977	1	983
+11	977	1	1053
 19	1008	1	1020
 27	1026	1	1031
 40	994	2	1029
diff --git a/openbis/sourceTest/sql/postgresql/078/043=samples_all.tsv b/openbis/sourceTest/sql/postgresql/078/043=samples_all.tsv
index 2ce11b55e93b275046aa47e9fd9af8135a268b70..0305264c2ed1d2998c2a9ee1cbc9c6445d9d9282 100644
--- a/openbis/sourceTest/sql/postgresql/078/043=samples_all.tsv
+++ b/openbis/sourceTest/sql/postgresql/078/043=samples_all.tsv
@@ -975,7 +975,7 @@
 990	3VRP1A	4	2008-11-05 09:21:47.449+01	2	1	\N	1	\N	2009-03-18 10:50:19.475958+01	\N	200811050947449-984
 991	3VRP1B	4	2008-11-05 09:21:47.449+01	2	1	\N	1	\N	2009-03-18 10:50:19.475958+01	\N	200811050947449-985
 983	3VCP2	3	2008-11-05 09:21:46.559+01	2	1	\N	1	\N	2009-03-18 10:50:19.475958+01	\N	200811050946559-986
-992	3VRP2	4	2008-11-05 09:21:47.449+01	2	1	\N	1	\N	2009-03-18 10:50:19.475958+01	\N	200811050947449-987
+992	3VRP2	4	2008-11-05 09:21:47.449+01	2	\N	\N	1	\N	2009-03-18 10:50:19.475958+01	\N	200811050947449-987
 984	3VCP3	3	2008-11-05 09:21:46.559+01	2	2	\N	1	\N	2009-03-18 10:50:19.475958+01	2	200811050946559-988
 993	3VRP3T	4	2008-11-05 09:21:47.449+01	2	2	\N	1	\N	2009-03-18 10:50:19.475958+01	\N	200811050947449-989
 985	3VCP4	3	2008-11-05 09:21:46.559+01	2	2	\N	1	\N	2009-03-18 10:50:19.475958+01	2	200811050946559-990
@@ -1021,3 +1021,4 @@
 1050	PLATE_WELLSEARCH	3	2009-02-09 12:09:50.077973+01	2	\N	\N	1	\N	2009-08-18 17:54:36.929+02	21	200902091250077-1050
 1051	WELL-A01	6	2009-02-09 12:09:50.077973+01	2	\N	\N	1	1050	2009-08-18 17:54:36.929+02	21	200902091250077-1051
 1052	WELL-A02	6	2009-02-09 12:09:50.077973+01	2	\N	\N	1	1050	2009-08-18 17:54:36.929+02	21	200902091250077-1052
+1053	3VCP2-NEW	3	2008-11-05 09:21:46.559+01	2	\N	\N	1	\N	2009-03-18 10:50:19.475958+01	\N	201108050946559-986
\ No newline at end of file