diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java
index 4ef7ff32f79551c1c11c2ca963994c61fc2276d8..f0f39a3a9c60c64dd03e68a51c18396579ae6f49 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java
@@ -372,7 +372,14 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio
 
     public List<DataSetType> listDataSetTypes(String sessionToken)
     {
-        // TODO Auto-generated method stub
-        return new ArrayList<DataSetType>();
+        List<ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType> privateDataSetTypes =
+                commonServer.listDataSetTypes(sessionToken);
+
+        ArrayList<DataSetType> dataSetTypes = new ArrayList<DataSetType>();
+        for (ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType privateDataSetType : privateDataSetTypes)
+        {
+            dataSetTypes.add(Translator.translate(privateDataSetType));
+        }
+        return dataSetTypes;
     }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java
index 90bf12e8f1c615d58cd276409b870d83fe6c81c0..c2bcef7cbcd5e281d48bf10daa478bb90f8c7b36 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java
@@ -20,8 +20,12 @@ import java.util.List;
 
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet.DataSetInitializer;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetType;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetType.DataSetTypeInitializer;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Experiment.ExperimentInitializer;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.PropertyType;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.PropertyType.PropertyTypeInitializer;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Role;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample.SampleInitializer;
@@ -89,6 +93,28 @@ public class Translator
         return new Experiment(initializer);
     }
 
+    static DataSetType translate(
+            ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType privateDataSetType)
+    {
+        DataSetTypeInitializer initializer = new DataSetTypeInitializer();
+        initializer.setCode(privateDataSetType.getCode());
+
+        List<ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetTypePropertyType> dstpts =
+                privateDataSetType.getAssignedPropertyTypes();
+        for (ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetTypePropertyType dstpt : dstpts)
+        {
+            PropertyTypeInitializer ptInitializer = new PropertyTypeInitializer();
+            ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType propertyType =
+                    dstpt.getPropertyType();
+            ptInitializer.setCode(propertyType.getCode());
+            ptInitializer.setLabel(propertyType.getLabel());
+            ptInitializer.setDescription(propertyType.getDescription());
+            initializer.addPropertyType(new PropertyType(ptInitializer));
+        }
+
+        return new DataSetType(initializer);
+    }
+
     private Translator()
     {
     }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java
index d9ffa369f599ec82f6c7e6742d37d9d58c1bec30..9e028d68c872b372326b5061eb86082d5689d58f 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java
@@ -33,8 +33,10 @@ import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetType;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Project;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.PropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Role;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria;
@@ -216,4 +218,19 @@ public class GeneralInformationServiceTest extends SystemTestCase
         assertEquals("Experiment should be: " + resultExperiment.getIdentifier(), true,
                 identifierIsOk);
     }
+
+    public void testListDataSetTypes()
+    {
+        List<DataSetType> dataSetTypes = generalInformationService.listDataSetTypes(sessionToken);
+        assertEquals(3, dataSetTypes.size());
+
+        DataSetType dataSetType;
+        PropertyType propertyType;
+        dataSetType = dataSetTypes.get(0);
+        assertEquals("HCS_IMAGE", dataSetType.getCode());
+        List<PropertyType> propertyTypes = dataSetType.getPropertyTypes();
+        propertyType = propertyTypes.get(0);
+        assertEquals("COMMENT", propertyType.getCode());
+        assertEquals("Comment", propertyType.getLabel());
+    }
 }