diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/FileInfoDssBuilder.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/FileInfoDssBuilder.java
index 43996bf4efae81934de8a22b55966a4dd1b341b0..19062bb02865f519c674ae569ac18d4c53f91632 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/FileInfoDssBuilder.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/FileInfoDssBuilder.java
@@ -20,6 +20,7 @@ import java.io.File;
 import java.io.IOException;
 import java.net.URI;
 import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Helper Class for creating FileInfoDss objects based on file system.
@@ -33,6 +34,28 @@ import java.util.ArrayList;
 public class FileInfoDssBuilder
 {
 
+    /**
+     * Return a list of {@link FileInfoDssDTO} objects corresponding to all files existing within a
+     * certain folder. The list is accumulated recursively.
+     */
+    public static List<FileInfoDssDTO> getFileInfos(File dataSetContents)
+    {
+        FileInfoDssBuilder fileInfoBuilder =
+                new FileInfoDssBuilder(dataSetContents.getAbsolutePath(),
+                        dataSetContents.getAbsolutePath());
+        ArrayList<FileInfoDssDTO> fileInfos = new ArrayList<FileInfoDssDTO>();
+        try
+        {
+            fileInfoBuilder.appendFileInfosForFile(dataSetContents, fileInfos, true);
+        } catch (IOException ioex)
+        {
+            throw new RuntimeException(
+                    "Error occurred while gathering information from the local data set contents: "
+                            + ioex.getMessage(), ioex);
+        }
+        return fileInfos;
+    }
+
     private final File dataSetRootFile;
 
     private final File listingRootFile;
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/NewDataSetDTO.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/NewDataSetDTO.java
index 18964d505cedd6384a6060d38cf155ddbefd560e..4ca73bb053e5c6bbeb826c62461649f0fc8341e3 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/NewDataSetDTO.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/NewDataSetDTO.java
@@ -16,6 +16,7 @@
 
 package ch.systemsx.cisd.openbis.dss.generic.shared.api.v1;
 
+import java.io.File;
 import java.io.Serializable;
 import java.util.List;
 import java.util.Map;
@@ -89,6 +90,16 @@ public class NewDataSetDTO implements Serializable
         }
     }
 
+    private static String getFolderNameOrNull(File dataSetFile)
+    {
+        String folderNameOrNull = null;
+        if (dataSetFile.isDirectory())
+        {
+            folderNameOrNull = dataSetFile.getName();
+        }
+        return folderNameOrNull;
+    }
+    
     private static final long serialVersionUID = 1L;
 
     private final DataSetOwner dataSetOwner;
@@ -99,6 +110,18 @@ public class NewDataSetDTO implements Serializable
 
     private final NewDataSetMetadataDTO dataSetMetadata;
 
+    /**
+     * Constructor
+     * 
+     * @param dataSetOwner the owner of the new data set
+     * @param dataSetFile a local file or directory whose contents will be uploaded to openBIS.
+     */
+    public NewDataSetDTO(DataSetOwner dataSetOwner, File dataSetFile)
+    {
+        this(dataSetOwner, getFolderNameOrNull(dataSetFile), FileInfoDssBuilder
+                .getFileInfos(dataSetFile));
+    }
+
     /**
      * Constructor
      *