diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java
index 5d6ae02fa9ba108e0073ded060d7600fc4aa9225..ca7fb9bfb49c42757f9b7c3463ed21a8fe65fffc 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java
@@ -231,9 +231,10 @@ public interface ISampleListingQuery extends TransactionQuery, IPropertyListingQ
      */
     @Select(sql = SELECT_FROM_SAMPLES_S + " WHERE s.id IN "
             + "     (SELECT sample_id_parent FROM sample_relationships "
-            + "      WHERE relationship_id=?{1} AND sample_id_child=?{2})", fetchSize = FETCH_SIZE)
-    public DataIterator<SampleRecord> getParentSamplesForChild(long relationshipId,
-            long sampleChildId);
+            + "      WHERE relationship_id=?{1} AND sample_id_child = any(?{2}))", parameterBindings =
+        { TypeMapper.class, LongSetMapper.class }, fetchSize = FETCH_SIZE)
+    public DataIterator<SampleRecord> getParentSamplesForChildren(long relationshipId,
+            LongSet sampleChildIds);
 
     //
     // New samples of type
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java
index 43e876b967f305e111e5fa90495015921e37072f..64ddd692da6aff30e5b49feb5a26ed41c03830fe 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java
@@ -471,12 +471,8 @@ final class SampleListingWorker extends AbstractLister
 
     private Iterable<SampleRecord> tryGetIteratorForParentSamples()
     {
-        final TechId childTechId = criteria.getChildSampleId();
-        if (childTechId == null)
-        {
-            return null;
-        }
-        return query.getParentSamplesForChild(parentRelationhipTypeId, childTechId.getId());
+        Collection<Long> ids = criteria.getChildrenSampleIds();
+        return query.getParentSamplesForChildren(parentRelationhipTypeId, new LongOpenHashSet(ids));
     }
 
     private Iterable<SampleRecord> tryGetIteratorForSharedSamples()
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ListOrSearchSampleCriteria.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ListOrSearchSampleCriteria.java
index 76e20600337e7a6d350e05cd4d41b568750d3a85..32e25a3d3aa535f94f01c8a9ffd24be959fe1832 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ListOrSearchSampleCriteria.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ListOrSearchSampleCriteria.java
@@ -17,6 +17,7 @@
 package ch.systemsx.cisd.openbis.generic.shared.basic.dto;
 
 import java.util.Collection;
+import java.util.Collections;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 
@@ -165,6 +166,29 @@ public final class ListOrSearchSampleCriteria extends ListSampleCriteria
         return listCriteria == null ? null : listCriteria.getChildSampleId();
     }
 
+    @Override
+    public Collection<Long> getChildrenSampleIds()
+    {
+        if (listCriteria == null)
+    {
+            return null;
+    }
+        Collection<Long> childrenSampleIds = listCriteria.getChildrenSampleIds();
+        if (childrenSampleIds != null)
+        {
+            return childrenSampleIds;
+        }
+        TechId childSampleId = listCriteria.getChildSampleId();
+        if (childSampleId == null)
+        {
+            return Collections.<Long>emptySet();
+        }
+        else
+        {
+            return Collections.<Long>singleton(childSampleId.getId());
+        }
+    }
+    
     @Override
     public TechId getExperimentId()
     {
@@ -210,4 +234,5 @@ public final class ListOrSearchSampleCriteria extends ListSampleCriteria
     {
         this.enrichDependentSamplesWithProperties = enrichDependentSamplesWithProperties;
     }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ListSampleCriteria.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ListSampleCriteria.java
index a40364ce7ba69571c2cc5f2ec921286462bff144..19848e236d9e928a5bd86b0f70b70646442243c9 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ListSampleCriteria.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ListSampleCriteria.java
@@ -17,6 +17,7 @@
 package ch.systemsx.cisd.openbis.generic.shared.basic.dto;
 
 import java.io.Serializable;
+import java.util.Collection;
 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
@@ -63,6 +64,8 @@ public class ListSampleCriteria implements IsSerializable, Serializable
 
     // --------- filter 5 fields
     private TechId experimentId;
+    
+    private Collection<Long> childrenSampleIds;
 
     // ----
 
@@ -87,6 +90,13 @@ public class ListSampleCriteria implements IsSerializable, Serializable
         return criteria;
     }
 
+    public static ListSampleCriteria createForChildren(final Collection<Long> childrenSampleIds)
+    {
+        final ListSampleCriteria criteria = new ListSampleCriteria();
+        criteria.setChildrenSampleIds(childrenSampleIds);
+        return criteria;
+    }
+    
     public static ListSampleCriteria createForExperiment(final TechId experimentId)
     {
         final ListSampleCriteria criteria = new ListSampleCriteria();
@@ -124,6 +134,16 @@ public class ListSampleCriteria implements IsSerializable, Serializable
         this.childSampleId = childSampleId;
     }
 
+    public Collection<Long> getChildrenSampleIds()
+    {
+        return childrenSampleIds;
+    }
+
+    public final void setChildrenSampleIds(Collection<Long> childrenSampleIds)
+    {
+        this.childrenSampleIds = childrenSampleIds;
+    }
+
     public SampleType getSampleType()
     {
         return sampleType;