diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/search/AbstractSearchManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/search/AbstractSearchManager.java
index 985da17c4f0a00eb072462a426d1242674f67bec..fa24878cbd5672054ec0af2bc23e7215021e38a3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/search/AbstractSearchManager.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/search/AbstractSearchManager.java
@@ -16,6 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.server.business.search;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
@@ -48,6 +49,16 @@ public class AbstractSearchManager<T>
         this.lister = lister;
     }
 
+    protected Collection<Long> restrictResultSetIfNecessary(Collection<Long> ids)
+    {
+        int maxSize = searchDAO.getResultSetSizeLimit();
+        if (ids.size() <= maxSize)
+        {
+            return ids;
+        }
+        return new ArrayList<Long>(ids).subList(0, maxSize);
+    }
+
     protected DetailedSearchAssociationCriteria findAssociatedEntities(
             DetailedSearchSubCriteria subCriteria)
     {
@@ -70,7 +81,7 @@ public class AbstractSearchManager<T>
         criteria.setUseWildcardSearchMode(subCriteriaToMerge.getCriteria()
                 .isUseWildcardSearchMode());
     }
-    
+
     interface IRelationshipHandler
     {
         Collection<Long> findRelatedIdsByCriteria(DetailedSearchCriteria criteria,
@@ -137,6 +148,5 @@ public class AbstractSearchManager<T>
         }
         return idsToFilter;
     }
-    
 
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/search/DataSetSearchManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/search/DataSetSearchManager.java
index 50828177565ce392dd93362ca150bbeb19c60a90..a92f9da3a85a275ebfc25fcd429b8f027e5acf1f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/search/DataSetSearchManager.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/search/DataSetSearchManager.java
@@ -46,18 +46,18 @@ public class DataSetSearchManager extends AbstractSearchManager<IDatasetLister>
     private final IRelationshipHandler CHILDREN_RELATIONSHIP_HANDLER = new IRelationshipHandler()
         {
 
-        public Collection<Long> findRelatedIdsByCriteria(DetailedSearchCriteria criteria,
+            public Collection<Long> findRelatedIdsByCriteria(DetailedSearchCriteria criteria,
                     List<DetailedSearchSubCriteria> otherSubCriterias)
-        {
+            {
                 return findDataSetIds(criteria, otherSubCriterias);
             }
 
-        public Map<Long, Set<Long>> listIdsToRelatedIds(Collection<Long> dataSetIds)
+            public Map<Long, Set<Long>> listIdsToRelatedIds(Collection<Long> dataSetIds)
             {
                 return lister.listChildrenIds(dataSetIds);
             }
 
-        public Map<Long, Set<Long>> listRelatedIdsToIds(Collection<Long> childrenDataSetIds)
+            public Map<Long, Set<Long>> listRelatedIdsToIds(Collection<Long> childrenDataSetIds)
             {
                 return lister.listParentIds(childrenDataSetIds);
             }
@@ -66,18 +66,18 @@ public class DataSetSearchManager extends AbstractSearchManager<IDatasetLister>
     private final IRelationshipHandler PARENT_RELATIONSHIP_HANDLER = new IRelationshipHandler()
         {
 
-        public Collection<Long> findRelatedIdsByCriteria(DetailedSearchCriteria criteria,
+            public Collection<Long> findRelatedIdsByCriteria(DetailedSearchCriteria criteria,
                     List<DetailedSearchSubCriteria> otherSubCriterias)
-        {
+            {
                 return findDataSetIds(criteria, otherSubCriterias);
             }
 
-        public Map<Long, Set<Long>> listIdsToRelatedIds(Collection<Long> dataSetIds)
+            public Map<Long, Set<Long>> listIdsToRelatedIds(Collection<Long> dataSetIds)
             {
                 return lister.listParentIds(dataSetIds);
             }
 
-        public Map<Long, Set<Long>> listRelatedIdsToIds(Collection<Long> parentDataSetIds)
+            public Map<Long, Set<Long>> listRelatedIdsToIds(Collection<Long> parentDataSetIds)
             {
                 return lister.listChildrenIds(parentDataSetIds);
             }
@@ -91,7 +91,7 @@ public class DataSetSearchManager extends AbstractSearchManager<IDatasetLister>
     public List<ExternalData> searchForDataSets(DetailedSearchCriteria criteria)
             throws DataAccessException
     {
-        
+
         DetailedSearchCriteria parentCriteria = new DetailedSearchCriteria();
         DetailedSearchCriteria childCriteria = new DetailedSearchCriteria();
         List<DetailedSearchSubCriteria> otherSubCriterias =
@@ -116,15 +116,14 @@ public class DataSetSearchManager extends AbstractSearchManager<IDatasetLister>
                             CHILDREN_RELATIONSHIP_HANDLER);
         }
 
-        return lister.listByDatasetIds(filteredDataSetIds);
+        return lister.listByDatasetIds(restrictResultSetIfNecessary(filteredDataSetIds));
     }
 
-
     private List<Long> findDataSetIds(DetailedSearchCriteria criteria,
             List<DetailedSearchSubCriteria> otherSubCriterias)
     {
         List<DetailedSearchAssociationCriteria> associations =
-            new ArrayList<DetailedSearchAssociationCriteria>();
+                new ArrayList<DetailedSearchAssociationCriteria>();
         for (DetailedSearchSubCriteria subCriteria : otherSubCriterias)
         {
             associations.add(findAssociatedEntities(subCriteria));
@@ -139,8 +138,8 @@ public class DataSetSearchManager extends AbstractSearchManager<IDatasetLister>
         }
 
         final List<Long> dataSetIds =
-            searchDAO.searchForEntityIds(criteria,
-                    DtoConverters.convertEntityKind(EntityKind.DATA_SET), associations);
+                searchDAO.searchForEntityIds(criteria,
+                        DtoConverters.convertEntityKind(EntityKind.DATA_SET), associations);
         return dataSetIds;
     }
 
@@ -169,5 +168,4 @@ public class DataSetSearchManager extends AbstractSearchManager<IDatasetLister>
 
     }
 
-
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/search/SampleSearchManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/search/SampleSearchManager.java
index 875ca536f72dd4f730e387fb455d243b6dfff16e..3f199c2307c33c5a03f95963d034e08b36d87185 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/search/SampleSearchManager.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/search/SampleSearchManager.java
@@ -116,7 +116,8 @@ public class SampleSearchManager extends AbstractSearchManager<ISampleLister>
                             CHILDREN_RELATIONSHIP_HANDLER);
         }
 
-        return lister.list(new ListOrSearchSampleCriteria(filteredSampleIds));
+        return lister.list(new ListOrSearchSampleCriteria(
+                restrictResultSetIfNecessary(filteredSampleIds)));
     }
 
     private void groupSampleSubCriteria(List<DetailedSearchSubCriteria> allSubCriterias,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IHibernateSearchDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IHibernateSearchDAO.java
index ae92be25b8b47b8d073ed37eea8d940bb2ec2019..84c82260e6c6d3e9b641d616bbde35d8ff899e1f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IHibernateSearchDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IHibernateSearchDAO.java
@@ -49,4 +49,11 @@ public interface IHibernateSearchDAO
     /** search for entity ids using the specified criteria */
     public List<Long> searchForEntityIds(DetailedSearchCriteria criteria, EntityKind entityKind,
             List<DetailedSearchAssociationCriteria> associationCriterias);
+
+    /**
+     * Returns the maximum size of a search result set. The standard implementations returns
+     * <code>hibernate.search.maxResults</code> of <code>service.properties</code>.
+     */
+    public int getResultSetSizeLimit();
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDAO.java
index d5c771ffc4962a93c7eff695ab45ae916d8da231..4b4ab97a86f871eba506c29c33a123dd77763cff 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDAO.java
@@ -103,6 +103,11 @@ final class HibernateSearchDAO extends HibernateDaoSupport implements IHibernate
     // IHibernateSearchDAO
     //
 
+    public int getResultSetSizeLimit()
+    {
+        return hibernateSearchContext.getMaxResults();
+    }
+
     // simple search for MatchingEntities
 
     public List<MatchingEntity> searchEntitiesByTerm(final SearchableEntity searchableEntity,
@@ -250,7 +255,6 @@ final class HibernateSearchDAO extends HibernateDaoSupport implements IHibernate
         final FullTextQuery hibernateQuery =
                 fullTextSession.createFullTextQuery(query, entityKind.getEntityClass());
 
-        hibernateQuery.setMaxResults(hibernateSearchContext.getMaxResults());
         hibernateQuery.setProjection(FullTextQuery.ID);
         hibernateQuery.setReadOnly(true);
         hibernateQuery.setResultTransformer(new PassThroughOneObjectTupleResultTransformer());