diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
index 8a89f8046b1a842f68ce779eee6fa26496cfa1db..881dcc96258d107f522f94fad8b9e110a1f88d28 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
@@ -144,6 +144,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SourceType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TrackingDataSetCriteria;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationResult;
@@ -211,6 +212,7 @@ import ch.systemsx.cisd.openbis.generic.shared.translator.SampleTypeTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.SimpleDataSetHelper;
 import ch.systemsx.cisd.openbis.generic.shared.translator.SpaceTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.VocabularyTermTranslator;
+import ch.systemsx.cisd.openbis.generic.shared.translator.VocabularyTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils;
 
 /**
@@ -1195,6 +1197,23 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements
         return VocabularyTermTranslator.translateTerms(vocabularyOrNull.getTerms());
     }
 
+    @Override
+    @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
+    public Vocabulary tryGetVocabulary(String sessionToken, String vocabularyCode)
+    {
+        checkSession(sessionToken);
+        VocabularyPE vocabularyOrNull =
+                getDAOFactory().getVocabularyDAO().tryFindVocabularyByCode(vocabularyCode);
+
+        if (vocabularyOrNull == null)
+        {
+            return null;
+        } else
+        {
+            return VocabularyTranslator.translate(vocabularyOrNull, true);
+        }
+    }
+
     @Override
     @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
     public List<String> generateCodes(String sessionToken, String prefix,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceLogger.java
index bd949acf6eccd49da50ccea3a67a88f7d55c9704..dfad8b9039060a65e973c337234a00942543fea3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceLogger.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceLogger.java
@@ -57,6 +57,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TrackingDataSetCriteria;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationResult;
@@ -683,4 +684,11 @@ public class ETLServiceLogger extends AbstractServerLogger implements IETLLIMSSe
         return null;
     }
 
+    @Override
+    public Vocabulary tryGetVocabulary(String token, String code)
+    {
+        logAccess(Level.DEBUG, token, "tryGetVocabulary", "CODE(%s)", code);
+        return null;
+    }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSService.java
index 25f65522692c484586d8da282456f33c305926f0..9019da138ff898cdb3559c94a16fd90aa6acdd4e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSService.java
@@ -22,9 +22,9 @@ import java.util.List;
 
 import org.springframework.transaction.annotation.Transactional;
 
+import ch.systemsx.cisd.common.exception.UserFailureException;
 import ch.systemsx.cisd.openbis.common.conversation.annotation.Conversational;
 import ch.systemsx.cisd.openbis.common.conversation.annotation.Progress;
-import ch.systemsx.cisd.common.exception.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.EntityOperationsState;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
@@ -55,6 +55,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TrackingDataSetCriteria;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationResult;
@@ -145,6 +146,12 @@ public interface IETLLIMSService extends IServer, ISessionProvider
     public Collection<VocabularyTerm> listVocabularyTerms(String sessionToken, String vocabulary)
             throws UserFailureException;
 
+    /**
+     * Returns a vocabulary with given code
+     */
+    @Transactional(readOnly = true)
+    public Vocabulary tryGetVocabulary(String sessionToken, String code);
+
     /**
      * Returns the SampleType together with assigned property types for specified sample type code.
      */
diff --git a/openbis/sourceTest/sql/postgresql/124/006=controlled_vocabulary_terms.tsv b/openbis/sourceTest/sql/postgresql/124/006=controlled_vocabulary_terms.tsv
index b641efc719ccd5b6954f6485c788460821159f85..3e3cb6e1703502b8f3d0a347687003f65e331ce4 100644
--- a/openbis/sourceTest/sql/postgresql/124/006=controlled_vocabulary_terms.tsv
+++ b/openbis/sourceTest/sql/postgresql/124/006=controlled_vocabulary_terms.tsv
@@ -3,11 +3,11 @@
 3	1536_WELLS_32X48	2008-11-05 09:18:00.622+01	1	1	\N	\N	3	t
 4	PROPRIETARY	2008-11-05 09:18:00.622+01	2	1	\N	\N	1	t
 5	BDS_DIRECTORY	2008-11-05 09:18:00.622+01	2	1	\N	\N	2	t
-6	RAT	2008-11-05 09:18:30.327+01	3	2	\N	\N	1	t
-7	DOG	2008-11-05 09:18:30.327+01	3	2	\N	\N	2	t
-8	HUMAN	2008-11-05 09:18:30.327+01	3	2	\N	\N	3	t
-9	GORILLA	2008-11-05 09:18:30.327+01	3	2	\N	\N	4	t
-10	FLY	2008-11-05 09:18:30.327+01	3	2	\N	\N	5	t
+6	RAT	2008-11-05 09:18:30.327+01	3	2	\N	the rat	1	t
+7	DOG	2008-11-05 09:18:30.327+01	3	2	\N	doggy	2	t
+8	HUMAN	2008-11-05 09:18:30.327+01	3	2	\N	a human	3	t
+9	GORILLA	2008-11-05 09:18:30.327+01	3	2	\N	a gorilla is a gorilla	4	t
+10	FLY	2008-11-05 09:18:30.327+01	3	2	\N	a fly flies	5	t
 11	MALE	2008-11-05 09:18:30.421+01	4	2	\N	\N	1	t
 12	FEMALE	2008-11-05 09:18:30.421+01	4	2	\N	\N	2	t
 13	MAN	2008-11-05 09:18:30.983+01	5	2	\N	\N	1	t