diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/IScreeningBusinessObjectFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/IScreeningBusinessObjectFactory.java
index 97248a938d60e84eea8d06f04dc51db3fbf75f88..4af7433834f46d06ac25307e678b2523863d881d 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/IScreeningBusinessObjectFactory.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/IScreeningBusinessObjectFactory.java
@@ -24,6 +24,7 @@ import ch.systemsx.cisd.openbis.generic.server.business.bo.ISampleBO;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.datasetlister.IDatasetLister;
 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.shared.dto.ExternalDataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.IHCSDatasetLoader;
 
@@ -34,7 +35,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.IHCSDatasetLoade
  */
 public interface IScreeningBusinessObjectFactory
 {
-    public IHCSDatasetLoader createHCSDatasetLoader(final String datasetPermId);
+    public IHCSDatasetLoader createHCSDatasetLoader(final ExternalDataPE dataSet);
 
     public ISampleBO createSampleBO(final Session session);
 
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 94b91bfaad93e41958373e687fa7523561521535..75439defbcc4ca03608575a03f7f47d0ed4daaea 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
@@ -28,6 +28,7 @@ import ch.systemsx.cisd.openbis.generic.server.business.bo.ISampleBO;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.datasetlister.IDatasetLister;
 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.shared.dto.ExternalDataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
 import ch.systemsx.cisd.openbis.plugin.AbstractPluginBusinessObjectFactory;
 import ch.systemsx.cisd.openbis.plugin.screening.server.dataaccess.IScreeningDAOFactory;
@@ -52,9 +53,10 @@ public final class ScreeningBusinessObjectFactory extends AbstractPluginBusiness
     {
     }
 
-    public final IHCSDatasetLoader createHCSDatasetLoader(final String datasetPermId)
+    public IHCSDatasetLoader createHCSDatasetLoader(ExternalDataPE dataSet)
     {
-        return new HCSDatasetLoader(specificDAOFactory.getImagingQueryDAO(datasetPermId), datasetPermId);
+        String dssCode = dataSet.getDataStore().getCode();
+        return new HCSDatasetLoader(specificDAOFactory.getImagingQueryDAO(dssCode), dataSet.getCode());
     }
 
     public final ISampleBO createSampleBO(final Session session)
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/IScreeningDAOFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/IScreeningDAOFactory.java
index bf74bea5e8ed588481fcf304e5aab6e81882b413..f3b0d4d128628edf4ac7537214758cad02639cd6 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/IScreeningDAOFactory.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/IScreeningDAOFactory.java
@@ -25,5 +25,5 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.IImag
  */
 public interface IScreeningDAOFactory
 {
-    public IImagingQueryDAO getImagingQueryDAO(String datasetPermId);
+    public IImagingQueryDAO getImagingQueryDAO(String dssCode);
 }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/db/ScreeningDAOFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/db/ScreeningDAOFactory.java
index f8abfc1f196b5812d220033507a1e1df75005345..c7dbaaafb5a94b1994897712f88cc4ef068a996c 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/db/ScreeningDAOFactory.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/db/ScreeningDAOFactory.java
@@ -42,8 +42,9 @@ public class ScreeningDAOFactory implements IScreeningDAOFactory
             LogFactory.getLogger(LogCategory.OPERATION, ScreeningDAOFactory.class);
 
     private final IDataSourceProvider dataSourceProvider;
-    
-    private final Map<DataSource, IImagingQueryDAO> daos = new HashMap<DataSource, IImagingQueryDAO>();
+
+    private final Map<DataSource, IImagingQueryDAO> daos =
+            new HashMap<DataSource, IImagingQueryDAO>();
 
     public ScreeningDAOFactory(IDataSourceProvider dataSourceProvider)
     {
@@ -51,13 +52,14 @@ public class ScreeningDAOFactory implements IScreeningDAOFactory
         if (operationLog.isInfoEnabled())
         {
             operationLog.info("DAO factory for Screening created. Data source provider: "
-                    + dataSourceProvider.getClass());
+                    + dataSourceProvider.getClass().getName());
         }
     }
 
-    public IImagingQueryDAO getImagingQueryDAO(String datasetPermId)
+    public IImagingQueryDAO getImagingQueryDAO(String dssCode)
     {
-        DataSource dataSource = dataSourceProvider.getDataSourceByDataSetCode(datasetPermId, TECHNOLOGY);
+        DataSource dataSource =
+                dataSourceProvider.getDataSourceByDataStoreServerCode(dssCode, TECHNOLOGY);
         IImagingQueryDAO dao = daos.get(dataSource);
         if (dao == null)
         {
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/GenePlateLocationsLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/GenePlateLocationsLoader.java
index 3db21a5002b51faff378d3b3d195823f69bc5b8a..6423a27e8aef2be967d758c899ba0519e0a1d153 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/GenePlateLocationsLoader.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/GenePlateLocationsLoader.java
@@ -197,27 +197,33 @@ public class GenePlateLocationsLoader
     }
 
     private Map<String/* dataset code */, PlateImageParameters> loadImagesReport(
-            List<ExternalDataPE> usedDatasets)
+            List<ExternalDataPE> usedDataSets)
     {
-        List<String> datasetCodes = extractDatasetCodes(usedDatasets);
         List<PlateImageParameters> imageParameters = new ArrayList<PlateImageParameters>();
-        for (String datasetCode : datasetCodes)
+        List<ExternalDataPE> distinctDataSets = getDistinctDataSets(usedDataSets);
+        for (ExternalDataPE dataSet : distinctDataSets)
         {
             final IHCSDatasetLoader loader =
-                    businessObjectFactory.createHCSDatasetLoader(datasetCode);
+                    businessObjectFactory.createHCSDatasetLoader(dataSet);
             imageParameters.add(PlateImageParametersFactory.create(loader));
         }
         return asDatasetToParamsMap(imageParameters);
     }
-
-    private static List<String> extractDatasetCodes(List<ExternalDataPE> usedDatasets)
+    
+    private List<ExternalDataPE> getDistinctDataSets(List<ExternalDataPE> usedDataSets)
     {
-        Set<String> codes = new HashSet<String>();
-        for (ExternalDataPE dataset : usedDatasets)
+        List<ExternalDataPE> result = new ArrayList<ExternalDataPE>();
+        Set<String> dataSetCodes = new HashSet<String>();
+        for (ExternalDataPE dataSet : usedDataSets)
         {
-            codes.add(dataset.getCode());
+            String code = dataSet.getCode();
+            if (dataSetCodes.contains(code) == false)
+            {
+                dataSetCodes.add(code);
+                result.add(dataSet);
+            }
         }
-        return new ArrayList<String>(codes);
+        return result;
     }
 
     private static Map<String/* dataset code */, PlateImageParameters> asDatasetToParamsMap(
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateContentLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateContentLoader.java
index 08f94ca9fb703d10eddbe2c66fa3049c31b44ad0..aedef42cfdd1b789f780af424b24e60bae53a824 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateContentLoader.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateContentLoader.java
@@ -273,7 +273,7 @@ public class PlateContentLoader
             IExternalDataTable externalDataTable)
     {
         final IHCSDatasetLoader loader =
-                businessObjectFactory.createHCSDatasetLoader(dataset.getCode());
+                businessObjectFactory.createHCSDatasetLoader(dataset);
         return PlateImageParametersFactory.create(loader);
     }