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 6acd9badb1084e861a8dc332349d1660083e3099..d4b01433528325f357083924bbf31140f95a28a6 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
@@ -170,6 +170,9 @@ public interface ICommonClientService extends IClientService
 
     /**
      * Returns a list of all vocabularies.
+     * <p>
+     * Note that the vocabulary terms are included/loaded.
+     * </p>
      */
     public List<Vocabulary> listVocabularies() throws UserFailureException;
 
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 2b53d25f14a5ffffd6bbff3f371e31757f3cb16e..262a437ea46b91acde4055db954f8826ab9f4e73 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
@@ -64,6 +64,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.GroupIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind;
+import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils;
 
 /**
  * Implementation of client-server interface.
@@ -382,7 +383,12 @@ public final class CommonServer extends AbstractServer<ICommonServer> implements
         assert sessionToken != null : "Unspecified session token";
         // Not needed but just to refresh/check the session.
         getSessionManager().getSession(sessionToken);
-        final List<VocabularyPE> vocabularies = getDAOFactory().getVocabularyDAO().listVocabularies();
+        final List<VocabularyPE> vocabularies =
+                getDAOFactory().getVocabularyDAO().listVocabularies();
+        for (final VocabularyPE vocabularyPE : vocabularies)
+        {
+            HibernateUtils.initialize(vocabularyPE.getTerms());
+        }
         Collections.sort(vocabularies);
         return vocabularies;
     }
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 b18f320ce14bbf91978832b9f813eff05c5a8a55..a55c2f441d8c51addfbd8aa0351d8886355afd9d 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
@@ -212,7 +212,7 @@ public interface ICommonServer extends IServer
     public List<PropertyTypePE> listPropertyTypes(final String sessionToken);
 
     /**
-     * List data types.
+     * Lists data types.
      * 
      * @return a sorted list of {@link DataTypePE}.
      */
@@ -221,9 +221,10 @@ public interface ICommonServer extends IServer
     public List<DataTypePE> listDataTypes(final String sessionToken);
 
     /**
-     * List data types.
+     * Lists vocabularies.
      * 
-     * @return a sorted list of {@link VocabularyPE}.
+     * @return a sorted list of {@link VocabularyPE}. Note that the vocabulary terms are
+     *         included/loaded.
      */
     @Transactional(readOnly = true)
     @RolesAllowed(RoleSet.OBSERVER)
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 815954e5aca2ec5a8612fe782668cc4a1e07ca59..e415f9e23c248ca32b700a82165c572d32a4afb3 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
@@ -43,6 +43,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.RoleAssignmentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.RoleCode;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
+import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.DatabaseInstanceIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
@@ -527,6 +528,26 @@ public final class CommonServerTest extends AbstractServerTestCase
         context.assertIsSatisfied();
     }
 
+    @Test
+    public final void testListVocabularies()
+    {
+        final Session session = prepareGetSession();
+        context.checking(new Expectations()
+            {
+                {
+                    one(daoFactory).getVocabularyDAO();
+                    will(returnValue(vocabularyDAO));
+
+                    one(vocabularyDAO).listVocabularies();
+                    will(returnValue(Collections.emptyList()));
+                }
+            });
+        final List<VocabularyPE> vocabularies =
+                createServer().listVocabularies(session.getSessionToken());
+        assertEquals(0, vocabularies.size());
+        context.assertIsSatisfied();
+    }
+
     @Test
     public final void testRegisterPropertyType()
     {
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/VocabularyDAOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/VocabularyDAOTest.java
index 948089187218d70bc77f3c107ebe5e606ab56b5d..6029f848a434cde33015aa01faf2924108cba892 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/VocabularyDAOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/VocabularyDAOTest.java
@@ -22,6 +22,8 @@ import static org.testng.AssertJUnit.assertNotNull;
 import static org.testng.AssertJUnit.assertNull;
 import static org.testng.AssertJUnit.fail;
 
+import java.util.List;
+
 import org.springframework.dao.DataIntegrityViolationException;
 import org.testng.annotations.Test;
 
@@ -29,6 +31,7 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IVocabularyDAO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
 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.util.HibernateUtils;
 
 /**
  * Test cases for corresponding {@link VocabularyDAO} class.
@@ -107,4 +110,13 @@ public final class VocabularyDAOTest extends AbstractDAOTest
         assertEquals(3, savedVocabulary.getTerms().size());
     }
 
+    @Test
+    public final void testListVocabularies()
+    {
+        final IVocabularyDAO vocabularyDAO = daoFactory.getVocabularyDAO();
+        final List<VocabularyPE> vocabularies = vocabularyDAO.listVocabularies();
+        assertEquals(3, vocabularies.size());
+        final VocabularyPE vocabularyPE = vocabularies.get(0);
+        assertFalse(HibernateUtils.isInitialized(vocabularyPE.getTerms()));
+    }
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerTestCase.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerTestCase.java
index 01ac1a06038a72bd74ec414162aa1491ec5da940..c7ae5ce7305c5ef82ab1d42387671af9150847b5 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerTestCase.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerTestCase.java
@@ -44,6 +44,7 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPropertyTypeDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IRoleAssignmentDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleTypeDAO;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.IVocabularyDAO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
 
@@ -103,6 +104,8 @@ public abstract class AbstractServerTestCase extends AssertJUnit
 
     protected IPropertyTypeBO propertyTypeBO;
 
+    protected IVocabularyDAO vocabularyDAO;
+
     @BeforeMethod
     @SuppressWarnings("unchecked")
     public void setUp()
@@ -123,6 +126,7 @@ public abstract class AbstractServerTestCase extends AssertJUnit
         projectDAO = context.mock(IProjectDAO.class);
         sampleTypeDAO = context.mock(ISampleTypeDAO.class);
         propertyTypeDAO = context.mock(IPropertyTypeDAO.class);
+        vocabularyDAO = context.mock(IVocabularyDAO.class);
         // BO
         groupBO = context.mock(IGroupBO.class);
         sampleBO = context.mock(ISampleBO.class);