diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTask.java
index b6db529239805e766b1b93078c868ebc43fa9557..a7f9dc01e05d6f05616de4e9c1ba609b4f003a2a 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTask.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTask.java
@@ -17,6 +17,7 @@
 package ch.systemsx.cisd.etlserver.path;
 
 import java.io.File;
+import java.util.List;
 import java.util.Properties;
 
 import net.lemnik.eodsql.QueryTool;
@@ -28,8 +29,9 @@ import ch.systemsx.cisd.common.io.HierarchicalContentFactory;
 import ch.systemsx.cisd.common.io.IHierarchicalContentFactory;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
-import ch.systemsx.cisd.etlserver.postregistration.AbstractPostRegistrationTask;
+import ch.systemsx.cisd.common.maintenance.IMaintenanceTask;
 import ch.systemsx.cisd.etlserver.postregistration.ICleanupTask;
+import ch.systemsx.cisd.etlserver.postregistration.IPostRegistrationTask;
 import ch.systemsx.cisd.etlserver.postregistration.IPostRegistrationTaskExecutor;
 import ch.systemsx.cisd.etlserver.postregistration.NoCleanupTask;
 import ch.systemsx.cisd.openbis.dss.generic.shared.IDataSetDirectoryProvider;
@@ -38,37 +40,57 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.IShareIdManager;
 import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider;
 import ch.systemsx.cisd.openbis.dss.generic.shared.utils.PathInfoDataSourceProvider;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocation;
+import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO;
 
 /**
- * Post registration task which feeds pathinfo database with all data set paths.
+ * Maintenance and post registration task which feeds pathinfo database with all data set paths.
  *
  * @author Franz-Josef Elmer
  */
-public class PathInfoDatabaseFeedingTask extends AbstractPostRegistrationTask
+public class PathInfoDatabaseFeedingTask implements IMaintenanceTask, IPostRegistrationTask
 {
     private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION,
             PathInfoDatabaseFeedingTask.class);
     
-    private final IDataSetDirectoryProvider directoryProvider;
+    private static IPathsInfoDAO createDAO()
+    {
+        return QueryTool.getQuery(PathInfoDataSourceProvider.getDataSource(), IPathsInfoDAO.class);
+    }
+    
+    private static IDataSetDirectoryProvider getDirectoryProvider()
+    {
+        return ServiceProvider.getDataStoreService().getDataSetDirectoryProvider();
+    }
+    
+    private static HierarchicalContentFactory createContentFactory()
+    {
+        return new HierarchicalContentFactory();
+    }
+    
+    private IEncapsulatedOpenBISService service;
+    
+    private IDataSetDirectoryProvider directoryProvider;
 
-    private final IPathsInfoDAO dao;
+    private IPathsInfoDAO dao;
 
-    private final IHierarchicalContentFactory hierarchicalContentFactory;
+    private IHierarchicalContentFactory hierarchicalContentFactory;
+
+    public PathInfoDatabaseFeedingTask()
+    {
+    }
 
     public PathInfoDatabaseFeedingTask(Properties properties, IEncapsulatedOpenBISService service)
     {
-        this(properties, service, ServiceProvider.getDataStoreService()
-                .getDataSetDirectoryProvider(), QueryTool.getQuery(
-                PathInfoDataSourceProvider.getDataSource(), IPathsInfoDAO.class),
-                new HierarchicalContentFactory());
+        this(service, getDirectoryProvider(), createDAO(), createContentFactory());
     }
-    
+
     @Private
-    PathInfoDatabaseFeedingTask(Properties properties, IEncapsulatedOpenBISService service,
+    PathInfoDatabaseFeedingTask(IEncapsulatedOpenBISService service,
             IDataSetDirectoryProvider directoryProvider, IPathsInfoDAO dao,
             IHierarchicalContentFactory hierarchicalContentFactory)
     {
-        super(properties, service);
+        this.service = service;
         this.directoryProvider = directoryProvider;
         this.dao = dao;
         this.hierarchicalContentFactory = hierarchicalContentFactory;
@@ -78,69 +100,83 @@ public class PathInfoDatabaseFeedingTask extends AbstractPostRegistrationTask
     {
         return false;
     }
+    
 
-    public IPostRegistrationTaskExecutor createExecutor(String dataSetCode)
+    public void setUp(String pluginName, Properties properties)
     {
-        return new Executor(dataSetCode);
+        service = ServiceProvider.getOpenBISService();
+        directoryProvider = getDirectoryProvider();
+        dao = createDAO();
+        hierarchicalContentFactory = createContentFactory();
     }
-    
-    private final class Executor implements IPostRegistrationTaskExecutor
-    {
-        private final String dataSetCode;
 
-        private Executor(String dataSetCode)
+    public void execute()
+    {
+        List<SimpleDataSetInformationDTO> dataSets = service.listDataSets();
+        for (SimpleDataSetInformationDTO dataSet : dataSets)
         {
-            this.dataSetCode = dataSetCode;
+            feedPathInfoDatabase(dataSet);
         }
+    }
+
+    public IPostRegistrationTaskExecutor createExecutor(final String dataSetCode)
+    {
+        return new IPostRegistrationTaskExecutor()
+            {
+                public ICleanupTask createCleanupTask()
+                {
+                    return new NoCleanupTask();
+                }
+
+                public void execute()
+                {
+                    ExternalData dataSet = service.tryGetDataSet(dataSetCode);
+                    if (dataSet == null)
+                    {
+                        operationLog.error("Data set " + dataSetCode + " unknown by openBIS.");
+                        return;
+                    }
+                    feedPathInfoDatabase(dataSet);
+                }
+            };
+    }
         
-        public ICleanupTask createCleanupTask()
+    private void feedPathInfoDatabase(IDatasetLocation dataSet)
+    {
+        IShareIdManager shareIdManager = directoryProvider.getShareIdManager();
+        String dataSetCode = dataSet.getDataSetCode();
+        shareIdManager.lock(dataSetCode);
+        File dataSetRoot = directoryProvider.getDataSetDirectory(dataSet);
+        if (dataSetRoot.exists() == false)
         {
-            return new NoCleanupTask();
+            operationLog.error("Root directory of data set " + dataSetCode
+                    + " does not exists: " + dataSetRoot);
+            shareIdManager.releaseLocks();
+            return;
         }
 
-        public void execute()
+        try
         {
-            ExternalData dataSet = service.tryGetDataSet(dataSetCode);
-            if (dataSet == null)
-            {
-                operationLog.error("Data set " + dataSetCode + " unknown by openBIS.");
-                return;
-            }
-            IShareIdManager shareIdManager = directoryProvider.getShareIdManager();
-            shareIdManager.lock(dataSetCode);
-            File dataSetRoot = directoryProvider.getDataSetDirectory(dataSet);
-            if (dataSetRoot.exists() == false)
-            {
-                operationLog.error("Root directory of data set " + dataSetCode
-                        + " does not exists: " + dataSetRoot);
-                shareIdManager.releaseLocks();
-                return;
-            }
-
-            try
-            {
-                DatabaseBasedDataSetPathsInfoFeeder feeder =
-                        new DatabaseBasedDataSetPathsInfoFeeder(dao, hierarchicalContentFactory);
-                feeder.addPaths(dataSetCode, dataSet.getLocation(), dataSetRoot);
-                dao.commit();
-                operationLog.info("Successfully added paths inside data set " + dataSetCode
-                        + " to database.");
-            } catch (Exception ex)
-            {
-                handleException(ex);
-            } finally
-            {
-                shareIdManager.releaseLocks();
-            }
-        }
-
-        private void handleException(Exception ex)
+            DatabaseBasedDataSetPathsInfoFeeder feeder =
+                    new DatabaseBasedDataSetPathsInfoFeeder(dao, hierarchicalContentFactory);
+            feeder.addPaths(dataSetCode, dataSet.getDataSetLocation(), dataSetRoot);
+            dao.commit();
+            operationLog.info("Successfully added paths inside data set " + dataSetCode
+                    + " to database.");
+        } catch (Exception ex)
+        {
+            handleException(ex, dataSetCode);
+        } finally
         {
-            operationLog.error("Couldn't feed database with path infos of data set " + dataSetCode,
-                    ex);
-            dao.rollback();
+            shareIdManager.releaseLocks();
         }
-        
     }
 
+    private void handleException(Exception ex, String dataSet)
+    {
+        operationLog.error("Couldn't feed database with path infos of data set " + dataSet,
+                ex);
+        dao.rollback();
+    }
+    
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDataSetDescriptionBasedCommand.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDataSetDescriptionBasedCommand.java
index df8a8aace9f9f5ff55efaa8d4daaad13ba0ffef4..3e5b649f1788870410d9eef638f04e3288659234 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDataSetDescriptionBasedCommand.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDataSetDescriptionBasedCommand.java
@@ -43,7 +43,7 @@ abstract class AbstractDataSetDescriptionBasedCommand implements IDataSetCommand
         List<String> result = new ArrayList<String>();
         for (DatasetDescription dataSet : dataSets)
         {
-            result.add(dataSet.getDatasetCode());
+            result.add(dataSet.getDataSetCode());
         }
         return result;
     }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreService.java
index 963c4121ff21d359a7a8b34ffd3ec98f7d83478c..9368f532e9420e1d0ac374e08109e4ec390da60e 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreService.java
@@ -237,7 +237,7 @@ public class DataStoreService extends AbstractServiceWithLogger<IDataStoreServic
         IShareIdManager manager = getShareIdManager();
         for (DatasetDescription dataSet : dataSets)
         {
-            String datasetCode = dataSet.getDatasetCode();
+            String datasetCode = dataSet.getDataSetCode();
             String location = dataSet.getDataSetLocation();
             manager.lock(datasetCode);
             try
@@ -304,7 +304,7 @@ public class DataStoreService extends AbstractServiceWithLogger<IDataStoreServic
         IShareIdManager manager = getShareIdManager();
         for (DatasetDescription dataSet : datasets)
         {
-            manager.lock(dataSet.getDatasetCode());
+            manager.lock(dataSet.getDataSetCode());
         }
         try
         {
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DeletionCommand.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DeletionCommand.java
index 03c9caf25a20493533a8ed19804a5ab8a6720f06..5bd1ada59a8bfea89c337de73176a4dce01800db 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DeletionCommand.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DeletionCommand.java
@@ -69,7 +69,7 @@ class DeletionCommand extends AbstractDataSetDescriptionBasedCommand
                         {
                             File dataSetDirectory =
                                     dataSetDirectoryProvider.getDataSetDirectory(dataSet);
-                            SegmentedStoreUtils.deleteDataSet(dataSet.getDatasetCode(),
+                            SegmentedStoreUtils.deleteDataSet(dataSet.getDataSetCode(),
                                     dataSetDirectory, shareIdManager, logger);
                         } catch (Throwable ex)
                         {
@@ -92,7 +92,7 @@ class DeletionCommand extends AbstractDataSetDescriptionBasedCommand
         b.append("Delete data sets: ");
         for (DatasetDescription dataset : dataSets)
         {
-            b.append(dataset.getDatasetCode());
+            b.append(dataset.getDataSetCode());
             b.append(',');
         }
         b.setLength(b.length() - 1);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DatasetModificationReportingPlugin.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DatasetModificationReportingPlugin.java
index 8117bb10f6237ed27382585567cbf835f9418e6c..535d78fd040874efe874d33746f2083aeb8142ef 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DatasetModificationReportingPlugin.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DatasetModificationReportingPlugin.java
@@ -53,7 +53,7 @@ public class DatasetModificationReportingPlugin extends AbstractTableModelReport
         for (DatasetDescription dataset : datasets)
         {
             File file = getDataSubDir(context.getDirectoryProvider(), dataset);
-            String datasetCode = dataset.getDatasetCode();
+            String datasetCode = dataset.getDataSetCode();
             List<ISerializableComparable> row =
                     Arrays.<ISerializableComparable> asList(new StringTableCell(datasetCode),
                             new StringTableCell(new Date(file.lastModified()).toString()));
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DemoArchiver.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DemoArchiver.java
index a523cf50e54786e421e6c8d9fb159e08a73c4710..696ee55bc6039aac157973e08f547bdb3d401200 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DemoArchiver.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DemoArchiver.java
@@ -66,7 +66,7 @@ public class DemoArchiver extends AbstractArchiverProcessingPlugin
     public BooleanStatus isDataSetPresentInArchive(DatasetDescription dataset,
             ArchiverTaskContext context)
     {
-        boolean present = archiveContents.contains(dataset.getDatasetCode());
+        boolean present = archiveContents.contains(dataset.getDataSetCode());
         return BooleanStatus.createFromBoolean(present);
     }
 
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DemoReportingPlugin.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DemoReportingPlugin.java
index 76d55a9869f941c7000ed3b80a004167fbd72a60..8484019c0d0e2fade14ee731e3b2a342b14764d1 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DemoReportingPlugin.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DemoReportingPlugin.java
@@ -92,7 +92,7 @@ public class DemoReportingPlugin extends AbstractTableModelReportingPlugin
     private void describeUnknown(SimpleTableModelBuilder builder, DatasetDescription dataset,
             File file)
     {
-        String datasetCode = dataset.getDatasetCode();
+        String datasetCode = dataset.getDataSetCode();
         ISerializableComparable image = createImageCell(dataset, file);
         List<ISerializableComparable> row =
                 Arrays.<ISerializableComparable> asList(new StringTableCell(datasetCode), image,
@@ -105,7 +105,7 @@ public class DemoReportingPlugin extends AbstractTableModelReportingPlugin
     {
         if (ImageUtil.isImageFile(file))
         {
-            String code = dataset.getDatasetCode();
+            String code = dataset.getDataSetCode();
             String location = dataset.getDataSetLocation();
             return new ImageTableCell(code, location, file.getPath(), 100, 60);
         }
@@ -118,7 +118,7 @@ public class DemoReportingPlugin extends AbstractTableModelReportingPlugin
         ISerializableComparable image = createImageCell(dataset, file);
         List<ISerializableComparable> row =
                 Arrays.<ISerializableComparable> asList(
-                        new StringTableCell(dataset.getDatasetCode()), image, new StringTableCell(
+                        new StringTableCell(dataset.getDataSetCode()), image, new StringTableCell(
                                 file.getName()), new DateTableCell(new Date(file.lastModified())),
                         new DoubleTableCell(getSize(file)));
         builder.addRow(row);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractArchiverProcessingPlugin.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractArchiverProcessingPlugin.java
index 2a2a7c43d4b1d8916f1f1b52dd488cdccbf6309e..470794d189cfc39c1419a81317974dd50e5ddc02 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractArchiverProcessingPlugin.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractArchiverProcessingPlugin.java
@@ -149,7 +149,7 @@ public abstract class AbstractArchiverProcessingPlugin extends AbstractDatastore
         {
             if (dataset.getDataSetSize() == null)
             {
-                String dataSetCode = dataset.getDatasetCode();
+                String dataSetCode = dataset.getDataSetCode();
                 String shareId = getShareIdManager().getShareId(dataSetCode);
                 File shareFolder = new File(storeRoot, shareId);
                 String dataSetLocation = dataset.getDataSetLocation();
@@ -222,13 +222,13 @@ public abstract class AbstractArchiverProcessingPlugin extends AbstractDatastore
         DatasetProcessingStatuses result = new DatasetProcessingStatuses();
         for (DatasetDescription dataset : groupedDatasets.getPresentInArchive())
         {
-            String dataSetCode = dataset.getDatasetCode();
+            String dataSetCode = dataset.getDataSetCode();
             Status status = getStatusForDataset(statuses, dataSetCode, Status.OK);
             result.addResult(dataSetCode, status, Operation.ARCHIVE);
         }
         for (DatasetDescription dataset : groupedDatasets.getNotPresentAsList())
         {
-            String dataSetCode = dataset.getDatasetCode();
+            String dataSetCode = dataset.getDataSetCode();
             BooleanStatus booleanStatus = groupedDatasets.getNotPresentInArchiveStatus(dataset);
             String errorMessage =
                     (booleanStatus.tryGetMessage() != null) ? booleanStatus.tryGetMessage() : "";
@@ -382,7 +382,7 @@ public abstract class AbstractArchiverProcessingPlugin extends AbstractDatastore
         {
             for (DatasetDescription dataset : datasets)
             {
-                addResult(dataset.getDatasetCode(), status, operation.getDescription());
+                addResult(dataset.getDataSetCode(), status, operation.getDescription());
             }
         }
 
@@ -441,7 +441,7 @@ public abstract class AbstractArchiverProcessingPlugin extends AbstractDatastore
         DatasetProcessingStatuses statuses = new DatasetProcessingStatuses();
         for (DatasetDescription dataset : datasets)
         {
-            statuses.addResult(dataset.getDatasetCode(), status, operationDescription);
+            statuses.addResult(dataset.getDataSetCode(), status, operationDescription);
         }
         return statuses;
     }
@@ -581,7 +581,7 @@ public abstract class AbstractArchiverProcessingPlugin extends AbstractDatastore
         public void prepareForUnarchiving(DatasetDescription dataSet)
         {
             SimpleDataSetInformationDTO translatedDataSet = SimpleDataSetHelper.translate(dataSet);
-            String dataSetCode = dataSet.getDatasetCode();
+            String dataSetCode = dataSet.getDataSetCode();
             String shareId = shareIdManager.getShareId(dataSetCode);
             translatedDataSet.setDataSetShareId(shareId);
             Share share = shareFinder.tryToFindShare(translatedDataSet, shares);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDataMergingReportingPlugin.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDataMergingReportingPlugin.java
index 59fc5c810aab0be1c870602354001f10bee37da1..858b4553fe0bd703735b2aa7251fb1c68f9c9e33 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDataMergingReportingPlugin.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDataMergingReportingPlugin.java
@@ -89,7 +89,7 @@ public abstract class AbstractDataMergingReportingPlugin extends AbstractFileTab
     protected static void addDataRows(SimpleTableModelBuilder builder, DatasetDescription dataset,
             DatasetFileLines lines, boolean addFileNameColumn)
     {
-        String datasetCode = dataset.getDatasetCode();
+        String datasetCode = dataset.getDataSetCode();
         String fileNameOrNull = addFileNameColumn ? lines.getFile().getName() : null;
         for (String[] dataTokens : lines.getDataLines())
         {
@@ -128,7 +128,7 @@ public abstract class AbstractDataMergingReportingPlugin extends AbstractFileTab
             throw UserFailureException
                     .fromTemplate(
                             "Directory with Data Set '%s' data ('%s') should contain exactly 1 file with data but %s files were found.",
-                            dataset.getDatasetCode(), dir.getAbsolutePath(), datasetFilesToMerge
+                            dataset.getDataSetCode(), dir.getAbsolutePath(), datasetFilesToMerge
                                     .size());
         } else
         {
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDropboxProcessingPlugin.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDropboxProcessingPlugin.java
index 852d2b1c138cf280856592eb18eba7cfe21580fd..deb4d749c6384cff89ff95eba5488ac5d2a4cdee 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDropboxProcessingPlugin.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDropboxProcessingPlugin.java
@@ -107,7 +107,7 @@ abstract public class AbstractDropboxProcessingPlugin extends AbstractDatastoreP
             Status status, DataSetProcessingContext context)
     {
         String dataSet =
-                render(dataSetDescription.getDatasetCode(), dataSetDescription.getDatasetTypeCode());
+                render(dataSetDescription.getDataSetCode(), dataSetDescription.getDatasetTypeCode());
         String experiment =
                 render(dataSetDescription.getExperimentIdentifier(),
                         dataSetDescription.getExperimentTypeCode());
@@ -199,7 +199,7 @@ abstract public class AbstractDropboxProcessingPlugin extends AbstractDatastoreP
         datasetInfo.setDataSetType(new DataSetType(datasetTypeCode));
         datasetInfo.setSampleCode(dataset.getSampleCode());
         datasetInfo.setSpaceCode(dataset.getSpaceCode());
-        datasetInfo.setDataSetCode(dataset.getDatasetCode());
+        datasetInfo.setDataSetCode(dataset.getDataSetCode());
         ExperimentIdentifier expIdent =
                 new ExperimentIdentifier(null, dataset.getSpaceCode(), dataset.getProjectCode(),
                         dataset.getExperimentCode());
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDssLinkReportingPlugin.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDssLinkReportingPlugin.java
index 8bbdfb0f0c0658cdccda3457c1569d0509d14748..bf0a4fd84e376df466f740f77162f8639a72a48f 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDssLinkReportingPlugin.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDssLinkReportingPlugin.java
@@ -63,7 +63,7 @@ public abstract class AbstractDssLinkReportingPlugin extends AbstractDatastorePl
         {
             IRowBuilder rowBuilder = builder.addRow();
             LinkModel linkModel = createLink(dataSet);
-            String text = dataSet.getDatasetCode();
+            String text = dataSet.getDataSetCode();
 
             rowBuilder.setCell(DATA_SET_HEADER, new DssLinkTableCell(text, linkModel));
         }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractFileTableReportingPlugin.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractFileTableReportingPlugin.java
index 61ba037bf401f7536208c0750e1073dd7f511ea6..dbb8d188d5dc9e1ae2cac0d45f3b664e2d4f3ae5 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractFileTableReportingPlugin.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractFileTableReportingPlugin.java
@@ -148,7 +148,7 @@ abstract public class AbstractFileTableReportingPlugin extends AbstractTableMode
         {
             lines.add(reader.getValues());
         }
-        return new DatasetFileLines(file, dataset.getDatasetCode(), lines, ignoreTrailingEmptyCells);
+        return new DatasetFileLines(file, dataset.getDataSetCode(), lines, ignoreTrailingEmptyCells);
     }
 
     protected TableModel createTableModel(DatasetFileLines lines)
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetFileOperationsManager.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetFileOperationsManager.java
index dd7f8a67e4da5def0e5a62b7ca0af1511fd17484..f09611dc0f96b0280f38c8b75cb01be19221bca5 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetFileOperationsManager.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetFileOperationsManager.java
@@ -147,12 +147,12 @@ public class DataSetFileOperationsManager implements IDataSetFileOperationsManag
             if (createFolderIfNotExists(destinationFolder.getParentFile())
                     || destinationExists(destinationFolder).isSuccess() == false)
             {
-                operationLog.info("Copy dataset '" + dataset.getDatasetCode() + "' from '"
+                operationLog.info("Copy dataset '" + dataset.getDataSetCode() + "' from '"
                         + originalData.getPath() + "' to '" + destinationFolder.getParentFile());
                 executor.copyDataSetToDestination(originalData, destinationFolder.getParentFile());
             } else
             {
-                operationLog.info("Update dataset '" + dataset.getDatasetCode() + "' from '"
+                operationLog.info("Update dataset '" + dataset.getDataSetCode() + "' from '"
                         + originalData.getPath() + "' to '" + destinationFolder.getParentFile());
                 executor.syncDataSetWithDestination(originalData, destinationFolder.getParentFile());
             }
@@ -174,7 +174,7 @@ public class DataSetFileOperationsManager implements IDataSetFileOperationsManag
             File destinationFolder = new File(destination, dataset.getDataSetLocation());
             checkDestinationExists(destinationFolder);
             File folder = originalData.getParentFile();
-            operationLog.info("Retrieve data set '" + dataset.getDatasetCode() + "' from '"
+            operationLog.info("Retrieve data set '" + dataset.getDataSetCode() + "' from '"
                     + destinationFolder.getPath() + "' to '" + folder);
             folder.mkdirs();
             executor.retrieveDataSetFromDestination(folder, destinationFolder);
@@ -200,7 +200,7 @@ public class DataSetFileOperationsManager implements IDataSetFileOperationsManag
                 executor.deleteFolder(destinationFolder);
             } else
             {
-                operationLog.info("Data of data set '" + dataset.getDatasetCode()
+                operationLog.info("Data of data set '" + dataset.getDataSetCode()
                         + "' don't exist in the destination '" + destinationFolder.getPath()
                         + "'. There is nothing to delete.");
             }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/GenericDssLinkReportingPlugin.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/GenericDssLinkReportingPlugin.java
index 3b9b59ab8e8d72fd24fdc83e054e437e0838a9c1..37f10a985eb5087a99923db011f71826c6e89146 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/GenericDssLinkReportingPlugin.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/GenericDssLinkReportingPlugin.java
@@ -83,7 +83,7 @@ public class GenericDssLinkReportingPlugin extends AbstractDssLinkReportingPlugi
         LinkModel linkModel = new LinkModel();
         linkModel.setSchemeAndDomain(downloadUrl);
         linkModel.setPath(GenericSharedConstants.DATA_STORE_SERVER_WEB_APPLICATION_NAME + "/"
-                + dataSet.getDatasetCode());
+                + dataSet.getDataSetCode());
 
         ArrayList<LinkModel.LinkParameter> parameters = new ArrayList<LinkModel.LinkParameter>();
         parameters.add(new LinkModel.LinkParameter(FORCE_AUTO_RESOLVE, Boolean.TRUE.toString()));
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/MergedRowDataReportingPlugin.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/MergedRowDataReportingPlugin.java
index ea05c22694e49cee19e1438fcfad9da30fcb117f..033a3821b4a7e9daa716a51b082674dbb9a67a68 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/MergedRowDataReportingPlugin.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/MergedRowDataReportingPlugin.java
@@ -71,8 +71,8 @@ public class MergedRowDataReportingPlugin extends AbstractDataMergingReportingPl
                             "All Data Set files should have the same headers, "
                                     + "but file header of '%s': \n\t '%s' "
                                     + "is different than file header of '%s': \n\t '%s'.",
-                            firstDataset.getDatasetCode(), StringUtils.join(titles, "\t"), dataset
-                                    .getDatasetCode(), StringUtils.join(lines.getHeaderLabels(),
+                            firstDataset.getDataSetCode(), StringUtils.join(titles, "\t"), dataset
+                                    .getDataSetCode(), StringUtils.join(lines.getHeaderLabels(),
                                     "\t"));
                 }
                 addDataRows(builder, dataset, lines, false);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/RsyncArchiver.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/RsyncArchiver.java
index 8e446c49a484258c63bfc0bb866fbaf00a33d6df..2b5aa222599e958d2ed2c26737647fabb897ebb4 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/RsyncArchiver.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/RsyncArchiver.java
@@ -69,7 +69,7 @@ public class RsyncArchiver extends AbstractArchiverProcessingPlugin
         {
             File originalData = getDatasetDirectory(context, dataset);
             Status status = doArchive(dataset, originalData);
-            statuses.addResult(dataset.getDatasetCode(), status, Operation.ARCHIVE);
+            statuses.addResult(dataset.getDataSetCode(), status, Operation.ARCHIVE);
         }
 
         return statuses;
@@ -85,7 +85,7 @@ public class RsyncArchiver extends AbstractArchiverProcessingPlugin
             context.getUnarchivingPreparation().prepareForUnarchiving(dataset);
             File originalData = getDatasetDirectory(context, dataset);
             Status status = doUnarchive(dataset, originalData);
-            statuses.addResult(dataset.getDatasetCode(), status, Operation.UNARCHIVE);
+            statuses.addResult(dataset.getDataSetCode(), status, Operation.UNARCHIVE);
         }
 
         return statuses;
@@ -98,7 +98,7 @@ public class RsyncArchiver extends AbstractArchiverProcessingPlugin
         for (DatasetLocation dataset : datasets)
         {
             Status status = doDeleteFromArchive(dataset);
-            statuses.addResult(dataset.getDatasetCode(), status, Operation.DELETE_FROM_ARCHIVE);
+            statuses.addResult(dataset.getDataSetCode(), status, Operation.DELETE_FROM_ARCHIVE);
         }
 
         return statuses;
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/tasks/DatasetFileLines.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/tasks/DatasetFileLines.java
index 334fe69ccc71eff9af86d587ae03ecfc58db4dae..76d7bf25a83858428f800ec54b73a210eca8f19b 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/tasks/DatasetFileLines.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/tasks/DatasetFileLines.java
@@ -43,7 +43,7 @@ public class DatasetFileLines implements ITabularData
 
     public DatasetFileLines(File file, DatasetDescription dataset, List<String[]> lines)
     {
-        this(file, dataset.getDatasetCode(), lines);
+        this(file, dataset.getDataSetCode(), lines);
     }
 
     public DatasetFileLines(File file, String datasetCode, List<String[]> lines)
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/DataSetDirectoryProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/DataSetDirectoryProvider.java
index 1cdeee63f293ec35a28ed3dcdcbf76fdaf4a8962..3b6d7af688a1b96f0f6c625da2b1a7fd4fa597db 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/DataSetDirectoryProvider.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/DataSetDirectoryProvider.java
@@ -47,7 +47,7 @@ public class DataSetDirectoryProvider implements IDataSetDirectoryProvider
     {
         String location = dataSet.getDataSetLocation();
         location = location.replace("\\", File.separator);
-        File share = new File(storeRoot, shareIdManager.getShareId(dataSet.getDatasetCode()));
+        File share = new File(storeRoot, shareIdManager.getShareId(dataSet.getDataSetCode()));
         return new File(share, location);
     }
 
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java
index df591f3ebb8bc9da9b11eff825b64390bec2559d..385ea2df265e73adf58b89d477ef86694a0f5d2b 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java
@@ -71,14 +71,14 @@ public class HierarchicalContentProvider implements IHierarchicalContentProvider
     {
         // this is temporary implementation - it should access DB instead of filesystem
         // IHierarchicalContent.close() should be called to unlock the dataset
-        directoryProvider.getShareIdManager().lock(datasetLocation.getDatasetCode());
+        directoryProvider.getShareIdManager().lock(datasetLocation.getDataSetCode());
         File dataSetDirectory = directoryProvider.getDataSetDirectory(datasetLocation);
         IDelegatedAction onCloseAction = new IDelegatedAction()
             {
                 public void execute()
                 {
                     directoryProvider.getShareIdManager().releaseLock(
-                            datasetLocation.getDatasetCode());
+                            datasetLocation.getDataSetCode());
                 }
             };
         return asContent(dataSetDirectory, onCloseAction);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java
index e77b74317024d1377fabd471fb4ec5f13548e866..5f95482ad4d4f0c9abf917e7ccefafe94472acc7 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java
@@ -271,7 +271,9 @@ public interface IEncapsulatedOpenBISService
     @ManagedAuthentication
     public List<DataSetShareId> listDataSetShareIds() throws UserFailureException;
 
-    /** See {@link IETLLIMSService#listDataSets(String, String)} */
+    /** 
+     * Returns informations about all data sets which belong to the calling data store server.
+     */
     @ManagedAuthentication
     public List<SimpleDataSetInformationDTO> listDataSets() throws UserFailureException;
     
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/ProcessingStatus.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/ProcessingStatus.java
index f07b043f2d0c7e2d30eac5fd0f843032caaa8add..42b22a844502876dbbd68686eb3dc469df9b0ef6 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/ProcessingStatus.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/ProcessingStatus.java
@@ -61,7 +61,7 @@ public class ProcessingStatus
 
     public void addDatasetStatus(DatasetDescription dataset, Status status)
     {
-        addDatasetStatus(dataset.getDatasetCode(), status);
+        addDatasetStatus(dataset.getDataSetCode(), status);
     }
 
     public Status tryGetStatusByDataset(String datasetCode)
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTaskTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTaskTest.java
index 86caf4e68e646929c0de585e7cc66230f17e5aec..e8d28a08c10b81140bdb811f4bbebb2950f36481 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTaskTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTaskTest.java
@@ -20,7 +20,7 @@ import static ch.systemsx.cisd.common.utilities.IDelegatedAction.DO_NOTHING;
 
 import java.io.File;
 import java.lang.reflect.Method;
-import java.util.Properties;
+import java.util.Arrays;
 
 import org.jmock.Expectations;
 import org.jmock.Mockery;
@@ -33,13 +33,13 @@ import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase;
 import ch.systemsx.cisd.common.io.IHierarchicalContent;
 import ch.systemsx.cisd.common.io.IHierarchicalContentFactory;
 import ch.systemsx.cisd.common.io.IHierarchicalContentNode;
-import ch.systemsx.cisd.etlserver.path.IPathsInfoDAO;
-import ch.systemsx.cisd.etlserver.path.PathInfoDatabaseFeedingTask;
 import ch.systemsx.cisd.openbis.dss.generic.shared.IDataSetDirectoryProvider;
 import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
 import ch.systemsx.cisd.openbis.dss.generic.shared.IShareIdManager;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocation;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.DataSetBuilder;
+import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO;
 
 
 /**
@@ -73,7 +73,7 @@ public class PathInfoDatabaseFeedingTaskTest extends AbstractFileSystemTestCase
         context.checking(new Expectations()
             {
                 {
-                    one(directoryProvider).getShareIdManager();
+                    allowing(directoryProvider).getShareIdManager();
                     will(returnValue(shareIdManager));
                 }
             });
@@ -81,8 +81,7 @@ public class PathInfoDatabaseFeedingTaskTest extends AbstractFileSystemTestCase
         contentFactory = context.mock(IHierarchicalContentFactory.class);
         content = context.mock(IHierarchicalContent.class);
         node = context.mock(IHierarchicalContentNode.class);
-        Properties properties = new Properties();
-        task = new PathInfoDatabaseFeedingTask(properties, service, directoryProvider, dao, contentFactory);
+        task = new PathInfoDatabaseFeedingTask(service, directoryProvider, dao, contentFactory);
         dataSetFolder = new File(workingDirectory, "ds1");
         dataSetFolder.mkdirs();
     }
@@ -101,7 +100,64 @@ public class PathInfoDatabaseFeedingTaskTest extends AbstractFileSystemTestCase
     }
     
     @Test
-    public void testHappyCase()
+    public void testAsMaintenanceTask()
+    {
+        final SimpleDataSetInformationDTO ds1 = new SimpleDataSetInformationDTO();
+        ds1.setDataSetCode("ds1");
+        ds1.setDataSetLocation("abc1");
+        final SimpleDataSetInformationDTO ds2 = new SimpleDataSetInformationDTO();
+        ds2.setDataSetCode("ds2");
+        ds2.setDataSetLocation("abc2");
+        context.checking(new Expectations()
+            {
+                {
+                    one(service).listDataSets();
+                    will(returnValue(Arrays.asList(ds1, ds2)));
+                }
+            });
+        prepareHappyCase(ds1);
+        prepareFailing(ds2);
+        
+        task.execute();
+    }
+    
+    @Test
+    public void testPostRegistrationHappyCase()
+    {
+        final ExternalData dataSet =
+                new DataSetBuilder().code(DATA_SET_CODE).location("abc").getDataSet();
+        context.checking(new Expectations()
+            {
+                {
+                    one(service).tryGetDataSet(DATA_SET_CODE);
+                    will(returnValue(dataSet));
+
+                }
+            });
+        prepareHappyCase(dataSet);
+
+        task.createExecutor(DATA_SET_CODE).execute();
+    }
+
+    @Test
+    public void testPostRegistrationFailingCase()
+    {
+        final ExternalData dataSet =
+                new DataSetBuilder().code(DATA_SET_CODE).location("abc").getDataSet();
+        context.checking(new Expectations()
+            {
+                {
+                    one(service).tryGetDataSet(DATA_SET_CODE);
+                    will(returnValue(dataSet));
+                }
+            });
+        prepareFailing(dataSet);
+
+        task.createExecutor(DATA_SET_CODE).execute();
+   }
+    
+    @Test
+    public void testNonExistingDataSetFolder()
     {
         context.checking(new Expectations()
             {
@@ -113,10 +169,27 @@ public class PathInfoDatabaseFeedingTaskTest extends AbstractFileSystemTestCase
 
                     one(shareIdManager).lock(DATA_SET_CODE);
 
+                    one(directoryProvider).getDataSetDirectory(dataSet);
+                    will(returnValue(new File(workingDirectory, "blabla")));
+
+                    one(shareIdManager).releaseLocks();
+                }
+            });
+        
+        task.createExecutor(DATA_SET_CODE).execute();
+    }
+    
+    private void prepareHappyCase(final IDatasetLocation dataSet)
+    {
+        context.checking(new Expectations()
+            {
+                {
+                    one(shareIdManager).lock(dataSet.getDataSetCode());
+
                     one(directoryProvider).getDataSetDirectory(dataSet);
                     will(returnValue(dataSetFolder));
 
-                    one(dao).createDataSet(DATA_SET_CODE, "abc");
+                    one(dao).createDataSet(dataSet.getDataSetCode(), dataSet.getDataSetLocation());
                     will(returnValue(101L));
 
                     one(contentFactory).asHierarchicalContent(dataSetFolder, DO_NOTHING);
@@ -144,27 +217,19 @@ public class PathInfoDatabaseFeedingTaskTest extends AbstractFileSystemTestCase
                     one(shareIdManager).releaseLocks();
                 }
             });
-
-        task.createExecutor(DATA_SET_CODE).execute();
     }
 
-    @Test
-    public void testFailingCase()
+    private void prepareFailing(final IDatasetLocation dataSet)
     {
         context.checking(new Expectations()
             {
                 {
-                    one(service).tryGetDataSet(DATA_SET_CODE);
-                    ExternalData dataSet =
-                            new DataSetBuilder().code(DATA_SET_CODE).location("abc").getDataSet();
-                    will(returnValue(dataSet));
-
-                    one(shareIdManager).lock(DATA_SET_CODE);
+                    one(shareIdManager).lock(dataSet.getDataSetCode());
 
                     one(directoryProvider).getDataSetDirectory(dataSet);
                     will(returnValue(dataSetFolder));
 
-                    one(dao).createDataSet(DATA_SET_CODE, "abc");
+                    one(dao).createDataSet(dataSet.getDataSetCode(), dataSet.getDataSetLocation());
                     will(returnValue(101L));
 
                     one(contentFactory).asHierarchicalContent(dataSetFolder, DO_NOTHING);
@@ -174,30 +239,5 @@ public class PathInfoDatabaseFeedingTaskTest extends AbstractFileSystemTestCase
                     one(shareIdManager).releaseLocks();
                 }
             });
-
-        task.createExecutor(DATA_SET_CODE).execute();
-   }
-    
-    @Test
-    public void testNonExistingDataSetFolder()
-    {
-        context.checking(new Expectations()
-            {
-                {
-                    one(service).tryGetDataSet(DATA_SET_CODE);
-                    ExternalData dataSet =
-                            new DataSetBuilder().code(DATA_SET_CODE).location("abc").getDataSet();
-                    will(returnValue(dataSet));
-
-                    one(shareIdManager).lock(DATA_SET_CODE);
-
-                    one(directoryProvider).getDataSetDirectory(dataSet);
-                    will(returnValue(new File(workingDirectory, "blabla")));
-
-                    one(shareIdManager).releaseLocks();
-                }
-            });
-        
-        task.createExecutor(DATA_SET_CODE).execute();
     }
 }
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetCopierForUsersTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetCopierForUsersTest.java
index 596f097eb7ec2af0950ad82a25a47d31d21c3b5c..869352d81a50624230d4c27a2fd0acf9b9706af1 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetCopierForUsersTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetCopierForUsersTest.java
@@ -212,7 +212,7 @@ public class DataSetCopierForUsersTest extends AbstractFileSystemTestCase
         List<String> codes = new ArrayList<String>();
         for (DatasetDescription dataset : datasets)
         {
-            codes.add(dataset.getDatasetCode());
+            codes.add(dataset.getDataSetCode());
         }
         return codes;
     }
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetCopierTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetCopierTest.java
index 9d95ed99700ed8c24881ace2a9594f0b6a9cde36..b10368802cd8895bc029c78388b6ac079073f286 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetCopierTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetCopierTest.java
@@ -715,7 +715,7 @@ public class DataSetCopierTest extends AbstractFileSystemTestCase
         List<String> codes = new ArrayList<String>();
         for (DatasetDescription dataset : datasets)
         {
-            codes.add(dataset.getDatasetCode());
+            codes.add(dataset.getDataSetCode());
         }
         return codes;
     }
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetFileOperationsManagerTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetFileOperationsManagerTest.java
index cc415571d19555c61a17701f159a3a95786bd4a1..94e18db86aba51aed121771081073d245802e930 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetFileOperationsManagerTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetFileOperationsManagerTest.java
@@ -1053,7 +1053,7 @@ public class DataSetFileOperationsManagerTest extends AbstractFileSystemTestCase
     private DatasetLocation datasetLocation(DatasetDescription dsd)
     {
         DatasetLocation result = new DatasetLocation();
-        result.setDatasetCode(dsd.getDatasetCode());
+        result.setDatasetCode(dsd.getDataSetCode());
         result.setDataSetLocation(dsd.getDataSetLocation());
         return result;
     }
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProviderTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProviderTest.java
index fd1d7435a4eefdcad1ff2af9975cfc5a0865c92a..79f78feafe76bab3e058b897fbd11429d8e6bc31 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProviderTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProviderTest.java
@@ -152,7 +152,7 @@ public class HierarchicalContentProviderTest extends AssertJUnit
         final IDatasetLocation dataSetLocation = new IDatasetLocation()
             {
 
-                public String getDatasetCode()
+                public String getDataSetCode()
                 {
                     return code;
                 }
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/DataSetToSOFT.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/DataSetToSOFT.java
index fb7f9d048cd1c617ea1493e3691ca96ffb50af6a..f4ed2136950f33bc31907de57b1ae264a39fb8a0 100644
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/DataSetToSOFT.java
+++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/DataSetToSOFT.java
@@ -169,7 +169,7 @@ public class DataSetToSOFT implements IProcessingPluginTask
         {
             try
             {
-                String dataSetCode = datasetDescription.getDatasetCode();
+                String dataSetCode = datasetDescription.getDataSetCode();
                 if (operationLog.isInfoEnabled())
                 {
                     operationLog.info("Create SOFT file for data set " + dataSetCode);
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryReportingPlugin.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryReportingPlugin.java
index 416e436bfca30200acb4bf4246c918d8fe104c1f..dc9a17dbd405de179df76291c86cf8708f62e5e1 100644
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryReportingPlugin.java
+++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryReportingPlugin.java
@@ -196,7 +196,7 @@ public class IlluminaSummaryReportingPlugin extends AbstractTableModelReportingP
         {
             throw new EnvironmentFailureException(String.format(
                     "Couldn't get sample %s for dataset %s.", dataset.getSampleCode(),
-                    dataset.getDatasetCode()));
+                    dataset.getDataSetCode()));
         }
         return sampleOrNull;
     }
diff --git a/eu_basysbio/source/java/eu/basysbio/cisd/dss/TimeSeriesPropertiesReportingPlugin.java b/eu_basysbio/source/java/eu/basysbio/cisd/dss/TimeSeriesPropertiesReportingPlugin.java
index f0b10f232a0de21c387ca0c90b92858e12771465..6bb11112805976e89ab7706496b3c9f48c9be88f 100644
--- a/eu_basysbio/source/java/eu/basysbio/cisd/dss/TimeSeriesPropertiesReportingPlugin.java
+++ b/eu_basysbio/source/java/eu/basysbio/cisd/dss/TimeSeriesPropertiesReportingPlugin.java
@@ -60,7 +60,7 @@ public class TimeSeriesPropertiesReportingPlugin extends AbstractTableModelRepor
             {
                 row.add(new StringTableCell(""));
             }
-            addTableCellValue(row, headers, "CODE", dataset.getDatasetCode());
+            addTableCellValue(row, headers, "CODE", dataset.getDataSetCode());
             File file = getDataSubDir(context.getDirectoryProvider(), dataset);
             List<NewProperty> properies = HeaderUtils.extractHeaderProps(file, true, false, true);
             for (NewProperty p : properies)
diff --git a/eu_basysbio/source/java/eu/basysbio/cisd/dss/TimeSeriesPropertiesUpdateProcessingPlugin.java b/eu_basysbio/source/java/eu/basysbio/cisd/dss/TimeSeriesPropertiesUpdateProcessingPlugin.java
index 2f366534aa1f814d7dc31234c92ccd65db75d15f..2abf27e86ea4d0408494e7bd3b07fe0478a0256a 100644
--- a/eu_basysbio/source/java/eu/basysbio/cisd/dss/TimeSeriesPropertiesUpdateProcessingPlugin.java
+++ b/eu_basysbio/source/java/eu/basysbio/cisd/dss/TimeSeriesPropertiesUpdateProcessingPlugin.java
@@ -69,7 +69,7 @@ public class TimeSeriesPropertiesUpdateProcessingPlugin extends AbstractDatastor
             List<NewProperty> newProperties = HeaderUtils.extractHeaderProperties(file, true);
             SpaceIdentifier space =
                     new SpaceIdentifier(dataset.getDatabaseInstanceCode(), dataset.getSpaceCode());
-            ServiceProvider.getOpenBISService().updateDataSet(dataset.getDatasetCode(),
+            ServiceProvider.getOpenBISService().updateDataSet(dataset.getDataSetCode(),
                     newProperties, space);
             return Status.OK;
         } catch (UserFailureException ex)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatasetLocation.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatasetLocation.java
index a9b225797fb09d9a195991b5fccf78ed658a49df..8e49bd28a54a89734604ed154cadfd3234343666 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatasetLocation.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatasetLocation.java
@@ -42,7 +42,7 @@ public class DatasetLocation implements IDatasetLocation, ISerializable, ICodeHo
         this.dataSetLocation = dataSetLocation;
     }
 
-    public String getDatasetCode()
+    public String getDataSetCode()
     {
         return datasetCode;
     }
@@ -60,7 +60,7 @@ public class DatasetLocation implements IDatasetLocation, ISerializable, ICodeHo
 
     public String getCode()
     {
-        return getDatasetCode();
+        return getDataSetCode();
     }
 
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalData.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalData.java
index c9a40bdda466c62323270e610ef53387cdb07bde..7d01b7aa1e0db348d1574471fb1c3b5fc82b5210 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalData.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalData.java
@@ -349,7 +349,7 @@ public class ExternalData extends CodeWithRegistration<ExternalData> implements
         return getLocation();
     }
 
-    public String getDatasetCode()
+    public String getDataSetCode()
     {
         return getCode();
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IDatasetLocation.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IDatasetLocation.java
index d1cfa49bbcb1e08d831f05e7ceb6c5473224cf69..ef45ff5aad6c518fc971fa86f7e41722c6e7f588 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IDatasetLocation.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IDatasetLocation.java
@@ -25,5 +25,5 @@ public interface IDatasetLocation
 {
     String getDataSetLocation();
 
-    String getDatasetCode();
+    String getDataSetCode();
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DatasetDescription.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DatasetDescription.java
index ef8eafea6ce1e007f9f5e4633add31ad7fe0ecfe..743cbdccab0f25989d2338263b71ca0832125b2b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DatasetDescription.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DatasetDescription.java
@@ -68,7 +68,7 @@ public class DatasetDescription implements Serializable, IDatasetLocation
         {
             for (DatasetDescription description : dataSets)
             {
-                result.add(description.getDatasetCode());
+                result.add(description.getDataSetCode());
             }
         }
         return result;
@@ -109,7 +109,7 @@ public class DatasetDescription implements Serializable, IDatasetLocation
         return instanceCode;
     }
 
-    public String getDatasetCode()
+    public String getDataSetCode()
     {
         return datasetCode;
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java
index 52966542ec2dfeaaabc22ecc1c486c2d4f07da0d..9532eb21432b2dba4dff5fb1409657ea1db91b2f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.shared.dto;
 import java.io.Serializable;
 import java.util.Collection;
 
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocation;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder;
 
 /**
@@ -26,7 +27,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder;
  * 
  * @author Izabela Adamczyk
  */
-public class SimpleDataSetInformationDTO implements Serializable
+public class SimpleDataSetInformationDTO implements Serializable, IDatasetLocation
 {
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
     
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java
index e9d7993e14269c257630589965478f7ea35e4b3d..9e9a51e9799531578eae5daf7a2a8e9efc708593 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java
@@ -80,7 +80,7 @@ public class SimpleDataSetHelper
     {
         SimpleDataSetInformationDTO result = new SimpleDataSetInformationDTO();
         result.setDatabaseInstanceCode(datasetDescription.getDatabaseInstanceCode());
-        result.setDataSetCode(datasetDescription.getDatasetCode());
+        result.setDataSetCode(datasetDescription.getDataSetCode());
         result.setDataSetLocation(datasetDescription.getDataSetLocation());
         result.setDataSetSize(datasetDescription.getDataSetSize());
         result.setDataSetType(datasetDescription.getDatasetTypeCode());
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTableTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTableTest.java
index d89bb3948499616a4cc5f72a93dda0111f752d08..1d528aeb340183aa5eaca13b6828feb4ab6116a9 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTableTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTableTest.java
@@ -729,7 +729,7 @@ public final class ExternalDataTableTest extends AbstractBOTest
                     assertEquals(dataSets.length, list.size());
                     for (int i = 0; i < list.size(); i++)
                     {
-                        assertEquals("data set " + i, dataSets[i].getCode(), list.get(i).getDatasetCode());
+                        assertEquals("data set " + i, dataSets[i].getCode(), list.get(i).getDataSetCode());
                     }
                     return true;
                 }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/dss/phosphonetx/server/plugins/APMSReport.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/dss/phosphonetx/server/plugins/APMSReport.java
index b341aa5411e5214b37289b53ee9a0a507cdc2057..fbb59eb100404d2d1740ed5279b5d13eb4280c57 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/dss/phosphonetx/server/plugins/APMSReport.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/dss/phosphonetx/server/plugins/APMSReport.java
@@ -264,7 +264,7 @@ public class APMSReport extends AbstractTableModelReportingPlugin implements IPr
                             + '/' + datasetDescription.getExperimentCode();
             Template template = E_MAIL_CONTENT_TEMPLATE.createFreshCopy();
             template.bind("experiment-identifier", experimentIdentifier);
-            template.bind("data-set", datasetDescription.getDatasetCode());
+            template.bind("data-set", datasetDescription.getDataSetCode());
             ByteArrayDataSource dataSource =
                     new ByteArrayDataSource(writer.toString(), "text/plain");
             context.getMailClient().sendEmailMessageWithAttachment("Protein APMS Report",
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/ProteomicsDataServiceInternal.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/ProteomicsDataServiceInternal.java
index b45e44f7b723ec8eb25522c7eaa2fda6515a7aa3..dd7dce17b16f4dd5ac3f80529d314eb16767b6bb 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/ProteomicsDataServiceInternal.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/ProteomicsDataServiceInternal.java
@@ -52,6 +52,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
 import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator;
+import ch.systemsx.cisd.openbis.generic.shared.translator.ExternalDataTranslator;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.server.business.ExperimentLoader;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.server.business.IBusinessObjectFactory;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.server.business.ISampleLoader;
@@ -168,6 +169,15 @@ public class ProteomicsDataServiceInternal extends AbstractServer<IProteomicsDat
                 ExperimentTranslator.LoadableFields.PROPERTIES);
     }
 
+    public List<ExternalData> listDataSetsByExperiment(String sessionToken, TechId experimentID)
+    {
+        final Session session = getSession(sessionToken);
+
+        IExternalDataTable dataSetTable = commonBoFactory.createExternalDataTable(session);
+        dataSetTable.loadByExperimentTechId(experimentID);
+        return ExternalDataTranslator.translate(dataSetTable.getExternalData(), "", "");
+    }
+
     public void processProteinResultDataSets(String sessionToken, String dataSetProcessingKey,
             String experimentType, long[] searchExperimentIDs)
     {
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/ProteomicsDataServiceInternalLogger.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/ProteomicsDataServiceInternalLogger.java
index 74137fa1cf78210fac628e1bea55ec807105d483..0defb35f323b9ed08187874a74131d2bf2aafb6f 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/ProteomicsDataServiceInternalLogger.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/ProteomicsDataServiceInternalLogger.java
@@ -21,7 +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.shared.AbstractServerLogger;
+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.dto.Session;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.IProteomicsDataServiceInternal;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.dto.MsInjectionSample;
@@ -69,6 +71,12 @@ class ProteomicsDataServiceInternalLogger extends AbstractServerLogger implement
         return null;
     }
 
+    public List<ExternalData> listDataSetsByExperiment(String sessionToken, TechId experimentID)
+    {
+        logAccess(sessionToken, "list_data_sets_by_experiments", "EXPERIMENT_ID(%s)", experimentID);
+        return null;
+    }
+
     public void processProteinResultDataSets(String sessionToken, String dataSetProcessingKey,
             String experimentTypeCode, long[] searchExperimentIDs)
     {
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/api/v1/ProteomicsDataService.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/api/v1/ProteomicsDataService.java
index 124eb5db4934a9aed00d641101e854c90a10c8da..ac65d8d8802acd5af129f0b19f40cd336096ebc4 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/api/v1/ProteomicsDataService.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/api/v1/ProteomicsDataService.java
@@ -36,6 +36,7 @@ import ch.systemsx.cisd.common.spring.IInvocationLoggerContext;
 import ch.systemsx.cisd.openbis.generic.server.AbstractServer;
 import ch.systemsx.cisd.openbis.generic.server.business.IPropertiesBatchManager;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
+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.DataTypeCode;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
@@ -278,6 +279,33 @@ public class ProteomicsDataService extends AbstractServer<IProteomicsDataService
         return e;
     }
 
+    public List<DataSet> listDataSetsByExperiment(String sessionToken, String userID,
+            long experimentID)
+    {
+        checkSession(sessionToken);
+        SessionContextDTO session = login(userID);
+        try
+        {
+            List<DataSet> result = new ArrayList<DataSet>();
+            List<ExternalData> dataSets =
+                    service.listDataSetsByExperiment(session.getSessionToken(), new TechId(
+                            experimentID));
+            for (ExternalData dataSet : dataSets)
+            {
+                DataSet ds = new DataSet();
+                ds.setId(dataSet.getId());
+                ds.setCode(dataSet.getCode());
+                ds.setType(dataSet.getDataSetType().getCode());
+                ds.setProperties(translate(dataSet.getProperties()));
+                result.add(ds);
+            }
+            return result;
+        } finally
+        {
+            service.logout(session.getSessionToken());
+        }
+    }
+
     public void processSearchData(String sessionToken, String userID, String dataSetProcessingKey,
             long[] searchExperimentIDs)
     {
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/api/v1/ProteomicsDataServiceLogger.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/api/v1/ProteomicsDataServiceLogger.java
index 51a70117edf78c8d3db29b94cefccedf060f3856..7a2903c54c021a5551f72a6cc24c924ec494b8a4 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/api/v1/ProteomicsDataServiceLogger.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/api/v1/ProteomicsDataServiceLogger.java
@@ -23,6 +23,7 @@ import ch.systemsx.cisd.common.spring.IInvocationLoggerContext;
 import ch.systemsx.cisd.openbis.generic.shared.AbstractServerLogger;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
 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.Experiment;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.api.v1.dto.MsInjectionDataInfo;
@@ -86,6 +87,13 @@ class ProteomicsDataServiceLogger extends AbstractServerLogger implements IProte
         return null;
     }
 
+    public List<DataSet> listDataSetsByExperiment(String sessionToken, String userID,
+            long experimentID)
+    {
+        logAccess(sessionToken, "list_data_sets_by_experiment", "EXPERIMENT_ID(%s)", experimentID);
+        return null;
+    }
+
     public void processSearchData(String sessionToken, String userID, String dataSetProcessingKey,
             long[] searchExperimentIDs)
     {
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/IProteomicsDataServiceInternal.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/IProteomicsDataServiceInternal.java
index a2ac631dfcfe0ee8e0b000b576a7d056849a5c2f..c84f86213c595e2e315471c6150345ed08611a94 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/IProteomicsDataServiceInternal.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/IProteomicsDataServiceInternal.java
@@ -24,9 +24,12 @@ import ch.systemsx.cisd.openbis.generic.shared.IServer;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.annotation.AuthorizationGuard;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.annotation.ReturnValueFilter;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.annotation.RolesAllowed;
+import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.AbstractTechIdPredicate.ExperimentTechIdPredicate;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.DataSetCodeCollectionPredicate;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.validator.ExperimentValidator;
+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.RoleWithHierarchy;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.authorization.validator.RawDataSampleValidator;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.dto.MsInjectionSample;
@@ -65,6 +68,11 @@ public interface IProteomicsDataServiceInternal extends IServer
     @ReturnValueFilter(validatorClass = ExperimentValidator.class)
     public List<Experiment> listExperiments(String sessionToken, String experimentTypeCode);
     
+    @Transactional(readOnly = true)
+    @RolesAllowed(RoleWithHierarchy.SPACE_USER)
+    public List<ExternalData> listDataSetsByExperiment(String sessionToken,
+            @AuthorizationGuard(guardClass = ExperimentTechIdPredicate.class) TechId experimentID);
+    
     @Transactional(readOnly = true)
     @RolesAllowed(RoleWithHierarchy.SPACE_USER)
     public void processProteinResultDataSets(String sessionToken, String dataSetProcessingKey,
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/api/v1/IProteomicsDataService.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/api/v1/IProteomicsDataService.java
index c254a6bda06f151e6508a3d75d5d17feb9d8ff37..ebd10183d50cadacf8835443a9f93cdcf13b98ad 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/api/v1/IProteomicsDataService.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/api/v1/IProteomicsDataService.java
@@ -24,6 +24,7 @@ import ch.systemsx.cisd.common.api.IRpcService;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.annotation.RolesAllowed;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.api.v1.IProteomicsDataApiFacade;
+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.Experiment;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.api.v1.dto.MsInjectionDataInfo;
@@ -112,6 +113,13 @@ public interface IProteomicsDataService extends IRpcService
     @RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER)
     public List<Experiment> listExperiments(String sessionToken, String userID, String experimentTypeCode);
     
+    /**
+     * Returns all data sets of specified experiment which the specified user is allowed to read.
+     */
+    @Transactional(readOnly = true)
+    @RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER)
+    public List<DataSet> listDataSetsByExperiment(String sessionToken, String userID, long experimentID);
+    
     /**
      * Processes the data sets of specified experiments of type <tt>MS_SEARCH</tt> by the DSS
      * processing plug-in of specified key for the specified user. It will be checked if the
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICMLChromatogramImagesReporter.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICMLChromatogramImagesReporter.java
index 7b5a29d9cfcefdf619413692bf1f0b16315d6876..3068a62fae74f5a6c71961e12f6f481cc0e461e2 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICMLChromatogramImagesReporter.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICMLChromatogramImagesReporter.java
@@ -134,10 +134,10 @@ public class EICMLChromatogramImagesReporter extends AbstractEICMLDatastoreRepor
         List<DatasetRun> runs = new ArrayList<DatasetRun>();
         for (DatasetDescription dataset : datasets)
         {
-            EICMSRunDTO run = query.getMSRunByDatasetPermId(dataset.getDatasetCode());
+            EICMSRunDTO run = query.getMSRunByDatasetPermId(dataset.getDataSetCode());
             if (run != null)
             {
-                runs.add(new DatasetRun(dataset.getDatasetCode(), run));
+                runs.add(new DatasetRun(dataset.getDataSetCode(), run));
             }
         }
         return runs;
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICMLChromatogramsReporter.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICMLChromatogramsReporter.java
index 29b266a7b8bc8477c248f8e41de3c76b181541e8..311f921f447e5a1165e53154288f6c0173190e8a 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICMLChromatogramsReporter.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICMLChromatogramsReporter.java
@@ -64,7 +64,7 @@ public class EICMLChromatogramsReporter extends AbstractEICMLDatastoreReportingP
         List<EICMSRunDTO> runs = new ArrayList<EICMSRunDTO>();
         for (DatasetDescription dataset : datasets)
         {
-            EICMSRunDTO run = query.getMSRunByDatasetPermId(dataset.getDatasetCode());
+            EICMSRunDTO run = query.getMSRunByDatasetPermId(dataset.getDataSetCode());
             if (run != null)
             {
                 runs.add(run);
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICMLRunsReporter.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICMLRunsReporter.java
index fd6e9e8e5ca6ea8ca59ce533840751759cb7c366..036eaea98ecf5f5cb7bea502c0c92b5668ba63d8 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICMLRunsReporter.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICMLRunsReporter.java
@@ -51,7 +51,7 @@ public class EICMLRunsReporter extends AbstractEICMLDatastoreReportingPlugin
         addReportHeaders(builder);
         for (DatasetDescription dataset : datasets)
         {
-            EICMSRunDTO run = query.getMSRunByDatasetPermId(dataset.getDatasetCode());
+            EICMSRunDTO run = query.getMSRunByDatasetPermId(dataset.getDataSetCode());
             if (run != null)
             {
                 builder.addRow(createRow(run, dataset));
@@ -64,7 +64,7 @@ public class EICMLRunsReporter extends AbstractEICMLDatastoreReportingPlugin
             DatasetDescription dataset)
     {
         List<ISerializableComparable> row = new ArrayList<ISerializableComparable>();
-        row.add(asText(dataset.getDatasetCode()));
+        row.add(asText(dataset.getDataSetCode()));
         row.add(asText(run.getRawDataFilePath()));
         row.add(asText(run.getRawDataFileName()));
         row.add(asText(run.getInstrumentType()));
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/MLArchiverTask.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/MLArchiverTask.java
index 1116925a5eeeeeb3a935f1fe5694b5eefb5e4db7..aef5e2f9d34418528a1c247227e1866ddef3dd0d 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/MLArchiverTask.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/MLArchiverTask.java
@@ -90,7 +90,7 @@ public class MLArchiverTask extends AbstractArchiverProcessingPlugin
     {
         try
         {
-            dao.deleteDataSet(dataset.getDatasetCode());
+            dao.deleteDataSet(dataset.getDataSetCode());
             dao.commit();
         } catch (Exception ex)
         {
@@ -120,7 +120,7 @@ public class MLArchiverTask extends AbstractArchiverProcessingPlugin
             }
             Experiment experiment = getOrFetchExperiment(dataset, sample);
             File dataFile = getDataFile(dataset, directoryProvider);
-            databaseUploader.upload(dataFile, sample, experiment, dataset.getDatasetCode());
+            databaseUploader.upload(dataFile, sample, experiment, dataset.getDataSetCode());
             databaseUploader.commit();
         } catch (Exception ex)
         {
@@ -202,7 +202,7 @@ public class MLArchiverTask extends AbstractArchiverProcessingPlugin
         for (DatasetDescription dataset : datasets)
         {
             Status status = uploadToYeastXDatabase(dataset, context.getDirectoryProvider(), databaseUploader);
-            statuses.addResult(dataset.getDatasetCode(), status, operationName);
+            statuses.addResult(dataset.getDataSetCode(), status, operationName);
             counter++;
             if (counter % 100 == 0)
             {
@@ -253,7 +253,7 @@ public class MLArchiverTask extends AbstractArchiverProcessingPlugin
         DatasetProcessingStatuses statuses = new DatasetProcessingStatuses();
         for (DatasetLocation dataset : datasets)
         {
-            statuses.addResult(dataset.getDatasetCode(), Status.OK, Operation.DELETE_FROM_ARCHIVE);
+            statuses.addResult(dataset.getDataSetCode(), Status.OK, Operation.DELETE_FROM_ARCHIVE);
         }
         return statuses;
     }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/AbstractSpotImagesTransformerProcessingPlugin.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/AbstractSpotImagesTransformerProcessingPlugin.java
index f0d33bf686ade121793b1b1bbeb51a6431b4be53..8148e3721a7c03c5e1ce822f9b31fe24b53625a8 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/AbstractSpotImagesTransformerProcessingPlugin.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/AbstractSpotImagesTransformerProcessingPlugin.java
@@ -133,7 +133,7 @@ abstract public class AbstractSpotImagesTransformerProcessingPlugin extends Abst
     private GroupByMap<Long, ImgImageEnrichedDTO> fetchImages(DatasetDescription dataset)
     {
         List<ImgImageEnrichedDTO> allImages =
-                query.listHCSImages(dataset.getDatasetCode(), channelCode);
+                query.listHCSImages(dataset.getDataSetCode(), channelCode);
         GroupByMap<Long, ImgImageEnrichedDTO> imagesBySpot =
                 GroupByMap.create(allImages, new IKeyExtractor<Long, ImgImageEnrichedDTO>()
                     {
@@ -147,13 +147,13 @@ abstract public class AbstractSpotImagesTransformerProcessingPlugin extends Abst
             operationLog
                     .warn(String
                             .format("Dataset %s has no images for channel '%s' to process! Have you specified the correct channel code?",
-                                    dataset.getDatasetCode(), channelCode));
+                                    dataset.getDataSetCode(), channelCode));
         } else
         {
             operationLog
                     .info(String
                             .format("Dataset %s has %d images (devided between %d spots) for channel '%s' to process.",
-                                    dataset.getDatasetCode(), allImages.size(), imagesBySpot
+                                    dataset.getDataSetCode(), allImages.size(), imagesBySpot
                                             .getKeys().size(), channelCode));
         }
         return imagesBySpot;
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/FileBasedImageAnalysisGraphReportingPlugin.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/FileBasedImageAnalysisGraphReportingPlugin.java
index c80893c2089a4534ab5009098dcc4ae17e86089d..867ddb6ca805d295a981cb87f9fd9a420b526969 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/FileBasedImageAnalysisGraphReportingPlugin.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/FileBasedImageAnalysisGraphReportingPlugin.java
@@ -88,7 +88,7 @@ public class FileBasedImageAnalysisGraphReportingPlugin extends AbstractDataMerg
             {
                 throw UserFailureException.fromTemplate(
                         "Found multiple candidate files in the dataset %s ", dataset
-                                .getDatasetCode());
+                                .getDataSetCode());
             }
             builder.addRow(createRow(dataset, matchingFiles.get(0)));
         }
@@ -116,7 +116,7 @@ public class FileBasedImageAnalysisGraphReportingPlugin extends AbstractDataMerg
         List<ISerializableComparable> row = new ArrayList<ISerializableComparable>();
 
         // The data set and sample code
-        row.add(SimpleTableModelBuilder.asText(dataset.getDatasetCode()));
+        row.add(SimpleTableModelBuilder.asText(dataset.getDataSetCode()));
         row.add(SimpleTableModelBuilder.asText(dataset.getSampleCode()));
 
         for (String graphTypeCode : getGraphTypeCodes())
@@ -126,7 +126,7 @@ public class FileBasedImageAnalysisGraphReportingPlugin extends AbstractDataMerg
                     new GeneratedImageTableCell(graphServletPath, getImageWidth(),
                             getImageHeight(), getThumbnailWidth(), getThumbnailHeight());
             imageCell.addParameter(AbstractTabularDataGraphServlet.DATASET_CODE_PARAM, dataset
-                    .getDatasetCode());
+                    .getDataSetCode());
             imageCell.addParameter(AbstractTabularDataGraphServlet.FILE_PATH_PARAM, file
                     .getAbsolutePath());
             imageCell.addParameter(AbstractTabularDataGraphServlet.GRAPH_TYPE_CODE, graphTypeCode);
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ImageAnalysisGraphReportingPlugin.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ImageAnalysisGraphReportingPlugin.java
index 28d8b278581a46cce0327a40f0fe0441302e2cb2..936d1f65bdca3284a95d325f4348573a2ec3639f 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ImageAnalysisGraphReportingPlugin.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ImageAnalysisGraphReportingPlugin.java
@@ -107,7 +107,7 @@ public class ImageAnalysisGraphReportingPlugin extends AbstractDataMergingReport
         List<ISerializableComparable> row = new ArrayList<ISerializableComparable>();
 
         // The data set and sample code
-        row.add(SimpleTableModelBuilder.asText(dataset.getDatasetCode()));
+        row.add(SimpleTableModelBuilder.asText(dataset.getDataSetCode()));
         row.add(SimpleTableModelBuilder.asText(dataset.getSampleCode()));
 
         for (String graphTypeCode : getGraphTypeCodes())
@@ -117,7 +117,7 @@ public class ImageAnalysisGraphReportingPlugin extends AbstractDataMergingReport
                     new GeneratedImageTableCell(graphServletPath, getImageWidth(),
                             getImageHeight(), getThumbnailWidth(), getThumbnailHeight());
             imageCell.addParameter(AbstractTabularDataGraphServlet.DATASET_CODE_PARAM, dataset
-                    .getDatasetCode());
+                    .getDataSetCode());
             imageCell.addParameter(AbstractTabularDataGraphServlet.GRAPH_TYPE_CODE, graphTypeCode);
 
             row.add(imageCell);
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ImageAnalysisMergedRowsReportingPlugin.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ImageAnalysisMergedRowsReportingPlugin.java
index e041840c42f71cc56badb5894b6f2eccdd11b311..d8f14d0d9f2e8ba5bdf84748445f88812adb9089 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ImageAnalysisMergedRowsReportingPlugin.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ImageAnalysisMergedRowsReportingPlugin.java
@@ -155,7 +155,7 @@ public class ImageAnalysisMergedRowsReportingPlugin extends AbstractTableModelRe
         List<String> datasetCodes = new ArrayList<String>();
         for (DatasetDescription datasetDescription : datasets)
         {
-            datasetCodes.add(datasetDescription.getDatasetCode());
+            datasetCodes.add(datasetDescription.getDataSetCode());
         }
         return datasetCodes;
     }
diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ImageAnalysisMergedRowsReportingPluginTest.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ImageAnalysisMergedRowsReportingPluginTest.java
index 4b60d41b665da3cbe9798909732ef410c553331d..059e326c53d076d617bab3ef57c97638234bd92f 100644
--- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ImageAnalysisMergedRowsReportingPluginTest.java
+++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ImageAnalysisMergedRowsReportingPluginTest.java
@@ -112,7 +112,7 @@ public class ImageAnalysisMergedRowsReportingPluginTest extends AssertJUnit
         context.checking(new Expectations()
             {
                 {
-                    one(dao).listDatasetsByPermId(ds1.getDatasetCode(), ds2.getDatasetCode());
+                    one(dao).listDatasetsByPermId(ds1.getDataSetCode(), ds2.getDataSetCode());
                     will(returnValue(Arrays.asList(createDataSet(1), createDataSet(2))));
 
                     one(dao).listFeatureDefsByDataSetIds(1, 2);