diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/InQueryScroller.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/InQueryScroller.java
index 49cbd0204c75d6e7eb1b0efbde2d9b9db3048261..6964f08b259165f2a90ff2671bde62f919db0f65 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/InQueryScroller.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/InQueryScroller.java
@@ -1,5 +1,7 @@
 package ch.systemsx.cisd.openbis.generic.server.dataaccess.db;
 
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 public class InQueryScroller<I>
@@ -12,9 +14,9 @@ public class InQueryScroller<I>
 
     private int fixParamsSize;
 
-    public InQueryScroller(List<I> inArguments, int fixParamsSize)
+    public InQueryScroller(Collection<I> inArguments, int fixParamsSize)
     {
-        this.inArguments = inArguments;
+        this.inArguments = new ArrayList<>(inArguments);
         this.fromIndex = 0;
         this.fixParamsSize = fixParamsSize;
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MetaprojectDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MetaprojectDAO.java
index 7b7bf1ddc68a03a6595a254da370090a6f1f6c25..5e387b27d454e069049a096fd8cac72308366e60 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MetaprojectDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MetaprojectDAO.java
@@ -186,18 +186,27 @@ public class MetaprojectDAO extends AbstractGenericEntityDAO<MetaprojectPE> impl
         {
             return Collections.emptySet();
         }
-        final DetachedCriteria criteria = DetachedCriteria.forClass(MetaprojectAssignmentPE.class);
-        criteria.createAlias("metaproject", "m");
-        criteria.add(Restrictions.eq("m.owner", owner));
-        criteria.add(Restrictions.in(entityKind.getLabel(), entities));
 
-        criteria.setFetchMode("experiment", FetchMode.SELECT);
-        criteria.setFetchMode("sample", FetchMode.SELECT);
-        criteria.setFetchMode("dataSet", FetchMode.SELECT);
-        criteria.setFetchMode("material", FetchMode.SELECT);
+        final List<MetaprojectAssignmentPE> assignments = new ArrayList<>();
 
-        final List<MetaprojectAssignmentPE> assignments =
-                cast(getHibernateTemplate().findByCriteria(criteria));
+        InQueryScroller<? extends IEntityInformationWithPropertiesHolder> entitiesScroller = new InQueryScroller<>(entities, 1);
+        List<? extends IEntityInformationWithPropertiesHolder> partialEntities = null;
+
+        while ((partialEntities = entitiesScroller.next()) != null)
+        {
+            final DetachedCriteria criteria = DetachedCriteria.forClass(MetaprojectAssignmentPE.class);
+            criteria.createAlias("metaproject", "m");
+            criteria.add(Restrictions.eq("m.owner", owner));
+            criteria.add(Restrictions.in(entityKind.getLabel(), partialEntities));
+
+            criteria.setFetchMode("experiment", FetchMode.SELECT);
+            criteria.setFetchMode("sample", FetchMode.SELECT);
+            criteria.setFetchMode("dataSet", FetchMode.SELECT);
+            criteria.setFetchMode("material", FetchMode.SELECT);
+
+            final List<MetaprojectAssignmentPE> partialAssignments = cast(getHibernateTemplate().findByCriteria(criteria));
+            assignments.addAll(partialAssignments);
+        }
 
         if (operationLog.isDebugEnabled())
         {