diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java
index 7575078a46e48909ba5ff8f67b6517844f928ce2..87d89a6f584a6a0d31efe8a13de1791776b85f0a 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java
@@ -175,6 +175,7 @@ public class HierarchicalContentProvider implements IHierarchicalContentProvider
             if (locationNode.isContainer())
             {
                 List<IHierarchicalContent> componentContents = new ArrayList<IHierarchicalContent>();
+                final String containerDataSetCode = locationNode.getLocation().getDataSetCode();
                 List<IDatasetLocationNode> sortedNodes = new ArrayList<IDatasetLocationNode>(locationNode.getComponents());
                 Collections.sort(sortedNodes, new Comparator<IDatasetLocationNode>()
                     {
@@ -186,7 +187,7 @@ public class HierarchicalContentProvider implements IHierarchicalContentProvider
                         
                         private int getOrderInContainer(IDatasetLocationNode node)
                         {
-                            Integer orderInContainer = node.getLocation().getOrderInContainer();
+                            Integer orderInContainer = node.getLocation().getOrderInContainer(containerDataSetCode);
                             return orderInContainer == null ? 0 : orderInContainer;
                         }
                     });
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProviderTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProviderTest.java
index e0e6f1b8cfbca70c796baa2e5dd494abe7193bb5..0fe6311a64409f98d8063ee355b2f85ae0c99591 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProviderTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProviderTest.java
@@ -296,7 +296,7 @@ public class HierarchicalContentProviderTest extends AssertJUnit
                 }
 
                 @Override
-                public Integer getOrderInContainer()
+                public Integer getOrderInContainer(String containerDataSetCode)
                 {
                     return null;
                 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalDataGridColumnIDs.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalDataGridColumnIDs.java
index b8e211e066821c096eb16a0efef7509cc90f199b..03148fcf0cba815179036b5725dddf74a5bc1f44 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalDataGridColumnIDs.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalDataGridColumnIDs.java
@@ -31,11 +31,11 @@ public class ExternalDataGridColumnIDs
 
     public static final String DATA_SET_TYPE = "DATA_SET_TYPE";
 
-    public static final String CONTAINER_DATASET = "CONTAINER_DATASET";
+    public static final String CONTAINER_DATASETS = "CONTAINER_DATASETS";
 
     public static final String PARENT_DATASETS = "PARENT_DATASETS";
 
-    public static final String ORDER_IN_CONTAINER = "ORDER_IN_CONTAINER";
+    public static final String ORDER_IN_CONTAINERS = "ORDER_IN_CONTAINERS";
 
     public static final String SAMPLE = "SAMPLE";
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java
index 2a9f2980ad9ad231d680d25de490f3ccdb19c6ed..4e64f5cfff2eec2a20bb6e57579848ad74793461 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java
@@ -20,7 +20,7 @@ import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.CommonGridC
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.CommonGridColumnIDs.MODIFIER;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.ARCHIVING_STATUS;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.CODE;
-import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.CONTAINER_DATASET;
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.CONTAINER_DATASETS;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.DATA_PRODUCER_CODE;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.DATA_SET_TYPE;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.DATA_STORE_CODE;
@@ -36,7 +36,7 @@ import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDat
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.IS_DELETED;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.LOCATION;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.METAPROJECTS;
-import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.ORDER_IN_CONTAINER;
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.ORDER_IN_CONTAINERS;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.PARENT_DATASETS;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.PERM_ID;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.PRESENT_IN_ARCHIVE;
@@ -53,19 +53,20 @@ import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDat
 
 import java.util.List;
 
+import ch.systemsx.cisd.common.shared.basic.string.CommaSeparatedListBuilder;
 import ch.systemsx.cisd.openbis.generic.shared.ICommonServer;
 import ch.systemsx.cisd.openbis.generic.shared.basic.DeletionUtils;
 import ch.systemsx.cisd.openbis.generic.shared.basic.SimpleYesNoRenderer;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ContainerDataSet;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PhysicalDataSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalDataManagementSystem;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkDataSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkDataSetUrl;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkTableCell;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PhysicalDataSet;
 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.TypedTableModel;
@@ -91,8 +92,8 @@ public abstract class AbstractExternalDataProvider extends
         builder.addColumn(CODE).withDefaultWidth(150);
         builder.addColumn(EXTERNAL_CODE).withDefaultWidth(150).hideByDefault();
         builder.addColumn(DATA_SET_TYPE).withDefaultWidth(200);
-        builder.addColumn(CONTAINER_DATASET).withDefaultWidth(150).hideByDefault();
-        builder.addColumn(ORDER_IN_CONTAINER).withDefaultWidth(100).hideByDefault();
+        builder.addColumn(CONTAINER_DATASETS).withDefaultWidth(150).hideByDefault();
+        builder.addColumn(ORDER_IN_CONTAINERS).withDefaultWidth(100).hideByDefault();
         builder.addColumn(PARENT_DATASETS).withDefaultWidth(150).hideByDefault();
         builder.addColumn(SAMPLE).withDefaultWidth(100).hideByDefault();
         builder.addColumn(EXTERNAL_DATA_SAMPLE_IDENTIFIER).withDefaultWidth(200);
@@ -153,14 +154,14 @@ public abstract class AbstractExternalDataProvider extends
                         metaProjectsToString(dataSet.getMetaprojects()));
 
                 builder.column(DATA_SET_TYPE).addString(dataSet.getDataSetType().getCode());
-                ContainerDataSet container = dataSet.tryGetContainer();
-                if (container != null)
+                List<ContainerDataSet> containerDataSets = dataSet.getContainerDataSets();
+                builder.column(CONTAINER_DATASETS).addEntityLink(containerDataSets);
+                CommaSeparatedListBuilder listBuilder = new CommaSeparatedListBuilder();
+                for (ContainerDataSet containerDataSet : containerDataSets)
                 {
-                    builder.column(CONTAINER_DATASET).addEntityLink(container, container.getCode());
+                    listBuilder.append(dataSet.getOrderInContainer(containerDataSet.getCode()));
                 }
-                Integer orderInContainer = dataSet.getOrderInContainer();
-                builder.column(ORDER_IN_CONTAINER).addString(
-                        orderInContainer == null ? "" : orderInContainer.toString());
+                builder.column(ORDER_IN_CONTAINERS).addString(listBuilder.toString());
                 builder.column(PARENT_DATASETS).addEntityLink(dataSet.getParents());
 
                 Sample sample = dataSet.getSample();
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 ce8151e663e044da4978bed085554f8e23876271..58a2d77e328ce3671659752657e04295d08f76dc 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
@@ -870,7 +870,11 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt
         {
             case CONTAINER:
                 datasets = datasetLister.listByContainerTechId(datasetId);
-                Collections.sort(datasets, AbstractExternalData.DATA_SET_COMPONENTS_COMPARATOR);
+                Collections.sort(datasets, new AbstractExternalData.DataSetComponentsComparator(datasetId));
+                break;
+            case COMPONENT:
+                datasets = datasetLister.listByComponentTechId(datasetId);
+                Collections.sort(datasets);
                 break;
             case CHILD:
                 datasets = datasetLister.listByChildTechId(datasetId);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java
index 894b8ec2d38d101e72daa04365295f0c2cc861cf..000ade4d9f1f1dd36d2cf673d7c2622f7ab9b703 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java
@@ -407,6 +407,13 @@ public class DatasetLister extends AbstractLister implements IDatasetLister
                 getParentChildRelationshipTypeId()));
     }
 
+    @Override
+    public List<AbstractExternalData> listByComponentTechId(TechId componentDatasetId)
+    {
+        return enrichDatasets(query.getParentsOf(new LongOpenHashSet(Arrays.asList(componentDatasetId.getId())),
+                getContainerComponentRelationshipTypeId()));
+    }
+
     @Override
     public List<AbstractExternalData> listByContainerTechId(TechId containerDatasetId)
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLocationNodeRecord.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLocationNodeRecord.java
index 8c8954496708ef01955fef60d12178add4e2237c..b7b252266b4be547057d86affa23aa996a0007cc 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLocationNodeRecord.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLocationNodeRecord.java
@@ -28,6 +28,8 @@ public class DatasetLocationNodeRecord
 
     public Long container_id;
 
+    public String container_code;
+
     public Integer ordinal;
 
     public String location;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java
index 71c7481456a5da46103b420dff0da9ad3285a1d7..69979a9e06a8340dfdb12a1b6e135c7003d0853e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java
@@ -57,6 +57,9 @@ public interface IDatasetLister
     /** @return datasets that are parents of a dataset with the specified id */
     List<AbstractExternalData> listByChildTechId(TechId childDatasetId);
 
+    /** @return datasets that are containers of a dataset with the specified id */
+    List<AbstractExternalData> listByComponentTechId(TechId componentDatasetId);
+
     /** @return datasets that are components of a dataset with the specified id */
     List<AbstractExternalData> listByContainerTechId(TechId containerDatasetId);
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AbstractExternalData.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AbstractExternalData.java
index 706fc4fc55bc9138a465dc8edcfd5679210950f7..63286c01c613651d8a4728fbf05e8bc6ba6c6057 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AbstractExternalData.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AbstractExternalData.java
@@ -31,6 +31,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIsStub;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IPermIdHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.ITaggable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 
 /**
  * A DTO for any kind of data set.
@@ -75,14 +76,10 @@ public abstract class AbstractExternalData extends
 
     }
 
-    /**
-     * {@link Comparator} for data sets contained in a (virtual) container which uses ascending order in container.
-     */
-    public static final Comparator<AbstractExternalData> DATA_SET_COMPONENTS_COMPARATOR =
-            new DataSetComponentsComparator();
-
     private Map<String, ContainerAndOrder> containersAndOrderByContainerId = new TreeMap<String, ContainerAndOrder>();
 
+    private Map<Long, ContainerAndOrder> containersAndOrderByContainerTechId = new TreeMap<Long, ContainerAndOrder>();
+
     private boolean derived;
 
     private Long id;
@@ -401,13 +398,6 @@ public abstract class AbstractExternalData extends
         return containersAndOrderByContainerId.values().iterator().next().getContainerDataSet();
     }
 
-    @Deprecated
-    public Integer getOrderInContainer()
-    {
-        ContainerDataSet container = tryGetContainer();
-        return container == null ? null : getOrderIn(container.getCode());
-    }
-
     public void addContainer(ContainerDataSet containerDataSet, Integer orderInContainer)
     {
         List<AbstractExternalData> components = containerDataSet.getContainedDataSets();
@@ -415,7 +405,9 @@ public abstract class AbstractExternalData extends
         {
             components.add(this);
         }
-        containersAndOrderByContainerId.put(containerDataSet.getCode(), new ContainerAndOrder(containerDataSet, orderInContainer));
+        ContainerAndOrder containerAndOrder = new ContainerAndOrder(containerDataSet, orderInContainer);
+        containersAndOrderByContainerId.put(containerDataSet.getCode(), containerAndOrder);
+        containersAndOrderByContainerTechId.put(containerDataSet.getId(), containerAndOrder);
     }
 
     public List<ContainerDataSet> getContainerDataSets()
@@ -429,7 +421,13 @@ public abstract class AbstractExternalData extends
         return containers;
     }
 
-    public Integer getOrderIn(String containerDataSetCode)
+    public Integer getOrderInContainer(Long containerDataSetTechId)
+    {
+        ContainerAndOrder containerAndOrder = containersAndOrderByContainerTechId.get(containerDataSetTechId);
+        return containerAndOrder == null ? null : containerAndOrder.getOrderInContainer();
+    }
+
+    public Integer getOrderInContainer(String containerDataSetCode)
     {
         ContainerAndOrder containerAndOrder = containersAndOrderByContainerId.get(containerDataSetCode);
         return containerAndOrder == null ? null : containerAndOrder.getOrderInContainer();
@@ -474,14 +472,23 @@ public abstract class AbstractExternalData extends
         return this.isStub;
     }
 
-    private static final class DataSetComponentsComparator implements
-            Comparator<AbstractExternalData>
+    /**
+     * {@link Comparator} for data sets contained in a (virtual) container which uses ascending order in container.
+     */
+    public static final class DataSetComponentsComparator implements Comparator<AbstractExternalData>
     {
+        private Long id;
+
+        public DataSetComponentsComparator(TechId techId)
+        {
+            id = techId.getId();
+        }
+
         @Override
         public int compare(AbstractExternalData o1, AbstractExternalData o2)
         {
-            Integer order1 = o1.getOrderInContainer();
-            Integer order2 = o2.getOrderInContainer();
+            Integer order1 = o1.getOrderInContainer(id);
+            Integer order2 = o2.getOrderInContainer(id);
             // sanity check
             if (order1 == null || order2 == null)
             {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSetRelationshipRole.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSetRelationshipRole.java
index 8e53888ff0e22ba6f8016388b57abac68ec4efbf..ad5394cd19795c63f8242f9817aac3b089edc716 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSetRelationshipRole.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSetRelationshipRole.java
@@ -23,5 +23,5 @@ import java.io.Serializable;
  */
 public enum DataSetRelationshipRole implements Serializable
 {
-    CONTAINER, PARENT, CHILD;
+    CONTAINER, COMPONENT, PARENT, CHILD;
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatasetLocation.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatasetLocation.java
index 0ef65e2535b5bd1a13c08d0f8738a7b1806f5c12..699457012d5f099340a5de22d06e43c7df554b81 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatasetLocation.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatasetLocation.java
@@ -60,7 +60,7 @@ public class DatasetLocation implements IDatasetLocation, Serializable, ICodeHol
     }
 
     @Override
-    public Integer getOrderInContainer()
+    public Integer getOrderInContainer(String containerDataSetCode)
     {
         return orderInContainer;
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataLocationNode.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataLocationNode.java
index b9d07e5b87b5d06774de80fe7904f317e9075773..ef5b273f4f3bf0820c8f3f6d3cbfa5328932c662 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataLocationNode.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataLocationNode.java
@@ -86,7 +86,7 @@ public class ExternalDataLocationNode implements IDatasetLocationNode
             for (AbstractExternalData component : components)
             {
                 componentsLocationNodes.put(component.getCode(),
-                        new ExternalDataLocationNode(component, component.getOrderIn(containerCode)));
+                        new ExternalDataLocationNode(component, component.getOrderInContainer(containerCode)));
             }
 
             return componentsLocationNodes.values();
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IDatasetLocation.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IDatasetLocation.java
index e67cd84e84c7514af3150ad9a937416c1fe3c9c3..32ba2368124957e9353b21626f00a3a5d5b9d50b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IDatasetLocation.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IDatasetLocation.java
@@ -31,5 +31,5 @@ public interface IDatasetLocation
 
     String getDataStoreCode();
 
-    Integer getOrderInContainer();
+    Integer getOrderInContainer(String containerDataSetCode);
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataPE.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataPE.java
index 0dde3d12cb10f26da46663a1e3d2b9ab6f757517..224e4d919eed6a5f2f476cbde277859ed12ee3e2 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataPE.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataPE.java
@@ -70,7 +70,6 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifierHolder;
 import ch.systemsx.cisd.openbis.generic.shared.dto.hibernate.SearchFieldConstants;
 import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils;
-import ch.systemsx.cisd.openbis.generic.shared.util.RelationshipUtils;
 
 /**
  * Kind of <i>Java Bean</i> or <i>Value Object</i> which contains any information we would like to know about one DATA.
@@ -230,21 +229,24 @@ public class DataPE extends AbstractIdAndCodeHolder<DataPE> implements
     @Field(index = Index.UN_TOKENIZED, store = Store.YES, name = SearchFieldConstants.CONTAINER_ID)
     private Long getContainerId()
     {
-        DataPE container = getContainer();
-        return container != null ? container.getId() : null;
+        List<DataPE> containers = getContainers();
+        return containers.isEmpty() ? null : containers.get(0).getId();
     }
 
     @Transient
-    public DataPE getContainer()
+    public List<DataPE> getContainers()
     {
-        for (DataSetRelationshipPE relationship : getParentRelationships())
+        final Set<DataSetRelationshipPE> relationships = getParentRelationships();
+        final List<DataPE> containers = new ArrayList<DataPE>();
+        for (DataSetRelationshipPE r : relationships)
         {
-            if (RelationshipUtils.isContainerComponentRelationship(relationship))
+            if (isContainerComponentRelationship(r))
             {
-                return relationship.getParentDataSet();
+                assert r.getChildDataSet().equals(this);
+                containers.add(r.getParentDataSet());
             }
         }
-        return null;
+        return containers;
     }
 
     public void addParentRelationship(final DataSetRelationshipPE relationship)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DatasetDescription.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DatasetDescription.java
index afa7d781c94cf31acbced6fe8fd13164c141faca..3078b507a318312113990182c868713d32706367 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DatasetDescription.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DatasetDescription.java
@@ -19,7 +19,9 @@ package ch.systemsx.cisd.openbis.generic.shared.dto;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocation;
 
@@ -40,7 +42,7 @@ public class DatasetDescription implements Serializable, IDatasetLocation
 
     private String dataSetLocation;
 
-    private Integer orderInContainer;
+    private final Map<String, Integer> orderInContainers = new HashMap<String, Integer>();
 
     private Date registrationTimestamp;
 
@@ -312,14 +314,19 @@ public class DatasetDescription implements Serializable, IDatasetLocation
     }
 
     @Override
-    public Integer getOrderInContainer()
+    public Integer getOrderInContainer(String containerDataSetCode)
     {
-        return orderInContainer;
+        return orderInContainers.get(containerDataSetCode);
     }
 
-    public void setOrderInContainer(Integer orderInContainer)
+    public void addOrderInContainer(String containerDataSetCode, Integer orderInContainer)
     {
-        this.orderInContainer = orderInContainer;
+        orderInContainers.put(containerDataSetCode, orderInContainer);
+    }
+
+    public Map<String, Integer> getOrderInContainers()
+    {
+        return orderInContainers;
     }
 
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java
index e20f363b05c129858a55aba1964807d238182eb3..f100956f7aae734f4bae7310410f577aeb95743d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java
@@ -18,6 +18,8 @@ package ch.systemsx.cisd.openbis.generic.shared.dto;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocation;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder;
@@ -59,7 +61,7 @@ public class SimpleDataSetInformationDTO implements Serializable, IDatasetLocati
 
     private String dataStoreUrl;
 
-    private Integer orderInContainer;
+    private Map<String, Integer> orderInContainers = new HashMap<String, Integer>();
 
     public void setDataStoreCode(String dataStoreCode)
     {
@@ -207,14 +209,19 @@ public class SimpleDataSetInformationDTO implements Serializable, IDatasetLocati
     }
 
     @Override
-    public Integer getOrderInContainer()
+    public Integer getOrderInContainer(String containerDataSetCode)
     {
-        return orderInContainer;
+        return orderInContainers.get(containerDataSetCode);
     }
 
-    public void setOrderInContainer(Integer orderInContainer)
+    public void addOrderInContainer(String containerDataSetCode, Integer orderInContainer)
     {
-        this.orderInContainer = orderInContainer;
+        orderInContainers.put(containerDataSetCode, orderInContainer);
+    }
+
+    public void setOrderInContainers(Map<String, Integer> orderInContainers)
+    {
+        this.orderInContainers = orderInContainers;
     }
 
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java
index dcae0c60c23eb6d31d8fb5a43989e5a351b7ea48..f052420576521ddb10edcc4f5485f6b1c2c69e7d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java
@@ -76,7 +76,12 @@ public class DataSetTranslator
 
         description.setDataStoreCode(data.getDataStore().getCode());
         description.setRegistrationTimestamp(data.getRegistrationDate());
-        description.setOrderInContainer(data.getOrderInContainer());
+        List<ContainerDataSet> containerDataSets = data.getContainerDataSets();
+        for (ContainerDataSet containerDataSet : containerDataSets)
+        {
+            String containerDataSetCode = containerDataSet.getCode();
+            description.addOrderInContainer(containerDataSetCode, data.getOrderInContainer(containerDataSetCode));
+        }
 
         PhysicalDataSet dataSet = data.tryGetAsDataSet();
         if (dataSet != null)
@@ -281,17 +286,6 @@ public class DataSetTranslator
         }
     }
 
-    private static DataSetRelationshipPE getContainerRelationshipOrNull(DataPE dataPE)
-    {
-        List<DataSetRelationshipPE> containerComponentRelationships =
-                RelationshipUtils.getContainerComponentRelationships(dataPE.getParentRelationships());
-        if (containerComponentRelationships.isEmpty() == false)
-        {
-            return containerComponentRelationships.get(0);
-        }
-        return null;
-    }
-
     private static ContainerDataSet tryToTranslateContainer(DataPE containerOrNull,
             String baseIndexURL, IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
     {
@@ -447,12 +441,13 @@ public class DataSetTranslator
 
         DatasetDescription description = new DatasetDescription();
         description.setDataSetCode(dataSet.getCode());
-        DataSetRelationshipPE relationship = getContainerRelationshipOrNull(dataSet);
-        if (relationship != null)
+        List<DataSetRelationshipPE> containerComponentRelationships =
+                RelationshipUtils.getContainerComponentRelationships(dataSet.getParentRelationships());
+        for (DataSetRelationshipPE relationship : containerComponentRelationships)
         {
-            description.setOrderInContainer(relationship.getOrdinal());
+            String containerDataSetCode = relationship.getParentDataSet().getCode();
+            description.addOrderInContainer(containerDataSetCode, relationship.getOrdinal());
         }
-
         description.setRegistrationTimestamp(dataSet.getRegistrationDate());
         if (dataSet.isExternalData())
         {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java
index d3bb435fbfb423c8007542605cc24b1522bae269..984218728e32c0199bcc493e0dc244f0eff77933 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ContainerDataSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PhysicalDataSet;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO;
@@ -71,7 +72,12 @@ public class SimpleDataSetHelper
         result.setSampleCode(data.getSampleCode());
         result.setDataSetType(data.getDataSetType().getCode());
         result.setDataStoreUrl(data.getDataStore().getHostUrl());
-        result.setOrderInContainer(data.getOrderInContainer());
+        List<ContainerDataSet> containerDataSets = data.getContainerDataSets();
+        for (ContainerDataSet containerDataSet : containerDataSets)
+        {
+            String containerDataSetCode = containerDataSet.getCode();
+            result.addOrderInContainer(containerDataSetCode, data.getOrderInContainer(containerDataSetCode));
+        }
         return result;
     }
 
@@ -89,7 +95,7 @@ public class SimpleDataSetHelper
         result.setSpaceCode(datasetDescription.getSpaceCode());
         result.setProjectCode(datasetDescription.getProjectCode());
         result.setSampleCode(datasetDescription.getSampleCode());
-        result.setOrderInContainer(datasetDescription.getOrderInContainer());
+        result.setOrderInContainers(datasetDescription.getOrderInContainers());
         return result;
     }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetContainerSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetContainerSection.java
new file mode 100644
index 0000000000000000000000000000000000000000..c83bdefef1e21529e31e927db7d9ace81f3ab14f
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetContainerSection.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2014 ETH Zuerich, SIS
+ *
+ * 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.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset;
+
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
+import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetRelationshipRole;
+
+/**
+ * @author Franz-Josef Elmer
+ */
+class DataSetContainerSection extends AbstractDataSetsSection
+{
+    private final AbstractExternalData dataset;
+
+    DataSetContainerSection(IViewContext<?> viewContext, AbstractExternalData dataset)
+    {
+        super("Container (Data Sets)", viewContext, dataset);
+        this.dataset = dataset;
+        setIds(DisplayTypeIDGenerator.DATA_SET_CONTAINED_SECTION);
+    }
+
+    @Override
+    protected IDisposableComponent createDatasetBrowserComponent()
+    {
+        return DataSetRelationshipBrowser.create(viewContext, TechId.create(dataset),
+                DataSetRelationshipRole.COMPONENT, dataset.getDataSetType());
+    }
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetPropertiesPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetPropertiesPanel.java
index 53b43d85207fcac4f26bbc85dbe5a6fc320738de..42198fee0e3e09bece79786f012b2dc29f2bdca1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetPropertiesPanel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetPropertiesPanel.java
@@ -112,7 +112,7 @@ public class DataSetPropertiesPanel extends ContentPanel
         properties.put(messageProvider.getMessage(Dict.REGISTRATION_DATE),
                 dataset.getRegistrationDate());
         List<ContainerDataSet> containerDataSets = dataset.getContainerDataSets();
-        if (containerDataSets.isEmpty() == false)
+        if (containerDataSets.size() == 1)
         {
             properties.put(messageProvider.getMessage(Dict.CONTAINER_DATA_SET), containerDataSets.get(0));
         }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java
index 3f2287711843381daaf888ff573e52b9c5e1dfab..a3e9d5de4be7594e87ee5cb82b75c28c1a7c42e4 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java
@@ -57,14 +57,14 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMess
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DisplayedOrSelectedDatasetCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PhysicalDataSet;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PhysicalDataSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.WebAppContext;
 import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientServiceAsync;
@@ -117,8 +117,7 @@ abstract public class GenericDataSetViewer extends AbstractViewerWithVerticalSpl
             AsyncCallback<AbstractExternalData> asyncCallback);
 
     /**
-     * To be subclassed. Creates additional panels of the viewer in the right side section besides
-     * components, datasets and attachments
+     * To be subclassed. Creates additional panels of the viewer in the right side section besides components, datasets and attachments
      */
     protected List<TabContent> createAdditionalSectionPanels(AbstractExternalData dataset)
     {
@@ -275,6 +274,8 @@ abstract public class GenericDataSetViewer extends AbstractViewerWithVerticalSpl
             final TabContent containedSection = new DataSetContainedSection(context, dataset);
             container.addSection(containedSection);
         }
+        final TabContent containerSection = new DataSetContainerSection(context, dataset);
+        container.addSection(containerSection);
 
         // parents
         final TabContent parentsSection = new DataSetParentsSection(context, dataset);
@@ -370,18 +371,18 @@ abstract public class GenericDataSetViewer extends AbstractViewerWithVerticalSpl
     public DatabaseModificationKind[] getRelevantModifications()
     {
         return new DatabaseModificationKind[]
-            { DatabaseModificationKind.edit(ObjectKind.DATA_SET),
-                    DatabaseModificationKind.createOrDelete(ObjectKind.DATA_SET),
-                    DatabaseModificationKind.createOrDelete(ObjectKind.PROPERTY_TYPE_ASSIGNMENT),
-                    DatabaseModificationKind.edit(ObjectKind.PROPERTY_TYPE_ASSIGNMENT),
-                    DatabaseModificationKind.createOrDelete(ObjectKind.VOCABULARY_TERM),
-                    DatabaseModificationKind.edit(ObjectKind.VOCABULARY_TERM),
-                    DatabaseModificationKind.createOrDelete(ObjectKind.EXPERIMENT),
-                    DatabaseModificationKind.edit(ObjectKind.EXPERIMENT),
-                    DatabaseModificationKind.createOrDelete(ObjectKind.SAMPLE),
-                    DatabaseModificationKind.edit(ObjectKind.SAMPLE),
-                    DatabaseModificationKind.createOrDelete(ObjectKind.METAPROJECT),
-                    DatabaseModificationKind.edit(ObjectKind.METAPROJECT) };
+        { DatabaseModificationKind.edit(ObjectKind.DATA_SET),
+                DatabaseModificationKind.createOrDelete(ObjectKind.DATA_SET),
+                DatabaseModificationKind.createOrDelete(ObjectKind.PROPERTY_TYPE_ASSIGNMENT),
+                DatabaseModificationKind.edit(ObjectKind.PROPERTY_TYPE_ASSIGNMENT),
+                DatabaseModificationKind.createOrDelete(ObjectKind.VOCABULARY_TERM),
+                DatabaseModificationKind.edit(ObjectKind.VOCABULARY_TERM),
+                DatabaseModificationKind.createOrDelete(ObjectKind.EXPERIMENT),
+                DatabaseModificationKind.edit(ObjectKind.EXPERIMENT),
+                DatabaseModificationKind.createOrDelete(ObjectKind.SAMPLE),
+                DatabaseModificationKind.edit(ObjectKind.SAMPLE),
+                DatabaseModificationKind.createOrDelete(ObjectKind.METAPROJECT),
+                DatabaseModificationKind.edit(ObjectKind.METAPROJECT) };
     }
 
     @Override
@@ -391,10 +392,9 @@ abstract public class GenericDataSetViewer extends AbstractViewerWithVerticalSpl
     }
 
     /**
-     * Holder of a {@link Button} that has a menu with items that schedule dataset plugin
-     * processing. The button is hidden at the beginning. When data set is successfully loaded by
-     * the viewer and there is a nonempty list of plugins assigned to its data type data then the
-     * menu is filled and button is shown.
+     * Holder of a {@link Button} that has a menu with items that schedule dataset plugin processing. The button is hidden at the beginning. When data
+     * set is successfully loaded by the viewer and there is a nonempty list of plugins assigned to its data type data then the menu is filled and
+     * button is shown.
      */
     private class ProcessButtonHolder
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js
index 3c153d78214384b9eb0653f962fd891a51554af8..10bea9f946d4b74130a54bb444a7da7c55b48097 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js
@@ -328,9 +328,9 @@ var common = {
   // DataSet Browser
   //
   
-  container_dataset: "Container",
+  container_datasets: "Containers",
   parent_datasets: "Parents",
-  order_in_container: "Order in Container",
+  order_in_containers: "Order in Containers",
   children_datasets: "Children",
   no_datasets_selected: "No Data Sets were selected.",
   datasets_from_different_stores_selected: "Data Sets from different Data Stores were selected, so no operation can be performed on all of them.",
@@ -823,6 +823,7 @@ var common = {
  file_format_type: "File Type",
  production_date: "Production Date",
  data_producer_code: "Producer",
+ container_dataset: "Container",
  data_store_code: "Data Store",
  button_upload_datasets: "Export Data",
  confirm_dataset_upload_title: "Uploading Confirmation and Authentication",
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerFastTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerFastTest.java
index f8b5b0f9e208a69108de1923a5cd64cd0ad49a6c..7314731640234aa0b577557b1c879bbb8bae17be 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerFastTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerFastTest.java
@@ -127,10 +127,10 @@ public class DatasetListerFastTest extends AssertJUnit
                 new ArrayList<IDatasetLocationNode>(location.getComponents());
         Collections.sort(components, DATA_SET_LOCATION_NODE_COMPARATOR);
         assertEquals("ds-c1", components.get(0).getLocation().getDataSetCode());
-        assertEquals(new Integer(0), components.get(0).getLocation().getOrderInContainer());
+        assertEquals(new Integer(0), components.get(0).getLocation().getOrderInContainer("ds-1"));
         assertEquals("a/b/c/1", components.get(0).getLocation().getDataSetLocation());
         assertEquals("ds-c2", components.get(1).getLocation().getDataSetCode());
-        assertEquals(new Integer(1), components.get(1).getLocation().getOrderInContainer());
+        assertEquals(new Integer(1), components.get(1).getLocation().getOrderInContainer("ds-1"));
         assertEquals("a/b/c/2", components.get(1).getLocation().getDataSetLocation());
     }
 
@@ -163,23 +163,23 @@ public class DatasetListerFastTest extends AssertJUnit
                 new ArrayList<IDatasetLocationNode>(location.getComponents());
         Collections.sort(components, DATA_SET_LOCATION_NODE_COMPARATOR);
         assertEquals("-2303", components.get(0).getLocation().getDataSetCode());
-        assertEquals(new Integer(1), components.get(0).getLocation().getOrderInContainer());
+        assertEquals(new Integer(1), components.get(0).getLocation().getOrderInContainer("-2306"));
         assertEquals("a/b/c/2303", components.get(0).getLocation().getDataSetLocation());
         assertEquals("[]", components.get(0).getComponents().toString());
         assertEquals("-2304", components.get(1).getLocation().getDataSetCode());
-        assertEquals(new Integer(0), components.get(1).getLocation().getOrderInContainer());
+        assertEquals(new Integer(0), components.get(1).getLocation().getOrderInContainer("-2306"));
         assertEquals(null, components.get(1).getLocation().getDataSetLocation());
         List<IDatasetLocationNode> subComponents =
                 new ArrayList<IDatasetLocationNode>(components.get(1).getComponents());
         Collections.sort(subComponents, DATA_SET_LOCATION_NODE_COMPARATOR);
         assertEquals("-2302", subComponents.get(0).getLocation().getDataSetCode());
-        assertEquals(new Integer(1), subComponents.get(0).getLocation().getOrderInContainer());
+        assertEquals(new Integer(1), subComponents.get(0).getLocation().getOrderInContainer("-2304"));
         assertEquals("a/b/c/2302", subComponents.get(0).getLocation().getDataSetLocation());
         assertEquals("-2303", subComponents.get(1).getLocation().getDataSetCode());
-        assertEquals(new Integer(2), subComponents.get(1).getLocation().getOrderInContainer());
+        assertEquals(new Integer(2), subComponents.get(1).getLocation().getOrderInContainer("-2304"));
         assertEquals("a/b/c/2303", subComponents.get(1).getLocation().getDataSetLocation());
         assertEquals("-2305", components.get(2).getLocation().getDataSetCode());
-        assertEquals(new Integer(2), components.get(2).getLocation().getOrderInContainer());
+        assertEquals(new Integer(2), components.get(2).getLocation().getOrderInContainer("-2306"));
         assertEquals("a/b/c/2305", components.get(2).getLocation().getDataSetLocation());
         assertEquals("[]", components.get(2).getComponents().toString());
 
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java
index 9ecb4c11b4bf6084655211bcf01d15b914a69547..b3c4e946a5f66e55a0f0c95003da902e408fade9 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java
@@ -290,7 +290,7 @@ public class DatasetListerTest extends AbstractDAOTest
 
         PhysicalDataSet dataset1 = datasets.get(1).tryGetAsDataSet();
         assertNotNull(dataset1);
-        assertEquals(2, (int) dataset1.getOrderIn(containerDataSet.getCode()));
+        assertEquals(2, (int) dataset1.getOrderInContainer(containerDataSet.getCode()));
         assertEquals(dataset1.getContainerDataSets().get(0), containerDataSet);
     }
 
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataLocationNodeTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataLocationNodeTest.java
index db471d617381f8a8ee1e5862e6d45754e3da5337..f4574bc5ba9e26ef85d4a09c6668ea08c5ade3e0 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataLocationNodeTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataLocationNodeTest.java
@@ -34,10 +34,10 @@ public class ExternalDataLocationNodeTest extends AssertJUnit
     @Test
     public void test()
     {
-        ContainerDataSetBuilder rootContainer = new ContainerDataSetBuilder().code("c1");
+        ContainerDataSetBuilder rootContainer = new ContainerDataSetBuilder(1).code("c1");
         DataStore store = new DataStoreBuilder("DSS").getStore();
         rootContainer.component(new DataSetBuilder().code("p1").store(store).location("a/b/c/1").getDataSet());
-        ContainerDataSetBuilder subContainer = new ContainerDataSetBuilder().code("c2");
+        ContainerDataSetBuilder subContainer = new ContainerDataSetBuilder(2).code("c2");
         PhysicalDataSet component2 = new DataSetBuilder().code("p2").store(store).location("a/b/c/2").getDataSet();
         subContainer.component(component2);
         subContainer.component(new DataSetBuilder().code("p3").store(store).location("a/b/c/3").getDataSet());
@@ -52,18 +52,18 @@ public class ExternalDataLocationNodeTest extends AssertJUnit
         assertEquals("p1", components.get(1).getLocation().getDataSetCode());
         assertEquals("DSS", components.get(1).getLocation().getDataStoreCode());
         assertEquals("a/b/c/1", components.get(1).getLocation().getDataSetLocation());
-        assertEquals(0, components.get(1).getLocation().getOrderInContainer().intValue());
+        assertEquals(0, components.get(1).getLocation().getOrderInContainer("c1").intValue());
         assertEquals("p2", components.get(2).getLocation().getDataSetCode());
         assertEquals("a/b/c/2", components.get(2).getLocation().getDataSetLocation());
-        assertEquals(2, components.get(2).getLocation().getOrderInContainer().intValue());
+        assertEquals(2, components.get(2).getLocation().getOrderInContainer("c1").intValue());
         assertEquals(3, components.size());
         components = new ArrayList<IDatasetLocationNode>(components.get(0).getComponents());
         assertEquals("p2", components.get(0).getLocation().getDataSetCode());
         assertEquals("a/b/c/2", components.get(0).getLocation().getDataSetLocation());
-        assertEquals(0, components.get(0).getLocation().getOrderInContainer().intValue());
+        assertEquals(0, components.get(0).getLocation().getOrderInContainer("c2").intValue());
         assertEquals("p3", components.get(1).getLocation().getDataSetCode());
         assertEquals("a/b/c/3", components.get(1).getLocation().getDataSetLocation());
-        assertEquals(1, components.get(1).getLocation().getOrderInContainer().intValue());
+        assertEquals(1, components.get(1).getLocation().getOrderInContainer("c2").intValue());
         assertEquals(2, components.size());
     }
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/matcher/ExternalDataHasContainerMatcher.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/matcher/ExternalDataHasContainerMatcher.java
index 0c1d7d769d9d392eb8ea58f4d77baf4d850fcbfa..6be3efc37fbddcb8cb75a80153e5b18c9bccfa22 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/matcher/ExternalDataHasContainerMatcher.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/matcher/ExternalDataHasContainerMatcher.java
@@ -57,7 +57,7 @@ public class ExternalDataHasContainerMatcher extends TypeSafeMatcher<AbstractExt
             String containerCode = container.getCode();
             if (expectedContainer.getCode().equals(containerCode))
             {
-                Integer order = actual.getOrderIn(containerCode);
+                Integer order = actual.getOrderInContainer(containerCode);
                 return expectedOrder == null || expectedOrder.equals(order);
             }
         }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java
index ed3c49cd2bc9658c361dd900246cffc80d74dab8..8619b91e9e0e7361e48fd3c7776b036af18ee6cf 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java
@@ -216,8 +216,8 @@ public class ScreeningUtils
     private static <T extends DataPE> boolean isContainerMatching(T dataset,
             String... datasetTypeCodePatterns)
     {
-        DataPE container = dataset.getContainer();
-        return container != null && isOneOfTypesMatching(container, datasetTypeCodePatterns);
+        List<DataPE> containers = dataset.getContainers();
+        return containers.isEmpty() == false && isOneOfTypesMatching(containers.get(0), datasetTypeCodePatterns);
     }
 
     private static boolean isNotEmpty(AbstractExternalData dataset)