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 d5b418e7670c42dabd7733dd271ac5e10fa40a56..79c16ef27bcaaed40e5397dd818561345c8c2b25 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
@@ -120,39 +120,51 @@ public abstract class AbstractDataMergingReportingPlugin extends AbstractFileTab
     protected DatasetFileLines loadFromDirectory(DatasetDescription dataset, final File dir)
             throws ParserException, ParsingException, IllegalArgumentException,
             IOExceptionUnchecked
+    {
+        List<File> datasetFilesToMerge = findMatchingFiles(dataset, dir);
+        if (datasetFilesToMerge.size() != 1)
+        {
+            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
+                                    .size());
+        } else
+        {
+            return loadFromFile(dataset, datasetFilesToMerge.get(0));
+        }
+    }
+
+    /**
+     * Scan the specified directory to find files that match the dataset description.
+     * 
+     * @throws IOExceptionUnchecked if a {@link IOException} has occurred.
+     */
+    protected List<File> findMatchingFiles(DatasetDescription dataset, final File dir)
+            throws IllegalArgumentException, IOExceptionUnchecked
     {
         assert dir != null : "Given file must not be null";
         assert dir.isDirectory() : "Given file '" + dir.getAbsolutePath() + "' is not a directory.";
 
         File[] datasetFiles = FileUtilities.listFiles(dir);
-        List<File> datasetFilesToMerge = new ArrayList<File>();
+        List<File> matchingFiles = new ArrayList<File>();
         for (File datasetFile : datasetFiles)
         {
             if (datasetFile.isDirectory())
             {
                 // recursively go down the directories
-                return loadFromDirectory(dataset, datasetFile);
+                return findMatchingFiles(dataset, datasetFile);
             } else
             {
                 // exclude files with properties
                 if (isFileExcluded(datasetFile) == false)
                 {
-                    datasetFilesToMerge.add(datasetFile);
+                    matchingFiles.add(datasetFile);
                 }
             }
 
         }
-        if (datasetFilesToMerge.size() != 1)
-        {
-            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
-                                    .size());
-        } else
-        {
-            return loadFromFile(dataset, datasetFilesToMerge.get(0));
-        }
+        return matchingFiles;
     }
 
     protected boolean isFileExcluded(File file)