diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProvider.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProvider.java
index 2b93f162542365c31ade6f0b2501f8949f8ba0b2..f8a58957e7f53853d8a5e3ac7a0f7fd9fe981ee1 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProvider.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProvider.java
@@ -31,6 +31,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.IRawDataServiceInternal;
+import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.dto.MsInjectionSample;
 
 /**
  * @author Franz-Josef Elmer
@@ -90,7 +91,7 @@ class RawDataSampleProvider implements IOriginalDataProvider<GenericTableRow>
 
     private List<Column> getColumns()
     {
-        List<Sample> samples = service.listRawDataSamples(sessionToken);
+        List<MsInjectionSample> samples = service.listRawDataSamples(sessionToken);
         Column codeColumn =
                 new Column(GenericTableColumnHeader.untitledLinkableStringHeader(0, CODE));
         Column dateColumn =
@@ -105,7 +106,7 @@ class RawDataSampleProvider implements IOriginalDataProvider<GenericTableRow>
         PropertyColumns parentPropertyColumns = new PropertyColumns();
         for (int i = 0; i < samples.size(); i++)
         {
-            Sample sample = samples.get(i);
+            Sample sample = samples.get(i).getSample();
             codeColumn.addStringWithID(i, sample.getCode(), sample.getId());
             dateColumn.addDate(i, sample.getRegistrationDate());
             Sample parent = sample.getGeneratedFrom();
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataService.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataService.java
index a1be87af8cfed3771e8b25e64b413c485eeb66c4..dbfb125b476e8041683c487b5a38baaeaf272b98 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataService.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataService.java
@@ -35,6 +35,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO;
 import ch.systemsx.cisd.openbis.generic.shared.translator.DataStoreServiceTranslator;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.IRawDataService;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.IRawDataServiceInternal;
+import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.dto.MsInjectionSample;
 
 /**
  * Imlementation of {@link IRawDataService}.
@@ -67,7 +68,13 @@ public class RawDataService extends AbstractServer<IRawDataService> implements I
         SessionContextDTO session = login(userID);
         try
         {
-            return service.listRawDataSamples(session.getSessionToken());
+            List<MsInjectionSample> list = service.listRawDataSamples(session.getSessionToken());
+            ArrayList<Sample> result = new ArrayList<Sample>();
+            for (MsInjectionSample sample : list)
+            {
+                result.add(sample.getSample());
+            }
+            return result;
             
         } finally
         {
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternal.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternal.java
index 9152349e004f6c19b3d46e5b2454719736fa3cc7..006872586744a86d10176bc8cea19a4a9c84df1f 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternal.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternal.java
@@ -49,8 +49,10 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
 import ch.systemsx.cisd.openbis.generic.shared.translator.SampleTypeTranslator;
+import ch.systemsx.cisd.openbis.plugin.phosphonetx.server.business.Manager;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.IRawDataServiceInternal;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.authorization.validator.RawDataSampleValidator;
+import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.dto.MsInjectionSample;
 
 /**
  * 
@@ -63,7 +65,7 @@ public class RawDataServiceInternal extends AbstractServer<IRawDataServiceIntern
 
     @Private static final String RAW_DATA_SAMPLE_TYPE = "MS_INJECTION";
     
-    private static final IValidator<Sample> RAW_DATA_SAMPLE_VALIDATOR = new RawDataSampleValidator();
+    private static final IValidator<MsInjectionSample> RAW_DATA_SAMPLE_VALIDATOR = new RawDataSampleValidator();
 
     private ICommonBusinessObjectFactory businessObjectFactory;
 
@@ -91,7 +93,7 @@ public class RawDataServiceInternal extends AbstractServer<IRawDataServiceIntern
         return new RawDataServiceInternalLogger(getSessionManager(), context);
     }
     
-    public List<Sample> listRawDataSamples(String sessionToken)
+    public List<MsInjectionSample> listRawDataSamples(String sessionToken)
     {
         return loadAllRawDataSamples(getSession(sessionToken));
     }
@@ -102,13 +104,13 @@ public class RawDataServiceInternal extends AbstractServer<IRawDataServiceIntern
         Session session = getSession(sessionToken);
         PersonPE person = session.tryGetPerson();
 
-        List<Sample> samples = loadAllRawDataSamples(session);
+        List<MsInjectionSample> samples = loadAllRawDataSamples(session);
         Set<Long> sampleIDs = new HashSet<Long>();
-        for (Sample sample : samples)
+        for (MsInjectionSample sample : samples)
         {
             if (RAW_DATA_SAMPLE_VALIDATOR.isValid(person, sample))
             {
-                sampleIDs.add(sample.getId());
+                sampleIDs.add(sample.getSample().getId());
             }
         }
 
@@ -137,7 +139,7 @@ public class RawDataServiceInternal extends AbstractServer<IRawDataServiceIntern
                 parameterBindings);
     }
 
-    private List<Sample> loadAllRawDataSamples(Session session)
+    private List<MsInjectionSample> loadAllRawDataSamples(Session session)
     {
         ISampleLister sampleLister = businessObjectFactory.createSampleLister(session);
         ListSampleCriteria criteria = new ListSampleCriteria();
@@ -148,7 +150,14 @@ public class RawDataServiceInternal extends AbstractServer<IRawDataServiceIntern
         criteria.setSpaceCode(SPACE_CODE);
         ListOrSearchSampleCriteria criteria2 = new ListOrSearchSampleCriteria(criteria);
         criteria2.setEnrichDependentSamplesWithProperties(true);
-        return sampleLister.list(criteria2);
+        List<Sample> samples = sampleLister.list(criteria2);
+        Manager manager = new Manager();
+        for (Sample sample : samples)
+        {
+            manager.addSample(sample);
+        }
+        manager.gatherDataSets(businessObjectFactory.createDatasetLister(session, ""));
+        return manager.getSamples();
     }
     
     private String findDataStoreServer(String dataSetProcessingKey)
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternalLogger.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternalLogger.java
index 73f3c988bf22027671d2c8856bd893aa6a9b365b..1c31bddd1fd96ba8f49f857156463ae430252031 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternalLogger.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternalLogger.java
@@ -21,9 +21,9 @@ import java.util.List;
 import ch.systemsx.cisd.authentication.ISessionManager;
 import ch.systemsx.cisd.common.spring.IInvocationLoggerContext;
 import ch.systemsx.cisd.openbis.generic.server.AbstractServerLogger;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.IRawDataServiceInternal;
+import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.dto.MsInjectionSample;
 
 /**
  * 
@@ -39,7 +39,7 @@ class RawDataServiceInternalLogger extends AbstractServerLogger implements IRawD
         super(sessionManager, context);
     }
 
-    public List<Sample> listRawDataSamples(String sessionToken)
+    public List<MsInjectionSample> listRawDataSamples(String sessionToken)
     {
         logAccess(sessionToken, "list_raw_data_samples");
         return null;
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/Manager.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/Manager.java
new file mode 100644
index 0000000000000000000000000000000000000000..944a500d97e5660f9b60cf4b6e771d7f1f755ae1
--- /dev/null
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/Manager.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2010 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.phosphonetx.server.business;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.datasetlister.IDatasetLister;
+import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
+import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.dto.MsInjectionSample;
+
+/**
+ * 
+ *
+ * @author Franz-Josef Elmer
+ */
+public class Manager
+{
+    private final Map<Long, MsInjectionSample> samples = new LinkedHashMap<Long, MsInjectionSample>();
+    
+    public void addSample(Sample plainSample)
+    {
+        MsInjectionSample sample = new MsInjectionSample(plainSample);
+        samples.put(plainSample.getId(), sample);
+        Experiment experiment = plainSample.getExperiment();
+        if (experiment == null)
+        {
+            throw new UserFailureException("Sample '" + plainSample.getIdentifier() + "' of type '"
+                    + plainSample.getSampleType() + "' does not belong to an experiment.");
+        }
+    }
+
+    public List<MsInjectionSample> getSamples()
+    {
+        return new ArrayList<MsInjectionSample>(samples.values());
+    }
+    
+    public void gatherDataSets(IDatasetLister datasetLister)
+    {
+        List<ExternalData> dataSets = getDataSets(datasetLister);
+        Map<Long, Long> dataSetSampleMap = mapDataSetsOnSamples(dataSets, datasetLister);
+        for (ExternalData dataSet : dataSets)
+        {
+            Long sampleID = dataSetSampleMap.get(dataSet.getId());
+            if (sampleID != null)
+            {
+                String code = dataSet.getDataSetType().getCode();
+                Date registrationDate = dataSet.getRegistrationDate();
+                MsInjectionSample sample = samples.get(sampleID);
+                if (sample != null)
+                {
+                    sample.addLatestDataSet(code, registrationDate);
+                }
+            }
+        }
+    }
+
+    private List<ExternalData> getDataSets(IDatasetLister datasetLister)
+    {
+        Set<TechId> experimentIds = new LinkedHashSet<TechId>();
+        for (MsInjectionSample sample : samples.values())
+        {
+            experimentIds.add(new TechId(sample.getSample().getExperiment().getId()));
+        }
+        List<ExternalData> result = new ArrayList<ExternalData>();
+        List<ExternalData> dataSets = datasetLister.listByExperimentTechIds(experimentIds);
+        for (ExternalData dataSet : dataSets)
+        {
+            result.add(dataSet);
+        }
+        return result;
+    }
+    
+    private Map<Long, Long> mapDataSetsOnSamples(List<ExternalData> dataSets,
+            IDatasetLister datasetLister)
+    {
+        List<ExternalData> descendentDataSets = new ArrayList<ExternalData>();
+        Map<Long, Long> dataSetSampleMap = new HashMap<Long, Long>();
+        Set<Long> ids = new LinkedHashSet<Long>();
+        for (ExternalData dataSet : dataSets)
+        {
+            Sample sample = dataSet.getSample();
+            if (sample != null)
+            {
+                dataSetSampleMap.put(dataSet.getId(), sample.getId());
+            } else
+            {
+                descendentDataSets.add(dataSet);
+                ids.add(dataSet.getId());
+            }
+        }
+        Map<Long, Set<Long>> parentIds = datasetLister.listParentIds(ids);
+        while (descendentDataSets.isEmpty() == false)
+        {
+            for (Iterator<ExternalData> iterator = descendentDataSets.iterator(); iterator
+                    .hasNext();)
+            {
+                ExternalData dataSet = iterator.next();
+                Set<Long> parent = parentIds.get(dataSet.getId());
+                if (parent == null)
+                {
+                    iterator.remove();
+                    continue;
+                }
+                if (parent.size() != 1)
+                {
+                    throw new UserFailureException("Data set '" + dataSet.getCode() + "' has "
+                            + parent.size() + " instead of one parent data set.");
+
+                }
+                Long sampleID = dataSetSampleMap.get(parent.iterator().next());
+                if (sampleID != null)
+                {
+                    dataSetSampleMap.put(dataSet.getId(), sampleID);
+                    iterator.remove();
+                }
+            }
+        }
+        return dataSetSampleMap;
+    }
+
+}
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/IRawDataServiceInternal.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/IRawDataServiceInternal.java
index d782ccf07da5eaebfa5a434b81970711ff464901..7fe13797ea7ad78d8186dd8872055150dac8cd2f 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/IRawDataServiceInternal.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/IRawDataServiceInternal.java
@@ -24,8 +24,8 @@ import ch.systemsx.cisd.openbis.generic.shared.IServer;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.annotation.ReturnValueFilter;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.annotation.RoleSet;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.annotation.RolesAllowed;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.authorization.validator.RawDataSampleValidator;
+import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.dto.MsInjectionSample;
 
 /**
  * 
@@ -41,7 +41,7 @@ public interface IRawDataServiceInternal extends IServer
     @Transactional(readOnly = true)
     @RolesAllowed(RoleSet.USER)
     @ReturnValueFilter(validatorClass = RawDataSampleValidator.class)
-    public List<Sample> listRawDataSamples(String sessionToken);
+    public List<MsInjectionSample> listRawDataSamples(String sessionToken);
     
     @Transactional(readOnly = true)
     @RolesAllowed(RoleSet.USER)
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/authorization/validator/RawDataSampleValidator.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/authorization/validator/RawDataSampleValidator.java
index a87c3956357a95153d90988d98fd3f69347320c2..5e51d4044224ca96a0f5c76bdf5077066a45b3a0 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/authorization/validator/RawDataSampleValidator.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/authorization/validator/RawDataSampleValidator.java
@@ -5,19 +5,20 @@ import ch.systemsx.cisd.openbis.generic.shared.authorization.validator.IValidato
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
+import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.dto.MsInjectionSample;
 
 /**
  * 
  *
  * @author Franz-Josef Elmer
  */
-public final class RawDataSampleValidator implements IValidator<Sample>
+public final class RawDataSampleValidator implements IValidator<MsInjectionSample>
 {
     private IValidator<Space> validator = new SpaceValidator();
 
-    public boolean isValid(PersonPE person, Sample sample)
+    public boolean isValid(PersonPE person, MsInjectionSample sample)
     {
-        Sample parent = sample.getGeneratedFrom();
+        Sample parent = sample.getSample().getGeneratedFrom();
         if (parent != null)
         {
             Space space = parent.getSpace();
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/dto/MsInjectionSample.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/dto/MsInjectionSample.java
new file mode 100644
index 0000000000000000000000000000000000000000..99a8b8fbde3648273e009eb62873c6086c8a3d78
--- /dev/null
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/dto/MsInjectionSample.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2010 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.dto;
+
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
+
+/**
+ * 
+ *
+ * @author Franz-Josef Elmer
+ */
+public class MsInjectionSample
+{
+    private final Sample sample;
+    private final Map<String, Date> latestRegistrationDates = new LinkedHashMap<String, Date>();
+
+    public MsInjectionSample(Sample sample)
+    {
+        this.sample = sample;
+    }
+
+    public Sample getSample()
+    {
+        return sample;
+    }
+
+    public Map<String, Date> getLatestRegistrationDates()
+    {
+        return latestRegistrationDates;
+    }
+
+    public void addLatestDataSet(String dataSetTypeCode, Date registrationDate)
+    {
+        Date date = latestRegistrationDates.get(dataSetTypeCode);
+        if (date == null || date.getTime() < registrationDate.getTime())
+        {
+            latestRegistrationDates.put(dataSetTypeCode, registrationDate);
+        }
+    }
+
+    @Override
+    public String toString()
+    {
+        return sample.getIdentifier()+":"+latestRegistrationDates;
+    }
+    
+    
+        
+}
diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternalTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternalTest.java
index b12a5db927e14be596d3a9c4693d866efa86431b..11504d334f12291d703aa1e45bba6caad846bf8a 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternalTest.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternalTest.java
@@ -23,9 +23,11 @@ import static ch.systemsx.cisd.openbis.plugin.phosphonetx.server.RawDataServiceI
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Set;
 
 import org.hamcrest.BaseMatcher;
 import org.hamcrest.Description;
@@ -39,6 +41,7 @@ import ch.systemsx.cisd.openbis.generic.server.business.bo.samplelister.ISampleL
 import ch.systemsx.cisd.openbis.generic.shared.AbstractServerTestCase;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListOrSearchSampleCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
@@ -48,6 +51,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePE;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.IRawDataServiceInternal;
+import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.dto.MsInjectionSample;
 
 /**
  * 
@@ -78,9 +82,9 @@ public class RawDataServiceInternalTest extends AbstractServerTestCase
         prepareGetSession();
         prepareListRawDataSamples(42L);
         
-        List<Sample> samples = service.listRawDataSamples(SESSION_TOKEN);
+        List<MsInjectionSample> samples = service.listRawDataSamples(SESSION_TOKEN);
 
-        assertEquals(42L, samples.get(0).getId().longValue());
+        assertEquals(42L, samples.get(0).getSample().getId().longValue());
         assertEquals(1, samples.size());
         context.assertIsSatisfied();
     }
@@ -179,11 +183,29 @@ public class RawDataServiceInternalTest extends AbstractServerTestCase
                     {
                         Sample sample = new Sample();
                         sample.setId(id);
+                        sample.setIdentifier("S" + id);
+                        Experiment experiment = new Experiment();
+                        experiment.setId(id * 10);
+                        sample.setExperiment(experiment);
                         Sample parent = new Sample();
+                        parent.setId(id * 100);
                         sample.setGeneratedFrom(parent);
                         samples.add(sample);
                     }
                     will(returnValue(samples));
+                    
+                    one(boFactory).createDatasetLister(SESSION, "");
+                    will(returnValue(datasetLister));
+                    
+                    LinkedHashSet<TechId> experimentIds = new LinkedHashSet<TechId>();
+                    for (Long id : sampleIDs)
+                    {
+                        experimentIds.add(new TechId(id * 10));
+                    }
+                    one(datasetLister).listByExperimentTechIds(experimentIds);
+                    
+                    one(datasetLister).listParentIds(Collections.<Long>emptySet());
+                    will(returnValue(Collections.<Long, Set<Long>>emptyMap()));
                 }
             });
     }
diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/authorization/validator/RawDataSampleValidatorTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/authorization/validator/RawDataSampleValidatorTest.java
index 847e2a1f130ce2affd10098bced9656419146881..09b4f96dac046c0588d01606ea35885db9c9511b 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/authorization/validator/RawDataSampleValidatorTest.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/authorization/validator/RawDataSampleValidatorTest.java
@@ -33,23 +33,24 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.DatabaseInstanceId
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier;
+import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.dto.MsInjectionSample;
 
 /**
  * @author Franz-Josef Elmer
  */
 public class RawDataSampleValidatorTest extends AssertJUnit
 {
-    private static final Sample NO_PARENT = create("no-parent", null);
+    private static final MsInjectionSample NO_PARENT = create("no-parent", null);
 
-    private static final Sample WITH_INSTANCE_PARENT = create("with-instance-parent", "t:/parent");
+    private static final MsInjectionSample WITH_INSTANCE_PARENT = create("with-instance-parent", "t:/parent");
 
-    private static final Sample WITH_PARENT_IN_G1 = create("with-parent-in-g1", "t:/g1/parent");
+    private static final MsInjectionSample WITH_PARENT_IN_G1 = create("with-parent-in-g1", "t:/g1/parent");
 
-    private static final Sample WITH_PARENT_IN_G2 = create("with-parent-in-g2", "t:/g2/parent");
+    private static final MsInjectionSample WITH_PARENT_IN_G2 = create("with-parent-in-g2", "t:/g2/parent");
 
     private RawDataSampleValidator validator = new RawDataSampleValidator();
 
-    private static Sample create(String sampleCode, String parentSampleIdentifierOrNull)
+    private static MsInjectionSample create(String sampleCode, String parentSampleIdentifierOrNull)
     {
         Sample sample = new Sample();
         sample.setCode(sampleCode);
@@ -78,7 +79,7 @@ public class RawDataSampleValidatorTest extends AssertJUnit
             }
             sample.setGeneratedFrom(parent);
         }
-        return sample;
+        return new MsInjectionSample(sample);
     }
 
     private static DatabaseInstance createDatabaseInstance(String code)