diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbstractImageStorageProcessor.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbstractImageStorageProcessor.java
index 6a4e1f677cae917f1a7e0b9b7880153a7daeef78..61124ba7b4cb8d278f934aeccea9ed5bea9a01a6 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbstractImageStorageProcessor.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbstractImageStorageProcessor.java
@@ -252,6 +252,7 @@ abstract class AbstractImageStorageProcessor extends AbstractStorageProcessor im
             AbstractStorageProcessorTransaction
     {
         private IImagingQueryDAO dbTransaction;
+
         // used when HDF5 is used to store original data
         private boolean shouldDeleteOriginalDataOnCommit;
 
@@ -618,7 +619,8 @@ abstract class AbstractImageStorageProcessor extends AbstractStorageProcessor im
         if (imageDataSetInfo.isValid() == false)
         {
             throw ConfigurationFailureException
-                    .fromTemplate("Invalid image dataset info object, check if your jython script fills all the fields: "
+                    .fromTemplate("Invalid image dataset info object, check if your jython script fills all the required fields. "
+                            + "Or maybe the recognized files extensions is set incorrectly? Dataset: "
                             + imageDataSetInfo);
         }
         Geometry tileGeometry =
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/SimpleImageDataConfig.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/SimpleImageDataConfig.java
index dd4e9816b757c62911bdecd1b5b13ff4625c180a..221dd019dedaa820316fb591a462b582f388983a 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/SimpleImageDataConfig.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/SimpleImageDataConfig.java
@@ -101,6 +101,8 @@ abstract public class SimpleImageDataConfig
 
     private boolean generateThumbnailsWithImageMagic = false;
 
+    private boolean generateThumbnailsInHighQuality = false;
+
     private double allowedMachineLoadDuringThumbnailsGeneration = 1.0;
 
     private boolean storeChannelsOnExperimentLevel = false;
@@ -125,6 +127,7 @@ abstract public class SimpleImageDataConfig
             thumbnailsStorageFormat.setMaxWidth(getMaxThumbnailWidthAndHeight());
             thumbnailsStorageFormat.setMaxHeight(getMaxThumbnailWidthAndHeight());
             thumbnailsStorageFormat.setGenerateWithImageMagic(generateThumbnailsWithImageMagic);
+            thumbnailsStorageFormat.setHighQuality(generateThumbnailsInHighQuality);
             imageStorageConfiguraton.setThumbnailsStorageFormat(thumbnailsStorageFormat);
         }
         return imageStorageConfiguraton;
@@ -225,6 +228,15 @@ abstract public class SimpleImageDataConfig
         this.generateThumbnailsWithImageMagic = generateWithImageMagic;
     }
 
+    /**
+     * if true and thumbnails generation is switched on, thumbnails will be generated with high
+     * quality.
+     */
+    public void setGenerateHighQualityThumbnails(boolean highQualityThumbnails)
+    {
+        this.generateThumbnailsInHighQuality = highQualityThumbnails;
+    }
+
     /** Should all dataset in one experiment use the same channels? By default set to false. */
     public void setStoreChannelsOnExperimentLevel(boolean storeChannelsOnExperimentLevel)
     {
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/JythonPlateDataSetHandler.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/JythonPlateDataSetHandler.java
index 3f70572ad390632210079bf76d5ef4dd29e378fd..9caf65bc9e38690f34158c3df0c3e4ab465d77b5 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/JythonPlateDataSetHandler.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/JythonPlateDataSetHandler.java
@@ -86,7 +86,7 @@ public class JythonPlateDataSetHandler extends JythonTopLevelDataSetHandler<Data
         }
 
         /** a simple method to register the described image dataset in a separate transaction */
-        public void registerImageDataset(SimpleImageDataConfig imageDataSet,
+        public boolean registerImageDataset(SimpleImageDataConfig imageDataSet,
                 File incomingDatasetFolder,
                 DataSetRegistrationService<ImageDataSetInformation> service)
         {
@@ -96,7 +96,7 @@ public class JythonPlateDataSetHandler extends JythonTopLevelDataSetHandler<Data
                     service.transaction(incomingDatasetFolder, imageDatasetFactory);
             IDataSet newDataset = transaction.createNewDataSet(imageDatasetDetails);
             transaction.moveFile(incomingDatasetFolder.getPath(), newDataset);
-            transaction.commit();
+            return transaction.commit();
         }
 
         // ----
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/SimpleImageDataSetRegistrator.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/SimpleImageDataSetRegistrator.java
index 1fb9d628ff5f0ecc089b431b2e835c8bd8242161..ca07053cf9304b6f8f1e252a1082e08fd1f00c97 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/SimpleImageDataSetRegistrator.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/SimpleImageDataSetRegistrator.java
@@ -22,6 +22,8 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+import ch.systemsx.cisd.common.collections.CollectionUtils;
+import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.common.filesystem.FileOperations;
 import ch.systemsx.cisd.common.filesystem.FileUtilities;
 import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationDetails;
@@ -117,6 +119,13 @@ public class SimpleImageDataSetRegistrator
             imageTokens.ensureValid();
             imageTokensList.add(new ImageTokensWithPath(imageTokens, imageRelativePath));
         }
+        if (imageTokensList.size() == 0)
+        {
+            throw UserFailureException.fromTemplate(
+                    "Incoming directory '%s' contains no images with extensions %s!",
+                    incomingDirectory.getPath(),
+                    CollectionUtils.abbreviate(imageDataSet.getRecognizedImageExtensions(), -1));
+        }
         return imageTokensList;
     }