diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/Dict.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/Dict.java
index 6bbcfbebb17216a097c2106cf133e15077730a74..589f672ebcc31e63d70f98e4520d4e582ab37936 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/Dict.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/Dict.java
@@ -40,6 +40,8 @@ public final class Dict extends ch.systemsx.cisd.openbis.generic.client.web.clie
 
     public static final String WELL_IMAGES = "WELL_IMAGES";
 
+    public static final String PREVIEW = "PREVIEW";
+
     public static final String IMPORT_SCHEDULED_MESSAGE = "import_scheduled";
 
     public static final String REGISTER = "register";
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooser.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooser.java
index a3261483e1613e01ffd321500ea1683f26c9b450..939d0b07bdebd791acf0213301767f8f72e277a2 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooser.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooser.java
@@ -25,9 +25,7 @@ import com.extjs.gxt.ui.client.event.SelectionChangedListener;
 import com.extjs.gxt.ui.client.util.Margins;
 import com.extjs.gxt.ui.client.widget.LayoutContainer;
 import com.extjs.gxt.ui.client.widget.form.ComboBox;
-import com.extjs.gxt.ui.client.widget.form.SimpleComboBox;
 import com.extjs.gxt.ui.client.widget.form.SimpleComboValue;
-import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
 import com.extjs.gxt.ui.client.widget.layout.RowData;
 import com.extjs.gxt.ui.client.widget.layout.RowLayout;
 import com.google.gwt.user.client.ui.Widget;
@@ -56,9 +54,8 @@ class ChannelChooser
         String initialChannel = channelState.getDefaultChannel(channelsNames);
         if (channelsNames.size() > 1)
         {
-            final List<String> channelNames = createChannelsDescriptions(channelsNames);
             ComboBox<SimpleComboValue<String>> channelChooser =
-                    createChannelChooser(channelNames, initialChannel);
+                    new ChannelComboBox(channelsNames, initialChannel);
             channelChooser
                     .addSelectionChangedListener(new SelectionChangedListener<SimpleComboValue<String>>()
                         {
@@ -81,21 +78,7 @@ class ChannelChooser
         return container;
     }
 
-    private static ComboBox<SimpleComboValue<String>> createChannelChooser(
-            List<String> channelNames, String initialChannelOrNull)
-    {
-        SimpleComboBox<String> combo = new SimpleComboBox<String>();
-        combo.setTriggerAction(TriggerAction.ALL);
-        combo.add(channelNames);
-        combo.setAllowBlank(false);
-        combo.setEditable(false);
-        String initialChannelName =
-                initialChannelOrNull != null ? initialChannelOrNull : channelNames.get(0);
-        combo.setSimpleValue(initialChannelName);
-        return combo;
-    }
-
-    private static List<String> createChannelsDescriptions(List<String> realChannelsNames)
+    public static List<String> createChannelsDescriptions(List<String> realChannelsNames)
     {
         assert realChannelsNames.size() > 0 : "there has to be at least one channel";
 
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelComboBox.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelComboBox.java
new file mode 100644
index 0000000000000000000000000000000000000000..a324e7318fc677a69a96b3333761ae1a2546361c
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelComboBox.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2010 ETH Zuerich, CISD
+ *
+ * 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.screening.client.web.client.application.detailviewers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.extjs.gxt.ui.client.event.SelectionChangedListener;
+import com.extjs.gxt.ui.client.widget.form.SimpleComboBox;
+import com.extjs.gxt.ui.client.widget.form.SimpleComboValue;
+
+import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConstants;
+
+/**
+ * Combobox storing channel names.
+ * 
+ * @author Izabela Adamczyk
+ */
+public class ChannelComboBox extends SimpleComboBox<String>
+{
+
+    /**
+     * Creates empty {@link ChannelComboBox}.
+     */
+    public ChannelComboBox()
+    {
+        setTriggerAction(TriggerAction.ALL);
+        setAllowBlank(false);
+        setEditable(false);
+        setEmptyText("Choose...");
+    }
+
+    /**
+     * Creates {@link ChannelComboBox} with initial list of values and selects given initial value.
+     */
+    public ChannelComboBox(List<String> names, String initialValue)
+    {
+        this();
+        addUniqueNames(names);
+        if (initialValue != null)
+        {
+            setSimpleValue(initialValue);
+        } else
+        {
+            autoselect();
+        }
+    }
+
+    /**
+     * Selects first element if nothing was selected before.
+     */
+    private void autoselect()
+    {
+        if (getStore().getModels().size() > 0 && getValue() == null)
+        {
+            setValue(getStore().getModels().get(0));
+        }
+    }
+
+    /**
+     * Adds names to the combo box if they were not yet present.
+     */
+    private void addUniqueNames(List<String> names)
+    {
+        List<String> withMerged = new ArrayList<String>();
+        withMerged.add(ScreeningConstants.MERGED_CHANNELS);
+        withMerged.addAll(names);
+        for (String s : withMerged)
+        {
+            if (findModel(s) == null)
+            {
+                add(s);
+            }
+        }
+    }
+
+    public void addNamesAndListener(List<String> newNames,
+            SelectionChangedListener<SimpleComboValue<String>> listener)
+    {
+        addUniqueNames(newNames);
+        addSelectionChangedListener(listener);
+        autoselect();
+    }
+
+}
\ No newline at end of file
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelWidgetWithListener.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelWidgetWithListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..39cab20c55d23919f5e1152a7bb17d79d3082c20
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelWidgetWithListener.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2010 ETH Zuerich, CISD
+ *
+ * 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.screening.client.web.client.application.detailviewers;
+
+import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
+import com.extjs.gxt.ui.client.event.SelectionChangedListener;
+import com.extjs.gxt.ui.client.widget.LayoutContainer;
+import com.extjs.gxt.ui.client.widget.form.SimpleComboValue;
+import com.google.gwt.user.client.ui.Widget;
+
+import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.ChannelChooser.IChanneledViewerFactory;
+import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.utils.GuiUtils;
+
+/**
+ * Allows to create a {@link Widget} ({@link #asWidget()}) containing channel view and allows to
+ * manually update visible channel ({@link #update(String)}) or create a listener that can be added
+ * to channel selector.
+ * 
+ * @author Izabela Adamczyk
+ */
+public class ChannelWidgetWithListener
+{
+    final LayoutContainer container = new LayoutContainer();
+
+    final IChanneledViewerFactory viewerFactory;
+
+    public ChannelWidgetWithListener(final IChanneledViewerFactory viewerFactory)
+    {
+        this.viewerFactory = viewerFactory;
+    }
+
+    public void update(String channelName)
+    {
+        if (channelName != null)
+        {
+            GuiUtils.replaceLastItem(container, viewerFactory.create(channelName));
+        }
+    }
+
+    public SelectionChangedListener<SimpleComboValue<String>> asSelectionChangedListener()
+    {
+        return new SelectionChangedListener<SimpleComboValue<String>>()
+            {
+
+                @Override
+                public void selectionChanged(SelectionChangedEvent<SimpleComboValue<String>> se)
+                {
+                    update(se.getSelectedItem().getValue());
+                }
+
+            };
+    }
+
+    public Widget asWidget()
+    {
+        return container;
+    }
+}
\ No newline at end of file
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMaterialReviewer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMaterialReviewer.java
index 40567982bf7d3d9ba4d398d83be69036cd226550..4b9112548366cc2c0be2be7346515dc3465eacff 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMaterialReviewer.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMaterialReviewer.java
@@ -18,7 +18,13 @@ package ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.
 
 import java.util.List;
 
+import com.extjs.gxt.ui.client.store.ListStore;
+import com.extjs.gxt.ui.client.widget.Label;
+import com.extjs.gxt.ui.client.widget.grid.ColumnData;
+import com.extjs.gxt.ui.client.widget.grid.Grid;
 import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
+import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
+import com.google.gwt.user.client.ui.Widget;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
@@ -42,7 +48,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityReference;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ClientPluginFactory;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.DisplayTypeIDGenerator;
-import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.ChannelChooser.DefaultChannelState;
+import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.ChannelChooser.IChanneledViewerFactory;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.PlateMaterialReviewerColDefKind;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.DatasetImagesReference;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.PlateMaterialsSearchCriteria;
@@ -78,8 +84,12 @@ public class PlateMaterialReviewer extends AbstractSimpleBrowserGrid<WellContent
             PlateMaterialsSearchCriteria materialCriteria,
             IEntityInformationHolderWithIdentifier experiment)
     {
-        return new PlateMaterialReviewer(viewContext, materialCriteria, experiment)
-                .asDisposableWithoutToolbar();
+        ToolBar toolbar = new ToolBar();
+        toolbar.add(new Label("Channel:"));
+        ChannelComboBox chooser = new ChannelComboBox();
+        toolbar.add(chooser);
+        return new PlateMaterialReviewer(viewContext, materialCriteria, experiment, chooser)
+                .asDisposableWithToolbar(toolbar);
     }
 
     private final IViewContext<IScreeningClientServiceAsync> viewContext;
@@ -88,17 +98,17 @@ public class PlateMaterialReviewer extends AbstractSimpleBrowserGrid<WellContent
 
     private final ExperimentIdentifier experiment;
 
-    private final DefaultChannelState channelState;
+    private final ChannelComboBox channelChooser;
 
     private PlateMaterialReviewer(IViewContext<IScreeningClientServiceAsync> viewContext,
             PlateMaterialsSearchCriteria materialCriteria,
-            IEntityInformationHolderWithIdentifier experiment)
+            IEntityInformationHolderWithIdentifier experiment, ChannelComboBox chooser)
     {
         super(viewContext.getCommonViewContext(), BROWSER_ID, GRID_ID,
                 DisplayTypeIDGenerator.PLATE_MATERIAL_REVIEWER);
         this.viewContext = viewContext;
         this.materialCriteria = materialCriteria;
-        this.channelState = new DefaultChannelState();
+        channelChooser = chooser;
         this.experiment = new ExperimentIdentifier(experiment.getIdentifier());
         registerClickListeners();
     }
@@ -153,15 +163,7 @@ public class PlateMaterialReviewer extends AbstractSimpleBrowserGrid<WellContent
                             }
                         }
                     });
-        registerLinkClickListenerFor(PlateMaterialReviewerColDefKind.IMAGE.id(),
-                new ICellListener<WellContent>()
-                    {
-                        public void handle(WellContent wellContent, boolean specialKeyPressed)
-                        {
-                            WellContentDialog.showContentDialog(wellContent, channelState,
-                                    viewContext, IMAGE_WIDTH_PX, IMAGE_HEIGHT_PX);
-                        }
-                    });
+
     }
 
     private void showEntityViewer(IEntityInformationHolder entityOrNull, boolean specialKeyPressed)
@@ -176,17 +178,50 @@ public class PlateMaterialReviewer extends AbstractSimpleBrowserGrid<WellContent
     protected ColumnDefsAndConfigs<WellContent> createColumnsDefinition()
     {
         ColumnDefsAndConfigs<WellContent> schema = super.createColumnsDefinition();
-        setLinksRenderer(schema,
-                new PlateMaterialReviewerColDefKind[]
-                    { PlateMaterialReviewerColDefKind.WELL_NESTED_MATERIAL,
-                            PlateMaterialReviewerColDefKind.WELL_CONTENT_MATERIAL,
-                            PlateMaterialReviewerColDefKind.PLATE,
-                            PlateMaterialReviewerColDefKind.WELL,
-                            PlateMaterialReviewerColDefKind.DATASET,
-                            PlateMaterialReviewerColDefKind.IMAGE });
+        setLinksRenderer(schema, new PlateMaterialReviewerColDefKind[]
+            { PlateMaterialReviewerColDefKind.WELL_NESTED_MATERIAL,
+                    PlateMaterialReviewerColDefKind.WELL_CONTENT_MATERIAL,
+                    PlateMaterialReviewerColDefKind.PLATE, PlateMaterialReviewerColDefKind.WELL,
+                    PlateMaterialReviewerColDefKind.DATASET });
+        setImageRenderer(schema);
         return schema;
     }
 
+    private void setImageRenderer(ColumnDefsAndConfigs<WellContent> schema)
+    {
+        GridCellRenderer<BaseEntityModel<?>> render = new GridCellRenderer<BaseEntityModel<?>>()
+            {
+
+                public Object render(BaseEntityModel<?> model, String property, ColumnData config,
+                        int rowIndex, int colIndex, ListStore<BaseEntityModel<?>> store,
+                        Grid<BaseEntityModel<?>> grid)
+                {
+                    final WellContent entity = (WellContent) model.getBaseObject();
+                    if (entity != null && entity.tryGetImages() != null)
+                    {
+                        final IChanneledViewerFactory viewerFactory = new IChanneledViewerFactory()
+                            {
+                                public Widget create(String channel)
+                                {
+                                    return WellContentDialog.createImageViewerForChannel(
+                                            viewContext, entity, IMAGE_WIDTH_PX, IMAGE_HEIGHT_PX,
+                                            channel);
+                                }
+                            };
+                        ChannelWidgetWithListener widgetWithListener =
+                                new ChannelWidgetWithListener(viewerFactory);
+                        widgetWithListener.update(channelChooser.getSimpleValue());
+                        channelChooser.addNamesAndListener(entity.tryGetImages()
+                                .getImageParameters().getChannelsNames(), widgetWithListener
+                                .asSelectionChangedListener());
+                        return widgetWithListener.asWidget();
+                    }
+                    return null;
+                }
+            };
+        schema.setGridCellRendererFor(PlateMaterialReviewerColDefKind.IMAGE.id(), render);
+    }
+
     private void setLinksRenderer(ColumnDefsAndConfigs<WellContent> schema,
             PlateMaterialReviewerColDefKind[] columns)
     {
@@ -230,4 +265,5 @@ public class PlateMaterialReviewer extends AbstractSimpleBrowserGrid<WellContent
     {
         return new DatabaseModificationKind[] {};
     }
+
 }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ui/columns/specific/PlateMaterialReviewerColDefKind.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ui/columns/specific/PlateMaterialReviewerColDefKind.java
index e3ad59488ef1b1059df925ccb6cc7840b46669c2..7dc3aaf57800c702b6b8df2583317d3ad56e01f3 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ui/columns/specific/PlateMaterialReviewerColDefKind.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ui/columns/specific/PlateMaterialReviewerColDefKind.java
@@ -148,12 +148,18 @@ public enum PlateMaterialReviewerColDefKind implements IColumnDefinitionKind<Wel
             }
         }),
 
-    IMAGE(new AbstractColumnDefinitionKind<WellContent>(Dict.WELL_IMAGES)
+    IMAGE(new AbstractColumnDefinitionKind<WellContent>(Dict.WELL_IMAGES, 250)
         {
             @Override
             public String tryGetValue(WellContent entity)
             {
-                return "Show";
+                if (entity != null && entity.tryGetImages() != null)
+                {
+                    // Used only for export and filtering, renderer will set the image browser
+                    // widget as a value of this column in the GUI
+                    return "[images]";
+                }
+                return null;
             }
         }),
 
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/utils/GuiUtils.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/utils/GuiUtils.java
index ba8f99a597bf855f9622c364a548f7113da49e04..1c27542be85470c4d720fec9b5a538d601ee0b9d 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/utils/GuiUtils.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/utils/GuiUtils.java
@@ -30,8 +30,12 @@ public class GuiUtils
     public static void replaceLastItem(LayoutContainer container, Widget newLastWidget)
     {
         int lastItemIx = container.getItemCount() - 1;
-        container.remove(container.getWidget(lastItemIx));
-        container.insert(newLastWidget, lastItemIx);
+        if (lastItemIx >= 0)
+        {
+            container.remove(container.getWidget(lastItemIx));
+            container.insert(newLastWidget, lastItemIx);
+        }
+        container.insert(newLastWidget, 0);
         container.layout();
     }
 
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/screening-dictionary.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/screening-dictionary.js
index d7417de90d2d568967b51bfa969f972de83290cc..6ad3c82b0e28045358b0e8925bfaed989c48aae3 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/screening-dictionary.js
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/screening-dictionary.js
@@ -13,6 +13,8 @@ var screening = {
   WELL_COLUMN: "Well Column",
   WELL: "Well",
   WELL_IMAGES: "Well Images",
+  PREVIEW: "Preview",
+  
   
   //
   // Sample Viewer