diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/MapDataSetTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/MapDataSetTest.java
index bb698ca95f4ea9cee6270ead94b030e2b53d7444..84436eea136b2eca69e000b93dbcfef6f6f92856 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/MapDataSetTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/MapDataSetTest.java
@@ -17,6 +17,8 @@
 package ch.ethz.sis.openbis.systemtest.api.v3;
 
 import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -27,17 +29,27 @@ import java.util.Set;
 
 import org.testng.annotations.Test;
 
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.dataset.ArchivingStatus;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.dataset.Complete;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.dataset.DataSet;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.dataset.DataSetKind;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.dataset.DataSetUpdate;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.dataset.ExternalData;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.dataset.FileFormatType;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.dataset.LocatorType;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.history.DataSetRelationType;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.history.HistoryEntry;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.history.PropertyHistoryEntry;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.history.RelationHistoryEntry;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.material.Material;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.tag.Tag;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.vocabulary.Vocabulary;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.vocabulary.VocabularyTerm;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.fetchoptions.dataset.DataSetFetchOptions;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.fetchoptions.dataset.ExternalDataFetchOptions;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.fetchoptions.tag.TagFetchOptions;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.fetchoptions.vocabulary.VocabularyFetchOptions;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.fetchoptions.vocabulary.VocabularyTermFetchOptions;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.dataset.DataSetPermId;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.dataset.IDataSetId;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.experiment.ExperimentIdentifier;
@@ -163,6 +175,9 @@ public class MapDataSetTest extends AbstractDataSetTest
         assertEqualsDate(dataSet.getAccessDate(), "2011-04-01 09:56:25");
         assertEqualsDate(dataSet.getModificationDate(), "2009-03-23 15:34:44");
         assertEqualsDate(dataSet.getRegistrationDate(), "2009-02-09 12:20:21");
+        assertEquals(dataSet.isDerived(), Boolean.FALSE);
+        assertEquals(dataSet.isPlaceholder(), Boolean.FALSE);
+        assertEquals(dataSet.isPostRegistered(), Boolean.TRUE);
 
         assertTypeNotFetched(dataSet);
         assertExternalDataNotFetched(dataSet);
@@ -202,6 +217,7 @@ public class MapDataSetTest extends AbstractDataSetTest
         assertEquals(dataSet.getType().getPermId().getPermId(), "HCS_IMAGE");
         assertEquals(dataSet.getType().getDescription(), "High Content Screening Image");
         assertEquals(dataSet.getType().getKind(), DataSetKind.PHYSICAL);
+        assertEqualsDate(dataSet.getType().getModificationDate(), "2009-03-23 15:34:44");
 
         assertExternalDataNotFetched(dataSet);
         assertExperimentNotFetched(dataSet);
@@ -221,6 +237,7 @@ public class MapDataSetTest extends AbstractDataSetTest
         assertEquals(dataSet2.getType().getPermId().getPermId(), "CONTAINER_TYPE");
         assertEquals(dataSet2.getType().getDescription(), "A container (virtual) data set type");
         assertEquals(dataSet2.getType().getKind(), DataSetKind.CONTAINER);
+        assertEqualsDate(dataSet2.getType().getModificationDate(), "2011-05-09 12:24:44");
 
         assertExternalDataNotFetched(dataSet2);
         assertExperimentNotFetched(dataSet2);
@@ -498,27 +515,63 @@ public class MapDataSetTest extends AbstractDataSetTest
     }
 
     @Test
-    public void testMapWithExternalData()
+    public void testMapWithExternalDataForPhysicalDataSet()
     {
         String sessionToken = v3api.login(TEST_USER, PASSWORD);
 
         DataSetPermId permId = new DataSetPermId("20081105092159111-1");
-
         DataSetFetchOptions fetchOptions = new DataSetFetchOptions();
-        fetchOptions.withExternalData();
 
-        Map<IDataSetId, DataSet> map =
-                v3api.mapDataSets(sessionToken, Arrays.asList(permId),
-                        fetchOptions);
+        ExternalDataFetchOptions externalDataFetchOptions = fetchOptions.withExternalData();
+        externalDataFetchOptions.withFileFormatType();
+        externalDataFetchOptions.withLocatorType();
 
-        assertEquals(1, map.size());
+        VocabularyTermFetchOptions storageFormatTermFetchOptions = externalDataFetchOptions.withStorageFormat();
+        storageFormatTermFetchOptions.withRegistrator();
 
-        DataSet dataSet = map.get(permId);
+        VocabularyFetchOptions storageFormatVocabularyFetchOptions = storageFormatTermFetchOptions.withVocabulary();
+        storageFormatVocabularyFetchOptions.withRegistrator();
+
+        Map<IDataSetId, DataSet> dataSets = v3api.mapDataSets(sessionToken, Arrays.asList(permId), fetchOptions);
+
+        assertEquals(dataSets.size(), 1);
+        DataSet dataSet = dataSets.get(permId);
+
+        assertEquals(dataSet.getCode(), "20081105092159111-1");
 
-        assertEquals(dataSet.getExternalData().getLocation(), "a/1");
-        assertEquals(dataSet.getExternalData().getShareId(), "42");
-        assertEquals(dataSet.getExternalData().getSize(), Long.valueOf(4711));
-        assertEquals(dataSet.getExternalData().getSpeedHint(), Integer.valueOf(42));
+        ExternalData externalData = dataSet.getExternalData();
+        assertEquals(externalData.getShareId(), "42");
+        assertEquals(externalData.getLocation(), "a/1");
+        assertEquals(externalData.getSize(), Long.valueOf(4711));
+        assertEquals(externalData.getComplete(), Complete.UNKNOWN);
+        assertEquals(externalData.getStatus(), ArchivingStatus.AVAILABLE);
+        assertFalse(externalData.isPresentInArchive());
+        assertFalse(externalData.isStorageConfirmation());
+
+        FileFormatType fileFormatType = externalData.getFileFormatType();
+        assertEquals(fileFormatType.getCode(), "TIFF");
+        assertEquals(fileFormatType.getDescription(), "TIFF File");
+
+        LocatorType locatorType = externalData.getLocatorType();
+        assertEquals(locatorType.getCode(), "RELATIVE_LOCATION");
+        assertEquals(locatorType.getDescription(), "Relative Location");
+
+        VocabularyTerm storageFormatTerm = externalData.getStorageFormat();
+        assertEquals(storageFormatTerm.getCode(), "PROPRIETARY");
+        assertEquals(storageFormatTerm.getLabel(), "proprietary label");
+        assertEquals(storageFormatTerm.getDescription(), "proprietary description");
+        assertEquals(storageFormatTerm.getOrdinal(), Long.valueOf(1));
+        assertTrue(storageFormatTerm.isOfficial());
+        assertEquals(storageFormatTerm.getRegistrator().getUserId(), "system");
+        assertEqualsDate(storageFormatTerm.getRegistrationDate(), "2008-11-05 09:18:00");
+        assertEqualsDate(storageFormatTerm.getModificationDate(), "2008-11-05 09:18:00");
+
+        Vocabulary storageFormatVocabulary = storageFormatTerm.getVocabulary();
+        assertEquals(storageFormatVocabulary.getCode(), "$STORAGE_FORMAT");
+        assertEquals(storageFormatVocabulary.getDescription(), "The on-disk storage format of a data set");
+        assertEquals(storageFormatVocabulary.getRegistrator().getUserId(), "system");
+        assertEqualsDate(storageFormatVocabulary.getRegistrationDate(), "2008-11-05 09:18:00");
+        assertEqualsDate(storageFormatVocabulary.getModificationDate(), "2009-03-23 15:34:44");
 
         assertTypeNotFetched(dataSet);
         assertExperimentNotFetched(dataSet);
@@ -531,7 +584,24 @@ public class MapDataSetTest extends AbstractDataSetTest
         assertModifierNotFetched(dataSet);
         assertRegistratorNotFetched(dataSet);
         assertTagsNotFetched(dataSet);
-        v3api.logout(sessionToken);
+    }
+
+    @Test
+    public void testMapWithExternalDataForContainerDataSet()
+    {
+        String sessionToken = v3api.login(TEST_USER, PASSWORD);
+
+        DataSetPermId permId = new DataSetPermId("ROOT_CONTAINER");
+        DataSetFetchOptions fetchOptions = new DataSetFetchOptions();
+        fetchOptions.withExternalData();
+
+        Map<IDataSetId, DataSet> dataSets = v3api.mapDataSets(sessionToken, Arrays.asList(permId), fetchOptions);
+
+        assertEquals(dataSets.size(), 1);
+        DataSet dataSet = dataSets.get(permId);
+
+        assertEquals(dataSet.getCode(), "ROOT_CONTAINER");
+        assertEquals(dataSet.getExternalData(), null);
     }
 
     @Test
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/SearchDataSetTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/SearchDataSetTest.java
index 3ddbb0aabd829496867c4f59f626cb0a9ea0e1b5..ac4ad465e2d60403ef8d7ec076d8eb43c40038ec 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/SearchDataSetTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/SearchDataSetTest.java
@@ -17,27 +17,13 @@
 package ch.ethz.sis.openbis.systemtest.api.v3;
 
 import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertTrue;
 
-import java.util.Collections;
 import java.util.List;
-import java.util.TreeMap;
 
 import org.testng.annotations.Test;
 
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.dataset.ArchivingStatus;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.dataset.Complete;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.dataset.DataSet;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.dataset.ExternalData;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.dataset.FileFormatType;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.dataset.LocatorType;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.vocabulary.Vocabulary;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.vocabulary.VocabularyTerm;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.fetchoptions.dataset.DataSetFetchOptions;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.fetchoptions.dataset.ExternalDataFetchOptions;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.fetchoptions.vocabulary.VocabularyFetchOptions;
-import ch.ethz.sis.openbis.generic.shared.api.v3.dto.fetchoptions.vocabulary.VocabularyTermFetchOptions;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.dataset.DataSetPermId;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.entitytype.EntityTypePermId;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.tag.TagPermId;
@@ -219,112 +205,6 @@ public class SearchDataSetTest extends AbstractDataSetTest
         testSearch(TEST_USER, criteria, "20081105092159111-1", "20081105092159333-3", "20110805092359990-17");
     }
 
-    @Test
-    public void testSearchWithFetchOptionExperiment()
-    {
-        DataSetSearchCriteria criteria = new DataSetSearchCriteria();
-        criteria.withPermId().thatEquals("20110805092359990-17");
-        DataSetFetchOptions fetchOptions = new DataSetFetchOptions();
-        fetchOptions.withExperiment().withProperties();
-
-        List<DataSet> dataSets = searchDataSets(TEST_USER, criteria, fetchOptions);
-
-        Collections.sort(dataSets, DATA_SET_COMPARATOR);
-        assertEquals(dataSets.get(0).getCode(), "20110805092359990-17");
-        assertEquals(dataSets.get(0).getPermId().toString(), "20110805092359990-17");
-        assertEqualsDate(dataSets.get(0).getAccessDate(), "2014-04-01 09:56:25");
-        assertEqualsDate(dataSets.get(0).getModificationDate(), "2009-03-23 15:34:44");
-        assertEqualsDate(dataSets.get(0).getRegistrationDate(), "2009-02-09 12:21:47");
-        assertEquals(dataSets.get(0).isDerived(), Boolean.FALSE);
-        assertEquals(dataSets.get(0).isPlaceholder(), Boolean.FALSE);
-        assertEquals(dataSets.get(0).isPostRegistered(), Boolean.TRUE);
-        assertParentsNotFetched(dataSets.get(0));
-        assertChildrenNotFetched(dataSets.get(0));
-        assertContainersNotFetched(dataSets.get(0));
-        assertContainedNotFetched(dataSets.get(0));
-        assertEquals(dataSets.get(0).getExperiment().getIdentifier().toString(), "/CISD/NEMO/EXP-TEST-2");
-        assertEquals(new TreeMap<String, String>(dataSets.get(0).getExperiment().getProperties()).toString(),
-                "{DESCRIPTION=very important expertiment, GENDER=FEMALE, PURCHASE_DATE=2009-02-09 10:00:00 +0100}");
-        assertEquals(dataSets.size(), 1);
-    }
-
-    @Test
-    public void testSearchWithFetchOptionExternalDataForPhysicalDataSet()
-    {
-        DataSetSearchCriteria criteria = new DataSetSearchCriteria();
-        criteria.withPermId().thatEquals("20081105092159111-1");
-        DataSetFetchOptions fetchOptions = new DataSetFetchOptions();
-
-        ExternalDataFetchOptions externalDataFetchOptions = fetchOptions.withExternalData();
-        externalDataFetchOptions.withFileFormatType();
-        externalDataFetchOptions.withLocatorType();
-
-        VocabularyTermFetchOptions storageFormatTermFetchOptions = externalDataFetchOptions.withStorageFormat();
-        storageFormatTermFetchOptions.withRegistrator();
-
-        VocabularyFetchOptions storageFormatVocabularyFetchOptions = storageFormatTermFetchOptions.withVocabulary();
-        storageFormatVocabularyFetchOptions.withRegistrator();
-
-        List<DataSet> dataSets = searchDataSets(TEST_USER, criteria, fetchOptions);
-
-        assertEquals(dataSets.size(), 1);
-        DataSet dataSet = dataSets.get(0);
-
-        assertEquals(dataSet.getCode(), "20081105092159111-1");
-
-        ExternalData externalData = dataSet.getExternalData();
-        assertEquals(externalData.getShareId(), "42");
-        assertEquals(externalData.getLocation(), "a/1");
-        assertEquals(externalData.getSize(), Long.valueOf(4711));
-        assertEquals(externalData.getComplete(), Complete.UNKNOWN);
-        assertEquals(externalData.getStatus(), ArchivingStatus.AVAILABLE);
-        assertFalse(externalData.isPresentInArchive());
-        assertFalse(externalData.isStorageConfirmation());
-
-        FileFormatType fileFormatType = externalData.getFileFormatType();
-        assertEquals(fileFormatType.getCode(), "TIFF");
-        assertEquals(fileFormatType.getDescription(), "TIFF File");
-
-        LocatorType locatorType = externalData.getLocatorType();
-        assertEquals(locatorType.getCode(), "RELATIVE_LOCATION");
-        assertEquals(locatorType.getDescription(), "Relative Location");
-
-        VocabularyTerm storageFormatTerm = externalData.getStorageFormat();
-        assertEquals(storageFormatTerm.getCode(), "PROPRIETARY");
-        assertEquals(storageFormatTerm.getLabel(), null);
-        assertEquals(storageFormatTerm.getDescription(), null);
-        assertEquals(storageFormatTerm.getOrdinal(), Long.valueOf(1));
-        assertTrue(storageFormatTerm.isOfficial());
-        assertEquals(storageFormatTerm.getRegistrator().getUserId(), "system");
-        assertEqualsDate(storageFormatTerm.getRegistrationDate(), "2008-11-05 09:18:00");
-        assertEqualsDate(storageFormatTerm.getModificationDate(), "2008-11-05 09:18:00");
-
-        Vocabulary storageFormatVocabulary = storageFormatTerm.getVocabulary();
-        assertEquals(storageFormatVocabulary.getCode(), "$STORAGE_FORMAT");
-        assertEquals(storageFormatVocabulary.getDescription(), "The on-disk storage format of a data set");
-        assertEquals(storageFormatVocabulary.getRegistrator().getUserId(), "system");
-        assertEqualsDate(storageFormatVocabulary.getRegistrationDate(), "2008-11-05 09:18:00");
-        assertEqualsDate(storageFormatVocabulary.getModificationDate(), "2009-03-23 15:34:44");
-    }
-
-    @Test
-    public void testSearchWithFetchOptionExternalDataForContainerDataSet()
-    {
-        DataSetSearchCriteria criteria = new DataSetSearchCriteria();
-        criteria.withPermId().thatEquals("ROOT_CONTAINER");
-
-        DataSetFetchOptions fetchOptions = new DataSetFetchOptions();
-        fetchOptions.withExternalData();
-
-        List<DataSet> dataSets = searchDataSets(TEST_USER, criteria, fetchOptions);
-
-        assertEquals(dataSets.size(), 1);
-        DataSet dataSet = dataSets.get(0);
-
-        assertEquals(dataSet.getCode(), "ROOT_CONTAINER");
-        assertEquals(dataSet.getExternalData(), null);
-    }
-
     @Test
     public void testSearchWithTypeWithIdSetToPermId()
     {
diff --git a/openbis/sourceTest/sql/postgresql/146/006=controlled_vocabulary_terms.tsv b/openbis/sourceTest/sql/postgresql/146/006=controlled_vocabulary_terms.tsv
index 2099ccf1c81769395bdcf053c3403cc295890e14..1eb11c3289f7660169b51a5a015f41b37ef750e2 100644
--- a/openbis/sourceTest/sql/postgresql/146/006=controlled_vocabulary_terms.tsv
+++ b/openbis/sourceTest/sql/postgresql/146/006=controlled_vocabulary_terms.tsv
@@ -1,7 +1,7 @@
 1	96_WELLS_8X12	2008-11-05 09:18:00.622+01	1	1	\N	\N	1	t
 2	384_WELLS_16X24	2008-11-05 09:18:00.622+01	1	1	\N	\N	2	t
 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
+4	PROPRIETARY	2008-11-05 09:18:00.622+01	2	1	proprietary label	proprietary description	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	the rat	1	t
 7	DOG	2008-11-05 09:18:30.327+01	3	2	\N	doggy	2	t