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 eeb670523f79ae48c0cc728b9dd3c0585b840ffe..b1b09962833dbbc500870db6e8845393f6a05664 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
@@ -39,6 +39,8 @@ import javax.imageio.ImageIO;
 import org.apache.commons.io.FilenameUtils;
 
 import ar.com.hjg.pngj.ImageInfo;
+import ar.com.hjg.pngj.ImageLine;
+import ar.com.hjg.pngj.ImageLineHelper;
 import ar.com.hjg.pngj.PngFilterType;
 import ar.com.hjg.pngj.PngWriter;
 
@@ -328,19 +330,22 @@ public class ImageUtil
     {
         final int cols = image.getWidth();
         final int rows = image.getHeight();
+        int bitDepth = image.getColorModel().getComponentSize(0);
+        ImageInfo imgInfo = new ImageInfo(cols, rows, bitDepth, false, false, false);
         PngWriter png =
-                new PngWriter(out, new ImageInfo(cols, rows, image.getColorModel()
-                        .getComponentSize(0), false, true, false));
+                new PngWriter(out, imgInfo);
         png.setFilterType(filterType == null ? PngFilterType.FILTER_DEFAULT : filterType);
         png.setCompLevel(compressionLevel == -1 ? 6 : compressionLevel);
-        int[] rowData = new int[cols];
+        ImageLine imageLine = new ImageLine(imgInfo);
         for (int row = 0; row < rows; ++row)
         {
             for (int col = 0; col < cols; ++col)
             {
-                rowData[col] = image.getRaster().getSample(col, row, 0);
+                int pixel = image.getRGB(col, row);
+                ImageLineHelper.setPixelRGB8(imageLine, col, pixel);
             }
-            png.writeRow(rowData, row);
+            imageLine.setRown(row);
+            png.writeRow(imageLine);
         }
         png.end();
     }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/Hdf5ThumbnailGenerator.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/Hdf5ThumbnailGenerator.java
index 1067b4f8431a00cbffb35a6e1dd6e32530936d64..bb018f9b2bda0fa57842afea16180e90c00e86e1 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/Hdf5ThumbnailGenerator.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/Hdf5ThumbnailGenerator.java
@@ -26,8 +26,6 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 
-import javax.imageio.ImageIO;
-
 import org.apache.log4j.Logger;
 
 import ch.systemsx.cisd.base.utilities.OSUtilities;
@@ -197,9 +195,7 @@ class Hdf5ThumbnailGenerator implements IHDF5WriterClient
                 ImageUtil.rescale(image, thumbnailsStorageFormat.getMaxWidth(),
                         thumbnailsStorageFormat.getMaxHeight(), false,
                         thumbnailsStorageFormat.isHighQuality());
-        // TODO 2011-08-31, Franz-Josef Elmer: Uncomment when new fast method is working correctly for colored images
-//        ImageUtil.writeImageToPng(thumbnail, bufferOutputStream);
-        ImageIO.write(thumbnail, "png", bufferOutputStream);
+        ImageUtil.writeImageToPng(thumbnail, bufferOutputStream);
         return bufferOutputStream.toByteArray();
     }
 
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/transformations/ConvertToolImageTransformer.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/transformations/ConvertToolImageTransformer.java
index 171285ed5ea347273f5bb6f00dbdebc1f76d436c..dc165b41fccaefaaf2a04366eface172644a3921 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/transformations/ConvertToolImageTransformer.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/transformations/ConvertToolImageTransformer.java
@@ -30,8 +30,6 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import javax.imageio.ImageIO;
-
 import org.apache.log4j.Logger;
 
 import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
@@ -50,6 +48,7 @@ import ch.systemsx.cisd.imagereaders.ImageID;
 import ch.systemsx.cisd.imagereaders.ImageReaderConstants;
 import ch.systemsx.cisd.imagereaders.ImageReaderFactory;
 import ch.systemsx.cisd.openbis.dss.etl.dto.api.v1.transformations.ConvertToolImageTransformerFactory.ToolChoice;
+import ch.systemsx.cisd.openbis.dss.generic.shared.utils.ImageUtil;
 
 /**
  * An {@link IStreamingImageTransformer} using the convert command line tool for transformations.
@@ -128,10 +127,7 @@ public class ConvertToolImageTransformer implements IStreamingImageTransformer
     {
         try
         {
-            // TODO 2011-08-31, Franz-Josef Elmer: Uncomment when new fast method is working
-            // correctly for colored images
-            // byte[] input = ImageUtil.imageToPngFast(image);
-            byte[] input = toByteArray(image);
+            byte[] input = ImageUtil.imageToPngFast(image);
             byte[] output = transform(input);
             return toBufferedImage(output);
         } catch (IOException ioex)
@@ -265,11 +261,4 @@ public class ConvertToolImageTransformer implements IStreamingImageTransformer
         return result;
     }
 
-    private byte[] toByteArray(BufferedImage image) throws IOException
-    {
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        ImageIO.write(image, PNG, bos);
-        return bos.toByteArray();
-    }
-
 }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageChannelsUtils.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageChannelsUtils.java
index 5b0f23c4d72eb7f264f8cd532c8525e5647f3587..4bef593d90d88f3833144d992085db663daf346b 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageChannelsUtils.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageChannelsUtils.java
@@ -869,22 +869,7 @@ public class ImageChannelsUtils
     
     private static IContent createPngContent(BufferedImage image, String nameOrNull)
     {
-        // TODO 2011-08-31, Franz-Josef Elmer: Uncomment when new fast method is working correctly for colored images
-//        final byte[] output = ImageUtil.imageToPngFast(image);
-        final byte[] output = writeBufferImageAsPng(image).toByteArray();
+        final byte[] output = ImageUtil.imageToPngFast(image);
         return new ByteArrayBasedContent(output, nameOrNull);
     }
-
-  private static ByteArrayOutputStream writeBufferImageAsPng(BufferedImage image)
-    {
-        ByteArrayOutputStream output = new ByteArrayOutputStream();
-        try
-        {
-            ImageIO.write(image, "png", output);
-        } catch (IOException ex)
-        {
-            throw EnvironmentFailureException.fromTemplate("Cannot encode image.", ex);
-        }
-        return output;
-    }
 }