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 8abbd437ca99285904e9c9af50095fcb807d0930..687ca0fa1c8f82bea60215739fc13ff683952a69 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
@@ -28,9 +28,12 @@ import java.util.Set;
 
 import com.extjs.gxt.ui.client.event.BaseEvent;
 import com.extjs.gxt.ui.client.event.Listener;
+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.Text;
 import com.extjs.gxt.ui.client.widget.form.FieldSet;
+import com.extjs.gxt.ui.client.widget.form.SimpleComboValue;
 import com.extjs.gxt.ui.client.widget.layout.FormLayout;
 import com.extjs.gxt.ui.client.widget.layout.MarginData;
 import com.extjs.gxt.ui.client.widget.layout.RowLayout;
@@ -44,25 +47,25 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.Abstrac
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.CheckBoxGroupWithModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.CheckBoxGroupWithModel.CheckBoxGroupListner;
 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.shared.basic.utils.GroupByMap;
 import ch.systemsx.cisd.openbis.generic.shared.basic.utils.IGroupKeyExtractor;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.Dict;
-import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.AnalysisProcedureChooser.IAnalysisProcedureSelectionListener;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.dto.ImageDatasetChannel;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.dto.LogicalImageChannelsReference;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.dto.LogicalImageReference;
+import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.utils.EntityTypeLabelUtils;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.utils.GuiUtils;
-import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.AnalysisProcedures;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.DatasetImagesReference;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.DatasetOverlayImagesReference;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.DatasetReference;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageDatasetParameters;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageResolution;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.IntensityRange;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.InternalImageChannel;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.InternalImageTransformationInfo;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConstants;
-import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria;
 
 /**
  * Handles displaying images in different channels and allows to choose the overlays.
@@ -213,62 +216,106 @@ class ChannelChooser
                     }).getMap();
     }
 
+    public interface OverlayDataSetSelectionListener
+    {
+        public void overlayDataSetSelected(DatasetOverlayImagesReference reference);
+    }
+
+    public Widget createAndConnectOverlayImageDatasetChooser(String labelText,
+            List<DatasetOverlayImagesReference> imageDatasets,
+            final OverlayDataSetSelectionListener listener, IViewContext<?> viewContext)
+    {
+        List<String> labels =
+                EntityTypeLabelUtils.createDatasetLabels(overlaysAsReferences(imageDatasets), true, true);
+        imageDatasets.add(0, null);
+        labels.add(0, "All");
+        SimpleModelComboBox<DatasetOverlayImagesReference> datasetChooser =
+                ImagingDatasetGuiUtils.createDatasetChooserComboBox(viewContext, imageDatasets, labels, labels);
+
+        datasetChooser
+                .addSelectionChangedListener(new SelectionChangedListener<SimpleComboValue<LabeledItem<DatasetOverlayImagesReference>>>()
+                    {
+                        @Override
+                        public void selectionChanged(
+                                SelectionChangedEvent<SimpleComboValue<LabeledItem<DatasetOverlayImagesReference>>> se)
+                        {
+                            DatasetOverlayImagesReference chosenDataset =
+                                    SimpleModelComboBox.getChosenItem(se);
+                            listener.overlayDataSetSelected(chosenDataset);
+                        }
+                    });
+        DatasetOverlayImagesReference chosenDataset = datasetChooser.tryGetChosenItem();
+        listener.overlayDataSetSelected(chosenDataset);
+
+        return ImagingDatasetGuiUtils.withLabel(datasetChooser, labelText);
+    }
+
+    private static List<DatasetReference> overlaysAsReferences(
+            List<DatasetOverlayImagesReference> imageDatasets)
+    {
+        List<DatasetReference> refs = new ArrayList<DatasetReference>();
+        for (DatasetOverlayImagesReference dataset : imageDatasets)
+        {
+            DatasetReference r = dataset.getDatasetReference();
+            refs.add(r);
+        }
+        return refs;
+    }
+
     private Widget createOverlayChannelsChooser(
             List<DatasetOverlayImagesReference> overlayDatasets, IViewContext<?> viewContext)
     {
+        LinkedList<DatasetOverlayImagesReference> sortedDataSets = new LinkedList<DatasetOverlayImagesReference>(overlayDatasets);
+        Collections.sort(sortedDataSets, new ProcedureDatasetSortingOrder());
+
         final Map<String, List<DatasetOverlayImagesReference>> datasetsByAnalysisProcMap =
                 groupByAnalysisProcedure(overlayDatasets);
-        if (datasetsByAnalysisProcMap.size() > 1)
+        if (sortedDataSets.size() > 1)
         {
-            AnalysisProcedures analysisProcedures =
-                    new AnalysisProcedures(datasetsByAnalysisProcMap.keySet());
-
             LayoutContainer chooserPanel = new LayoutContainer();
             chooserPanel.setLayout(new RowLayout());
 
             final LayoutContainer objectsChooserContainer = new LayoutContainer();
 
-            IAnalysisProcedureSelectionListener selectionListener =
+            OverlayDataSetSelectionListener selectionListener =
                     createAnalysisProcedureSelectionListener(datasetsByAnalysisProcMap,
                             objectsChooserContainer);
-            AnalysisProcedureChooser analysisProcedureChooser =
-                    AnalysisProcedureChooser.create(viewContext, analysisProcedures,
-                            AnalysisProcedureCriteria.createAllProcedures(), selectionListener);
-            chooserPanel.add(analysisProcedureChooser);
+
+            Widget overlaysChooser = createAndConnectOverlayImageDatasetChooser(OVERLAYS_MSG, sortedDataSets, selectionListener, viewContext);
+            chooserPanel.add(overlaysChooser);
             chooserPanel.add(objectsChooserContainer);
+
             return chooserPanel;
         } else
         {
             final LayoutContainer objectsChooserContainer = new LayoutContainer();
-            addOverlayChannelsChoosers(overlayDatasets, objectsChooserContainer);
+            addOverlayChannelsChoosers(sortedDataSets, objectsChooserContainer);
             return objectsChooserContainer;
         }
     }
 
-    private IAnalysisProcedureSelectionListener createAnalysisProcedureSelectionListener(
+    private OverlayDataSetSelectionListener createAnalysisProcedureSelectionListener(
             final Map<String, List<DatasetOverlayImagesReference>> datasetsByAnalysisProcMap,
             final LayoutContainer objectsChooserContainer)
     {
-        return new IAnalysisProcedureSelectionListener()
+        return new OverlayDataSetSelectionListener()
             {
                 @Override
-                public void analysisProcedureSelected(AnalysisProcedureCriteria criteria)
+                public void overlayDataSetSelected(DatasetOverlayImagesReference reference)
                 {
-                    refreshObjectChooser(criteria, datasetsByAnalysisProcMap,
-                            objectsChooserContainer);
+                    refreshObjectChooser(reference, datasetsByAnalysisProcMap, objectsChooserContainer);
                 }
             };
     }
 
-    private void refreshObjectChooser(AnalysisProcedureCriteria criteria,
+    private void refreshObjectChooser(DatasetOverlayImagesReference image,
             final Map<String, List<DatasetOverlayImagesReference>> datasetsByAnalysisProcMap,
             final LayoutContainer objectsChooserContainer)
     {
-        List<DatasetOverlayImagesReference> overlayDatasetsForOneAnalysisProc;
+        List<DatasetOverlayImagesReference> overlayDatasetsForOneAnalysisProc = new LinkedList<DatasetOverlayImagesReference>();
 
-        if (criteria.isAllProcedures())
+        if (image == null)
         {
-            overlayDatasetsForOneAnalysisProc = new LinkedList<DatasetOverlayImagesReference>();
             for (String ap : datasetsByAnalysisProcMap.keySet())
             {
                 overlayDatasetsForOneAnalysisProc.addAll(datasetsByAnalysisProcMap.get(ap));
@@ -276,13 +323,11 @@ class ChannelChooser
         }
         else
         {
-            String analysisProcedureCode = criteria.tryGetAnalysisProcedureCode();
-            overlayDatasetsForOneAnalysisProc = datasetsByAnalysisProcMap.get(analysisProcedureCode);
+            overlayDatasetsForOneAnalysisProc.add(image);
         }
 
         objectsChooserContainer.removeAll();
-        if (overlayDatasetsForOneAnalysisProc != null
-                && overlayDatasetsForOneAnalysisProc.size() > 0)
+        if (overlayDatasetsForOneAnalysisProc.size() > 0)
         {
             addOverlayChannelsChoosers(overlayDatasetsForOneAnalysisProc, objectsChooserContainer);
         }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImagingDatasetGuiUtils.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImagingDatasetGuiUtils.java
index f3c37f06c13c5c1bd278cd2c4b12bbb0bdf38eaf..bf5e98dfe521f5f7fbccda269b125aa6e8cdb0c4 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImagingDatasetGuiUtils.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImagingDatasetGuiUtils.java
@@ -518,7 +518,7 @@ class ImagingDatasetGuiUtils
         return refs;
     }
 
-    private static <T> SimpleModelComboBox<T> createDatasetChooserComboBox(
+    static <T> SimpleModelComboBox<T> createDatasetChooserComboBox(
             IMessageProvider messageProvider, List<T> items, List<String> labels,
             List<String> tooltips)
     {
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/utils/EntityTypeLabelUtils.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/utils/EntityTypeLabelUtils.java
index 2f57d5e4f31a597dce058f3e35dc8359b269b723..623e005fcaa9e9a7ba4a89d51047a5092f4b8d2c 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/utils/EntityTypeLabelUtils.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/utils/EntityTypeLabelUtils.java
@@ -34,13 +34,20 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConst
  */
 public class EntityTypeLabelUtils
 {
-    public final static List<String> createDatasetLabels(List<DatasetReference> datasetReferences,
+
+    public final static List<String> createDatasetLabels(List<? extends DatasetReference> datasetReferences,
             boolean withFileType)
+    {
+        return createDatasetLabels(datasetReferences, withFileType, false);
+    }
+
+    public final static List<String> createDatasetLabels(List<? extends DatasetReference> datasetReferences,
+            boolean withFileType, boolean useAnalysisProcedureInPlaceOfType)
     {
         List<String> labels = new ArrayList<String>(datasetReferences.size());
         for (DatasetReference datasetReference : datasetReferences)
         {
-            labels.add(createDatasetLabel(datasetReference, withFileType, null, true));
+            labels.add(createDatasetLabel(datasetReference, withFileType, null, true, useAnalysisProcedureInPlaceOfType));
         }
         return labels;
     }
@@ -96,17 +103,34 @@ public class EntityTypeLabelUtils
      */
     public static String createDatasetLabel(DatasetReference datasetReference,
             boolean withFileType, String analysisProcedure, boolean withDatasetCode)
+    {
+        return createDatasetLabel(datasetReference, withFileType, analysisProcedure, withDatasetCode, false);
+    }
+
+    public static String createDatasetLabel(DatasetReference datasetReference,
+            boolean withFileType, String analysisProcedure, boolean withDatasetCode, boolean useAnalysisProcedureInteadOfDataSetType)
     {
         String registrationDate = renderDate(datasetReference);
         return createDatasetLabel(datasetReference, withFileType, registrationDate,
-                analysisProcedure, withDatasetCode);
+                analysisProcedure, withDatasetCode, useAnalysisProcedureInteadOfDataSetType);
     }
 
     // private, just for tests
     static String createDatasetLabel(DatasetReference datasetReference, boolean withFileType,
-            String registrationDate, String analysisProcedure, boolean withDatasetCode)
+            String registrationDate, String analysisProcedure, boolean withDatasetCode, boolean useAnalysisProcedureInteadOfDataSetType)
     {
-        String typeLabel = getDatasetUserFriendlyTypeCode(datasetReference);
+        String typeLabel;
+        if (useAnalysisProcedureInteadOfDataSetType)
+        {
+            typeLabel = datasetReference.getAnalysisProcedure();
+            if (typeLabel == null)
+            {
+                typeLabel = "Unspecified Analysis Procedure";
+            }
+        } else
+        {
+            typeLabel = getDatasetUserFriendlyTypeCode(datasetReference);
+        }
         String fileType =
                 withFileType && datasetReference.getFileTypeCode() != null ? " ("
                         + datasetReference.getFileTypeCode() + ")" : "";
@@ -177,8 +201,8 @@ public class EntityTypeLabelUtils
     }
 
     /**
-     * Changes capitalization and replaces '_' wit ' '. Letters are made small, first letter gets
-     * capitalized if captalizeFirstLetter is true, e.g. 'COdE_XYZ' is changed to 'Code Xyz'.
+     * Changes capitalization and replaces '_' wit ' '. Letters are made small, first letter gets capitalized if captalizeFirstLetter is true, e.g.
+     * 'COdE_XYZ' is changed to 'Code Xyz'.
      */
     public static String formatAsTitle(String text, boolean captalizeFirstLetter)
     {
diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/utils/EntityTypeLabelUtilsTest.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/utils/EntityTypeLabelUtilsTest.java
index 089bd35906846684030dca49f43c82ae9856b110..6048abdf808ae42e1a9a4ec289c84ff3ff0e5020 100644
--- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/utils/EntityTypeLabelUtilsTest.java
+++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/utils/EntityTypeLabelUtilsTest.java
@@ -49,7 +49,7 @@ public class EntityTypeLabelUtilsTest extends AssertJUnit
         DatasetReference ref =
                 new DatasetReference(0, "123412342314-1234", typeCode, null, "DAT", null, null,
                         null, null, null, labelTest);
-        return EntityTypeLabelUtils.createDatasetLabel(ref, false, "2011-05-30", null, true);
+        return EntityTypeLabelUtils.createDatasetLabel(ref, false, "2011-05-30", null, true, false);
     }
 
     private String createLabel(String typeCode, boolean withFileType)
@@ -57,6 +57,6 @@ public class EntityTypeLabelUtilsTest extends AssertJUnit
         DatasetReference ref =
                 new DatasetReference(0, "123412342314-1234", typeCode, null, "DAT", null, null,
                         null, null, null, null);
-        return EntityTypeLabelUtils.createDatasetLabel(ref, withFileType, "2011-05-30", null, true);
+        return EntityTypeLabelUtils.createDatasetLabel(ref, withFileType, "2011-05-30", null, true, false);
     }
 }
\ No newline at end of file