diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ScreeningDisplaySettingsManager.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ScreeningDisplaySettingsManager.java
index fa3c8638ee4c0b8bb175d59d6b0954702540a150..319b3a8eff5d0e57cffe8d53b2fd6c94e84b03dc 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ScreeningDisplaySettingsManager.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ScreeningDisplaySettingsManager.java
@@ -17,7 +17,9 @@
 package ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application;
 
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import ch.systemsx.cisd.common.shared.basic.utils.StringUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
@@ -81,4 +83,20 @@ public class ScreeningDisplaySettingsManager
     {
         return screeningSettings.getDefaultAnalysisProcedure();
     }
+
+    @SuppressWarnings("deprecation")
+    public Map<String, String> getDefaultTransformationsForChannels(String displayTypeId)
+    {
+        Map<String, String> transformations =
+                screeningSettings.getDefaultTransformations().get(displayTypeId);
+
+        if (transformations == null)
+        {
+            transformations = new HashMap<String, String>();
+            screeningSettings.getDefaultTransformations().put(displayTypeId, transformations);
+        }
+
+        return transformations;
+    }
+
 }
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 1262833d15b79527dbf27f69e94895ce98641f63..d6151b9dc4ead32c2d5809803027eb345bc1bbfa 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
@@ -79,6 +79,8 @@ class ChannelChooser
 
     private List<String> basicChannelCodes;
 
+    private String imageTransformationCodeOrNull;
+
     public ChannelChooser(LogicalImageReference basicImage, IChanneledViewerFactory viewerFactory,
             IDefaultChannelState defaultChannelState)
     {
@@ -102,11 +104,9 @@ class ChannelChooser
     /** Refreshes the displayed images, but not the rest of the GUI */
     public void refresh()
     {
-        // TODO 2011-09-13, Tomasz Pylak: add transformation code for single channel if chosen
-        String imageTransformationCode = null;
         LogicalImageChannelsReference state =
                 new LogicalImageChannelsReference(basicImage, basicChannelCodes,
-                        imageTransformationCode, selectedOverlayChannels);
+                        imageTransformationCodeOrNull, selectedOverlayChannels);
         Widget view = viewerFactory.create(state);
         imageContainer.removeAll();
         imageContainer.add(view);
@@ -124,9 +124,10 @@ class ChannelChooser
         }
         // basic channels
         List<String> channels = basicImage.getChannelsCodes();
+
         if (channels.size() > 1)
         {
-            Widget channelChooserWithLabel = createBasicChannelChooser(channels);
+            Widget channelChooserWithLabel = createBasicChannelChooser(channels, viewContext);
             container.add(channelChooserWithLabel);
         }
         // images
@@ -271,17 +272,21 @@ class ChannelChooser
                 channelCode);
     }
 
-    private Widget createBasicChannelChooser(List<String> channels)
+    private Widget createBasicChannelChooser(List<String> channels, IViewContext<?> viewContext)
     {
         final ChannelChooserPanel channelChooser =
-                new ChannelChooserPanel(defaultChannelState, channels, basicChannelCodes);
+                new ChannelChooserPanel(viewContext, defaultChannelState, channels,
+                        basicChannelCodes, basicImage.getImagetParameters());
 
         channelChooser
                 .addSelectionChangedListener(new ChannelChooserPanel.ChannelSelectionListener()
                     {
-                        public void selectionChanged(List<String> newlySelectedChannels)
+                        public void selectionChanged(List<String> newlySelectedChannels,
+                                @SuppressWarnings("hiding") String imageTransformationCodeOrNull)
                         {
                             basicChannelCodes = newlySelectedChannels;
+                            ChannelChooser.this.imageTransformationCodeOrNull =
+                                    imageTransformationCodeOrNull;
                             refresh();
                         }
                     });
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 1c92c18e5cbe9982a3095d9095e46ace1e15f523..fdeafed9432538ca9c2d1aae901e263701a0f67f 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
@@ -18,7 +18,11 @@ package ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import com.extjs.gxt.ui.client.event.BaseEvent;
 import com.extjs.gxt.ui.client.event.Events;
@@ -28,8 +32,17 @@ import com.extjs.gxt.ui.client.widget.form.CheckBox;
 import com.extjs.gxt.ui.client.widget.form.CheckBoxGroup;
 import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
 import com.extjs.gxt.ui.client.widget.form.Field;
+import com.extjs.gxt.ui.client.widget.form.LabelField;
+import com.extjs.gxt.ui.client.widget.form.MultiField;
 import com.extjs.gxt.ui.client.widget.form.SimpleComboBox;
-
+import com.extjs.gxt.ui.client.widget.form.SimpleComboValue;
+import com.google.gwt.user.client.ui.Widget;
+
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.LabeledItem;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.SimpleModelComboBox;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageDatasetParameters;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageTransformationInfo;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConstants;
 
 /**
@@ -39,27 +52,50 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConst
  */
 public class ChannelChooserPanel extends LayoutContainer
 {
+    private static class ComboBoxGroup extends MultiField<Widget>
+    {
+        private ComboBoxGroup()
+        {
+            super();
+
+            this.setSpacing(5);
+        }
+    }
 
     /**
      * Can be used from external classes wishing to be notified when the channel selection changes.
      */
     public static interface ChannelSelectionListener
     {
-        void selectionChanged(List<String> channels);
+        void selectionChanged(List<String> channels, String imageTransformationCodeOrNull);
     }
 
+    private static final String DEFAULT_CODE = "$DEFAULT$";
+
+    private static final LabeledItem<ImageTransformationInfo> DEFAULT_TRANSFORMATION =
+            convertToLabeledItem(new ImageTransformationInfo(DEFAULT_CODE, "Default",
+                    "Default transformation or original picture if not tranformed.", "", false));
+
+    private final IMessageProvider messageProvider;
+
     private IDefaultChannelState defaultChannelState;
 
     private CheckBoxGroup channelsCheckBoxGroup;
 
     private SimpleComboBox<String> channelsComboBox;
 
+    private SimpleModelComboBox<ImageTransformationInfo> transformationsComboBox;
+
+    private LabelField adjustLabel = new LabelField("Adjust:");
+
+    private Map<String, Set<ImageTransformationInfo>> transformationsForChannels =
+            new HashMap<String, Set<ImageTransformationInfo>>();
+
     private List<ChannelSelectionListener> channelSelectionListeners =
             new ArrayList<ChannelSelectionListener>();
 
     private final Listener<BaseEvent> selectionChangeListener = new Listener<BaseEvent>()
         {
-
             public void handleEvent(BaseEvent be)
             {
                 selectionChanged();
@@ -67,26 +103,55 @@ public class ChannelChooserPanel extends LayoutContainer
 
         };
 
-    public ChannelChooserPanel(IDefaultChannelState defChannelState)
+    private final Listener<BaseEvent> transformationSelection = new Listener<BaseEvent>()
+        {
+            public void handleEvent(BaseEvent be)
+            {
+                defaultChannelState.setDefaultTransformation(getSelectedValues().get(0),
+                        transformationsComboBox.getSimpleValue().getItem().getCode());
+                notifySelectionListeners(getSelectedValues(), tryGetSelectedTransformationCode());
+            }
+
+        };
+
+    public ChannelChooserPanel(IMessageProvider messageProvider,
+            IDefaultChannelState defChannelState)
     {
-        this(defChannelState, Collections.<String> emptyList(), Collections.<String> emptyList());
+        this(messageProvider, defChannelState, Collections.<String> emptyList(), Collections
+                .<String> emptyList(), null);
     }
 
-    public ChannelChooserPanel(IDefaultChannelState defChannelState, List<String> names,
-            List<String> selectedChannelsOrNull)
+    public ChannelChooserPanel(IMessageProvider messageProvider,
+            IDefaultChannelState defChannelState, List<String> names,
+            List<String> selectedChannelsOrNull, ImageDatasetParameters imageDatasetParameters)
     {
+        this.messageProvider = messageProvider;
         this.defaultChannelState = defChannelState;
 
         setAutoHeight(true);
         setAutoWidth(true);
 
         channelsComboBox = createChannelsComboBox();
-        add(channelsComboBox);
+
+        transformationsComboBox =
+                new SimpleModelComboBox<ImageTransformationInfo>(this.messageProvider,
+                        new ArrayList<LabeledItem<ImageTransformationInfo>>(), null);
+        transformationsComboBox.setTriggerAction(TriggerAction.ALL);
+        transformationsComboBox.setAllowBlank(false);
+        transformationsComboBox.setEditable(false);
+        transformationsComboBox.addListener(Events.SelectionChange, transformationSelection);
+
+        ComboBoxGroup group = new ComboBoxGroup();
+        group.add(channelsComboBox);
+        group.add(adjustLabel);
+        group.add(transformationsComboBox);
+
+        add(group);
 
         channelsCheckBoxGroup = createCheckBoxGroup();
         add(channelsCheckBoxGroup);
 
-        addChannels(names);
+        addChannels(names, imageDatasetParameters);
         updateChannelSelection(selectedChannelsOrNull);
     }
 
@@ -102,13 +167,12 @@ public class ChannelChooserPanel extends LayoutContainer
 
         return comboBox;
     }
-    
 
     private CheckBoxGroup createCheckBoxGroup()
     {
         CheckBoxGroup group = new CheckBoxGroup();
         return group;
-    }    
+    }
 
     /**
      * adds a {@link ChannelSelectionListener} that will be receiving notifications when the
@@ -122,9 +186,9 @@ public class ChannelChooserPanel extends LayoutContainer
     /**
      * a quite specific method, currently only needed by the well-search grid.
      */
-    public void addCodes(List<String> codes)
+    public void addCodes(ImageDatasetParameters imageParameters)
     {
-        addChannels(codes);
+        addChannels(imageParameters.getChannelsCodes(), imageParameters);
         updateChannelSelection(null);
     }
 
@@ -174,7 +238,7 @@ public class ChannelChooserPanel extends LayoutContainer
         return channels;
     }
 
-    private void addChannels(List<String> codes)
+    private void addChannels(List<String> codes, ImageDatasetParameters imageParameters)
     {
         addCodeToComboBox(ScreeningConstants.MERGED_CHANNELS);
         if (codes == null || codes.isEmpty())
@@ -186,6 +250,20 @@ public class ChannelChooserPanel extends LayoutContainer
         for (String code : codes)
         {
             boolean codeAdded = addCodeToComboBox(code);
+
+            if (imageParameters != null)
+            {
+                Set<ImageTransformationInfo> transformationsForChannel =
+                        transformationsForChannels.get(code);
+                if (transformationsForChannel == null)
+                {
+                    transformationsForChannel = new LinkedHashSet<ImageTransformationInfo>();
+                    transformationsForChannels.put(code, transformationsForChannel);
+                }
+                transformationsForChannel.addAll(imageParameters
+                        .getAvailableImageTransformationsFor(code));
+            }
+
             if (codeAdded)
             {
                 // also add a checkBockbox for the channel
@@ -227,8 +305,8 @@ public class ChannelChooserPanel extends LayoutContainer
         }
 
         channelsComboBox.setSimpleValue(comboBoxValue);
-
         initializeCheckBoxValues(channels);
+        updateTransformationComboBox();
     }
 
     private void initializeCheckBoxValues(List<String> selectedChannels)
@@ -254,14 +332,36 @@ public class ChannelChooserPanel extends LayoutContainer
         channelsCheckBoxGroup.setVisible(showCheckBoxGroup);
 
         ensureAtLeastOneCheckboxChecked();
-        notifySelectionListeners(selection);
+        updateTransformationComboBox();
+
+        notifySelectionListeners(selection, tryGetSelectedTransformationCode());
     }
 
-    private void notifySelectionListeners(List<String> selection)
+    public String tryGetSelectedTransformationCode()
+    {
+        if (transformationsComboBox.isVisible())
+        {
+            String code =
+                    transformationsComboBox.getSelection().get(0).getValue().getItem().getCode();
+
+            if (DEFAULT_CODE.equals(code))
+            {
+                return null;
+            } else
+            {
+                return code;
+            }
+        }
+
+        return null;
+    }
+
+    private void notifySelectionListeners(List<String> selection,
+            String imageTransformationCodeOrNull)
     {
         for (ChannelSelectionListener listener : channelSelectionListeners)
         {
-            listener.selectionChanged(selection);
+            listener.selectionChanged(selection, imageTransformationCodeOrNull);
         }
     }
 
@@ -340,4 +440,92 @@ public class ChannelChooserPanel extends LayoutContainer
         }
         return result;
     }
+
+    private void updateTransformationComboBox()
+    {
+        List<String> selectedValues = getSelectedValues();
+
+        transformationsComboBox.removeAll();
+        transformationsComboBox.clearState();
+
+        List<LabeledItem<ImageTransformationInfo>> model =
+                new ArrayList<LabeledItem<ImageTransformationInfo>>();
+        Set<ImageTransformationInfo> infos = null;
+        if (selectedValues.size() == 1
+                && (infos = transformationsForChannels.get(selectedValues.get(0))) != null
+                && infos.size() > 0)
+        {
+            model.add(DEFAULT_TRANSFORMATION);
+            for (ImageTransformationInfo imageTransformationInfo : infos)
+            {
+                model.add(convertToLabeledItem(imageTransformationInfo));
+            }
+            if (model.size() <= 1)
+            {
+                transformationsComboBox.setVisible(false);
+                adjustLabel.setVisible(false);
+                return;
+            }
+            transformationsComboBox.add(model);
+            setTransformationsVisible(true);
+
+            selectTransformation(selectedValues.get(0));
+        } else
+        {
+            setTransformationsVisible(false);
+        }
+    }
+
+    private void setTransformationsVisible(boolean visible)
+    {
+        transformationsComboBox.setVisible(visible);
+        adjustLabel.setVisible(visible);
+    }
+
+    private void selectTransformation(String channelCode)
+    {
+        boolean selected = false;
+        String code = defaultChannelState.tryGetDefaultTransformation(channelCode);
+        if (code != null)
+        {
+            for (SimpleComboValue<LabeledItem<ImageTransformationInfo>> info : transformationsComboBox
+                    .getStore().getModels())
+            {
+                if (info.getValue().getItem().getCode().equals(code))
+                {
+                    selected = true;
+                    // transformationsComboBox.select(info);
+                    transformationsComboBox.setSelection(Collections.singletonList(info));
+                    break;
+                }
+            }
+        }
+        if (false == selected)
+        {
+            for (SimpleComboValue<LabeledItem<ImageTransformationInfo>> info : transformationsComboBox
+                    .getStore().getModels())
+            {
+                if (info.getValue().getItem().isDefault())
+                {
+                    // transformationsComboBox.select(info);
+                    transformationsComboBox.setSelection(Collections.singletonList(info));
+                    selected = true;
+                    break;
+                }
+            }
+        }
+
+        if (false == selected)
+        {
+            transformationsComboBox.setSelection(Collections.singletonList(transformationsComboBox
+                    .getStore().getModels().get(0)));
+        }
+    }
+
+    private static LabeledItem<ImageTransformationInfo> convertToLabeledItem(
+            ImageTransformationInfo imageTransformationInfo)
+    {
+        return new LabeledItem<ImageTransformationInfo>(imageTransformationInfo,
+                imageTransformationInfo.getLabel(), imageTransformationInfo.getDescription());
+    }
 }
\ 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
index ca23453a81eb7435b80602b2efb7102d936231ce..36ea11bcd9c541f165e18668525096bed154000b 100644
--- 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
@@ -25,7 +25,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.u
 
 /**
  * Allows to create a {@link Widget} ({@link #asWidget()}) containing channel view and allows to
- * manually update visible channel via the ({@link #selectionChanged(List)}) method.
+ * manually update visible channel via the ({@link #selectionChanged(List, String)}) method.
  * 
  * @author Izabela Adamczyk
  */
@@ -37,7 +37,7 @@ public class ChannelWidgetWithListener implements ChannelChooserPanel.ChannelSel
 
     interface ISimpleChanneledViewerFactory
     {
-        Widget create(List<String> channelCodes);
+        Widget create(List<String> channelCodes, String imageTransformationCodeOrNull);
     }
 
     public ChannelWidgetWithListener(final ISimpleChanneledViewerFactory viewerFactory)
@@ -51,11 +51,12 @@ public class ChannelWidgetWithListener implements ChannelChooserPanel.ChannelSel
         return container;
     }
 
-    public void selectionChanged(List<String> channelNames)
+    public void selectionChanged(List<String> channelNames, String imageTransformationCodeOrNull)
     {
         if (channelNames != null)
         {
-            GuiUtils.replaceLastItem(container, viewerFactory.create(channelNames));
+            GuiUtils.replaceLastItem(container,
+                    viewerFactory.create(channelNames, imageTransformationCodeOrNull));
         }
     }
 }
\ No newline at end of file
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/DefaultChannelState.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/DefaultChannelState.java
index a8fc04d34965589ca66d10a8fba6ae8fa7f6af46..6a95f560a3ce9bb8e830e5c0007bb3a25b081ddb 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/DefaultChannelState.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/DefaultChannelState.java
@@ -17,6 +17,7 @@
 package ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers;
 
 import java.util.List;
+import java.util.Map;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ScreeningDisplaySettingsManager;
@@ -52,4 +53,19 @@ public class DefaultChannelState implements IDefaultChannelState
         return ScreeningViewContext.getTechnologySpecificDisplaySettingsManager(viewContext);
     }
 
+    public void setDefaultTransformation(String channel, String codes)
+    {
+        getTransformations().put(channel, codes);
+    }
+
+    public String tryGetDefaultTransformation(String channel)
+    {
+        return getTransformations().get(channel);
+    }
+
+    private Map<String, String> getTransformations()
+    {
+        return getDisplaySettingManager().getDefaultTransformationsForChannels(displayTypeId);
+    }
+
 }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/IDefaultChannelState.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/IDefaultChannelState.java
index 3c0187b92b04b0b27e73d79b49689c4211382b91..11ab1a7bc0321bdebf1cd67d890134e99d6e3ad9 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/IDefaultChannelState.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/IDefaultChannelState.java
@@ -12,4 +12,8 @@ public interface IDefaultChannelState
     public List<String> tryGetDefaultChannels();
 
     public void setDefaultChannels(List<String> channels);
+
+    public void setDefaultTransformation(String channel, String code);
+
+    public String tryGetDefaultTransformation(String channel);
 }
\ No newline at end of file
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java
index d82e2c734fb93bf1005d97da7d29c8184d05ba81..da722cbf04f06c9c87404daddd090affb068fba2 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java
@@ -88,7 +88,7 @@ public class MaterialReplicaSummaryComponent
             AnalysisProcedureListenerHolder analysisProcedureListenerHolder)
     {
         return new MaterialReplicaSummaryComponent(screeningViewContext,
-                restrictGlobalScopeLinkToProject, experiment, null).createViewer(material, 
+                restrictGlobalScopeLinkToProject, experiment, null).createViewer(material,
                 analysisProcedureListenerHolder);
     }
 
@@ -154,7 +154,8 @@ public class MaterialReplicaSummaryComponent
         String displayTypeId = ScreeningDisplayTypeIDGenerator.EXPERIMENT_CHANNEL.createID(null);
         final IDefaultChannelState defaultChannelState =
                 new DefaultChannelState(screeningViewContext, displayTypeId);
-        ChannelChooserPanel channelChooser = new ChannelChooserPanel(defaultChannelState);
+        ChannelChooserPanel channelChooser =
+                new ChannelChooserPanel(screeningViewContext, defaultChannelState);
         LayoutContainer panel = new NotScrollableContainer();
         panel.setLayout(new RowLayout());
         panel.add(channelChooser);
@@ -342,18 +343,19 @@ public class MaterialReplicaSummaryComponent
         assert image.tryGetImageDataset() != null;
         final ISimpleChanneledViewerFactory viewerFactory = new ISimpleChanneledViewerFactory()
             {
-                public Widget create(List<String> channels)
+                public Widget create(List<String> channels, String imageTransformationCodeOrNull)
                 {
                     return WellContentDialog.createImageViewerForChannel(screeningViewContext,
-                            image, oneImageSizeFactorPx, channels);
+                            image, oneImageSizeFactorPx, channels, imageTransformationCodeOrNull);
                 }
             };
         ChannelWidgetWithListener widgetWithListener = new ChannelWidgetWithListener(viewerFactory);
-        widgetWithListener.selectionChanged(channelChooser.getSelectedValues());
+        widgetWithListener.selectionChanged(channelChooser.getSelectedValues(),
+                channelChooser.tryGetSelectedTransformationCode());
 
         ImageDatasetParameters imageParameters = image.tryGetImageDataset().getImageParameters();
         channelChooser.addSelectionChangedListener(widgetWithListener);
-        channelChooser.addCodes(imageParameters.getChannelsCodes());
+        channelChooser.addCodes(imageParameters);
 
         return widgetWithListener.asWidget();
     }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java
index 839c9fc7221bf9fae9c8dafe1efa41775057fbbe..c29b7eb99ac1b5badbe44e1978888db081e254f6 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java
@@ -137,7 +137,8 @@ public class WellContentDialog extends Dialog
      */
     public static Widget createImageViewerForChannel(
             final IViewContext<IScreeningClientServiceAsync> viewContext,
-            final WellImage wellImage, int imageSizePx, List<String> channels)
+            final WellImage wellImage, int imageSizePx, List<String> channels,
+            String imageTransformationCodeOrNull)
     {
         final ImageDatasetEnrichedReference imageDataset = tryGetImageDataset(wellImage);
         if (imageDataset == null)
@@ -160,11 +161,9 @@ public class WellContentDialog extends Dialog
         String sessionId = getSessionId(viewContext);
         final LogicalImageReference wellImages =
                 new LogicalImageReference(imageDataset, locationOrNull);
-        // TODO 2011-09-13, Tomasz Pylak: add transformation code for single channel if chosen
-        String imageTransformationCode = null;
         LogicalImageChannelsReference channelReferences =
                 LogicalImageChannelsReference.createWithoutOverlays(wellImages, channels,
-                        imageTransformationCode);
+                        imageTransformationCodeOrNull);
         LayoutContainer staticTilesGrid =
                 LogicalImageViewer.createTilesGrid(channelReferences, sessionId, imageSizePx,
                         createImageLinks);
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 e2fa872fec8711bd0ac6e6ba56b20c43e373a000..0c52c37663c0207d28bec74209507af289fa8d42 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
@@ -232,8 +232,7 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> implements
     {
         WellSearchGrid reviewer =
                 new WellSearchGrid(viewContext, experimentCriteriaOrNull, materialCriteria,
-                        analysisProcedureCriteria,
-                        restrictGlobalScopeLinkToProject);
+                        analysisProcedureCriteria, restrictGlobalScopeLinkToProject);
         final ToolBar toolbar = reviewer.createToolbar();
         return reviewer.asDisposableWithToolbar(new IDisposableComponent()
             {
@@ -288,7 +287,7 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> implements
 
         final IDefaultChannelState defaultChannelState =
                 createDefaultChannelState(viewContext, experimentCriteriaOrNull);
-        channelChooser = new ChannelChooserPanel(defaultChannelState);
+        channelChooser = new ChannelChooserPanel(screeningViewContext, defaultChannelState);
         linkExperiment();
         linkPlate();
         linkWell();
@@ -533,7 +532,8 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> implements
     {
         if (entityOrNull != null)
         {
-            new OpenEntityDetailsTabAction(entityOrNull, getViewContext(), specialKeyPressed).execute();
+            new OpenEntityDetailsTabAction(entityOrNull, getViewContext(), specialKeyPressed)
+                    .execute();
         }
     }
 
@@ -568,7 +568,6 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> implements
             };
     }
 
-
     private AnalysisProcedureChooser createAnalysisProcedureChooser()
     {
         AnalysisProcedureChooser analysisProcedureChooser =
@@ -614,19 +613,22 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> implements
                     final ISimpleChanneledViewerFactory viewerFactory =
                             new ISimpleChanneledViewerFactory()
                                 {
-                                    public Widget create(List<String> channels)
+                                    public Widget create(List<String> channels,
+                                            String imageTransformationCodeOrNull)
                                     {
                                         return WellContentDialog.createImageViewerForChannel(
-                                                getViewContext(), entity, IMAGE_SIZE_PX, channels);
+                                                getViewContext(), entity, IMAGE_SIZE_PX, channels,
+                                                imageTransformationCodeOrNull);
                                     }
                                 };
                     ChannelWidgetWithListener widgetWithListener =
                             new ChannelWidgetWithListener(viewerFactory);
-                    widgetWithListener.selectionChanged(channelChooser.getSelectedValues());
+                    widgetWithListener.selectionChanged(channelChooser.getSelectedValues(),
+                            channelChooser.tryGetSelectedTransformationCode());
 
                     ImageDatasetParameters imageParameters = images.getImageParameters();
                     channelChooser.addSelectionChangedListener(widgetWithListener);
-                    channelChooser.addCodes(imageParameters.getChannelsCodes());
+                    channelChooser.addCodes(imageParameters);
 
                     return widgetWithListener.asWidget();
                 }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/dto/LogicalImageReference.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/dto/LogicalImageReference.java
index 2bed12ee1400b19e6a3e22aeffe29b5d34b16975..b78f1265d32f774ea31030c96c0fdf9614e3b565 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/dto/LogicalImageReference.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/dto/LogicalImageReference.java
@@ -135,4 +135,9 @@ public class LogicalImageReference
     {
         return overlayDatasets;
     }
+
+    public ImageDatasetParameters getImagetParameters()
+    {
+        return this.imageParameters;
+    }
 }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ImageTransformationInfo.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ImageTransformationInfo.java
index f1a4e3a326ea68d7f378d3fee2d2d19e7ed85dfe..73c7c5eccefd908eb45c9b72e2b2523d752597a0 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ImageTransformationInfo.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ImageTransformationInfo.java
@@ -87,4 +87,22 @@ public class ImageTransformationInfo implements ISerializable
     {
         this.isDefault = isDefault;
     }
+
+    @Override
+    public int hashCode()
+    {
+        return code.hashCode();
+    }
+
+    @Override
+    public boolean equals(Object o)
+    {
+        if (o instanceof ImageTransformationInfo)
+        {
+            ImageTransformationInfo other = (ImageTransformationInfo) o;
+            return other.code.equals(other.code);
+        }
+
+        return false;
+    }
 }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ScreeningDisplaySettings.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ScreeningDisplaySettings.java
index cb1e0423ad585d287cc81221ce175c4937d9f3d2..b09d3f8edcc7ef33884f519018a33e0006ca7c32 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ScreeningDisplaySettings.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ScreeningDisplaySettings.java
@@ -31,7 +31,10 @@ public class ScreeningDisplaySettings implements ISerializable
     private static final long serialVersionUID = 1L;
 
     private Map<String/* displayTypeID */, String/* channel name */> defaultChannels =
-            new HashMap<String, String>(); 
+            new HashMap<String, String>();
+
+    private Map<String, Map<String, String>> defaultTransformations =
+            new HashMap<String, Map<String, String>>();
 
     private String defaultAnalysisProcedure;
 
@@ -67,4 +70,24 @@ public class ScreeningDisplaySettings implements ISerializable
     {
         return this.defaultAnalysisProcedure;
     }
+
+    /** @deprecated Should be used only by ScreeningDisplaySettingsManager. */
+    @Deprecated
+    public Map<String, Map<String, String>> getDefaultTransformations()
+    {
+        if (defaultTransformations == null)
+        {
+            this.defaultTransformations = new HashMap<String, Map<String, String>>();
+        }
+
+        return defaultTransformations;
+    }
+
+    // for serialization
+
+    @SuppressWarnings("unused")
+    private void setDefaultTransformations(Map<String, Map<String, String>> defaultTransformations)
+    {
+        this.defaultTransformations = defaultTransformations;
+    }
 }