diff --git a/rtd_phosphonetx/etc/service.properties b/rtd_phosphonetx/etc/service.properties
index eb117179b5e342c12edf98be8c9871e20f24995e..1a95363c6578110c3574057c7de101ace7f0ccc8 100644
--- a/rtd_phosphonetx/etc/service.properties
+++ b/rtd_phosphonetx/etc/service.properties
@@ -151,7 +151,7 @@ ms-injection.incoming-dir = targets/playground/data/incoming-ms
 ms-injection.incoming-data-completeness-condition = auto-detection
 ms-injection.data-set-info-extractor = ch.systemsx.cisd.openbis.etlserver.phosphonetx.DataSetInfoExtractorForMSInjection
 ms-injection.storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-ms-injection.type-extractor = ch.systemsx.cisd.etlserver.SimpleTypeExtractor
+ms-injection.type-extractor = ch.systemsx.cisd.openbis.etlserver.phosphonetx.TypeExtractorForMSInjection
 
 # ---------------------------------------------------------------------------
 # 'prot-result' thread configuration
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/DataSetInfoExtractorForMSInjection.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/DataSetInfoExtractorForMSInjection.java
index 1214c5313ad3d65975a5e5abd1e6e422d7f913d8..45fa5588c6c0923aa6840464feb602b093dabf6d 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/DataSetInfoExtractorForMSInjection.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/DataSetInfoExtractorForMSInjection.java
@@ -17,6 +17,9 @@
 package ch.systemsx.cisd.openbis.etlserver.phosphonetx;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import java.util.Properties;
 
 import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
@@ -25,10 +28,14 @@ import ch.systemsx.cisd.common.utilities.PropertyUtils;
 import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
 import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider;
 import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
 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.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
+import ch.systemsx.cisd.openbis.generic.shared.dto.NewProperty;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier;
 
 /**
@@ -40,84 +47,119 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifi
  */
 public class DataSetInfoExtractorForMSInjection extends AbstractDataSetInfoExtractorWithService
 {
-    static final String MS_INJECTION_PROPERTIES_FILE_KEY = "ms-injection-properties-file";
-    static final String DEFAULT_MS_INJECTION_PROPERTIES_FILE = "ms-injection.properties";
+    static final String MS_INJECTION_PROPERTIES_FILE = "ms-injection.properties";
+    static final String DATA_SET_PROPERTIES_FILE = "data-set.properties";
 
     static final String PROJECT_CODE_KEY = "PROJECT_CODE";
     static final String EXPERIMENT_CODE_KEY = "EXPERIMENT_CODE";
     static final String SAMPLE_CODE_KEY = "SAMPLE_CODE";
     static final String USER_KEY = "USER";
     
+    static final String DATA_SET_TYPE_KEY = "DATA_SET_TYPE";
+    static final String FILE_TYPE_KEY = "FILE_TYPE";
+    static final String PARENT_TYPE_KEY = "PARENT_TYPE";
+    
     static final String EXPERIMENT_TYPE_CODE = "MS_INJECT";
 
     static final String SAMPLE_TYPE_CODE = "MS_INJECTION";
 
 
-    private final String msInjectionPropertiesFileName;
-
     public DataSetInfoExtractorForMSInjection(Properties properties)
     {
-        this(properties.getProperty(MS_INJECTION_PROPERTIES_FILE_KEY,
-                DEFAULT_MS_INJECTION_PROPERTIES_FILE), ServiceProvider.getOpenBISService());
+        this(ServiceProvider.getOpenBISService());
     }
 
-    DataSetInfoExtractorForMSInjection(String msInjectionPropertiesFileName,
-            IEncapsulatedOpenBISService service)
+    DataSetInfoExtractorForMSInjection(IEncapsulatedOpenBISService service)
     {
         super(service);
-        this.msInjectionPropertiesFileName = msInjectionPropertiesFileName;
     }
 
     public DataSetInformation getDataSetInformation(File incomingDataSetPath,
             IEncapsulatedOpenBISService openbisService) throws UserFailureException,
             EnvironmentFailureException
     {
-        Properties properties =
-                loadMSInjectionProperties(incomingDataSetPath);
+        Properties sampleProperties =
+                Util.loadPropertiesFile(incomingDataSetPath, MS_INJECTION_PROPERTIES_FILE);
         DataSetInformation info = new DataSetInformation();
         info.setSpaceCode(Constants.MS_DATA_SPACE);
-        info.setSampleCode(PropertyUtils.getMandatoryProperty(properties, SAMPLE_CODE_KEY));
+        info.setSampleCode(PropertyUtils.getMandatoryProperty(sampleProperties, SAMPLE_CODE_KEY));
         NewSample sample = new NewSample();
         SampleType sampleType = service.getSampleType(SAMPLE_TYPE_CODE);
         sample.setSampleType(sampleType);
-        sample.setExperimentIdentifier(getOrCreateExperiment(properties));
+        ExperimentIdentifier experimentIdentifier = getExperimentIdentifier(sampleProperties);
+        long experimentID = getOrCreateExperiment(experimentIdentifier);
+        sample.setExperimentIdentifier(experimentIdentifier.toString());
         sample.setIdentifier(info.getSampleIdentifier().toString());
-        sample.setProperties(Util.getAndCheckProperties(properties, sampleType));
-        service.registerSample(sample, properties.getProperty(USER_KEY));
+        sample.setProperties(Util.getAndCheckProperties(sampleProperties, sampleType));
+        service.registerSample(sample, sampleProperties.getProperty(USER_KEY));
+        
+        Properties dataSetProperties =
+                Util.loadPropertiesFile(incomingDataSetPath, DATA_SET_PROPERTIES_FILE);
+        String dataSetTypeCode = PropertyUtils.getMandatoryProperty(dataSetProperties, DATA_SET_TYPE_KEY);
+        String parentTypeOrNull = dataSetProperties.getProperty(PARENT_TYPE_KEY);
+        dataSetProperties.remove(DATA_SET_TYPE_KEY);
+        dataSetProperties.remove(FILE_TYPE_KEY);
+        dataSetProperties.remove(PARENT_TYPE_KEY);
+        setDataSetPropertiesFor(info, dataSetProperties, dataSetTypeCode);
+        if (parentTypeOrNull != null)
+        {
+            List<ExternalData> dataSets = service.listDataSetsByExperimentID(experimentID);
+            ExternalData youngestDataSet = null;
+            for (ExternalData dataSet : dataSets)
+            {
+                if (dataSet.getDataSetType().getCode().equals(parentTypeOrNull))
+                {
+                    if (youngestDataSet == null || timeStamp(youngestDataSet) < timeStamp(dataSet))
+                    {
+                        youngestDataSet = dataSet;
+                    }
+                }
+            }
+            if (youngestDataSet != null)
+            {
+                info.setParentDataSetCodes(Arrays.asList(youngestDataSet.getCode()));
+            }
+        }
         return info;
     }
 
-    private String getOrCreateExperiment(Properties msInjectionProperties)
+    private long timeStamp(ExternalData dataSet)
+    {
+        return dataSet.getRegistrationDate().getTime();
+    }
+
+    private void setDataSetPropertiesFor(DataSetInformation info, Properties dataSetProperties,
+            String dataSetTypeCode)
+    {
+        DataSetType dataSetType = service.getDataSetType(dataSetTypeCode).getDataSetType();
+        IEntityProperty[] props = Util.getAndCheckProperties(dataSetProperties, dataSetType);
+        List<NewProperty> properties = new ArrayList<NewProperty>();
+        for (IEntityProperty p : props)
+        {
+            properties.add(new NewProperty(p.getPropertyType().getCode(), p.tryGetAsString()));
+        }
+        info.setDataSetProperties(properties);
+    }
+
+    private long getOrCreateExperiment(ExperimentIdentifier identifier)
     {
-        String projectCode =
-                PropertyUtils.getMandatoryProperty(msInjectionProperties, PROJECT_CODE_KEY);
-        String experimentCode =
-                PropertyUtils.getMandatoryProperty(msInjectionProperties, EXPERIMENT_CODE_KEY);
-        ExperimentIdentifier identifier =
-                new ExperimentIdentifier(null, Constants.MS_DATA_SPACE, projectCode, experimentCode);
         Experiment experiment = service.tryToGetExperiment(identifier);
         if (experiment == null)
         {
-            service.registerExperiment(new NewExperiment(identifier.toString(),
+            return service.registerExperiment(new NewExperiment(identifier.toString(),
                     EXPERIMENT_TYPE_CODE));
         }
-        return identifier.toString();
+        return experiment.getId();
     }
 
-    private Properties loadMSInjectionProperties(File incomingDataSetDirectory)
+    private ExperimentIdentifier getExperimentIdentifier(Properties msInjectionProperties)
     {
-        File msInjectionPropertiesFile =
-                new File(incomingDataSetDirectory, msInjectionPropertiesFileName);
-        if (msInjectionPropertiesFile.exists() == false)
-        {
-            throw new UserFailureException("Missing MS injection properties file '"
-                    + msInjectionPropertiesFileName + "'.");
-        }
-        if (msInjectionPropertiesFile.isFile() == false)
-        {
-            throw new UserFailureException("Properties file '" + msInjectionPropertiesFileName
-                    + "' is a folder.");
-        }
-        return PropertyUtils.loadProperties(msInjectionPropertiesFile);
+        String projectCode =
+                PropertyUtils.getMandatoryProperty(msInjectionProperties, PROJECT_CODE_KEY);
+        String experimentCode =
+                PropertyUtils.getMandatoryProperty(msInjectionProperties, EXPERIMENT_CODE_KEY);
+        ExperimentIdentifier identifier =
+                new ExperimentIdentifier(null, Constants.MS_DATA_SPACE, projectCode, experimentCode);
+        return identifier;
     }
 }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/TypeExtractorForMSInjection.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/TypeExtractorForMSInjection.java
new file mode 100644
index 0000000000000000000000000000000000000000..519ad9d7675ec9770a6439ba95b9597c8b75b25b
--- /dev/null
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/TypeExtractorForMSInjection.java
@@ -0,0 +1,73 @@
+/*
+ * 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.etlserver.phosphonetx;
+
+import static ch.systemsx.cisd.openbis.etlserver.phosphonetx.DataSetInfoExtractorForMSInjection.DATA_SET_PROPERTIES_FILE;
+import static ch.systemsx.cisd.openbis.etlserver.phosphonetx.DataSetInfoExtractorForMSInjection.DATA_SET_TYPE_KEY;
+import static ch.systemsx.cisd.openbis.etlserver.phosphonetx.DataSetInfoExtractorForMSInjection.FILE_TYPE_KEY;
+
+import java.io.File;
+import java.util.Properties;
+
+import ch.systemsx.cisd.common.utilities.PropertyUtils;
+import ch.systemsx.cisd.etlserver.ITypeExtractor;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LocatorType;
+
+/**
+ * 
+ *
+ * @author Franz-Josef Elmer
+ */
+public class TypeExtractorForMSInjection implements ITypeExtractor
+{
+    private static final LocatorType LOCATOR_TYPE = new LocatorType(LocatorType.DEFAULT_LOCATOR_TYPE_CODE);
+
+    public DataSetType getDataSetType(File incomingDataSetPath)
+    {
+        Properties properties = loadProperties(incomingDataSetPath);
+        return new DataSetType(PropertyUtils.getMandatoryProperty(properties, DATA_SET_TYPE_KEY));
+    }
+
+    public FileFormatType getFileFormatType(File incomingDataSetPath)
+    {
+        Properties properties = loadProperties(incomingDataSetPath);
+        return new FileFormatType(PropertyUtils.getMandatoryProperty(properties, FILE_TYPE_KEY));
+    }
+
+    public LocatorType getLocatorType(File incomingDataSetPath)
+    {
+        return LOCATOR_TYPE;
+    }
+
+    public String getProcessorType(File incomingDataSetPath)
+    {
+        return null;
+    }
+
+    public boolean isMeasuredData(File incomingDataSetPath)
+    {
+        return true;
+    }
+
+    private Properties loadProperties(File incomingDataSetPath)
+    {
+        return Util.loadPropertiesFile(incomingDataSetPath, DATA_SET_PROPERTIES_FILE);
+    }
+    
+}
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/Util.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/Util.java
index 0b55c3c396492773ee1e1319e8b323d3d562b857..55390e584c1d425a64e5520d7d15c8912179e03b 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/Util.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/Util.java
@@ -16,11 +16,13 @@
 
 package ch.systemsx.cisd.openbis.etlserver.phosphonetx;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.common.utilities.PropertyUtils;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTypePropertyType;
@@ -76,4 +78,19 @@ class Util
         }
         return sampleProperties.toArray(new IEntityProperty[sampleProperties.size()]);
     }
+
+    static Properties loadPropertiesFile(File incomingDataSetDirectory, String propertiesFileName)
+    {
+        File propertiesFile = new File(incomingDataSetDirectory, propertiesFileName);
+        if (propertiesFile.exists() == false)
+        {
+            throw new UserFailureException("Missing properties file '" + propertiesFileName + "'.");
+        }
+        if (propertiesFile.isFile() == false)
+        {
+            throw new UserFailureException("Properties file '" + propertiesFileName
+                    + "' is a folder.");
+        }
+        return PropertyUtils.loadProperties(propertiesFile);
+    }
 }
diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/DataSetInfoExtractorForMSInjectionTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/DataSetInfoExtractorForMSInjectionTest.java
index 3162ac66e2684ecdeeb56ad9759c32288fc6070e..e371f8055be1cc11b33fb0fac1dc8daaf7e9cfd0 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/DataSetInfoExtractorForMSInjectionTest.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/DataSetInfoExtractorForMSInjectionTest.java
@@ -16,9 +16,11 @@
 
 package ch.systemsx.cisd.openbis.etlserver.phosphonetx;
 
-import static ch.systemsx.cisd.openbis.etlserver.phosphonetx.DataSetInfoExtractorForMSInjection.DEFAULT_MS_INJECTION_PROPERTIES_FILE;
+import static ch.systemsx.cisd.openbis.etlserver.phosphonetx.DataSetInfoExtractorForMSInjection.DATA_SET_PROPERTIES_FILE;
+import static ch.systemsx.cisd.openbis.etlserver.phosphonetx.DataSetInfoExtractorForMSInjection.DATA_SET_TYPE_KEY;
 import static ch.systemsx.cisd.openbis.etlserver.phosphonetx.DataSetInfoExtractorForMSInjection.EXPERIMENT_CODE_KEY;
 import static ch.systemsx.cisd.openbis.etlserver.phosphonetx.DataSetInfoExtractorForMSInjection.EXPERIMENT_TYPE_CODE;
+import static ch.systemsx.cisd.openbis.etlserver.phosphonetx.DataSetInfoExtractorForMSInjection.MS_INJECTION_PROPERTIES_FILE;
 import static ch.systemsx.cisd.openbis.etlserver.phosphonetx.DataSetInfoExtractorForMSInjection.PROJECT_CODE_KEY;
 import static ch.systemsx.cisd.openbis.etlserver.phosphonetx.DataSetInfoExtractorForMSInjection.SAMPLE_CODE_KEY;
 import static ch.systemsx.cisd.openbis.etlserver.phosphonetx.DataSetInfoExtractorForMSInjection.SAMPLE_TYPE_CODE;
@@ -29,6 +31,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 
@@ -48,6 +51,9 @@ import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.etlserver.IDataSetInfoExtractor;
 import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
 import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetTypePropertyType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetTypeWithVocabularyTerms;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment;
@@ -55,6 +61,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleTypePropertyType;
+import ch.systemsx.cisd.openbis.generic.shared.dto.NewProperty;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.DatabaseInstanceIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier;
 
@@ -75,6 +82,7 @@ public class DataSetInfoExtractorForMSInjectionTest extends AbstractFileSystemTe
             DatabaseInstanceIdentifier.Constants.IDENTIFIER_SEPARATOR + Constants.MS_DATA_SPACE
                     + DatabaseInstanceIdentifier.Constants.IDENTIFIER_SEPARATOR + PROJECT_CODE
                     + DatabaseInstanceIdentifier.Constants.IDENTIFIER_SEPARATOR + EXPERIMENT_CODE;
+    private static final long EXPERIMENT_ID = 42;
     
     private Mockery context;
     private IEncapsulatedOpenBISService service;
@@ -87,8 +95,7 @@ public class DataSetInfoExtractorForMSInjectionTest extends AbstractFileSystemTe
         context = new Mockery();
         service = context.mock(IEncapsulatedOpenBISService.class);
         extractor =
-                new DataSetInfoExtractorForMSInjection(DEFAULT_MS_INJECTION_PROPERTIES_FILE,
-                        service);
+                new DataSetInfoExtractorForMSInjection(service);
         dataSet = new File(workingDirectory, "data-set");
         dataSet.mkdirs();
     }
@@ -110,8 +117,8 @@ public class DataSetInfoExtractorForMSInjectionTest extends AbstractFileSystemTe
             fail("UserFailureException expected");
         } catch (UserFailureException ex)
         {
-            assertEquals("Missing MS injection properties file '"
-                    + DEFAULT_MS_INJECTION_PROPERTIES_FILE + "'.", ex.getMessage());
+            assertEquals("Missing properties file '" + MS_INJECTION_PROPERTIES_FILE + "'.", ex
+                    .getMessage());
         }
         
         context.assertIsSatisfied();
@@ -120,14 +127,14 @@ public class DataSetInfoExtractorForMSInjectionTest extends AbstractFileSystemTe
     @Test
     public void testPropertiesFileIsAFolder()
     {
-        new File(dataSet, DEFAULT_MS_INJECTION_PROPERTIES_FILE).mkdir();
+        new File(dataSet, MS_INJECTION_PROPERTIES_FILE).mkdir();
         try
         {
             extractor.getDataSetInformation(dataSet, service);
             fail("UserFailureException expected");
         } catch (UserFailureException ex)
         {
-            assertEquals("Properties file '" + DEFAULT_MS_INJECTION_PROPERTIES_FILE
+            assertEquals("Properties file '" + MS_INJECTION_PROPERTIES_FILE
                     + "' is a folder.", ex.getMessage());
         }
         
@@ -138,7 +145,7 @@ public class DataSetInfoExtractorForMSInjectionTest extends AbstractFileSystemTe
     public void testMissingSampleCode()
     {
         Properties properties = new Properties();
-        save(properties, DEFAULT_MS_INJECTION_PROPERTIES_FILE);
+        save(properties, MS_INJECTION_PROPERTIES_FILE);
         
         try
         {
@@ -159,7 +166,7 @@ public class DataSetInfoExtractorForMSInjectionTest extends AbstractFileSystemTe
         Properties properties = new Properties();
         
         properties.setProperty(SAMPLE_CODE_KEY, SAMPLE_CODE);
-        save(properties, DEFAULT_MS_INJECTION_PROPERTIES_FILE);
+        save(properties, MS_INJECTION_PROPERTIES_FILE);
         prepareGetSampleType();
         
         try
@@ -181,7 +188,7 @@ public class DataSetInfoExtractorForMSInjectionTest extends AbstractFileSystemTe
         Properties properties = new Properties();
         properties.setProperty(SAMPLE_CODE_KEY, SAMPLE_CODE);
         properties.setProperty(PROJECT_CODE_KEY, PROJECT_CODE);
-        save(properties, DEFAULT_MS_INJECTION_PROPERTIES_FILE);
+        save(properties, MS_INJECTION_PROPERTIES_FILE);
         prepareGetSampleType();
         
         try
@@ -197,64 +204,93 @@ public class DataSetInfoExtractorForMSInjectionTest extends AbstractFileSystemTe
         context.assertIsSatisfied();
     }
     
+    @Test
+    public void testMissingDataSetPropertiesFile()
+    {
+        Properties sampleProperties = new Properties();
+        sampleProperties.setProperty(SAMPLE_CODE_KEY, SAMPLE_CODE);
+        sampleProperties.setProperty(PROJECT_CODE_KEY, PROJECT_CODE);
+        sampleProperties.setProperty(EXPERIMENT_CODE_KEY, EXPERIMENT_CODE);
+        sampleProperties.setProperty(USER_KEY, "user1");
+        save(sampleProperties, MS_INJECTION_PROPERTIES_FILE);
+        SampleTypePropertyType pt = createPropertyType(SAMPLE_CODE_KEY, true);
+        prepareGetExperimentAndGetSampleType(true, pt);
+        prepareRegisterSample();
+        
+        try
+        {
+            extractor.getDataSetInformation(dataSet, service);
+            fail("UserFailureException expected");
+        } catch (UserFailureException ex)
+        {
+            assertEquals("Missing properties file '" + DATA_SET_PROPERTIES_FILE + "'.", ex.getMessage());
+        }
+        
+        context.assertIsSatisfied();
+    }
+    
+    @Test
+    public void testMissingDataSetType()
+    {
+        Properties sampleProperties = new Properties();
+        sampleProperties.setProperty(SAMPLE_CODE_KEY, SAMPLE_CODE);
+        sampleProperties.setProperty(PROJECT_CODE_KEY, PROJECT_CODE);
+        sampleProperties.setProperty(EXPERIMENT_CODE_KEY, EXPERIMENT_CODE);
+        sampleProperties.setProperty(USER_KEY, "user1");
+        save(sampleProperties, MS_INJECTION_PROPERTIES_FILE);
+        Properties dataSetProperties = new Properties();
+        save(dataSetProperties, DATA_SET_PROPERTIES_FILE);
+        SampleTypePropertyType pt = createPropertyType(SAMPLE_CODE_KEY, true);
+        prepareGetExperimentAndGetSampleType(true, pt);
+        prepareRegisterSample();
+        
+        try
+        {
+            extractor.getDataSetInformation(dataSet, service);
+            fail("ConfigurationFailureException expected");
+        } catch (ConfigurationFailureException ex)
+        {
+            assertEquals("Given key '" + DATA_SET_TYPE_KEY + "' not found in properties '[]'", ex
+                    .getMessage());
+        }
+        
+        context.assertIsSatisfied();
+    }
+    
     @Test
     public void test()
     {
-        Properties properties = new Properties();
-        properties.setProperty(PROJECT_CODE_KEY, PROJECT_CODE);
-        properties.setProperty(SAMPLE_CODE_KEY, SAMPLE_CODE);
-        properties.setProperty(EXPERIMENT_CODE_KEY, EXPERIMENT_CODE);
-        properties.setProperty(USER_KEY, "user1");
-        properties.setProperty("TEMPERATURE", "47.11");
-        save(properties, DEFAULT_MS_INJECTION_PROPERTIES_FILE);
+        Properties sampleProperties = new Properties();
+        sampleProperties.setProperty(PROJECT_CODE_KEY, PROJECT_CODE);
+        sampleProperties.setProperty(SAMPLE_CODE_KEY, SAMPLE_CODE);
+        sampleProperties.setProperty(EXPERIMENT_CODE_KEY, EXPERIMENT_CODE);
+        sampleProperties.setProperty(USER_KEY, "user1");
+        sampleProperties.setProperty("TEMPERATURE", "47.11");
+        save(sampleProperties, MS_INJECTION_PROPERTIES_FILE);
+        Properties dataSetProperties = new Properties();
+        dataSetProperties.setProperty(DATA_SET_TYPE_KEY, "MZXML_DATA");
+        dataSetProperties.setProperty("CENTROID", "true");
+        dataSetProperties.setProperty("BLABLA", "blub");
+        save(dataSetProperties, DATA_SET_PROPERTIES_FILE);
         SampleTypePropertyType pt1 = createPropertyType(SAMPLE_CODE_KEY, true);
         SampleTypePropertyType pt2 = createPropertyType("VOLUME", false);
         prepareGetExperimentAndGetSampleType(false, pt1, pt2);
-        context.checking(new Expectations()
-            {
-                {
-                    one(service).registerSample(with(new BaseMatcher<NewSample>()
-                        {
-                            public boolean matches(Object item)
-                            {
-                                if (item instanceof NewSample)
-                                {
-                                    NewSample sample = (NewSample) item;
-                                    assertEquals(SAMPLE_TYPE_CODE, sample.getSampleType().getCode());
-                                    assertEquals(SAMPLE_IDENTIFIER, sample.getIdentifier());
-                                    assertEquals(EXPERIMENT_IDENTIFIER, sample.getExperimentIdentifier());
-                                    IEntityProperty[] sampleProperties = sample.getProperties();
-                                    Map<String, IEntityProperty> map =
-                                            new HashMap<String, IEntityProperty>();
-                                    for (IEntityProperty property : sampleProperties)
-                                    {
-                                        map.put(property.getPropertyType().getCode(), property);
-                                    }
-
-                                    assertEquals(SAMPLE_CODE, map.get(SAMPLE_CODE_KEY).getValue());
-                                    assertEquals(1, map.size());
-                                    return true;
-                                }
-                                return false;
-                            }
-
-                            public void describeTo(Description description)
-                            {
-                                description.appendText(SAMPLE_IDENTIFIER);
-                            }
-                        }), with("user1"));
-                }
-            });
+        prepareRegisterSample();
+        prepareGetDataSetType(createDataSetPropertyType("CENTROID", false));
         
         DataSetInformation info = extractor.getDataSetInformation(dataSet, service);
         
         assertEquals(Constants.MS_DATA_SPACE, info.getSpaceCode());
         assertEquals(SAMPLE_CODE, info.getSampleCode());
         assertEquals(null, info.getExperimentIdentifier());
+        List<NewProperty> dProps = info.getDataSetProperties();
+        assertEquals(1, dProps.size());
+        assertEquals("CENTROID", dProps.get(0).getPropertyCode());
+        assertEquals("true", dProps.get(0).getValue());
         
         context.assertIsSatisfied();
     }
-    
+
     @Test
     public void testMissingMandatoryProperties()
     {
@@ -262,7 +298,7 @@ public class DataSetInfoExtractorForMSInjectionTest extends AbstractFileSystemTe
         properties.setProperty(PROJECT_CODE_KEY, PROJECT_CODE);
         properties.setProperty(SAMPLE_CODE_KEY, SAMPLE_CODE);
         properties.setProperty(EXPERIMENT_CODE_KEY, EXPERIMENT_CODE);
-        save(properties, DEFAULT_MS_INJECTION_PROPERTIES_FILE);
+        save(properties, MS_INJECTION_PROPERTIES_FILE);
         SampleTypePropertyType pt1 = createPropertyType(SAMPLE_CODE_KEY, true);
         SampleTypePropertyType pt2 = createPropertyType("VOLUME", true);
         SampleTypePropertyType pt3 = createPropertyType("TEMPERATURE", true);
@@ -287,12 +323,14 @@ public class DataSetInfoExtractorForMSInjectionTest extends AbstractFileSystemTe
         context.checking(new Expectations()
             {
                 {
-                    ExperimentIdentifier identifier = new ExperimentIdentifier(null, Constants.MS_DATA_SPACE, PROJECT_CODE,
-                            EXPERIMENT_CODE);
-                    one(service).tryToGetExperiment(identifier
-                            );
-                    will(returnValue(experimentExists ? new Experiment() : null));
-                    
+                    ExperimentIdentifier identifier =
+                            new ExperimentIdentifier(null, Constants.MS_DATA_SPACE, PROJECT_CODE,
+                                    EXPERIMENT_CODE);
+                    one(service).tryToGetExperiment(identifier);
+                    Experiment experiment = new Experiment();
+                    experiment.setId(EXPERIMENT_ID);
+                    will(returnValue(experimentExists ? experiment : null));
+
                     if (experimentExists == false)
                     {
                         one(service).registerExperiment(
@@ -302,19 +340,73 @@ public class DataSetInfoExtractorForMSInjectionTest extends AbstractFileSystemTe
             });
         prepareGetSampleType(sampleTypePropertyTypes);
     }
-    
+
     private void prepareGetSampleType(final SampleTypePropertyType... sampleTypePropertyTypes)
     {
         context.checking(new Expectations()
-        {
             {
-                one(service).getSampleType(DataSetInfoExtractorForMSInjection.SAMPLE_TYPE_CODE);
-                SampleType sampleType = new SampleType();
-                sampleType.setCode(DataSetInfoExtractorForMSInjection.SAMPLE_TYPE_CODE);
-                sampleType.setSampleTypePropertyTypes(Arrays.asList(sampleTypePropertyTypes));
-                will(returnValue(sampleType));
-            }
-        });
+                {
+                    one(service).getSampleType(DataSetInfoExtractorForMSInjection.SAMPLE_TYPE_CODE);
+                    SampleType sampleType = new SampleType();
+                    sampleType.setCode(DataSetInfoExtractorForMSInjection.SAMPLE_TYPE_CODE);
+                    sampleType.setSampleTypePropertyTypes(Arrays.asList(sampleTypePropertyTypes));
+                    will(returnValue(sampleType));
+                }
+            });
+    }
+
+    private void prepareGetDataSetType(final DataSetTypePropertyType... types)
+    {
+        context.checking(new Expectations()
+            {
+                {
+                    one(service).getDataSetType("MZXML_DATA");
+                    DataSetTypeWithVocabularyTerms result = new DataSetTypeWithVocabularyTerms();
+                    DataSetType dataSetType = new DataSetType("MZXML_DATA");
+                    dataSetType.setDataSetTypePropertyTypes(Arrays.asList(types));
+                    result.setDataSetType(dataSetType);
+                    will(returnValue(result));
+                }
+            });
+    }
+
+    private void prepareRegisterSample()
+    {
+        context.checking(new Expectations()
+            {
+                {
+                    one(service).registerSample(with(new BaseMatcher<NewSample>()
+                        {
+                            public boolean matches(Object item)
+                            {
+                                if (item instanceof NewSample)
+                                {
+                                    NewSample sample = (NewSample) item;
+                                    assertEquals(SAMPLE_TYPE_CODE, sample.getSampleType().getCode());
+                                    assertEquals(SAMPLE_IDENTIFIER, sample.getIdentifier());
+                                    assertEquals(EXPERIMENT_IDENTIFIER, sample.getExperimentIdentifier());
+                                    IEntityProperty[] properties = sample.getProperties();
+                                    Map<String, IEntityProperty> map =
+                                            new HashMap<String, IEntityProperty>();
+                                    for (IEntityProperty property : properties)
+                                    {
+                                        map.put(property.getPropertyType().getCode(), property);
+                                    }
+
+                                    assertEquals(SAMPLE_CODE, map.get(SAMPLE_CODE_KEY).getValue());
+                                    assertEquals(1, map.size());
+                                    return true;
+                                }
+                                return false;
+                            }
+
+                            public void describeTo(Description description)
+                            {
+                                description.appendText(SAMPLE_IDENTIFIER);
+                            }
+                        }), with("user1"));
+                }
+            });
     }
     
     private void save(Properties properties, String fileName)
@@ -343,4 +435,14 @@ public class DataSetInfoExtractorForMSInjectionTest extends AbstractFileSystemTe
         stpt.setPropertyType(propertyType);
         return stpt;
     }
+    
+    private DataSetTypePropertyType createDataSetPropertyType(String key, boolean mandatory)
+    {
+        DataSetTypePropertyType etpt = new DataSetTypePropertyType();
+        etpt.setMandatory(mandatory);
+        PropertyType propertyType = new PropertyType();
+        propertyType.setCode(key);
+        etpt.setPropertyType(propertyType);
+        return etpt;
+    }
 }
\ No newline at end of file