diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/AbstractSwingGUI.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/AbstractSwingGUI.java
index 7922591c9faa7fe8661502374144321bd94b74a4..901034a97e5e191f423fd2d4bb6628fe25e10a25 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/AbstractSwingGUI.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/AbstractSwingGUI.java
@@ -32,12 +32,14 @@ import org.apache.commons.lang.WordUtils;
 import org.springframework.remoting.RemoteAccessException;
 
 import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
+import ch.systemsx.cisd.common.api.client.ServiceFinder;
 import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException;
 import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
 import ch.systemsx.cisd.common.exceptions.InvalidSessionException;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.dss.client.api.v1.DssComponentFactory;
 import ch.systemsx.cisd.openbis.dss.client.api.v1.IDssComponent;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService;
 
 /**
  * @author Chandrasekhar Ramakrishnan
@@ -351,6 +353,18 @@ class DssCommunicationState
 {
     private final IDssComponent dssComponent;
 
+    private final IGeneralInformationService generalInformationService;
+
+    private static IGeneralInformationService createGeneralInformationService(String openBISURL)
+    {
+        ServiceFinder generalInformationServiceFinder =
+                new ServiceFinder("openbis", IGeneralInformationService.SERVICE_URL);
+        IGeneralInformationService service =
+                generalInformationServiceFinder.createService(IGeneralInformationService.class,
+                        openBISURL);
+        return service;
+    }
+
     /**
      * Create a new instance of the DssCommunicationState based info in the arguments. Throws an
      * exception if it could not be created.
@@ -363,7 +377,7 @@ class DssCommunicationState
             throw new ConfigurationFailureException(
                     "The openBIS File Upload Client was improperly configured -- the arguments it requires were not supplied. Please talk to the openBIS administrator.");
 
-        final String openBisUrl = args[0];
+        String openBisUrl = args[0];
 
         switch (args.length)
         {
@@ -386,10 +400,17 @@ class DssCommunicationState
                             "The user name / password combination is incorrect.");
                 }
         }
+
+        generalInformationService = createGeneralInformationService(openBisUrl);
     }
 
     IDssComponent getDssComponent()
     {
         return dssComponent;
     }
+
+    public IGeneralInformationService getGeneralInformationService()
+    {
+        return generalInformationService;
+    }
 }
\ No newline at end of file
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetMetadataPanel.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetMetadataPanel.java
index ea789d7e18e00c51dd6485782d824fcddc609620..ed16a716d7cc7e86ab2596c649d5ce0d33b0d352 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetMetadataPanel.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetMetadataPanel.java
@@ -49,6 +49,7 @@ import javax.swing.JTextField;
 import ch.systemsx.cisd.openbis.dss.client.api.gui.DataSetUploadClientModel.NewDataSetInfo;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTO.DataSetOwnerType;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTOBuilder;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetType;
 
 /**
  * @author Chandrasekhar Ramakrishnan
@@ -185,9 +186,9 @@ public class DataSetMetadataPanel extends JPanel
 
         dataSetTypeComboBox.setPreferredSize(new Dimension(BUTTON_WIDTH, BUTTON_HEIGHT));
         dataSetTypeComboBox.setToolTipText("Select the data set type for the experiment");
-        for (String dataSetType : getDataSetTypes())
+        for (DataSetType dataSetType : getDataSetTypes())
         {
-            dataSetTypeComboBox.addItem(dataSetType);
+            dataSetTypeComboBox.addItem(dataSetType.getCode());
         }
         dataSetTypeComboBox.addItemListener(new ItemListener()
             {
@@ -199,9 +200,6 @@ public class DataSetMetadataPanel extends JPanel
             });
         addRow(2, label, dataSetTypeComboBox);
 
-        createDataSetTypePanel();
-        addRow(3, dataSetTypePanel);
-
         // The file row
         label = new JLabel("File:", JLabel.TRAILING);
         label.setPreferredSize(new Dimension(LABEL_WIDTH, BUTTON_HEIGHT));
@@ -229,7 +227,10 @@ public class DataSetMetadataPanel extends JPanel
                 }
 
             });
-        addRow(4, label, dataSetFileButton);
+        addRow(3, label, dataSetFileButton);
+
+        createDataSetTypePanel();
+        addRow(4, dataSetTypePanel);
     }
 
     protected void updateFileLabel()
@@ -247,11 +248,11 @@ public class DataSetMetadataPanel extends JPanel
     private void createDataSetTypePanel()
     {
         dataSetTypePanel.setLayout(new CardLayout());
-        for (String dataSetType : getDataSetTypes())
+        for (DataSetType dataSetType : getDataSetTypes())
         {
             JPanel typeView = new JPanel();
-            typeView.add(new JLabel(dataSetType), BorderLayout.CENTER);
-            dataSetTypePanel.add(typeView, dataSetType);
+            typeView.add(new JLabel(dataSetType.getCode()), BorderLayout.CENTER);
+            dataSetTypePanel.add(typeView, dataSetType.getCode());
         }
     }
 
@@ -309,7 +310,7 @@ public class DataSetMetadataPanel extends JPanel
         add(comp, c);
     }
 
-    private List<String> getDataSetTypes()
+    private List<DataSetType> getDataSetTypes()
     {
         return clientModel.getDataSetTypes();
     }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadClient.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadClient.java
index 20a7c3ab6891e90604aae17f24950cfa971a201b..259da27c3b0573a5cfd9814456aea1402f412517 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadClient.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadClient.java
@@ -110,7 +110,7 @@ public class DataSetUploadClient extends AbstractSwingGUI
         // save and create local state
         super(commState);
 
-        clientModel = new DataSetUploadClientModel(getDssComponent(), timeProvider);
+        clientModel = new DataSetUploadClientModel(commState, timeProvider);
         metadataPanel = new DataSetMetadataPanel(clientModel, getWindowFrame());
         tableModel =
                 new DataSetUploadTableModel(this, clientModel, metadataPanel, getWindowFrame());
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadClientModel.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadClientModel.java
index 76610f168ffc02d60ef1fd3f038fc35e330d3741..79f4119ae202e97d9076e89598efd41fe71f13bb 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadClientModel.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadClientModel.java
@@ -17,7 +17,6 @@
 package ch.systemsx.cisd.openbis.dss.client.api.gui;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
@@ -26,22 +25,31 @@ import ch.systemsx.cisd.common.utilities.ITimeProvider;
 import ch.systemsx.cisd.openbis.dss.client.api.v1.IDssComponent;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.FileInfoDssDTO;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTOBuilder;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetType;
 
 /**
  * @author Chandrasekhar Ramakrishnan
  */
 public class DataSetUploadClientModel
 {
+
     private final IDssComponent dssComponent;
 
+    private final IGeneralInformationService generalInformationService;
+
     private final ITimeProvider timeProvider;
 
+    private final List<DataSetType> dataSetTypes;
+
     private final ArrayList<NewDataSetInfo> newDataSetInfos = new ArrayList<NewDataSetInfo>();
 
-    public DataSetUploadClientModel(IDssComponent dssComponent, ITimeProvider timeProvider)
+    public DataSetUploadClientModel(DssCommunicationState commState, ITimeProvider timeProvider)
     {
-        this.dssComponent = dssComponent;
+        this.dssComponent = commState.getDssComponent();
+        this.generalInformationService = commState.getGeneralInformationService();
         this.timeProvider = timeProvider;
+        dataSetTypes = generalInformationService.listDataSetTypes(dssComponent.getSessionToken());
     }
 
     /**
@@ -195,11 +203,9 @@ public class DataSetUploadClientModel
     /**
      * Get the data set types that are shown here.
      */
-    public List<String> getDataSetTypes()
+    public List<DataSetType> getDataSetTypes()
     {
-        String[] dataSetTypes =
-            { "Data Set Type 1", "Data Set Type 2", "Data Set Type 3" };
-        return Arrays.asList(dataSetTypes);
+        return dataSetTypes;
     }
 
     public int getIndexOfDataSetType(String dataSetType)
@@ -208,12 +214,15 @@ public class DataSetUploadClientModel
         {
             return 0;
         }
-        int index = getDataSetTypes().indexOf(dataSetType);
-        if (index < 0)
+
+        for (int i = 0; i < dataSetTypes.size(); ++i)
         {
-            return 0;
+            if (dataSetTypes.get(i).getCode().equals(dataSetType))
+            {
+                return i;
+            }
         }
-        return index;
+        return 0;
     }
 
 }