diff --git a/openbis_standard_technologies/dist/core-plugins/dataset-uploader/1/dss/reporting-plugins/dataset-uploader-api/dataset-uploader-api.py b/openbis_standard_technologies/dist/core-plugins/dataset-uploader/1/dss/reporting-plugins/dataset-uploader-api/dataset-uploader-api.py
index be1020b632015aa7af2d2366cc1f35ffbf8a6124..74bfe7e73fd1ba19674aa4196a0d90135ef10eb6 100644
--- a/openbis_standard_technologies/dist/core-plugins/dataset-uploader/1/dss/reporting-plugins/dataset-uploader-api/dataset-uploader-api.py
+++ b/openbis_standard_technologies/dist/core-plugins/dataset-uploader/1/dss/reporting-plugins/dataset-uploader-api/dataset-uploader-api.py
@@ -45,6 +45,7 @@ def process(tr, parameters, tableBuilder):
 	tr.setUserId(userId);
 	
 	if method == "insertDataSet":
+                permId = parameters.get("permId");
 		sampleIdentifier = parameters.get("sampleIdentifier"); #String
 		experimentIdentifier = parameters.get("experimentIdentifier"); #String
 		dataSetType = parameters.get("dataSetType"); #String
@@ -55,7 +56,7 @@ def process(tr, parameters, tableBuilder):
 		isZipDirectoryUpload = parameters.get("isZipDirectoryUpload"); #String
 		metadata = parameters.get("properties"); #java.util.LinkedHashMap<String, String> where the key is the name
 		parentIdentifiers = parameters.get('parentIdentifiers');
-		isOk, result = insertDataSet(tr, sampleIdentifier, experimentIdentifier, dataSetType, folderName, fileNames, isZipDirectoryUpload, metadata, parentIdentifiers);
+		isOk, result = insertDataSet(tr, permId, sampleIdentifier, experimentIdentifier, dataSetType, folderName, fileNames, isZipDirectoryUpload, metadata, parentIdentifiers);
 	
 	if isOk:
 		tableBuilder.addHeader("STATUS");
@@ -82,10 +83,14 @@ def getThreadProperties(transaction):
       pass
   return threadPropertyDict
 
-def insertDataSet(tr, sampleIdentifier, experimentIdentifier, dataSetType, folderName, fileNames, isZipDirectoryUpload, metadata, parentIds):
+def insertDataSet(tr, permId, sampleIdentifier, experimentIdentifier, dataSetType, folderName, fileNames, isZipDirectoryUpload, metadata, parentIds):
 		
-	#Create Dataset
-	dataSet = tr.createNewDataSet(dataSetType);
+	#Create Dataset, either with or without a prior defined permId
+        if permId is not None:
+	    dataSet = tr.createNewDataSet(dataSetType, permId);
+        else:
+	    dataSet = tr.createNewDataSet(dataSetType);
+
 	dataSet.setParentDatasets(parentIds);
 	if sampleIdentifier is not None:
 		dataSetSample = tr.getSampleForUpdate(sampleIdentifier);