diff --git a/datastore_server/.classpath b/datastore_server/.classpath
index bf405357d5d1ec3de21087bd551ac7077af3bf7b..cba20ea9f8029c2941f1a3ca0795b1b892498a8d 100644
--- a/datastore_server/.classpath
+++ b/datastore_server/.classpath
@@ -1,30 +1,31 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="source/java"/>
-	<classpathentry kind="src" path="sourceTest/java"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/common"/>
-	<classpathentry kind="lib" path="/libraries/log4j/log4j.jar" sourcepath="/libraries/log4j/src.zip"/>
-	<classpathentry kind="lib" path="/libraries/commons-lang/commons-lang.jar" sourcepath="/libraries/commons-lang/src.zip"/>
-	<classpathentry kind="lib" path="/libraries/commons-io/commons-io.jar" sourcepath="/libraries/commons-io/src.zip"/>
-	<classpathentry kind="lib" path="/libraries/testng/testng-jdk15.jar" sourcepath="/libraries/testng/src.zip"/>
-	<classpathentry kind="lib" path="/libraries/mail/mail.jar"/>
-	<classpathentry kind="lib" path="/libraries/jmock/jmock.jar"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/bds"/>
-	<classpathentry kind="lib" path="/libraries/restrictionchecker/restrictions.jar"/>
-	<classpathentry kind="lib" path="/libraries/cglib/cglib-nodep.jar"/>
-	<classpathentry kind="lib" path="/libraries/jmock/hamcrest/hamcrest-core.jar"/>
-	<classpathentry kind="lib" path="/libraries/jmock/hamcrest/hamcrest-library.jar"/>
-	<classpathentry kind="lib" path="/libraries/jmock/objenesis/objenesis-1.0.jar"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/openbis"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/server-common"/>
-	<classpathentry kind="lib" path="/libraries/jetty/jetty.jar" sourcepath="/libraries/jetty/src/jetty.zip"/>
-	<classpathentry kind="lib" path="/libraries/jetty/jetty-util.jar" sourcepath="/libraries/jetty/src/jetty-util.zip"/>
-	<classpathentry kind="lib" path="/libraries/jetty/servlet-api-2.5.jar" sourcepath="/libraries/jetty/src/servlet-api-2.5.zip"/>
-	<classpathentry kind="lib" path="/libraries/spring/spring.jar" sourcepath="/libraries/spring/src.jar"/>
-	<classpathentry kind="lib" path="/libraries/cifex/cifex.jar" sourcepath="/cifex/source/java"/>
-	<classpathentry kind="lib" path="/libraries/cisd-base/cisd-base-test.jar" sourcepath="/libraries/cisd-base/cisd-base-src.zip"/>
-	<classpathentry kind="lib" path="/libraries/cisd-base/cisd-base.jar" sourcepath="/libraries/cisd-base/cisd-base-src.zip"/>
-	<classpathentry kind="lib" path="/libraries/cisd-args4j/cisd-args4j.jar" sourcepath="/libraries/cisd-args4j/cisd-args4j-src.zip"/>
-	<classpathentry kind="output" path="targets/classes"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="source/java"/>
+	<classpathentry kind="src" path="sourceTest/java"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/common"/>
+	<classpathentry kind="lib" path="/libraries/log4j/log4j.jar" sourcepath="/libraries/log4j/src.zip"/>
+	<classpathentry kind="lib" path="/libraries/commons-lang/commons-lang.jar" sourcepath="/libraries/commons-lang/src.zip"/>
+	<classpathentry kind="lib" path="/libraries/commons-io/commons-io.jar" sourcepath="/libraries/commons-io/src.zip"/>
+	<classpathentry kind="lib" path="/libraries/testng/testng-jdk15.jar" sourcepath="/libraries/testng/src.zip"/>
+	<classpathentry kind="lib" path="/libraries/mail/mail.jar"/>
+	<classpathentry kind="lib" path="/libraries/jmock/jmock.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/bds"/>
+	<classpathentry kind="lib" path="/libraries/restrictionchecker/restrictions.jar"/>
+	<classpathentry kind="lib" path="/libraries/cglib/cglib-nodep.jar"/>
+	<classpathentry kind="lib" path="/libraries/jmock/hamcrest/hamcrest-core.jar"/>
+	<classpathentry kind="lib" path="/libraries/jmock/hamcrest/hamcrest-library.jar"/>
+	<classpathentry kind="lib" path="/libraries/jmock/objenesis/objenesis-1.0.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/openbis"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/server-common"/>
+	<classpathentry kind="lib" path="/libraries/jetty/jetty.jar" sourcepath="/libraries/jetty/src/jetty.zip"/>
+	<classpathentry kind="lib" path="/libraries/jetty/jetty-util.jar" sourcepath="/libraries/jetty/src/jetty-util.zip"/>
+	<classpathentry kind="lib" path="/libraries/jetty/servlet-api-2.5.jar" sourcepath="/libraries/jetty/src/servlet-api-2.5.zip"/>
+	<classpathentry kind="lib" path="/libraries/spring/spring.jar" sourcepath="/libraries/spring/src.jar"/>
+	<classpathentry kind="lib" path="/libraries/cifex/cifex.jar" sourcepath="/cifex/source/java"/>
+	<classpathentry kind="lib" path="/libraries/cisd-base/cisd-base-test.jar" sourcepath="/libraries/cisd-base/cisd-base-src.zip"/>
+	<classpathentry kind="lib" path="/libraries/cisd-base/cisd-base.jar" sourcepath="/libraries/cisd-base/cisd-base-src.zip"/>
+	<classpathentry kind="lib" path="/libraries/cisd-args4j/cisd-args4j.jar" sourcepath="/libraries/cisd-args4j/cisd-args4j-src.zip"/>
+	<classpathentry kind="lib" path="/libraries/fast-md5/fast-md5.jar" sourcepath="/libraries/fast-md5/src.zip"/>
+	<classpathentry kind="output" path="targets/classes"/>
+</classpath>
diff --git a/datastore_server/dist/etc/service.properties b/datastore_server/dist/etc/service.properties
index 5ced80e4d08bf3d8cbcea7b036d02eb78b0aea26..464659093acc42a37b27af7fddeb076746fb5321 100644
--- a/datastore_server/dist/etc/service.properties
+++ b/datastore_server/dist/etc/service.properties
@@ -81,8 +81,6 @@ inputs=main-thread
 # ---------------------------------------------------------------------------
 # 'main-thread' thread configuration
 # ---------------------------------------------------------------------------
-# The group 
-main-thread.group-code = TEST
 # The directory to watch for incoming data.
 main-thread.incoming-dir = data/incoming
 
@@ -102,6 +100,8 @@ main-thread.incoming-data-completeness-condition = marker-file
 main-thread.data-set-info-extractor = ch.systemsx.cisd.etlserver.DefaultDataSetInfoExtractor
 # Separator used to extract the barcode in the data set file name
 main-thread.data-set-info-extractor.entity-separator = ${data-set-file-name-entity-separator}
+# The group 
+main-thread.data-set-info-extractor.group-code = TEST
 # Location of file containing data set properties 
 #main-thread.data-set-info-extractor.data-set-properties-file-name = data-set.properties
 
diff --git a/datastore_server/etc/service.properties b/datastore_server/etc/service.properties
index 79d42caab1455920aeee8f6b5b5002ee06eab634..29b33f31897f60c0219088ae02074dd8afdb4671 100644
--- a/datastore_server/etc/service.properties
+++ b/datastore_server/etc/service.properties
@@ -87,10 +87,6 @@ main-thread.incoming-dir = targets/incoming
 # The default value is 'marker-file'.
 main-thread.incoming-data-completeness-condition = marker-file
 
-# The group the samples extracted by this thread belong to. If commented out or empty, then samples
-# are considered associated to a database instance (not group private). 
-# main-thread.group-code = CISD
-
 # The store format that should be applied in the incoming directory.
 main-thread.incoming-dir.format = 
 
@@ -100,6 +96,7 @@ main-thread.incoming-dir.format =
 main-thread.data-set-info-extractor = ch.systemsx.cisd.etlserver.DefaultDataSetInfoExtractor
 # Separator used to extract the barcode in the data set file name
 main-thread.data-set-info-extractor.entity-separator = ${data-set-file-name-entity-separator}
+#main-thread.data-set-info-extractor.group-code = CISD
 # Location of file containing data set properties 
 #main-thread.data-set-info-extractor.data-set-properties-file-name = data-set.properties
 
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/AbstractDataSetInfoExtractor.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/AbstractDataSetInfoExtractor.java
index d6fcec471560a56400780a3396cc0add6c3b2d27..9975d63c0f3672b63600efc5b74de3186c6b9676 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/AbstractDataSetInfoExtractor.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/AbstractDataSetInfoExtractor.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.etlserver;
 
 import java.util.Properties;
 
+import ch.rinn.restrictions.Private;
 import ch.systemsx.cisd.common.utilities.ExtendedProperties;
 import ch.systemsx.cisd.common.utilities.PropertyUtils;
 
@@ -30,12 +31,14 @@ public abstract class AbstractDataSetInfoExtractor implements IDataSetInfoExtrac
 {
 
     /** The name of the property to get the experiment separator from. */
-    protected static final String ENTITY_SEPARATOR_PROPERTY_NAME = "entity-separator";
+    @Private static final String ENTITY_SEPARATOR_PROPERTY_NAME = "entity-separator";
 
     /** The default entity separator. */
     protected static final char DEFAULT_ENTITY_SEPARATOR = '.';
 
-    protected static final String STRIP_EXTENSION = "strip-file-extension";
+    @Private static final String STRIP_EXTENSION = "strip-file-extension";
+    
+    @Private static final String GROUP_CODE = "group-code";
 
     protected final Properties properties;
 
@@ -43,7 +46,7 @@ public abstract class AbstractDataSetInfoExtractor implements IDataSetInfoExtrac
     protected final char entitySeparator;
 
     protected final boolean stripExtension;
-
+    
     protected AbstractDataSetInfoExtractor(final Properties globalProperties)
     {
         assert globalProperties != null : "Global properties can not be null.";
@@ -53,5 +56,10 @@ public abstract class AbstractDataSetInfoExtractor implements IDataSetInfoExtrac
                 PropertyUtils.getChar(properties, ENTITY_SEPARATOR_PROPERTY_NAME,
                         DEFAULT_ENTITY_SEPARATOR);
     }
+    
+    protected String getGroupCode()
+    {
+        return properties.getProperty(GROUP_CODE);
+    }
 
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/DefaultDataSetInfoExtractor.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/DefaultDataSetInfoExtractor.java
index 7a4baaa62f1e214e8db3f9d421323760c9c17119..622d75414c0d810ec572009a8e63a4053e09f9e9 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/DefaultDataSetInfoExtractor.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/DefaultDataSetInfoExtractor.java
@@ -57,11 +57,22 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.NewProperty;
  * <th>Description</th>
  * </tr>
  * <tr>
+ * <td><code>strip-file-extension</code></td>
+ * <td><code>false</code></td>
+ * <td>If <code>true</code> the file extension will be removed before extracting informations from
+ * the file name.</td>
+ * </tr>
+ * <tr>
  * <td><code>entity-separator</code></td>
  * <td><code>.</code></td>
  * <td>Character which separates entities in the file name. Whitespace characters are not allowed.</td>
  * </tr>
  * <tr>
+ * <td><code>group-code</code></td>
+ * <td><code>null</code></td>
+ * <td>Group code of the sample. If unspecified a shared sample is assumed.</td>
+ * </tr>
+ * <tr>
  * <td><code>index-of-sample-code</code></td>
  * <td><code>-1</code></td>
  * <td>Index of the entity which is interpreted as the sample code.</td>
@@ -226,6 +237,7 @@ public class DefaultDataSetInfoExtractor extends AbstractDataSetInfoExtractor
         dataSetInformation.setProductionDate(tryGetDataProductionDate(entitiesProvider));
         dataSetInformation.setDataSetProperties(extractDataSetProperties(incomingDataSetPath,
                 dataSetPropertiesFileName));
+        dataSetInformation.setGroupCode(getGroupCode());
         return dataSetInformation;
     }
 
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java
index 822547f4c8db2d8ebda6cf5289d6b27343385ef2..d087e14741d4cb4e45b2131b76806a50099e77c4 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java
@@ -350,9 +350,9 @@ public final class ETLDaemon
             throw new ConfigurationFailureException("Missing service property '" + DSS_CODE_KEY + "'");
         }
         final TransferredDataSetHandler pathHandler =
-                new TransferredDataSetHandler(threadParameters.tryGetGroupCode(), dssCode, plugin,
-                        authorizedLimsService, mailProperties, highwaterMarkWatcher,
-                        notifySuccessfulRegistration, threadParameters.useIsFinishedMarkerFile());
+                new TransferredDataSetHandler(dssCode, plugin, authorizedLimsService,
+                        mailProperties, highwaterMarkWatcher, notifySuccessfulRegistration,
+                        threadParameters.useIsFinishedMarkerFile());
         pathHandler.setProcessorFactories(processorFactories);
         final HighwaterMarkDirectoryScanningHandler directoryScanningHandler =
                 createDirectoryScanningHandler(pathHandler, highwaterMarkWatcher,
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandler.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandler.java
index bf62cdf2cdfddfed978bc099ebe3b6b9c950d25d..12c999824ffb7db116d92bc2b4ea50285bbea42f 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandler.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandler.java
@@ -117,8 +117,6 @@ public final class TransferredDataSetHandler implements IPathHandler, ISelfTesta
 
     private final IMailClient mailClient;
 
-    private final String groupCode;
-
     private final String dssCode;
     
     private final boolean notifySuccessfulRegistration;
@@ -137,21 +135,21 @@ public final class TransferredDataSetHandler implements IPathHandler, ISelfTesta
      *            appears. Otherwise processing starts if the file/directory is not modified for a
      *            certain amount of time (so called "quiet period").
      */
-    public TransferredDataSetHandler(final String groupCode, String dssCode, final IETLServerPlugin plugin,
-            final IEncapsulatedOpenBISService limsService, final Properties mailProperties,
-            final HighwaterMarkWatcher highwaterMarkWatcher,
-            final boolean notifySuccessfulRegistration, boolean useIsFinishedMarkerFile)
+    public TransferredDataSetHandler(String dssCode, final IETLServerPlugin plugin,
+            final IEncapsulatedOpenBISService limsService,
+            final Properties mailProperties, final HighwaterMarkWatcher highwaterMarkWatcher,
+            final boolean notifySuccessfulRegistration,
+            boolean useIsFinishedMarkerFile)
 
     {
-        this(groupCode, dssCode, plugin.getStorageProcessor(), plugin, limsService, new MailClient(
+        this(dssCode, plugin.getStorageProcessor(), plugin, limsService, new MailClient(
                 mailProperties), notifySuccessfulRegistration, useIsFinishedMarkerFile);
     }
 
-    TransferredDataSetHandler(final String groupCode, String dssCode, 
-            final IStoreRootDirectoryHolder storeRootDirectoryHolder,
-            final IETLServerPlugin plugin, final IEncapsulatedOpenBISService limsService,
-            final IMailClient mailClient, final boolean notifySuccessfulRegistration,
-            boolean useIsFinishedMarkerFile)
+    TransferredDataSetHandler(String dssCode, final IStoreRootDirectoryHolder storeRootDirectoryHolder, 
+            final IETLServerPlugin plugin,
+            final IEncapsulatedOpenBISService limsService, final IMailClient mailClient,
+            final boolean notifySuccessfulRegistration, boolean useIsFinishedMarkerFile)
 
     {
         assert dssCode != null : "Unspecified data store code";
@@ -161,7 +159,6 @@ public final class TransferredDataSetHandler implements IPathHandler, ISelfTesta
         assert mailClient != null : "IMailClient implementation can not be null.";
 
         this.dssCode = dssCode;
-        this.groupCode = groupCode;
         this.storeRootDirectoryHolder = storeRootDirectoryHolder;
         this.dataSetInfoExtractor = plugin.getDataSetInfoExtractor();
         this.typeExtractor = plugin.getTypeExtractor();
@@ -695,10 +692,6 @@ public final class TransferredDataSetHandler implements IPathHandler, ISelfTesta
                 }
                 dataSetInfo.setInstanceCode(getHomeDatabaseInstance().getCode());
                 dataSetInfo.setInstanceUUID(getHomeDatabaseInstance().getUuid());
-                if (dataSetInfo.getGroupCode() == null)
-                {
-                    dataSetInfo.setGroupCode(groupCode);
-                }
                 if (operationLog.isDebugEnabled())
                 {
                     operationLog.debug(String.format(
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java
index 9eb8cebcf8ebb106d4002d638cc49835b8fb5b9c..7e0c6dad395e1fd12363eb53d29e586aaba14cb8 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java
@@ -271,8 +271,8 @@ public final class TransferredDataSetHandlerTest extends AbstractFileSystemTestC
         authorizedLimsService.setUsername("u");
         authorizedLimsService.setPassword("p");
         handler =
-                new TransferredDataSetHandler(null, "dss", storageProcessor, plugin,
-                        authorizedLimsService, mailClient, true, true);
+                new TransferredDataSetHandler("dss", storageProcessor, plugin, authorizedLimsService,
+                        mailClient, true, true);
 
         handler.setProcessorFactories(map);
         dataSetInformation = new DataSetInformation();