diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java
index f32262e11da25ef650d363635c418282e45b9432..08f149232e89533dff3e3aef2ec05cc51c5cc855 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client;
 import java.util.Date;
 import java.util.List;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DataSetUploadParameters;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier;
@@ -393,8 +394,8 @@ public interface ICommonClientService extends IClientService
      */
     public List<DataSetType> listDataSetTypes() throws UserFailureException;
 
-    /** Uploads the specified data sets to the specified CIFEX server using the specified password. */
-    public void uploadDataSets(List<String> dataSetCodes, String cifexURL, String password)
+    /** Uploads the specified data sets to the specified CIFEX server using the specified parameters. */ 
+    public void uploadDataSets(List<String> dataSetCodes, DataSetUploadParameters uploadParameters)
             throws UserFailureException;
 
     /**
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java
index d5292bc55bea3e70739cfa85c8edd37810b82833..2fe492b0731af363fe76c6731623a5ae409efba5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java
@@ -21,6 +21,7 @@ import java.util.List;
 
 import com.google.gwt.user.client.rpc.AsyncCallback;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DataSetUploadParameters;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier;
@@ -352,8 +353,8 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync
     /** @see ICommonClientService#listDataSetTypes() */
     public void listDataSetTypes(AsyncCallback<List<DataSetType>> callback);
 
-    /** @see ICommonClientService#uploadDataSets(List, String, String) */
-    public void uploadDataSets(List<String> dataSetCodes, String cifexURL, String password,
+    /** @see ICommonClientService#uploadDataSets(List, DataSetUploadParameters) */
+    public void uploadDataSets(List<String> dataSetCodes, DataSetUploadParameters uploadParameters,
             AsyncCallback<Void> callback);
 
     /** @see ICommonClientService#getLastModificationState() */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java
index 77c754e90b045bf8266dc5011996e5b7ef7a9b94..69d98c7d116dbb41bc82c88bb90cdf47576a8a84 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java
@@ -25,6 +25,7 @@ import com.extjs.gxt.ui.client.event.KeyListener;
 import com.extjs.gxt.ui.client.event.SelectionListener;
 import com.extjs.gxt.ui.client.widget.Dialog;
 import com.extjs.gxt.ui.client.widget.button.Button;
+import com.extjs.gxt.ui.client.widget.form.TextArea;
 import com.extjs.gxt.ui.client.widget.form.TextField;
 import com.extjs.gxt.ui.client.widget.toolbar.AdapterToolItem;
 
@@ -40,6 +41,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.Ab
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IBrowserGridActionInvoker;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICellListener;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.DataSetUtils;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DataSetUploadParameters;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.IColumnDefinition;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
@@ -149,6 +151,8 @@ public abstract class AbstractExternalDataGrid extends AbstractSimpleBrowserGrid
     {
         private final String cifexURL;
         private final TextField<String> password;
+        private TextField<String> fileNameField;
+        private TextArea commentField;
 
         public UploadConfirmationDialog(IViewContext<?> viewContext, List<ExternalData> dataSets,
                 IBrowserGridActionInvoker invoker)
@@ -156,9 +160,13 @@ public abstract class AbstractExternalDataGrid extends AbstractSimpleBrowserGrid
             super(viewContext, dataSets, invoker, Dict.CONFIRM_DATASET_UPLOAD_TITLE);
             cifexURL = viewContext.getModel().getApplicationInfo().getCIFEXURL();
             addText(viewContext.getMessage(Dict.CONFIRM_DATASET_UPLOAD_MSG, dataSets.size(), cifexURL));
+            fileNameField = new TextField<String>();
+            fileNameField.setSelectOnFocus(true);
+            add(fileNameField);
+            commentField = new TextArea();
+            add(commentField);
             password = new TextField<String>();
             password.setPassword(true);
-            password.setSelectOnFocus(true);
             password.setHideLabel(true);
             password.setWidth("100%");
             password.setMaxLength(50);
@@ -171,7 +179,13 @@ public abstract class AbstractExternalDataGrid extends AbstractSimpleBrowserGrid
             super.onButtonPressed(button);
             if (button.getItemId().equals(Dialog.OK))
             {
-                viewContext.getCommonService().uploadDataSets(dataSetCodes, cifexURL, password.getValue(),
+                DataSetUploadParameters parameters = new DataSetUploadParameters();
+                parameters.setCifexURL(cifexURL);
+                parameters.setFileName(fileNameField.getValue());
+                parameters.setComment(commentField.getValue());
+                parameters.setUserID(viewContext.getModel().getSessionContext().getUser().getUserName());
+                parameters.setPassword(password.getValue());
+                viewContext.getCommonService().uploadDataSets(dataSetCodes, parameters,
                         new UploadCallback(viewContext));
             }
         }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DataSetUploadParameters.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DataSetUploadParameters.java
new file mode 100644
index 0000000000000000000000000000000000000000..0b8ec70c82d2f423e534a7a1d254b6db0115b2b6
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DataSetUploadParameters.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2009 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.generic.client.web.client.dto;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+/**
+ * 
+ *
+ * @author Franz-Josef Elmer
+ */
+public class DataSetUploadParameters implements IsSerializable
+{
+    private String cifexURL;
+    
+    private String fileName;
+
+    private String userID;
+    
+    private String password;
+    
+    private String comment;
+
+    public final String getCifexURL()
+    {
+        return cifexURL;
+    }
+
+    public final void setCifexURL(String cifexURL)
+    {
+        this.cifexURL = cifexURL;
+    }
+
+    public final String getFileName()
+    {
+        return fileName;
+    }
+
+    public final void setFileName(String fileName)
+    {
+        this.fileName = fileName;
+    }
+
+    public final String getUserID()
+    {
+        return userID;
+    }
+
+    public final void setUserID(String userID)
+    {
+        this.userID = userID;
+    }
+
+    public final String getPassword()
+    {
+        return password;
+    }
+
+    public final void setPassword(String password)
+    {
+        this.password = password;
+    }
+
+    public final String getComment()
+    {
+        return comment;
+    }
+
+    public final void setComment(String comment)
+    {
+        this.comment = comment;
+    }
+
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java
index a9bfe2390723cc37f2d7ec39b993202911a273d5..770ff9058922d426f30ea84a10fcd87f0bc42114 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java
@@ -32,6 +32,7 @@ import ch.systemsx.cisd.common.servlet.IRequestContextProvider;
 import ch.systemsx.cisd.common.spring.IUncheckedMultipartFile;
 import ch.systemsx.cisd.common.utilities.BeanUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientService;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DataSetUploadParameters;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalData;
@@ -99,6 +100,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTermReplaceme
 import ch.systemsx.cisd.openbis.generic.shared.dto.AttachmentContentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AttachmentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetTypePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetUploadContext;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
@@ -1108,13 +1110,19 @@ public final class CommonClientService extends AbstractClientService implements
 
     }
 
-    public void uploadDataSets(List<String> dataSetCodes, String cifexURL, String password)
+    public void uploadDataSets(List<String> dataSetCodes, DataSetUploadParameters uploadParameters)
             throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
     {
         try
         {
             final String sessionToken = getSessionToken();
-            commonServer.uploadDataSets(sessionToken, dataSetCodes, cifexURL, password);
+            DataSetUploadContext uploadContext = new DataSetUploadContext();
+            uploadContext.setCifexURL(uploadParameters.getCifexURL());
+            uploadContext.setComment(uploadParameters.getComment());
+            uploadContext.setFileName(uploadParameters.getFileName());
+            uploadContext.setUserID(uploadParameters.getUserID());
+            uploadContext.setPassword(uploadParameters.getPassword());
+            commonServer.uploadDataSets(sessionToken, dataSetCodes, uploadContext);
         } catch (final UserFailureException e)
         {
             throw UserFailureExceptionTranslator.translate(e);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
index da189fb26e3d708198e10990ca7bbc2516be73c8..9d520df927f0b3808a2febdc58ea09738070caa7 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
@@ -69,6 +69,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTermReplacement;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AttachmentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetTypePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetUploadContext;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE;
@@ -654,8 +655,8 @@ public final class CommonServer extends AbstractServer<ICommonServer> implements
         }
     }
 
-    public void uploadDataSets(String sessionToken, List<String> dataSetCodes, String cifexURL,
-            String password)
+    public void uploadDataSets(String sessionToken, List<String> dataSetCodes,
+            DataSetUploadContext uploadContext)
     {
         Session session = getSessionManager().getSession(sessionToken);
         try
@@ -663,7 +664,7 @@ public final class CommonServer extends AbstractServer<ICommonServer> implements
             IExternalDataTable externalDataTable =
                     businessObjectFactory.createExternalDataTable(session);
             externalDataTable.loadByDataSetCodes(dataSetCodes);
-            externalDataTable.uploadLoadedDataSetsToCIFEX(dssSessionManager, cifexURL, password);
+            externalDataTable.uploadLoadedDataSetsToCIFEX(dssSessionManager, uploadContext);
         } catch (final DataAccessException ex)
         {
             throw createUserFailureException(ex);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java
index a04760994cc146fcc4a5230006bc0d27066510dd..55a4d4457fb94c863a0e764cb50dd0ff642adf7c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java
@@ -39,6 +39,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTermReplacement;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AttachmentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetTypePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetUploadContext;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentTypePE;
@@ -346,11 +347,11 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe
         logTracking(sessionToken, "delete_data_sets", "CODES(%s) REASON(%s)", dataSetCodes, reason);
     }
 
-    public void uploadDataSets(String sessionToken, List<String> dataSetCodes, String cifexURL,
-            String password)
+    public void uploadDataSets(String sessionToken, List<String> dataSetCodes,
+            DataSetUploadContext uploadContext)
     {
-        logTracking(sessionToken, "upload_data_sets", "CODES(%s) CIFEX-URL(%s)", dataSetCodes,
-                cifexURL);
+        logTracking(sessionToken, "upload_data_sets", "CODES(%s) CIFEX-URL(%s) FILE(%s)", dataSetCodes,
+                uploadContext.getCifexURL(), uploadContext.getFileName());
     }
 
     public void editMaterial(String sessionToken, MaterialIdentifier identifier,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java
index a96589f26df8036fa9330a31bd79576731241326..c5d742288fdd75346f80361d398ca39c06c82d24 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java
@@ -22,6 +22,8 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 
+import org.apache.commons.lang.StringUtils;
+
 import ch.rinn.restrictions.Private;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.server.business.DataStoreServerSessionManager;
@@ -178,17 +180,16 @@ public final class ExternalDataTable extends AbstractExternalDataBusinessObject
     }
 
     public void uploadLoadedDataSetsToCIFEX(DataStoreServerSessionManager dssSessionManager,
-            String cifexURL, String password)
+            DataSetUploadContext uploadContext)
     {
         assertDataSetsAreKnown(dssSessionManager);
         Collection<DataStoreServerSession> sessions = dssSessionManager.getSessions();
         List<String> locations = getLocations();
-        DataSetUploadContext uploadContext = new DataSetUploadContext();
-        uploadContext.setCifexURL(cifexURL);
-        uploadContext.setUserID(session.getUserName());
-        uploadContext.setPassword(password);
         uploadContext.setUserEMail(session.getPrincipal().getEmail());
-        uploadContext.setComment(createUploadComment(externalData));
+        if (StringUtils.isBlank(uploadContext.getComment()))
+        {
+            uploadContext.setComment(createUploadComment(externalData));
+        }
         for (DataStoreServerSession dssSession : sessions)
         {
             dssSession.getService().uploadDataSetsToCIFEX(dssSession.getSessionToken(), locations,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IExternalDataTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IExternalDataTable.java
index 2926525c7a1d0e0993bb48f5b073ce3e0813d532..ebe86e76add3392ed670fc1c01b7b35abded743a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IExternalDataTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IExternalDataTable.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo;
 import java.util.List;
 
 import ch.systemsx.cisd.openbis.generic.server.business.DataStoreServerSessionManager;
+import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetUploadContext;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
@@ -64,10 +65,10 @@ public interface IExternalDataTable
     void deleteLoadedDataSets(DataStoreServerSessionManager dssSessionManager, String reason);
     
     /**
-     * Uploads loaded data sets to CIFEX server of specified URL using specified password 
-     * for authentication (assuming same user ID as on openBIS server).
+     * Uploads loaded data sets to CIFEX server of specified URL using specified upload
+     * context.
      */
     void uploadLoadedDataSetsToCIFEX(DataStoreServerSessionManager dssSessionManager,
-            String cifexURL, String password);
+            DataSetUploadContext uploadContext);
 
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java
index 39afa5a49651bfcba27a282f52685bbef1aab011..030a8734cc595b9da594df77b62d6e2243b30687 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java
@@ -50,6 +50,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTermReplaceme
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AttachmentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetTypePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetUploadContext;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentTypePE;
@@ -398,8 +399,8 @@ public interface ICommonServer extends IServer
      */
     @Transactional
     @RolesAllowed(RoleSet.OBSERVER)
-    public void uploadDataSets(String sessionToken, List<String> dataSetCodes, String cifexURL,
-            String password);
+    public void uploadDataSets(String sessionToken, List<String> dataSetCodes,
+            DataSetUploadContext uploadContext);
 
     /**
      * Saves changed experiment.
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataSetUploadContext.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataSetUploadContext.java
index 0b5e181d568dd553e3c797ad972b5d2d32d8d7e0..448bbcf8ce1a8beb0c68f4e74acd5e11adbc92d0 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataSetUploadContext.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataSetUploadContext.java
@@ -35,6 +35,8 @@ public class DataSetUploadContext implements Serializable
     private static final long serialVersionUID = GenericSharedConstants.VERSION;
     
     private String cifexURL;
+    
+    private String fileName;
 
     private String userID;
     
@@ -44,6 +46,16 @@ public class DataSetUploadContext implements Serializable
 
     private String email;
 
+    public final String getFileName()
+    {
+        return fileName;
+    }
+
+    public final void setFileName(String fileName)
+    {
+        this.fileName = fileName;
+    }
+
     public final String getCifexURL()
     {
         return cifexURL;
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java
index fb3d6b31ba7622a8ced598f0823a8ce3bb758e88..d3125f8aa33b3fd5cf4db8f42646f64cc48f3d04 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java
@@ -45,6 +45,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTermReplacement;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AttachmentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetTypePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetUploadContext;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
@@ -898,6 +899,7 @@ public final class CommonServerTest extends AbstractServerTestCase
     {
         prepareGetSession();
         final List<String> dataSetCodes = Arrays.asList("a", "b");
+        final DataSetUploadContext uploadContext = new DataSetUploadContext();
         context.checking(new Expectations()
             {
                 {
@@ -906,11 +908,11 @@ public final class CommonServerTest extends AbstractServerTestCase
 
                     one(externalDataTable).loadByDataSetCodes(dataSetCodes);
                     one(externalDataTable).uploadLoadedDataSetsToCIFEX(dssSessionManager,
-                            "cifexURL", "pwd");
+                            uploadContext);
                 }
             });
 
-        createServer().uploadDataSets(SESSION_TOKEN, dataSetCodes, "cifexURL", "pwd");
+        createServer().uploadDataSets(SESSION_TOKEN, dataSetCodes, uploadContext);
 
         context.assertIsSatisfied();
     }
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 4fc2e9b02a8daa05c9128d5c80b93e875e4e6380..6b674e674f01b5078c4dce25874596f2d420aee5 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
@@ -356,6 +356,12 @@ public final class ExternalDataTableTest extends AbstractBOTest
                 dataStoreService));
         final ExternalDataPE d1 = createDataSet("d1");
         final ExternalDataPE d2 = createDataSet("d2");
+        final DataSetUploadContext uploadContext = new DataSetUploadContext();
+        uploadContext.setCifexURL("cifexURL");
+        uploadContext.setUserID(EXAMPLE_SESSION.getUserName());
+        uploadContext.setPassword("pwd");
+        uploadContext.setUserEMail(EXAMPLE_SESSION.getPrincipal().getEmail());
+        uploadContext.setComment(ExternalDataTable.createUploadComment(Arrays.asList(d1, d2)));
         context.checking(new Expectations()
             {
                 {
@@ -370,12 +376,6 @@ public final class ExternalDataTableTest extends AbstractBOTest
                             with(equal(locations)));
                     will(returnValue(locations));
 
-                    DataSetUploadContext uploadContext = new DataSetUploadContext();
-                    uploadContext.setCifexURL("cifexURL");
-                    uploadContext.setUserID(EXAMPLE_SESSION.getUserName());
-                    uploadContext.setPassword("pwd");
-                    uploadContext.setUserEMail(EXAMPLE_SESSION.getPrincipal().getEmail());
-                    uploadContext.setComment(ExternalDataTable.createUploadComment(Arrays.asList(d1, d2)));
                     one(dataStoreService).uploadDataSetsToCIFEX(with(any(String.class)),
                             with(equal(locations)), with(equal(uploadContext)));
                 }
@@ -383,7 +383,7 @@ public final class ExternalDataTableTest extends AbstractBOTest
 
         ExternalDataTable externalDataTable = createExternalDataTable();
         externalDataTable.loadByDataSetCodes(Arrays.asList(d1.getCode(), d2.getCode()));
-        externalDataTable.uploadLoadedDataSetsToCIFEX(dssSessionManager, "cifexURL", "pwd");
+        externalDataTable.uploadLoadedDataSetsToCIFEX(dssSessionManager, uploadContext);
 
         context.assertIsSatisfied();
     }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected
index 43ff1e8f3598ebeb0c24080bcf5ad8a0a5f32e5d..5be74491c58e3de9ed5084795aa04a36c3fc8c0a 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected
@@ -35,6 +35,7 @@ import ch.systemsx.cisd.openbis.generic.shared.authorization.validator.GroupVali
 import ch.systemsx.cisd.openbis.generic.shared.authorization.validator.MatchingEntityValidator;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.validator.ProjectValidator;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetSearchCriteria;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetUploadContext;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LastModificationState;
@@ -398,8 +399,8 @@ public interface ICommonServer extends IServer
      */
     @Transactional
     @RolesAllowed(RoleSet.OBSERVER)
-    public void uploadDataSets(String sessionToken, List<String> dataSetCodes, String cifexURL,
-            String password);
+    public void uploadDataSets(String sessionToken, List<String> dataSetCodes,
+            DataSetUploadContext uploadContext);
 
     /**
      * Saves changed experiment.