diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSEntityTypeExportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSEntityTypeExportHelper.java
index cab505d29455e4730ac642de6f34ead4307161f5..01ec4eb5d6450424c2c0e184cd44a562597a779e 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSEntityTypeExportHelper.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSEntityTypeExportHelper.java
@@ -32,19 +32,33 @@ import org.apache.poi.ss.usermodel.Workbook;
 
 import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IEntityType;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.Plugin;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.PropertyAssignment;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.PropertyType;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.vocabulary.Vocabulary;
 import ch.ethz.sis.openbis.generic.server.xls.export.Attribute;
 import ch.ethz.sis.openbis.generic.server.xls.export.ExportableKind;
 import ch.ethz.sis.openbis.generic.server.xls.export.FieldType;
 import ch.ethz.sis.openbis.generic.server.xls.export.XLSExport;
+import ch.ethz.sis.openbis.generic.server.xls.importer.enums.ImportTypes;
+import ch.ethz.sis.openbis.generic.server.xls.importer.utils.VersionUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException;
 
 public abstract class AbstractXLSEntityTypeExportHelper<ENTITY_TYPE extends IEntityType> extends AbstractXLSExportHelper<ENTITY_TYPE>
 {
+
+    protected static Map<String, Integer> allVersions = VersionUtils.loadAllVersions();
+
     public AbstractXLSEntityTypeExportHelper(final Workbook wb)
     {
         super(wb);
     }
 
+    public static void setAllVersions(final Map<String, Integer> allVersions)
+    {
+        AbstractXLSEntityTypeExportHelper.allVersions = allVersions;
+    }
+
     @Override
     public AdditionResult add(final IApplicationServerApi api, final String sessionToken, final Workbook wb,
             final List<String> permIds, int rowNumber,
@@ -156,10 +170,66 @@ public abstract class AbstractXLSEntityTypeExportHelper<ENTITY_TYPE extends IEnt
         }
     }
 
+    protected AdditionResult addEntityTypePropertyAssignments(int rowNumber,
+            final Collection<PropertyAssignment> propertyAssignments, final ExportableKind exportableKind,
+            final String permId, final Map<String, List<Map<String, String>>> entityTypeExportFieldsMap,
+            final boolean compatibleWithImport)
+    {
+        final Collection<String> warnings = new ArrayList<>(
+                addRow(rowNumber++, true, exportableKind, permId, compatibleWithImport
+                        ? ENTITY_ASSIGNMENT_COLUMNS
+                        : Arrays.copyOfRange(ENTITY_ASSIGNMENT_COLUMNS, 1, ENTITY_ASSIGNMENT_COLUMNS.length)));
+        for (final PropertyAssignment propertyAssignment : propertyAssignments)
+        {
+            final PropertyType propertyType = propertyAssignment.getPropertyType();
+            final Plugin plugin = propertyAssignment.getPlugin();
+            final Vocabulary vocabulary = propertyType.getVocabulary();
+
+            final String[] values = {
+                    String.valueOf(VersionUtils.getStoredVersion(allVersions, ImportTypes.PROPERTY_TYPE, null, propertyType.getCode())),
+                    propertyType.getCode(),
+                    String.valueOf(propertyAssignment.isMandatory()).toUpperCase(),
+                    String.valueOf(propertyAssignment.isShowInEditView()).toUpperCase(),
+                    propertyAssignment.getSection(),
+                    propertyType.getLabel(),
+                    getFullDataTypeString(propertyType),
+                    String.valueOf(vocabulary != null ? vocabulary.getCode() : ""),
+                    propertyType.getDescription(),
+                    mapToJSON(propertyType.getMetaData()),
+                    plugin != null ? (plugin.getName() != null ? plugin.getName() + ".py" : "") : "" };
+            warnings.addAll(addRow(rowNumber++, false, exportableKind, permId,
+                    compatibleWithImport ? values : Arrays.copyOfRange(values, 1, values.length)));
+        }
+        return new AdditionResult(rowNumber, warnings);
+    }
+
+    private String getFullDataTypeString(final PropertyType propertyType)
+    {
+        final String dataTypeString = String.valueOf(propertyType.getDataType());
+        switch (propertyType.getDataType())
+        {
+            case SAMPLE:
+            {
+                return dataTypeString +
+                        ((propertyType.getSampleType() != null) ? ':' + propertyType.getSampleType().getCode() : "");
+            }
+            case MATERIAL:
+            {
+                return dataTypeString +
+                        ((propertyType.getMaterialType() != null)
+                                ? ':' + propertyType.getMaterialType().getCode() : "");
+            }
+            default:
+            {
+                return dataTypeString;
+            }
+        }
+    }
+
     protected abstract Attribute[] getAttributes(final ENTITY_TYPE entityType);
 
     protected abstract String getAttributeValue(final ENTITY_TYPE entityType, final Attribute attribute);
-    
+
     protected abstract ExportableKind getExportableKind();
 
 }
diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSExportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSExportHelper.java
index 0a88730f19d244f310126ceb3fdd5377c872f7fb..804f7eaaca3e1e37c59692d97664767070048e37 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSExportHelper.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSExportHelper.java
@@ -156,60 +156,6 @@ public abstract class AbstractXLSExportHelper<ENTITY_TYPE extends IEntityType> i
         return warnings;
     }
 
-    protected AdditionResult addEntityTypePropertyAssignments(int rowNumber,
-            final Collection<PropertyAssignment> propertyAssignments, final ExportableKind exportableKind,
-            final String permId, final Map<String, List<Map<String, String>>> entityTypeExportFieldsMap,
-            final boolean compatibleWithImport)
-    {
-        final Collection<String> warnings = new ArrayList<>(
-                addRow(rowNumber++, true, exportableKind, permId, compatibleWithImport
-                        ? ENTITY_ASSIGNMENT_COLUMNS
-                        : Arrays.copyOfRange(ENTITY_ASSIGNMENT_COLUMNS, 1, ENTITY_ASSIGNMENT_COLUMNS.length)));
-        for (final PropertyAssignment propertyAssignment : propertyAssignments)
-        {
-            final PropertyType propertyType = propertyAssignment.getPropertyType();
-            final Plugin plugin = propertyAssignment.getPlugin();
-            final Vocabulary vocabulary = propertyType.getVocabulary();
-
-            final String[] values = { "1", propertyType.getCode(),
-                    String.valueOf(propertyAssignment.isMandatory()).toUpperCase(),
-                    String.valueOf(propertyAssignment.isShowInEditView()).toUpperCase(),
-                    propertyAssignment.getSection(),
-                    propertyType.getLabel(),
-                    getFullDataTypeString(propertyType),
-                    String.valueOf(vocabulary != null ? vocabulary.getCode() : ""),
-                    propertyType.getDescription(),
-                    mapToJSON(propertyType.getMetaData()),
-                    plugin != null ? (plugin.getName() != null ? plugin.getName() + ".py" : "") : "" };
-            warnings.addAll(addRow(rowNumber++, false, exportableKind, permId,
-                    compatibleWithImport ? values : Arrays.copyOfRange(values, 1, values.length)));
-        }
-        return new AdditionResult(rowNumber, warnings);
-    }
-
-    private String getFullDataTypeString(final PropertyType propertyType)
-    {
-        final String dataTypeString = String.valueOf(propertyType.getDataType());
-        switch (propertyType.getDataType())
-        {
-            case SAMPLE:
-            {
-                return dataTypeString +
-                        ((propertyType.getSampleType() != null) ? ':' + propertyType.getSampleType().getCode() : "");
-            }
-            case MATERIAL:
-            {
-                return dataTypeString +
-                        ((propertyType.getMaterialType() != null)
-                                ? ':' + propertyType.getMaterialType().getCode() : "");
-            }
-            default:
-            {
-                return dataTypeString;
-            }
-        }
-    }
-
     @Override
     public ENTITY_TYPE getEntityType(final IApplicationServerApi api, final String sessionToken, final String permId)
     {
diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSPermIdHolderExportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSPermIdHolderExportHelper.java
deleted file mode 100644
index 861383f3a77b85ba1cc2b3adb97cf6ba77a1c297..0000000000000000000000000000000000000000
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSPermIdHolderExportHelper.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- *  Copyright ETH 2023 Zürich, Scientific IT Services
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-package ch.ethz.sis.openbis.generic.server.xls.export.helper;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.EnumSet;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import org.apache.poi.ss.usermodel.Workbook;
-
-import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IEntityType;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IPermIdHolder;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.vocabulary.Vocabulary;
-import ch.ethz.sis.openbis.generic.server.xls.export.Attribute;
-import ch.ethz.sis.openbis.generic.server.xls.export.ExportableKind;
-import ch.ethz.sis.openbis.generic.server.xls.export.FieldType;
-import ch.ethz.sis.openbis.generic.server.xls.export.XLSExport;
-import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException;
-
-public abstract class AbstractXLSPermIdHolderExportHelper<HOLDER extends IPermIdHolder> extends AbstractXLSExportHelper<IEntityType>
-{
-    public AbstractXLSPermIdHolderExportHelper(final Workbook wb)
-    {
-        super(wb);
-    }
-
-    @Override
-    public AdditionResult add(final IApplicationServerApi api, final String sessionToken, final Workbook wb,
-            final List<String> permIds, int rowNumber,
-            final Map<String, List<Map<String, String>>> entityTypeExportFieldsMap,
-            final XLSExport.TextFormatting textFormatting, final boolean compatibleWithImport)
-    {
-        if (permIds.size() != 1)
-        {
-            throw new UserFailureException("For entity type export number of permIds should be equal to 1.");
-        }
-        final HOLDER permIdHolder = getPermIdHolder(api, sessionToken, permIds.get(0));
-        final Collection<String> warnings = new ArrayList<>();
-
-        if (permIdHolder != null)
-        {
-            final String permId = permIdHolder.getPermId().toString();
-            final ExportableKind exportableKind = getExportableKind();
-            warnings.addAll(addRow(rowNumber++, true, exportableKind, permId, exportableKind.name()));
-
-            final Attribute[] possibleAttributes = getAttributes(permIdHolder);
-            if (entityTypeExportFieldsMap == null || entityTypeExportFieldsMap.isEmpty() ||
-                    !entityTypeExportFieldsMap.containsKey(exportableKind.toString()) ||
-                    entityTypeExportFieldsMap.get(exportableKind.toString()).isEmpty())
-            {
-                // Export all attributes in any order
-                // Headers
-                final Attribute[] importableAttributes = Arrays.stream(possibleAttributes).filter(Attribute::isImportable)
-                        .toArray(Attribute[]::new);
-                final Attribute[] attributes = compatibleWithImport ? importableAttributes : possibleAttributes;
-                final String[] attributeHeaders = Arrays.stream(attributes).map(Attribute::getName).toArray(String[]::new);
-
-                warnings.addAll(addRow(rowNumber++, true, exportableKind, permId, attributeHeaders));
-
-                // Values
-                final String[] values = Arrays.stream(attributes).map(attribute -> getAttributeValue(permIdHolder, attribute)).toArray(String[]::new);
-                warnings.addAll(addRow(rowNumber++, false, exportableKind, permId, values));
-            } else
-            {
-                // Export selected attributes in predefined order
-                // Headers
-                final Set<Attribute> possibleAttributeNameSet = Stream.of(possibleAttributes)
-                        .filter(attribute -> !compatibleWithImport || attribute.isImportable())
-                        .collect(Collectors.toCollection(() -> EnumSet.noneOf(Attribute.class)));
-                final List<Map<String, String>> selectedExportAttributes = entityTypeExportFieldsMap.get(exportableKind.toString());
-
-                final String[] selectedAttributeHeaders = selectedExportAttributes.stream()
-                        .filter(attribute -> AbstractXLSExportHelper.isFieldAcceptable(possibleAttributeNameSet, attribute))
-                        .map(attribute ->
-                        {
-                            if (FieldType.valueOf(attribute.get(FIELD_TYPE_KEY)) == FieldType.ATTRIBUTE)
-                            {
-                                return Attribute.valueOf(attribute.get(FIELD_ID_KEY)).getName();
-                            } else
-                            {
-                                throw new IllegalArgumentException();
-                            }
-                        }).toArray(String[]::new);
-                final Attribute[] requiredForImportAttributes = Arrays.stream(possibleAttributes)
-                        .filter(Attribute::isRequiredForImport)
-                        .toArray(Attribute[]::new);
-                final Set<Attribute> selectedAttributes = selectedExportAttributes.stream()
-                        .filter(map -> map.get(FIELD_TYPE_KEY).equals(FieldType.ATTRIBUTE.toString()))
-                        .map(map -> Attribute.valueOf(map.get(FIELD_ID_KEY)))
-                        .collect(Collectors.toCollection(() -> EnumSet.noneOf(Attribute.class)));
-                final Stream<String> requiredForImportAttributeNameStream = compatibleWithImport
-                        ? Arrays.stream(requiredForImportAttributes)
-                        .filter(attribute -> !selectedAttributes.contains(attribute))
-                        .map(Attribute::getName)
-                        : Stream.empty();
-                final String[] allAttributeNames = Stream.concat(Arrays.stream(selectedAttributeHeaders), requiredForImportAttributeNameStream)
-                        .toArray(String[]::new);
-
-                warnings.addAll(addRow(rowNumber++, true, exportableKind, permId, allAttributeNames));
-
-                // Values
-                final Set<Map<String, String>> selectedExportFieldSet = new HashSet<>(selectedExportAttributes);
-                final List<Map<String, String>> extraExportFields = compatibleWithImport
-                        ? Arrays.stream(requiredForImportAttributes)
-                        .map(attribute -> Map.of(FIELD_TYPE_KEY, FieldType.ATTRIBUTE.toString(), FIELD_ID_KEY, attribute.toString()))
-                        .filter(map -> !selectedExportFieldSet.contains(map))
-                        .collect(Collectors.toList())
-                        : List.of();
-                final String[] entityValues = Stream.concat(selectedExportAttributes.stream(), extraExportFields.stream())
-                        .filter(field -> isFieldAcceptable(possibleAttributeNameSet, field))
-                        .map(field ->
-                        {
-                            if (FieldType.valueOf(field.get(FIELD_TYPE_KEY)) == FieldType.ATTRIBUTE)
-                            {
-                                return getAttributeValue(permIdHolder, Attribute.valueOf(field.get(FIELD_ID_KEY)));
-                            } else
-                            {
-                                throw new IllegalArgumentException();
-                            }
-                        }).toArray(String[]::new);
-
-                warnings.addAll(addRow(rowNumber++, false, exportableKind, permId, entityValues));
-            }
-
-            return new AdditionResult(rowNumber + 1, warnings);
-        } else
-        {
-            return new AdditionResult(rowNumber, warnings);
-        }
-    }
-
-    protected abstract Attribute[] getAttributes(final HOLDER entityType);
-
-    protected abstract String getAttributeValue(final HOLDER entityType, final Attribute attribute);
-    
-    protected abstract ExportableKind getExportableKind();
-
-    protected abstract HOLDER getPermIdHolder(final IApplicationServerApi api, final String sessionToken, final String permId);
-
-}
diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSDataSetTypeExportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSDataSetTypeExportHelper.java
index 6db73952509d6a507c3cabb641f8a7d7b5197552..10ebf8b0c3fa27c06ecfaaa0a636eccbf2de004b 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSDataSetTypeExportHelper.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSDataSetTypeExportHelper.java
@@ -36,6 +36,8 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.Plugin;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.fetchoptions.PropertyAssignmentFetchOptions;
 import ch.ethz.sis.openbis.generic.server.xls.export.Attribute;
 import ch.ethz.sis.openbis.generic.server.xls.export.ExportableKind;
+import ch.ethz.sis.openbis.generic.server.xls.importer.enums.ImportTypes;
+import ch.ethz.sis.openbis.generic.server.xls.importer.utils.VersionUtils;
 
 public class XLSDataSetTypeExportHelper extends AbstractXLSEntityTypeExportHelper<DataSetType>
 {
@@ -72,29 +74,27 @@ public class XLSDataSetTypeExportHelper extends AbstractXLSEntityTypeExportHelpe
     }
 
     @Override
-    protected String getAttributeValue(final DataSetType entityType, final Attribute attribute)
+    protected String getAttributeValue(final DataSetType dataSetType, final Attribute attribute)
     {
         switch (attribute)
         {
             case CODE:
             {
-                return entityType.getCode();
+                return dataSetType.getCode();
             }
             case DESCRIPTION:
             {
-                return entityType.getDescription();
+                return dataSetType.getDescription();
             }
             case VALIDATION_SCRIPT:
             {
-                final Plugin validationPlugin = entityType.getValidationPlugin();
-                return validationPlugin != null
-                        ? (validationPlugin.getName() != null ? validationPlugin.getName() + ".py" : "") : "";
+                final Plugin validationPlugin = dataSetType.getValidationPlugin();
+                return validationPlugin != null ? (validationPlugin.getName() != null ? validationPlugin.getName() + ".py" : "") : "";
 
             }
             case VERSION:
             {
-                // TODO: implement
-                return "1";
+                return String.valueOf(VersionUtils.getStoredVersion(allVersions, ImportTypes.DATASET_TYPE, null, dataSetType.getCode()));
             }
             default:
             {
diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSExperimentTypeExportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSExperimentTypeExportHelper.java
index e3fa8642cb704fb064a81e28c82300c0cddf5d29..a11dc8df48c5a9616a477e0ca613717cb41fa1ea 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSExperimentTypeExportHelper.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSExperimentTypeExportHelper.java
@@ -36,6 +36,8 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.Plugin;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.fetchoptions.PropertyAssignmentFetchOptions;
 import ch.ethz.sis.openbis.generic.server.xls.export.Attribute;
 import ch.ethz.sis.openbis.generic.server.xls.export.ExportableKind;
+import ch.ethz.sis.openbis.generic.server.xls.importer.enums.ImportTypes;
+import ch.ethz.sis.openbis.generic.server.xls.importer.utils.VersionUtils;
 
 public class XLSExperimentTypeExportHelper extends AbstractXLSEntityTypeExportHelper<ExperimentType>
 {
@@ -73,8 +75,7 @@ public class XLSExperimentTypeExportHelper extends AbstractXLSEntityTypeExportHe
             }
             case VERSION:
             {
-                // TODO: implement
-                return "1";
+                return String.valueOf(VersionUtils.getStoredVersion(allVersions, ImportTypes.EXPERIMENT_TYPE, null, experimentType.getCode()));
             }
             default:
             {
diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSSampleTypeExportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSSampleTypeExportHelper.java
index 8d3028fdf5c5a3b58b915c718a9d0e1ec229b0b2..6ec881c69149bef5e4584c43277cdbfac646e908 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSSampleTypeExportHelper.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSSampleTypeExportHelper.java
@@ -38,6 +38,8 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.SampleType;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleTypeFetchOptions;
 import ch.ethz.sis.openbis.generic.server.xls.export.Attribute;
 import ch.ethz.sis.openbis.generic.server.xls.export.ExportableKind;
+import ch.ethz.sis.openbis.generic.server.xls.importer.enums.ImportTypes;
+import ch.ethz.sis.openbis.generic.server.xls.importer.utils.VersionUtils;
 
 public class XLSSampleTypeExportHelper extends AbstractXLSEntityTypeExportHelper<SampleType>
 {
@@ -99,8 +101,7 @@ public class XLSSampleTypeExportHelper extends AbstractXLSEntityTypeExportHelper
             }
             case VERSION:
             {
-                // TODO: implement
-                return "1";
+                return String.valueOf(VersionUtils.getStoredVersion(allVersions, ImportTypes.SAMPLE_TYPE, null, sampleType.getCode()));
             }
             case AUTO_GENERATE_CODES:
             {
diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSVocabularyExportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSVocabularyExportHelper.java
index 8eeba50ef50a23c63c35c7810f3af3ee0c544f75..e75ea347d378059106d93fec27f69832b7fc199e 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSVocabularyExportHelper.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSVocabularyExportHelper.java
@@ -41,16 +41,25 @@ import ch.ethz.sis.openbis.generic.server.xls.export.Attribute;
 import ch.ethz.sis.openbis.generic.server.xls.export.ExportableKind;
 import ch.ethz.sis.openbis.generic.server.xls.export.FieldType;
 import ch.ethz.sis.openbis.generic.server.xls.export.XLSExport;
+import ch.ethz.sis.openbis.generic.server.xls.importer.enums.ImportTypes;
+import ch.ethz.sis.openbis.generic.server.xls.importer.utils.VersionUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException;
 
 public class XLSVocabularyExportHelper extends AbstractXLSExportHelper<IEntityType>
 {
 
+    protected static Map<String, Integer> allVersions = VersionUtils.loadAllVersions();
+
     public XLSVocabularyExportHelper(final Workbook wb)
     {
         super(wb);
     }
 
+    public static void setAllVersions(final Map<String, Integer> allVersions)
+    {
+        XLSVocabularyExportHelper.allVersions = allVersions;
+    }
+
     @Override
     public AdditionResult add(final IApplicationServerApi api, final String sessionToken, final Workbook wb,
             final List<String> permIds, int rowNumber,
@@ -155,8 +164,12 @@ public class XLSVocabularyExportHelper extends AbstractXLSExportHelper<IEntityTy
             for (final VocabularyTerm vocabularyTerm : vocabulary.getTerms())
             {
                 warnings.addAll(addRow(rowNumber++, false, ExportableKind.VOCABULARY_TYPE,
-                        permId, "1", vocabularyTerm.getCode(),
-                        vocabularyTerm.getLabel(), vocabularyTerm.getDescription()));
+                        permId,
+                        String.valueOf(VersionUtils.getStoredVersion(allVersions, ImportTypes.VOCABULARY_TYPE, vocabularyTerm.getCode(),
+                                vocabulary.getCode())),
+                        vocabularyTerm.getCode(),
+                        vocabularyTerm.getLabel(),
+                        vocabularyTerm.getDescription()));
             }
 
             return new AdditionResult(rowNumber + 1, warnings);
@@ -177,8 +190,7 @@ public class XLSVocabularyExportHelper extends AbstractXLSExportHelper<IEntityTy
         {
             case VERSION:
             {
-                // TODO: implement
-                return "1";
+                return String.valueOf(VersionUtils.getStoredVersion(allVersions, ImportTypes.VOCABULARY_TYPE, null, vocabulary.getCode()));
             }
             case CODE:
             {
diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/utils/VersionUtils.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/utils/VersionUtils.java
index 43f11690d599c4457aeb97ac44e9579b8d7695dc..7988f4c7eefc46042de33245228852ec494dc193 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/utils/VersionUtils.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/utils/VersionUtils.java
@@ -15,10 +15,32 @@
  */
 package ch.ethz.sis.openbis.generic.server.xls.importer.utils;
 
+import java.util.Collections;
 import java.util.Map;
 
+import ch.ethz.sis.openbis.generic.server.xls.importer.ImportOptions;
+import ch.ethz.sis.openbis.generic.server.xls.importer.enums.ImportTypes;
+import ch.ethz.sis.openbis.generic.server.xls.importer.handler.VersionInfoHandler;
+
 public class VersionUtils
 {
+
+    public static Map<String, Integer> loadAllVersions() {
+        final ImportOptions importOptions = new ImportOptions();
+        importOptions.setIgnoreVersioning(false);
+        return Collections.unmodifiableMap(VersionInfoHandler.loadAllVersions(importOptions));
+    }
+
+    public static int getStoredVersion(final Map<String, Integer> versions, final ImportTypes importType, final String vocabularyCodeOrNull,
+            final String typeCode)
+    {
+        String importTypeAsString = importType.getType();
+        if (importType == ImportTypes.VOCABULARY_TERM) {
+            importTypeAsString += "-" + vocabularyCodeOrNull;
+        }
+        return versions.getOrDefault(VersionUtils.getKey(importTypeAsString, typeCode), 0);
+    }
+
     public static Integer getStoredVersion(Map<String, Integer> versions, String prefix, String creationCode)
     {
         String key = getKey(prefix, creationCode);
@@ -44,7 +66,7 @@ public class VersionUtils
         }
     }
 
-    private static String getKey(String prefix, String creationCode)
+    public static String getKey(String prefix, String creationCode)
     {
         String key = String.format("%s-%s", prefix, creationCode);
         return key.toUpperCase();
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/XLSExportData.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/XLSExportData.java
index 0fa48b1a93d88a4bc6e6ccf85dc461745179c484..c47d06470cd29ca83d1cc6a270a0b86a4c53f467 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/XLSExportData.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/XLSExportData.java
@@ -29,6 +29,7 @@ import static ch.ethz.sis.openbis.generic.server.xls.export.ExportableKind.VOCAB
 import static ch.ethz.sis.openbis.generic.server.xls.export.helper.AbstractXLSExportHelper.FIELD_ID_KEY;
 import static ch.ethz.sis.openbis.generic.server.xls.export.helper.AbstractXLSExportHelper.FIELD_TYPE_KEY;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -39,6 +40,8 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.ExperimentPermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.ProjectPermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.id.SpacePermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.vocabulary.id.VocabularyPermId;
+import ch.ethz.sis.openbis.generic.server.xls.importer.enums.ImportTypes;
+import ch.ethz.sis.openbis.generic.server.xls.importer.utils.VersionUtils;
 
 public class XLSExportData
 {
@@ -60,6 +63,39 @@ public class XLSExportData
             "Line: 5 Kind: /ELN_SETTINGS/STORAGES/STORAGES_COLLECTION ID: 'COLLECTION' - "
                     + "Value exceeds the maximum size supported by Excel: 32767.");
 
+    static final Map<String, Integer> VERSIONS = new HashMap<>();
+
+    static
+    {
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.VOCABULARY_TYPE.getType(), "ANTIBODY.HOST"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.VOCABULARY_TYPE.getType(), "ANTIBODY.DETECTION"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.EXPERIMENT_TYPE.getType(), "DEFAULT_EXPERIMENT"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.DATASET_TYPE.getType(), "ATTACHMENT"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.SAMPLE_TYPE.getType(), "DEFAULT"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.SAMPLE_TYPE.getType(), "ANTIBODY"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.SAMPLE_TYPE.getType(), "VIRUS"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.SAMPLE_TYPE.getType(), "PERSON"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.SAMPLE_TYPE.getType(), "COURSE"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.SAMPLE_TYPE.getType(), "DEPARTMENT"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.SAMPLE_TYPE.getType(), "ENTRY"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "$NAME"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "$BARCODE"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "$DEFAULT_OBJECT_TYPE"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "NOTES"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "ANTIBODY.HOST"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "FIRST_NAME"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "LAST_NAME"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "OPEN"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "START_DATE"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "END_DATE"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "TEACHER"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "ADDRESS"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "DEPARTMENT"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "$XMLCOMMENTS"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "$DOCUMENT"), 1);
+        VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "$ANNOTATIONS_STATE"), 1);
+    }
+
     public static final Map<String, Map<String, List<Map<String, String>>>> EXPORT_FIELDS =
             Map.of(
                     "TYPE", Map.of(
@@ -395,8 +431,7 @@ public class XLSExportData
                                     "export-sample-type-with-bare-sample-property.xlsx",
                                     Map.of("date_range_validation", DATE_RANGE_VALIDATION_SCRIPT_CONTENT),
                                     SampleTypeWithBareSamplePropertyExpectations.class,
-                                    List.of(
-                                            new ExportablePermId(SAMPLE_TYPE, new EntityTypePermId("COURSE", EntityKind.SAMPLE))),
+                                    List.of(new ExportablePermId(SAMPLE_TYPE, new EntityTypePermId("COURSE", EntityKind.SAMPLE))),
                                     true,
                                     null,
                                     XLSExport.TextFormatting.PLAIN,
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/XLSExportTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/XLSExportTest.java
index faa44046ce577a2c91369c8a9edbcd3c85d53ce7..2201e49d20466a95875a9e96291007740c666713 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/XLSExportTest.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/XLSExportTest.java
@@ -52,12 +52,15 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.jmock.Expectations;
 import org.jmock.Mockery;
 import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
 import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.id.ObjectPermId;
+import ch.ethz.sis.openbis.generic.server.xls.export.helper.AbstractXLSEntityTypeExportHelper;
+import ch.ethz.sis.openbis.generic.server.xls.export.helper.XLSVocabularyExportHelper;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 
 public class XLSExportTest
@@ -77,6 +80,13 @@ public class XLSExportTest
         return XLSExportData.EXPORT_DATA;
     }
 
+    @BeforeClass
+    public static void beforeClass()
+    {
+        AbstractXLSEntityTypeExportHelper.setAllVersions(XLSExportData.VERSIONS);
+        XLSVocabularyExportHelper.setAllVersions(XLSExportData.VERSIONS);
+    }
+
     @BeforeMethod
     public void beforeMethod()
     {