diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/ImageUtil.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/ImageUtil.java
index 55d4f5285e3109f32a0687576b9a55ddb2df3705..1b776d0f5f6440aeeb9c5303061241a3adefdf62 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/ImageUtil.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/ImageUtil.java
@@ -43,6 +43,7 @@ import ch.systemsx.cisd.common.io.IContent;
 import ch.systemsx.cisd.common.io.IHierarchicalContentNode;
 import ch.systemsx.cisd.common.utilities.DataTypeUtil;
 import ch.systemsx.cisd.imagereaders.IImageReader;
+import ch.systemsx.cisd.imagereaders.IReadParams;
 import ch.systemsx.cisd.imagereaders.ImageReaderConstants;
 import ch.systemsx.cisd.imagereaders.ImageReaderFactory;
 import ch.systemsx.cisd.imagereaders.TiffReadParams;
@@ -202,7 +203,7 @@ public class ImageUtil
      *             identifying supported image format.
      */
     public static BufferedImage loadImage(IContent content, Integer pageOrNull,
-            String imageLibraryNameOrNull, String imageLibraryReaderNameOrNull)
+            String imageLibraryNameOrNull, String imageLibraryReaderNameOrNull, IReadParams params)
     {
         assert (imageLibraryReaderNameOrNull == null || imageLibraryNameOrNull != null) : "if image reader "
                 + "is specified then library name should be specified as well";
@@ -213,7 +214,7 @@ public class ImageUtil
                             imageLibraryReaderNameOrNull);
             if (reader != null)
             {
-                return reader.readImage(content.getReadOnlyRandomAccessFile(), null);
+                return reader.readImage(content.getReadOnlyRandomAccessFile(), params);
             }
         }
         return loadImageGuessingLibrary(content, pageOrNull);
@@ -285,7 +286,7 @@ public class ImageUtil
     @Private
     static BufferedImage loadImage(IContent content)
     {
-        return loadImage(content, 0, null, null);
+        return loadImage(content, 0, null, null, null);
     }
 
     /**
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbsoluteImageReference.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbsoluteImageReference.java
index 11d3c5702309c2b5829e5df8af2842c58dc1d156..030dbe2f8b3b748b93190dce70332197bd45960f 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbsoluteImageReference.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbsoluteImageReference.java
@@ -115,7 +115,7 @@ public class AbsoluteImageReference extends AbstractImageReference
             imageLibraryReaderNameOrNull = imageLibraryOrNull.getReaderName();
         }
         return ImageUtil.loadImage(content, pageOrNull, imageLibraryNameOrNull,
-                imageLibraryReaderNameOrNull);
+                imageLibraryReaderNameOrNull, null);
     }
 
     public RequestedImageSize getRequestedSize()
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ColorRangeCalculator.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ColorRangeCalculator.java
index 19c53444bf871fe4ae6d38bb2de44ea13c29c186..a153bc31b5a04009ef756d2f03d593abc9d02ce5 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ColorRangeCalculator.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ColorRangeCalculator.java
@@ -18,12 +18,15 @@ package ch.systemsx.cisd.openbis.dss.generic.server.plugins;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import ch.systemsx.cisd.common.io.FileBasedContent;
-import ch.systemsx.cisd.openbis.dss.generic.shared.utils.ImageUtil;
+import ch.systemsx.cisd.imagereaders.IImageReader;
+import ch.systemsx.cisd.imagereaders.ImageReaderConstants;
+import ch.systemsx.cisd.imagereaders.ImageReaderFactory;
+import ch.systemsx.cisd.imagereaders.TiffReadParams;
 
 /**
  * Helper methods and standalone program to calculate the range of brightness of a collection of
@@ -122,21 +125,55 @@ public class ColorRangeCalculator
         return new ImagePixelsRange(minColor, maxColor);
     }
 
-    public static ImagePixelsRange calculatePixelsRange(List<File> imageFiles)
+    public static ImagePixelsRange calculatePixelsRange(List<File> imageFiles) throws IOException
     {
         Collection<ImagePixelsRange> ranges =
                 new ArrayList<ColorRangeCalculator.ImagePixelsRange>();
         for (File imageFile : imageFiles)
         {
-            BufferedImage image =
-                    ImageUtil.loadImage(new FileBasedContent(imageFile), null, null, null);
+            BufferedImage image = loadImage(imageFile);
             ImagePixelsRange range = calculatePixelsRange(image, 0, Integer.MAX_VALUE);
             ranges.add(range);
         }
         return calculateOverlapRange(ranges);
     }
 
-    public static void main(String[] args)
+    private static BufferedImage tryRead(String libraryName, File file)
+    {
+        IImageReader reader =
+                ImageReaderFactory.tryGetImageReaderForFile(libraryName, file.getPath());
+        TiffReadParams params = new TiffReadParams();
+        params.setAllow16BitGrayscaleModel(true);
+        if (reader != null)
+        {
+            // System.err.println("Used reader: " + reader.getName());
+            return reader.readImage(file, params);
+        } else
+        {
+            return null;
+        }
+    }
+
+    private static BufferedImage loadImage(File file) throws IOException
+    {
+        String[] libraries =
+                new String[]
+                    { ImageReaderConstants.JAI_LIBRARY, ImageReaderConstants.IMAGEIO_LIBRARY,
+                            ImageReaderConstants.IMAGEJ_LIBRARY,
+                            ImageReaderConstants.BIOFORMATS_LIBRARY };
+        for (String libraryName : libraries)
+        {
+            BufferedImage image = tryRead(libraryName, file);
+            if (image != null)
+            {
+                // System.err.println("Used library: " + libraryName);
+                return image;
+            }
+        }
+        throw new IOException("Cannot read image " + file.getPath());
+    }
+
+    public static void main(String[] args) throws IOException
     {
         if (args.length == 0)
         {