diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateMaterialLocationsLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateMaterialLocationsLoader.java
index ac9e9b66bcedf07a57886d665a57352b184d9ae4..e25c459f200095321d86abb57b90c1d0ecd47261 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateMaterialLocationsLoader.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateMaterialLocationsLoader.java
@@ -363,6 +363,11 @@ public class PlateMaterialLocationsLoader
         List<WellContent> clonedWellContents = new ArrayList<WellContent>();
 
         List<ExternalData> featureVectoreDatasets = plateToFeatureVectoreDatasetMap.get(plateId);
+        List<ExternalData> childlessImageDatasets = plateToChildlessImageDatasetMap.get(plateId);
+        DatasetImagesReference singleImageDatasetOrNull =
+                tryGetSingleImageDataset(childlessImageDatasets, imageParams);
+        boolean singleImageAlreadyUsed = false;
+
         if (featureVectoreDatasets != null)
         {
             for (ExternalData featureVectoreDataset : featureVectoreDatasets)
@@ -371,6 +376,14 @@ public class PlateMaterialLocationsLoader
                         ScreeningUtils.createDatasetReference(featureVectoreDataset);
                 DatasetImagesReference imagesDatasetReference =
                         tryGetImageDatasetReference(featureVectoreDataset, imageParams);
+                if (imagesDatasetReference == null && singleImageDatasetOrNull != null)
+                {
+                    // If the plate has only one childless image dataset, then we assume that it
+                    // must have been the one which has been analysed. We need such a heuristic
+                    // because some analysis dataset may have no parent dataset assigned.
+                    imagesDatasetReference = singleImageDatasetOrNull;
+                    singleImageAlreadyUsed = true;
+                }
                 clonedWellContents.add(wellContent.cloneWithDatasets(imagesDatasetReference,
                         featureVectoreDatasetReference));
             }
@@ -378,8 +391,7 @@ public class PlateMaterialLocationsLoader
 
         // there can be more than one dataset with images for each well - in such a case we will
         // have one well content duplicated for each dataset
-        List<ExternalData> childlessImageDatasets = plateToChildlessImageDatasetMap.get(plateId);
-        if (childlessImageDatasets != null)
+        if (childlessImageDatasets != null && singleImageAlreadyUsed == false)
         {
             for (ExternalData childlessImageDataset : childlessImageDatasets)
             {
@@ -391,6 +403,19 @@ public class PlateMaterialLocationsLoader
         return clonedWellContents;
     }
 
+    private static DatasetImagesReference tryGetSingleImageDataset(
+            List<ExternalData> childlessImageDatasets, Map<String, PlateImageParameters> imageParams)
+    {
+        if (childlessImageDatasets != null && childlessImageDatasets.size() == 1)
+        {
+            ExternalData singleImageDataset = childlessImageDatasets.get(0);
+            return createDatasetImagesReference(singleImageDataset, imageParams);
+        } else
+        {
+            return null;
+        }
+    }
+
     private static DatasetImagesReference tryGetImageDatasetReference(
             ExternalData featureVectoreDataset, Map<String, PlateImageParameters> imageParams)
     {