diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooserPanel.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooserPanel.java
index 7d3549af2853623f13e33837733ad8dc79f5e8e4..c8b6fe9972475b04a73cfc98b703772256658a7f 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooserPanel.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooserPanel.java
@@ -366,7 +366,7 @@ public class ChannelChooserPanel extends LayoutContainer
         return channels;
     }
 
-    private void addChannelsForParameters(ImageDatasetParameters imageParameters)
+    public void addChannelsForParameters(ImageDatasetParameters imageParameters)
     {
         addChannelToComboBox(new LabeledItem<String>(MERGED_CHANNELS, MERGED_CHANNELS));
 
@@ -439,7 +439,7 @@ public class ChannelChooserPanel extends LayoutContainer
         return false;
     }
 
-    private void updateChannelSelection(List<String> selectedChannels)
+    public void updateChannelSelection(List<String> selectedChannels)
     {
         List<String> channels = selectedChannels;
         if (channels == null || channels.size() == 0)
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellSearchGrid.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellSearchGrid.java
index 961bd58e11dfce6099cc4219b5a03018d40ffa35..53b58c9f9fa9a94f5ce1946a27991448cd8c300b 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellSearchGrid.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellSearchGrid.java
@@ -31,6 +31,7 @@ import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
 import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
 import com.google.gwt.i18n.client.DateTimeFormat;
 import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
+import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.Widget;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
@@ -50,8 +51,10 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ID
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listener.OpenEntityDetailsTabAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GridRowModels;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSet;
+import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithPermId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
@@ -653,9 +656,7 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> implements
                             channelChooser.tryGetSelectedTransformationCode(false),
                             channelChooser.tryGetSelectedIntensityRanges());
 
-                    ImageDatasetParameters imageParameters = images.getImageParameters();
                     channelChooser.addSelectionChangedListener(widgetWithListener);
-                    channelChooser.addChannels(imageParameters);
 
                     return widgetWithListener.asWidget();
                 }
@@ -681,7 +682,40 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> implements
         WellSearchCriteria searchCriteria =
                 new WellSearchCriteria(experimentCriteriaOrNull, materialCriteria,
                         analysisProcedureCriteria);
-        getViewContext().getService().listPlateWells(resultSetConfig, searchCriteria, callback);
+        getViewContext().getService().listPlateWells(resultSetConfig, searchCriteria,
+                new AsyncCallback<TypedTableResultSet<WellContent>>()
+                    {
+                        @Override
+                        public void onFailure(Throwable caught)
+                        {
+                            callback.onFailure(caught);
+                        }
+
+                        @Override
+                        public void onSuccess(TypedTableResultSet<WellContent> result)
+                        {
+                            GridRowModels<TableModelRowWithObject<WellContent>> rows =
+                                    result.getResultSet().getList();
+                            for (GridRowModel<TableModelRowWithObject<WellContent>> row : rows)
+                            {
+                                WellContent wellContent = row.getOriginalObject().getObjectOrNull();
+                                if (wellContent != null)
+                                {
+
+                                    DatasetImagesReference dataSet =
+                                            wellContent.tryGetImageDataset();
+                                    if (dataSet != null)
+                                    {
+                                        ImageDatasetParameters imageParameters =
+                                                dataSet.getImageParameters();
+                                        channelChooser.addChannelsForParameters(imageParameters);
+                                    }
+                                }
+                            }
+                            channelChooser.updateChannelSelection(null);
+                            callback.onSuccess(result);
+                        }
+                    });
     }
 
     @Override
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningBusinessObjectFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningBusinessObjectFactory.java
index 5e02233207afbcf7eafb2a2a722833e62f363d4a..7ab010e27041bf58091712d4079ff2481269c615 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningBusinessObjectFactory.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningBusinessObjectFactory.java
@@ -114,6 +114,7 @@ public final class ScreeningBusinessObjectFactory extends AbstractPluginBusiness
     {
         return new IMetadataProvider()
             {
+                private IDatasetLister lister;
 
                 @Override
                 public SampleIdentifier tryGetSampleIdentifier(String samplePermId)
@@ -125,9 +126,18 @@ public final class ScreeningBusinessObjectFactory extends AbstractPluginBusiness
                 public List<String> tryGetContainedDatasets(String datasetCode)
                 {
                     List<String> result =
-                            createDatasetLister(session).listContainedCodes(datasetCode);
+                            getLister().listContainedCodes(datasetCode);
                     return result;
                 }
+                
+                private IDatasetLister getLister()
+                {
+                    if (lister == null)
+                    {
+                        lister = createDatasetLister(session);
+                    }
+                    return lister;
+                }
 
             };
     }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/WellContentLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/WellContentLoader.java
index 527a80ee5507bbf7aad3e4fab8ddebe7e8835f8f..201b18ee4fc449aef2b9bd13f26a9bfa51b31697 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/WellContentLoader.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/WellContentLoader.java
@@ -35,6 +35,7 @@ import ch.rinn.restrictions.Friend;
 import ch.systemsx.cisd.common.collection.IKeyExtractor;
 import ch.systemsx.cisd.common.collection.TableMap;
 import ch.systemsx.cisd.common.collection.TableMap.UniqueKeyViolationStrategy;
+import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.materiallister.IMaterialLister;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.samplelister.ISampleLister;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
@@ -90,6 +91,8 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.IHCSFeatureVecto
 @Friend(toClasses = IScreeningQuery.class)
 public class WellContentLoader extends AbstractContentLoader
 {
+    private static final int MAX_NUMBERS_OF_MATERIALS = 1000;
+
     /**
      * Finds wells containing the specified material and belonging to the specified experiment.
      * Loads wells metadata, but no information about connected datasets.
@@ -809,6 +812,12 @@ public class WellContentLoader extends AbstractContentLoader
                     "[%d msec] Finding %d materials for criteria '%s'. Result: %s",
                     (System.currentTimeMillis() - start), materialIds.length, codesCriteria,
                     abbreviate(materialIds, 100)));
+            if (materialIds.length > MAX_NUMBERS_OF_MATERIALS)
+            {
+                throw new UserFailureException("More than " + MAX_NUMBERS_OF_MATERIALS
+                        + " materials for criteria '" + codesCriteria + "' are found. "
+                        + "Please restrict your search criteria.");
+            }
             start = System.currentTimeMillis();
 
             if (experimentOrNull != null)