diff --git a/common/source/java/ch/systemsx/cisd/common/image/IntensityRescaling.java b/common/source/java/ch/systemsx/cisd/common/image/IntensityRescaling.java
index d15f37f59f868d624dcb1573fdc0622c3ab2770c..b65965212d664fa8e8e5a66ae31d46432b012dea 100644
--- a/common/source/java/ch/systemsx/cisd/common/image/IntensityRescaling.java
+++ b/common/source/java/ch/systemsx/cisd/common/image/IntensityRescaling.java
@@ -337,6 +337,11 @@ public class IntensityRescaling
 
     }
     
+    /**
+     * Converts a {@link BufferedImage} instance into a {@link Pixels} instance.
+     *
+     * @author Franz-Josef Elmer
+     */
     public static interface IImageToPixelsConverter
     {
         public Pixels convert(BufferedImage image);
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 69806d4922e9e7636b6b3331ba5f39a5872f81f6..5ebe916003319c9a11f40e082a3c8cc6483fe699 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
@@ -70,8 +70,12 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.Color
 /**
  * Utility classes to create an image of a specified size containing one channel or a subset of all
  * channels.
+ * <p>
+ * In autumn 2014 this class went throw a bigger refactoring in order to make the code more understandable. 
+ * The images created by this class are the result of little processing pipelines. 
  * 
  * @author Tomasz Pylak
+ * @author Franz-Josef Elmer
  */
 public class ImageChannelsUtils
 {
@@ -91,6 +95,10 @@ public class ImageChannelsUtils
         public BufferedImage create(AbsoluteImageReference imageContent);
     }
 
+    /**
+     * Data class which contains an {@link AbsoluteImageReference} and its corresponding image
+     * which is often no longer the unchanged image from {@link AbsoluteImageReference#getUnchangedImage()}.
+     */
     private static class ImageWithReference
     {
         private BufferedImage image;
@@ -386,9 +394,17 @@ public class ImageChannelsUtils
         return null;
     }
     /**
-     * @param threshold
-     * @param useMergedChannelsTransformation sometimes we can have a single image which contain all
-     *            channels merged. In this case a different transformation will be applied to it.
+     * Calculates from the specified image reference (i.e. image file content and meta data from imaging database)
+     * an 8-bit colored gray image for display purposes. This is done by the following steps:
+     * <ol>
+     * <li>Load the unchanged image from the file content. This done by {@link ImageUtil#loadUnchangedImage(IHierarchicalContentNode, String, String, String, ch.systemsx.cisd.imagereaders.IReadParams)}.
+     * <li>Re-scale intensities to 8-bit if at least one color component has more than 8 bit. This is done by {@link IntensityRescaling}.
+     * <li>Re-size to the requested size. This is done by {@link ImageUtil#rescale(BufferedImage, int, int, boolean, boolean, ch.systemsx.cisd.common.image.IntensityRescaling.IImageToPixelsConverter)}.
+     * <li>Extract the color component, if specified.
+     * <li>Apply any transformation as revealed from the imaging database. This can include user-specified intensity ranges.
+     * If there is no transformation in the imaging database {@link AutoRescaleIntensityImageTransformerFactory} is used.
+     * <li>Finally the gray image is colored by the corresponding channel color.
+     * </ol>
      */
     private static BufferedImage calculateAndTransformSingleImageForDisplay(
             AbsoluteImageReference imageReference, ImageTransformationParams transformationInfo,
@@ -475,6 +491,15 @@ public class ImageChannelsUtils
         }
     }
 
+    /**
+     * Creates a colored image by merging at least two gray images. This done by the following steps:
+     * <ol>
+     * <li>The images are loaded a processed similar to {@link #calculateAndTransformSingleImageForDisplay(AbsoluteImageReference, ImageTransformationParams, Float)}.
+     * <li>The processed images (colored gray 8-bit images) are merged.
+     * <li>The merged image is transformed either by a transformation found in imaging database or
+     * by an intensity range re-scaling transformation. 
+     * </ol>
+     */
     private static BufferedImage mergeChannels(List<AbsoluteImageReference> imageReferences,
             ImageTransformationParams transformationInfo,
             IImageTransformerFactory mergedChannelTransformationOrNull)
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageLoadingHelper.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageLoadingHelper.java
index 2ed25e31b9420446c124bd81a0c34efff81bee79..9c7700e7b527f888b81d91c042cbb8b36792eb61 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageLoadingHelper.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageLoadingHelper.java
@@ -36,7 +36,11 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.IHierarchicalContentProvider;
 import ch.systemsx.cisd.openbis.dss.generic.shared.dto.Size;
 
 /**
- * Helper class for loading images using an {@link IImagingLoaderStrategy}.
+ * Helper class for loading images using an {@link IImagingLoaderStrategy}. Actually this class
+ * doesn't load images but it creates {@link AbsoluteImageReference} instances which contain lazily loaded images 
+ * and meta data from the imaging database.
+ * <p>
+ * This code has been refactored out of {@link ImageChannelsUtils} in autumn 2014.
  *
  * @author Franz-Josef Elmer
  */