diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/ProteomicsDataServiceTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/ProteomicsDataServiceTest.java
index ce66ea14cc9bd135014b0ab20db1241cf3f29966..be6e67f4404cac7c2b6c9eb2307971e69806f55b 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/ProteomicsDataServiceTest.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/ProteomicsDataServiceTest.java
@@ -20,6 +20,7 @@ import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
@@ -52,6 +53,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.server.api.v1.ProteomicsDataService;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.IProteomicsDataServiceInternal;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.api.v1.IProteomicsDataService;
+import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.api.v1.dto.DataSet;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.api.v1.dto.DataStoreServerProcessingPluginInfo;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.api.v1.dto.MsInjectionDataInfo;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.api.v1.dto.PropertyKey;
@@ -152,11 +154,32 @@ public class ProteomicsDataServiceTest extends AbstractServerTestCase
         IEntityProperty p4 = property("boolean", DataTypeCode.BOOLEAN, "true");
         IEntityProperty p5 = property("link", DataTypeCode.HYPERLINK, "link");
         parent.setProperties(Arrays.asList(p4, p5));
+        Experiment experiment = new Experiment();
+        experiment.setId(4747L);
+        experiment.setCode("exp1");
+        Project project = new Project();
+        project.setCode("project1");
+        Space space = new Space();
+        space.setCode("space1");
+        project.setSpace(space);
+        experiment.setProject(project);
+        experiment.setRegistrationDate(new Date(1234567));
+        IEntityProperty p6 = property("ex", DataTypeCode.VARCHAR, "exp");
+        experiment.setProperties(Arrays.<IEntityProperty>asList(p6));
+        parent.setExperiment(experiment);
         sample .setGeneratedFrom(parent);
+        final ExternalData ds1 = createDataSet(RAW_DATA, 10);
+        final ExternalData ds2 = createDataSet(MZXML_DATA, 20);
+        ExternalData ds3 = createDataSet(MZXML_DATA, 15);
+        ExternalData ds4 = createDataSet(RAW_DATA, 30);
+        ds2.setChildren(Arrays.asList(ds3));
+        ds3.setChildren(Arrays.asList(ds4));
         context.checking(new Expectations()
             {
                 {
                     one(internalService).listRawDataSamples(session2.getSessionToken());
+                    MsInjectionSample msInjectionSample = new MsInjectionSample(sample, Arrays.asList(ds1, ds2));
+                    will(returnValue(Arrays.asList(msInjectionSample)));
                 }
             });
 
@@ -170,6 +193,26 @@ public class ProteomicsDataServiceTest extends AbstractServerTestCase
         assertEquals(parent.getId().longValue(), info.getBiologicalSampleID());
         assertEquals(parent.getIdentifier(), info.getBiologicalSampleIdentifier());
         checkProperties(info.getBiologicalSampleProperties(), p4, p5);
+        assertEquals("4747:space1/project1/exp1 date:1234567 {ex[EX]=exp}",
+                renderExperiment(info.getBiologicalExperiment()));
+        checkProperties(info.getBiologicalExperiment().getProperties(), p6);
+        List<DataSet> dataSets = new ArrayList<DataSet>(info.getDataSets());
+        Collections.sort(dataSets, new Comparator<DataSet>()
+            {
+                public int compare(DataSet d1, DataSet d2)
+                {
+                    return d1.getCode().compareTo(d2.getCode());
+                }
+            });
+        assertEquals("20:MZXML_DATA-20 [MZXML_DATA date:20] {n[N]=2.5}, children:15",
+                renderDataSet(dataSets.get(0)));
+        assertEquals("10:RAW_DATA-10 [RAW_DATA date:10] {n[N]=2.5}", renderDataSet(dataSets.get(1)));
+        assertEquals("15:MZXML_DATA-15 [MZXML_DATA date:15] {n[N]=2.5}, parent:20 , children:30",
+                renderDataSet(dataSets.get(0).getChildren().iterator().next()));
+        assertEquals("30:RAW_DATA-30 [RAW_DATA date:30] {n[N]=2.5}, parent:15",
+                renderDataSet(dataSets.get(0).getChildren().iterator().next().getChildren()
+                        .iterator().next()));
+        assertEquals(2, dataSets.size());
         Map<String, Date> dates = info.getLatestDataSetRegistrationDates();
         assertEquals(30, dates.get(RAW_DATA).getTime());
         assertEquals(20, dates.get(MZXML_DATA).getTime());
@@ -177,6 +220,45 @@ public class ProteomicsDataServiceTest extends AbstractServerTestCase
         assertEquals(1, infos.size());
         context.assertIsSatisfied();
     }
+    
+    private String renderExperiment(ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.api.v1.dto.Experiment experiment)
+    {
+        StringBuilder builder = new StringBuilder();
+        builder.append(experiment.getId()).append(":").append(experiment.getSpaceCode());
+        builder.append('/').append(experiment.getProjectCode());
+        builder.append('/').append(experiment.getCode());
+        builder.append(" date:").append(experiment.getRegistrationDate().getTime());
+        builder.append(' ').append(experiment.getProperties());
+        return builder.toString();
+    }
+    
+    private String renderDataSet(DataSet dataSet)
+    {
+        StringBuilder builder = new StringBuilder();
+        builder.append(dataSet.getId()).append(":").append(dataSet.getCode());
+        builder.append(" [").append( dataSet.getType()).append(" date:");
+        builder.append(dataSet.getRegistrationDate().getTime()).append("] ");
+        builder.append(dataSet.getProperties());
+        Set<DataSet> parents = dataSet.getParents();
+        if (parents != null && parents.isEmpty() == false)
+        {
+            builder.append(", parent:");
+            for (DataSet parent : parents)
+            {
+                builder.append(parent.getId()).append(' ');
+            }
+        }
+        Set<DataSet> children = dataSet.getChildren();
+        if (children != null && children.isEmpty() == false)
+        {
+            builder.append(", children:");
+            for (DataSet child : children)
+            {
+                builder.append(child.getId()).append(' ');
+            }
+        }
+        return builder.toString().trim();
+    }
 
     @Test
     public void testCopyRawDataForUnknownUser()
@@ -328,8 +410,11 @@ public class ProteomicsDataServiceTest extends AbstractServerTestCase
     private ExternalData createDataSet(String type, long date)
     {
         ExternalData dataSet = new ExternalData();
+        dataSet.setId(date);
+        dataSet.setCode(type + "-" + date);
         dataSet.setDataSetType(new DataSetType(type));
         dataSet.setRegistrationDate(new Date(date));
+        dataSet.setDataSetProperties(Arrays.asList(property("n", DataTypeCode.REAL, "2.5")));
         return dataSet;
     }