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 f1bfe077f04f0184b727e3e37177db6fed1922f1..8288271a26f667146fac4fbad51408d65659981a 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
@@ -44,6 +44,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Code;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetArchivingStatus;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel;
+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.DataStorePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
@@ -51,6 +52,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.EventPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EventType;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.GroupPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
@@ -471,20 +473,24 @@ public final class ExternalDataTable extends AbstractExternalDataBusinessObject
     {
         assert dataSet != null;
 
-        String datasetCode = dataSet.getCode();
-        String location = dataSet.getLocation();
+        DatasetDescription description = new DatasetDescription();
+        description.setDatasetCode(dataSet.getCode());
+        description.setDataSetLocation(dataSet.getLocation());
         SamplePE sample = dataSet.tryGetSample();
-        String sampleCode = sample == null ? null : sample.getCode();
+        description.setSampleCode(sample == null ? null : sample.getCode());
         ExperimentPE experiment = dataSet.getExperiment();
+        description.setExperimentCode(experiment.getCode());
         ProjectPE project = experiment.getProject();
-        String groupCode = project.getGroup().getCode();
-        String projectCode = project.getCode();
-        String experimentCode = experiment.getCode();
-        String instanceCode = project.getGroup().getDatabaseInstance().getCode();
-
-        return new DatasetDescription(datasetCode, location, sampleCode, groupCode, projectCode,
-                experimentCode, dataSet.getDataSetType().getMainDataSetPattern(), dataSet
-                        .getDataSetType().getMainDataSetPath(), instanceCode);
+        description.setProjectCode(project.getCode());
+        GroupPE group = project.getGroup();
+        description.setGroupCode(group.getCode());
+        description.setDatabaseInstanceCode(group.getDatabaseInstance().getCode());
+        DataSetTypePE dataSetType = dataSet.getDataSetType();
+        description.setMainDataSetPath(dataSetType.getMainDataSetPath());
+        description.setMainDataSetPattern(dataSetType.getMainDataSetPattern());
+        description.setDatasetTypeCode(dataSetType.getCode());
+
+        return description;
     }
 
     private DataStorePE findDataStore(String datastoreCode)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DatasetDescription.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DatasetDescription.java
index 7ba5d4cfe81f552a3cbb2694eac275a388ee8517..e903ccec2846af3d353bbcb79234e49676ee15a6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DatasetDescription.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DatasetDescription.java
@@ -29,37 +29,34 @@ public class DatasetDescription implements Serializable
 {
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
 
-    private final String datasetCode;
+    private String datasetTypeCode;
+    
+    private String datasetCode;
 
-    private final String dataSetLocation;
+    private String dataSetLocation;
 
-    private final String sampleCode;
+    private String sampleCode;
 
-    private final String groupCode;
+    private String groupCode;
 
-    private final String projectCode;
+    private String projectCode;
 
-    private final String instanceCode;
+    private String instanceCode;
 
-    private final String experimentCode;
+    private String experimentCode;
 
-    private final String mainDataSetPattern;
+    private String mainDataSetPattern;
 
-    private final String mainDataSetPath;
+    private String mainDataSetPath;
 
-    public DatasetDescription(String datasetCode, String dataSetLocation, String sampleCode,
-            String groupCode, String projectCode, String experimentCode, String mainDataSetPattern,
-            String mainDataSetPath, String instanceCode)
+    public void setDatasetTypeCode(String datasetTypeCode)
     {
-        this.datasetCode = datasetCode;
-        this.dataSetLocation = dataSetLocation;
-        this.sampleCode = sampleCode;
-        this.groupCode = groupCode;
-        this.projectCode = projectCode;
-        this.experimentCode = experimentCode;
-        this.mainDataSetPattern = mainDataSetPattern;
-        this.mainDataSetPath = mainDataSetPath;
-        this.instanceCode = instanceCode;
+        this.datasetTypeCode = datasetTypeCode;
+    }
+
+    public String getDatasetTypeCode()
+    {
+        return datasetTypeCode;
     }
 
     public String getDataSetLocation()
@@ -67,11 +64,26 @@ public class DatasetDescription implements Serializable
         return dataSetLocation;
     }
 
+    public void setDataSetLocation(String dataSetLocation)
+    {
+        this.dataSetLocation = dataSetLocation;
+    }
+    
+    public String getInstanceCode()
+    {
+        return instanceCode;
+    }
+
     public String getDatasetCode()
     {
         return datasetCode;
     }
 
+    public void setDatasetCode(String datasetCode)
+    {
+        this.datasetCode = datasetCode;
+    }
+    
     /**
      * NOTE: may be NULL
      */
@@ -80,6 +92,11 @@ public class DatasetDescription implements Serializable
         return mainDataSetPattern;
     }
 
+    public void setMainDataSetPattern(String mainDataSetPattern)
+    {
+        this.mainDataSetPattern = mainDataSetPattern;
+    }
+    
     /**
      * NOTE: may be NULL
      */
@@ -88,6 +105,11 @@ public class DatasetDescription implements Serializable
         return mainDataSetPath;
     }
 
+    public void setMainDataSetPath(String mainDataSetPath)
+    {
+        this.mainDataSetPath = mainDataSetPath;
+    }
+    
     /**
      * NOTE: may be NULL
      */
@@ -96,26 +118,51 @@ public class DatasetDescription implements Serializable
         return sampleCode;
     }
 
+    public void setSampleCode(String sampleCode)
+    {
+        this.sampleCode = sampleCode;
+    }
+    
     public String getGroupCode()
     {
         return groupCode;
     }
 
+    public void setGroupCode(String groupCode)
+    {
+        this.groupCode = groupCode;
+    }
+    
     public String getProjectCode()
     {
         return projectCode;
     }
 
+    public void setProjectCode(String projectCode)
+    {
+        this.projectCode = projectCode;
+    }
+    
     public String getDatabaseInstanceCode()
     {
         return instanceCode;
     }
 
+    public void setDatabaseInstanceCode(String instanceCode)
+    {
+        this.instanceCode = instanceCode;
+    }
+    
     public String getExperimentCode()
     {
         return experimentCode;
     }
 
+    public void setExperimentCode(String experimentCode)
+    {
+        this.experimentCode = experimentCode;
+    }
+    
     @Override
     public String toString()
     {
@@ -123,3 +170,5 @@ public class DatasetDescription implements Serializable
     }
 
 }
+
+