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 59bb690262907089a46467eda1efa5d5c88d30a5..36dab6e9da9d713d9dc74707ac71ee9a6ff70258 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
@@ -94,38 +94,38 @@ public class ImageUtil
             handle.mark(MAX_READ_AHEAD);
             try
             {
-                return loadJavaAdvancedImagingTiff(handle, imageID);
-            } catch (RuntimeException ex)
+                return loadWithBioFormats(handle, imageID);
+            } catch (RuntimeException ex1)
             {
-                if (imageID.equals(ImageID.NULL))
+                try
                 {
-                    handle.reset();
-                    // There are some TIFF files which cannot be opened by JAI, try ImageJ
-                    // instead...
-                    return loadWithImageJ(handle);
-                } else
+                    return loadJavaAdvancedImagingTiff(handle, imageID);
+                } catch (RuntimeException ex2)
                 {
-                    throw ex;
+                    if (imageID.equals(ImageID.NULL))
+                    {
+                        handle.reset();
+                        // There are some TIFF files which cannot be opened by JAI, try ImageJ
+                        // instead...
+                        return loadWithImageJ(handle);
+                    } else
+                    {
+                        throw ex2;
+                    }
                 }
             }
         }
+    }
 
-        private BufferedImage loadWithImageJ(IRandomAccessFile handle)
-        {
-            operationLog.debug("Load tiff image using ImageJ");
-            String readerName = "tiff";
-            IImageReader imageReader =
-                    ImageReaderFactory
-                            .tryGetReader(ImageReaderConstants.IMAGEJ_LIBRARY, readerName);
-            if (imageReader == null)
-            {
-                throw new IllegalStateException(String.format(
-                        "There is no reader '%s' in image library '%s'.", readerName,
-                        ImageReaderConstants.IMAGEJ_LIBRARY));
-            }
-            return imageReader.readImage(handle, ImageID.NULL, null);
+    private static BufferedImage loadWithImageJ(IRandomAccessFile handle)
+    {
+        return loadWithLibrary(handle, ImageID.NULL, ImageReaderConstants.IMAGEJ_LIBRARY, "tiff");
+    }
 
-        }
+    private static BufferedImage loadWithBioFormats(IRandomAccessFile handle, ImageID imageID)
+    {
+        return loadWithLibrary(handle, imageID, ImageReaderConstants.BIOFORMATS_LIBRARY,
+                "TiffDelegateReader");
     }
 
     /**
@@ -134,18 +134,22 @@ public class ImageUtil
     public static BufferedImage loadJavaAdvancedImagingTiff(IRandomAccessFile handle,
             ImageID imageID) throws EnvironmentFailureException
     {
-        operationLog.debug("Load tiff image using JAI");
-        IImageReader imageReader =
-                ImageReaderFactory.tryGetReader(ImageReaderConstants.JAI_LIBRARY, "tiff");
+        return loadWithLibrary(handle, imageID, ImageReaderConstants.JAI_LIBRARY, "tiff");
+    }
+
+    private static BufferedImage loadWithLibrary(IRandomAccessFile handle, ImageID imageIDOrNull,
+            String libraryName, String readerName)
+    {
+        operationLog.debug("Load tiff image using " + libraryName);
+        IImageReader imageReader = ImageReaderFactory.tryGetReader(libraryName, readerName);
         if (imageReader == null)
         {
-            throw EnvironmentFailureException
-                    .fromTemplate("Cannot find JAI image decoder for TIFF files.");
+            throw new IllegalStateException(String.format(
+                    "There is no reader '%s' in image library '%s'.", readerName, libraryName));
         }
-
         try
         {
-            return imageReader.readImage(handle, imageID, null);
+            return imageReader.readImage(handle, imageIDOrNull, null);
         } catch (Exception ex)
         {
             throw EnvironmentFailureException.fromTemplate("Cannot decode image.", ex);