diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/Vocabulary.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/Vocabulary.java
index 85419a4fed346b0e4c821b38bc6280cc94cb38fb..b3c93f65788a4c2ac18cc311490337bad91215fd 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/Vocabulary.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/Vocabulary.java
@@ -19,6 +19,8 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.dto;
 import java.util.ArrayList;
 import java.util.List;
 
+import ch.systemsx.cisd.common.annotation.CollectionMapping;
+
 /**
  * Controlled vocabulary.
  * 
@@ -63,6 +65,7 @@ public final class Vocabulary extends Code<Vocabulary>
         return terms;
     }
 
+    @CollectionMapping(collectionClass = ArrayList.class, elementClass = VocabularyTerm.class)
     public final void setTerms(final List<VocabularyTerm> terms)
     {
         this.terms = terms;
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientServiceTest.java
index 0e7b3ed2b1ac1aa006cd56cb8aa9c4f4705b3cfe..4f1f5d0760ca99ab02eb1ea96b79113e6d660fbb 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientServiceTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientServiceTest.java
@@ -27,6 +27,7 @@ import org.testng.annotations.BeforeMethod;
 import ch.systemsx.cisd.authentication.Principal;
 import ch.systemsx.cisd.common.servlet.IRequestContextProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.IClientService;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DatabaseInstance;
 import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.IResultSetManager;
 import ch.systemsx.cisd.openbis.generic.server.SessionConstants;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
@@ -40,6 +41,13 @@ public abstract class AbstractClientServiceTest
 {
     protected static final String SESSION_TOKEN = "session-token";
 
+    protected static final DatabaseInstance createDatabaseInstance(final String dbCode)
+    {
+        final DatabaseInstance databaseInstance = new DatabaseInstance();
+        databaseInstance.setCode(dbCode);
+        return databaseInstance;
+    }
+
     protected Mockery context;
 
     protected IRequestContextProvider requestContextProvider;
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java
index c20c2740e16f6fe1a1641c3932acf3e3a1f9aa19..4f01bd50dc4295f143c26d39fc3d4737fcbc1497 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java
@@ -20,26 +20,31 @@ import static org.testng.AssertJUnit.assertEquals;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.Set;
 
 import org.jmock.Expectations;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DataType;
-import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DatabaseInstance;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ListSampleCriteria;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.PropertyType;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleType;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Vocabulary;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.VocabularyTerm;
 import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.CacheManager;
 import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.DefaultResultSet;
 import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.IOriginalDataProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.IResultSetKeyGenerator;
 import ch.systemsx.cisd.openbis.generic.server.SessionConstants;
+import ch.systemsx.cisd.openbis.generic.server.business.ManagerTestTool;
 import ch.systemsx.cisd.openbis.generic.shared.ICommonServer;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataTypePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyTermPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityDataType;
 
 /**
@@ -65,9 +70,7 @@ public final class CommonClientServiceTest extends AbstractClientServiceTest
     {
         final SampleType sampleType = new SampleType();
         sampleType.setCode(code);
-        final DatabaseInstance databaseInstance = new DatabaseInstance();
-        databaseInstance.setCode(dbCode);
-        sampleType.setDatabaseInstance(databaseInstance);
+        sampleType.setDatabaseInstance(createDatabaseInstance(dbCode));
         return sampleType;
     }
 
@@ -83,6 +86,37 @@ public final class CommonClientServiceTest extends AbstractClientServiceTest
         assertEquals(dataTypePE.getDescription(), dataType.getDescription());
     }
 
+    private final static VocabularyPE createVocabulary()
+    {
+        final VocabularyPE vocabularyPE = new VocabularyPE();
+        vocabularyPE.setCode("USER.COLOR");
+        vocabularyPE.setDescription("Vocabulary color");
+        vocabularyPE.setRegistrator(ManagerTestTool.EXAMPLE_PERSON);
+        vocabularyPE.setDatabaseInstance(ManagerTestTool.EXAMPLE_DATABASE_INSTANCE);
+        vocabularyPE.addTerm(createVocabularyTerm("RED"));
+        vocabularyPE.addTerm(createVocabularyTerm("BLACK"));
+        vocabularyPE.addTerm(createVocabularyTerm("WHITE"));
+        return vocabularyPE;
+    }
+
+    private final static VocabularyTermPE createVocabularyTerm(final String code)
+    {
+        final VocabularyTermPE vocabularyTermPE = new VocabularyTermPE();
+        vocabularyTermPE.setCode(code);
+        vocabularyTermPE.setRegistrator(ManagerTestTool.EXAMPLE_PERSON);
+        return vocabularyTermPE;
+    }
+
+    private final static void assertVocabularyEquals(final VocabularyPE vocabularyPE,
+            final Vocabulary vocabulary)
+    {
+        assertEquals(vocabulary.getCode(), vocabularyPE.getCode());
+        assertEquals(vocabulary.getDescription(), vocabularyPE.getDescription());
+        final List<VocabularyTerm> terms = vocabulary.getTerms();
+        final Set<VocabularyTermPE> termPEs = vocabularyPE.getTerms();
+        assertEquals(terms.size(), termPEs.size());
+    }
+
     //
     // AbstractClientServiceTest
     //
@@ -161,8 +195,8 @@ public final class CommonClientServiceTest extends AbstractClientServiceTest
         context.assertIsSatisfied();
     }
 
-    private void prepareGetCacheManager(Expectations exp,
-            CacheManager<String, TableExportCriteria<Sample>> manager)
+    private void prepareGetCacheManager(final Expectations exp,
+            final CacheManager<String, TableExportCriteria<Sample>> manager)
     {
         prepareGetHttpSession(exp);
         exp.allowing(httpSession).getAttribute(SessionConstants.OPENBIS_EXPORT_MANAGER);
@@ -170,7 +204,7 @@ public final class CommonClientServiceTest extends AbstractClientServiceTest
     }
 
     @SuppressWarnings("unchecked")
-    private final IOriginalDataProvider<Sample> getAnyOriginalDataProvider(Expectations exp)
+    private final IOriginalDataProvider<Sample> getAnyOriginalDataProvider(final Expectations exp)
     {
         return exp.with(Expectations.any(IOriginalDataProvider.class));
     }
@@ -210,4 +244,23 @@ public final class CommonClientServiceTest extends AbstractClientServiceTest
         commonClientService.registerPropertyType(new PropertyType());
         context.assertIsSatisfied();
     }
+
+    @Test
+    public final void testListVocabularies()
+    {
+        final VocabularyPE vocabularyPE = createVocabulary();
+        context.checking(new Expectations()
+            {
+                {
+                    prepareGetSessionToken(this);
+
+                    one(commonServer).listVocabularies(SESSION_TOKEN);
+                    will(returnValue(Collections.singletonList(vocabularyPE)));
+                }
+            });
+        final List<Vocabulary> vocabularies = commonClientService.listVocabularies();
+        assertEquals(1, vocabularies.size());
+        assertVocabularyEquals(vocabularyPE, vocabularies.get(0));
+        context.assertIsSatisfied();
+    }
 }