diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/DataSet.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/DataSet.java
index 0310df4a857ac242106c8d7cca2e84e4dfc3a765..5d488340c6bcd737d3f8608740cc996a9ce025ff 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/DataSet.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/DataSet.java
@@ -42,6 +42,8 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalDataManagementS
  */
 public class DataSet
 {
+    private static final int MINIMAL_MINOR_VERSION_DELIVERING_CONTAINER = 20;
+
     private final IOpenbisServiceFacade facade;
 
     private final IDssComponent dssComponent;
@@ -205,6 +207,27 @@ public class DataSet
         return getMetadata().getExternalDataManagementSystem();
     }
 
+    /**
+     * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet#getContainerOrNull()
+     */
+    @Retry
+    public DataSet getContainerOrNull()
+    {
+        final DataSet containerOrNull = (getMetadata().getContainerOrNull() != null) ?
+                new DataSet(facade, dssComponent, getMetadata().getContainerOrNull(), null) : null;
+        return containerOrNull;
+    }
+
+    /**
+     * Returns <code>true</code>, if result of {@link #getContainerOrNull()} can be trusted and
+     * <code>false</code>, if it cannot be trusted because the server is too old to deliver this
+     * information.
+     */
+    public boolean knowsContainer()
+    {
+        return facade.getMinorVersionInformationService() >= MINIMAL_MINOR_VERSION_DELIVERING_CONTAINER;
+    }
+
     /**
      * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet#getContainedDataSets()
      */
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/ISimpleOpenbisServiceFacade.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/ISimpleOpenbisServiceFacade.java
index ad92c15791224b289972e344c57c8f361d130844..9604766e8b960abb6db63d35f5f0b051936b370c 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/ISimpleOpenbisServiceFacade.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/ISimpleOpenbisServiceFacade.java
@@ -48,6 +48,11 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Vocabulary;
 public interface ISimpleOpenbisServiceFacade
 {
 
+    /**
+     * Returns the minor version of the general information service.
+     */
+    public int getMinorVersionInformationService();
+    
     /**
      * Returns all available projects.
      */
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/impl/OpenbisServiceFacade.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/impl/OpenbisServiceFacade.java
index 36b32cfc5e8673d2dc37285febca2336b11a4051..936f6b8b7b28ee19dbfef1d75a13675483e0e96c 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/impl/OpenbisServiceFacade.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/impl/OpenbisServiceFacade.java
@@ -174,6 +174,8 @@ public class OpenbisServiceFacade implements IOpenbisServiceFacade
 
     private final IDssComponent dssComponent;
     
+    private final int minorVersionInformationService;
+    
     private final int minorVersionChangingService;
 
     public OpenbisServiceFacade(String sessionToken, IGeneralInformationService service,
@@ -181,6 +183,7 @@ public class OpenbisServiceFacade implements IOpenbisServiceFacade
     {
         this.sessionToken = sessionToken;
         this.service = service;
+        this.minorVersionInformationService = service.getMinorVersion();
         this.changingService = changingService;
         this.minorVersionChangingService = changingService.getMinorVersion();
         this.dssComponent = dssComponent;
@@ -519,6 +522,12 @@ public class OpenbisServiceFacade implements IOpenbisServiceFacade
         }
     }
 
+    @Override
+    public int getMinorVersionInformationService()
+    {
+        return minorVersionInformationService;
+    }
+
     //
     // IOpenbisServiceFacade
     //
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java
index 43da0d55710b8dbc75753491f6ea3cb5cfb0cbb0..7a5681f52c17abdf781f930d2b64dee1f55ac939 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java
@@ -223,7 +223,7 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio
     @Override
     public int getMinorVersion()
     {
-        return 19;
+        return 20;
     }
 
     private Map<String, List<RoleAssignmentPE>> getRoleAssignmentsPerSpace()
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java
index 4cd44087b6855f569341d8560d6b62e4eb3b7e46..86c1bfd3f900306d4890d6413abb328f14dbf805 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java
@@ -210,6 +210,14 @@ public class DataSetLister implements IDataSetLister
             edms.setOpenBIS(dataSet.edms_is_openbis);
             initializer.setExternalDataManagementSystem(edms);
         }
+        if (dataSet.ctnr_id != null)
+        {
+            final DataSetInitializer containerInitializer = new DataSetInitializer();
+            containerInitializer.setStub(true);
+            containerInitializer.setId(dataSet.ctnr_id);
+            containerInitializer.setCode(dataSet.ctnr_code);
+            initializer.setContainerOrNull(new DataSet(containerInitializer));
+        }
         initializer.setRegistrationDetails(createDataSetRegistrationDetails(dataSet));
         initializer.setExperimentIdentifier(experimentIdentifier.toString());
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetRecord.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetRecord.java
index 515920cd652fdf8c24727df89714d51e7225aa29..c71062c23fead5512c11f9c7c71be4353bdde3b7 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetRecord.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetRecord.java
@@ -32,6 +32,10 @@ public class DataSetRecord
 
     public Date ds_modification_timestamp;
 
+    public Long ctnr_id;
+
+    public String ctnr_code;
+
     public String dt_code;
 
     public String dt_data_set_kind;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/IDataSetListingQuery.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/IDataSetListingQuery.java
index 9c5c51b1eaede3a39e00a1312dc2982cbdb241e9..e6e398623e147295f3d2e4538b5935262034d918 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/IDataSetListingQuery.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/IDataSetListingQuery.java
@@ -36,6 +36,7 @@ public interface IDataSetListingQuery extends BaseQuery
             + " ds.id as ds_id, ds.code as ds_code, ds.registration_timestamp as ds_registration_timestamp,"
             + " ds.modification_timestamp as ds_modification_timestamp,"
             + " dt.code as dt_code, dt.data_set_kind as dt_data_set_kind,"
+            + " ctnr.id as ctnr_id, ctnr.code as ctnr_code,"
             + " ex.code as ex_code, "
             + " ed.storage_confirmation as ed_sc,"
             + " sa.code as sa_code, sa.dbin_id as sa_dbin_id, sac.code as sac_code,"
@@ -52,6 +53,7 @@ public interface IDataSetListingQuery extends BaseQuery
             + " left outer join samples sa on ds.samp_id = sa.id"
             + " left outer join persons pe on ds.pers_id_registerer = pe.id"
             + " left outer join persons mod on ds.pers_id_modifier = mod.id"
+            + " left outer join data ctnr on ds.ctnr_id = ctnr.id"
             + " inner join projects pre on ex.proj_id = pre.id"
             + " inner join spaces spe on pre.space_id = spe.id"
             + " inner join database_instances die on spe.dbin_id = die.id"
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/Translator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/Translator.java
index eeb55e97622008ae722ae8c96a44bcbc4e7cdf54..1437ac8226dbf6673c634abaa604b0644be3dd3d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/Translator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/Translator.java
@@ -380,6 +380,11 @@ public class Translator
         {
             initializer.putProperty(prop.getPropertyType().getCode(), prop.tryGetAsString());
         }
+        if (externalDatum.tryGetContainer() != null)
+        {
+            initializer.setContainerOrNull(translate(externalDatum.tryGetContainer(),
+                    connectionsToGet));
+        }
 
         initializer.setContainerDataSet(externalDatum.isContainer());
         if (externalDatum.isContainer())
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetListerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetListerTest.java
index 2d371bf7e70431c7b77f211b933863c6c0678b5c..81264ec3fc80e81bca566cc1361c2d9c0d39ae0c 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetListerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetListerTest.java
@@ -120,6 +120,29 @@ public class DataSetListerTest extends AbstractDAOTest
         assertEqualToDataSetMetaDataWithCodes(codes, fetchOptions, result);
     }
 
+    @Test
+    public void testGetDataSetMetaDataForContainedDataSets()
+    {
+        List<String> codes = new ArrayList<String>();
+        codes.add("20110509092359990-11");
+        codes.add("20110509092359990-12");
+        codes.add("VALIDATIONS_IMPOS-27");
+        DataSetFetchOptions fetchOptions = new DataSetFetchOptions();
+
+        List<DataSet> result = lister.getDataSetMetaData(codes, fetchOptions);
+
+        assertNotNull(result.get(0).getContainerOrNull());
+        assertNotNull(result.get(1).getContainerOrNull());
+        assertNotNull(result.get(2).getContainerOrNull());
+
+        assertEquals(13, result.get(0).getContainerOrNull().getId().longValue());
+        assertEquals("20110509092359990-10", result.get(0).getContainerOrNull().getCode());
+        assertEquals(13, result.get(1).getContainerOrNull().getId().longValue());
+        assertEquals("20110509092359990-10", result.get(1).getContainerOrNull().getCode());
+        assertEquals(26, result.get(2).getContainerOrNull().getId().longValue());
+        assertEquals("VALIDATIONS_CNTNR-26", result.get(2).getContainerOrNull().getCode());
+    }
+
     @Test
     public void testGetDataStoreURLs()
     {
diff --git a/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/DataSet.java b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/DataSet.java
index 72fd52588593a6ae64e9486e680107f37b072e8d..afc637eab6e1b0cad5eeaa966ee5969c7c8e3839 100644
--- a/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/DataSet.java
+++ b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/DataSet.java
@@ -74,7 +74,7 @@ public final class DataSet implements Serializable, IIdHolder
         private String dataSetTypeCode;
 
         private boolean containerDataSet;
-
+        
         private boolean linkDataSet;
 
         private String externalDataSetCode;
@@ -91,6 +91,8 @@ public final class DataSet implements Serializable, IIdHolder
 
         private List<DataSet> containedDataSets = Collections.emptyList();
 
+        private DataSet containerOrNull;
+
         private HashMap<String, String> properties = new HashMap<String, String>();
 
         private List<Metaproject> metaprojects = new ArrayList<Metaproject>();
@@ -234,6 +236,16 @@ public final class DataSet implements Serializable, IIdHolder
                     (null == containedDataSets) ? new ArrayList<DataSet>() : containedDataSets;
         }
 
+        public DataSet getContainerOrNull()
+        {
+            return containerOrNull;
+        }
+
+        public void setContainerOrNull(DataSet containerOrNull)
+        {
+            this.containerOrNull = containerOrNull;
+        }
+
         public boolean isLinkDataSet()
         {
             return linkDataSet;
@@ -325,6 +337,8 @@ public final class DataSet implements Serializable, IIdHolder
     private List<String> childrenCodes = Collections.emptyList();
 
     private List<DataSet> containedDataSets = Collections.emptyList();
+    
+    private DataSet containerOrNull;
 
     private EntityRegistrationDetails registrationDetails;
 
@@ -369,6 +383,7 @@ public final class DataSet implements Serializable, IIdHolder
                     "Unspecified entity registration details.");
             this.registrationDetails = initializer.getRegistrationDetails();
             this.containerDataSet = initializer.isContainerDataSet();
+            this.containerOrNull = initializer.getContainerOrNull();
             this.containedDataSets = initializer.getContainedDataSets();
             this.linkDataSet = initializer.isLinkDataSet();
             this.externalDataSetCode = initializer.getExternalDataSetCode();
@@ -501,6 +516,14 @@ public final class DataSet implements Serializable, IIdHolder
         return containerDataSet;
     }
 
+    /**
+     * @since 1.20
+     */
+    public DataSet getContainerOrNull()
+    {
+        return containerOrNull;
+    }
+
     public boolean isLinkDataSet()
     {
         return linkDataSet;
@@ -637,6 +660,11 @@ public final class DataSet implements Serializable, IIdHolder
         this.containerDataSet = containerDataSet;
     }
 
+    private void setContainerOrNull(DataSet containerOrNull)
+    {
+        this.containerOrNull = containerOrNull;
+    }
+
     private void setLinkDataSet(boolean linkDataSet)
     {
         this.linkDataSet = linkDataSet;