diff --git a/coders/fax.c b/coders/fax.c
index f424923..665b2e4 100644
--- a/coders/fax.c
+++ b/coders/fax.c
@@ -40,6 +40,7 @@
   Include declarations.
 */
 #include "MagickCore/studio.h"
+#include "MagickCore/attribute.h"
 #include "MagickCore/blob.h"
 #include "MagickCore/blob-private.h"
 #include "MagickCore/colormap.h"
@@ -330,7 +331,8 @@
     /*
       Convert MIFF to monochrome.
     */
-    if (IssRGBColorspace(image->colorspace) == MagickFalse)
+    if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+        (IsImageGray(image,exception) == MagickFalse))
       (void) TransformImageColorspace(image,sRGBColorspace,exception);
     status=HuffmanEncodeImage(write_info,image,image,exception);
     if (GetNextImageInList(image) == (Image *) NULL)
diff --git a/coders/fits.c b/coders/fits.c
index dfe5be9..1af8d9c 100644
--- a/coders/fits.c
+++ b/coders/fits.c
@@ -636,6 +636,9 @@
   status=OpenBlob(image_info,image,WriteBinaryBlobMode,exception);
   if (status == MagickFalse)
     return(status);
+  if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+      (IsImageGray(image,exception) == MagickFalse))
+    (void) TransformImageColorspace(image,sRGBColorspace,exception);
   /*
     Allocate image memory.
   */
@@ -737,8 +740,6 @@
     }
   else
     {
-      if (IssRGBColorspace(image->colorspace) == MagickFalse)
-        (void) TransformImageColorspace(image,sRGBColorspace,exception);
       length=GetQuantumExtent(image,quantum_info,RedQuantum);
       for (y=(ssize_t) image->rows-1; y >= 0; y--)
       {
diff --git a/coders/fpx.c b/coders/fpx.c
index 67c5b76..3e1e841 100644
--- a/coders/fpx.c
+++ b/coders/fpx.c
@@ -853,6 +853,9 @@
   status=OpenBlob(image_info,image,WriteBinaryBlobMode,exception);
   if (status == MagickFalse)
     return(status);
+  if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+      (IsImageGray(image,exception) == MagickFalse))
+    (void) TransformImageColorspace(image,sRGBColorspace,exception);
   (void) CloseBlob(image);
   /*
     Initialize FPX toolkit.
@@ -873,9 +876,6 @@
       colorspace.numberOfComponents=1;
       colorspace.theComponents[0].myColor=MONOCHROME;
     }
-  else
-    if (IssRGBColorspace(image->colorspace) == MagickFalse)
-      (void) TransformImageColorspace(image,sRGBColorspace,exception);
   background_color.color1_value=0;
   background_color.color2_value=0;
   background_color.color3_value=0;
diff --git a/coders/gray.c b/coders/gray.c
index 2072309..ce601f3 100644
--- a/coders/gray.c
+++ b/coders/gray.c
@@ -40,6 +40,7 @@
   Include declarations.
 */
 #include "MagickCore/studio.h"
+#include "MagickCore/attribute.h"
 #include "MagickCore/blob.h"
 #include "MagickCore/blob-private.h"
 #include "MagickCore/cache.h"
@@ -411,7 +412,8 @@
     /*
       Write grayscale pixels.
     */
-    if (IssRGBColorspace(image->colorspace) == MagickFalse)
+    if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+        (IsImageGray(image,exception) == MagickFalse))
       (void) TransformImageColorspace(image,sRGBColorspace,exception);
     quantum_type=GrayQuantum;
     quantum_info=AcquireQuantumInfo(image_info,image);
diff --git a/coders/jbig.c b/coders/jbig.c
index 9d11b8f..36ca5b4 100644
--- a/coders/jbig.c
+++ b/coders/jbig.c
@@ -446,7 +446,8 @@
     /*
       Allocate pixel data.
     */
-    if (IssRGBColorspace(image->colorspace) == MagickFalse)
+    if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+        (IsImageGray(image,exception) == MagickFalse))
       (void) TransformImageColorspace(image,sRGBColorspace,exception);
     number_packets=(image->columns+7)/8;
     pixels=(unsigned char *) AcquireQuantumMemory(number_packets,
diff --git a/coders/jp2.c b/coders/jp2.c
index 47b3b80..18c36c5 100644
--- a/coders/jp2.c
+++ b/coders/jp2.c
@@ -911,7 +911,8 @@
   /*
     Initialize JPEG 2000 API.
   */
-  if (IssRGBColorspace(image->colorspace) == MagickFalse)
+  if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+      (IsImageGray(image,exception) == MagickFalse))
     (void) TransformImageColorspace(image,sRGBColorspace,exception);
   jp2_stream=JP2StreamManager(image);
   if (jp2_stream == (jas_stream_t *) NULL)
diff --git a/coders/mat.c b/coders/mat.c
index a76b4b7..5e94865 100644
--- a/coders/mat.c
+++ b/coders/mat.c
@@ -1239,11 +1239,10 @@
   scene=0;
   do
   {
-
+    if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+        (IsImageGray(image,exception) == MagickFalse))
+      (void) TransformImageColorspace(image,sRGBColorspace,exception);
     is_gray = IsImageGray(image,exception);
-    if (is_gray == MagickFalse)
-      if (IssRGBColorspace(image->colorspace) == MagickFalse)
-        (void) TransformImageColorspace(image,sRGBColorspace,exception);
     z = is_gray ? 0 : 3;
 
     /*
diff --git a/coders/mono.c b/coders/mono.c
index c5d154b..27955aa 100644
--- a/coders/mono.c
+++ b/coders/mono.c
@@ -40,6 +40,7 @@
   Include declarations.
 */
 #include "MagickCore/studio.h"
+#include "MagickCore/attribute.h"
 #include "MagickCore/blob.h"
 #include "MagickCore/blob-private.h"
 #include "MagickCore/cache.h"
@@ -313,7 +314,8 @@
   status=OpenBlob(image_info,image,WriteBinaryBlobMode,exception);
   if (status == MagickFalse)
     return(status);
-  if (IssRGBColorspace(image->colorspace) == MagickFalse)
+  if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+      (IsImageGray(image,exception) == MagickFalse))
     (void) TransformImageColorspace(image,sRGBColorspace,exception);
   /*
     Convert image to a bi-level image.
diff --git a/coders/otb.c b/coders/otb.c
index 5f16098..b8828bc 100644
--- a/coders/otb.c
+++ b/coders/otb.c
@@ -39,6 +39,7 @@
   Include declarations.
 */
 #include "MagickCore/studio.h"
+#include "MagickCore/attribute.h"
 #include "MagickCore/blob.h"
 #include "MagickCore/blob-private.h"
 #include "MagickCore/cache.h"
@@ -333,7 +334,8 @@
   status=OpenBlob(image_info,image,WriteBinaryBlobMode,exception);
   if (status == MagickFalse)
     return(status);
-  if (IssRGBColorspace(image->colorspace) == MagickFalse)
+  if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+      (IsImageGray(image,exception) == MagickFalse))
     (void) TransformImageColorspace(image,sRGBColorspace,exception);
   /*
     Convert image to a bi-level image.
diff --git a/coders/pcl.c b/coders/pcl.c
index e4e5174..8a28aeb 100644
--- a/coders/pcl.c
+++ b/coders/pcl.c
@@ -721,7 +721,8 @@
   one=1;
   do
   {
-    if (IssRGBColorspace(image->colorspace) == MagickFalse)
+    if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+        (IsImageGray(image,exception) == MagickFalse))
       (void) TransformImageColorspace(image,sRGBColorspace,exception);
     /*
       Initialize the printer.
diff --git a/coders/pcx.c b/coders/pcx.c
index c8052cf..bc0233a 100644
--- a/coders/pcx.c
+++ b/coders/pcx.c
@@ -879,7 +879,8 @@
   status=OpenBlob(image_info,image,WriteBinaryBlobMode,exception);
   if (status == MagickFalse)
     return(status);
-  if (IssRGBColorspace(image->colorspace) == MagickFalse)
+  if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+      (IsImageGray(image,exception) == MagickFalse))
     (void) TransformImageColorspace(image,sRGBColorspace,exception);
   page_table=(MagickOffsetType *) NULL;
   if ((LocaleCompare(image_info->magick,"DCX") == 0) ||
diff --git a/coders/pdb.c b/coders/pdb.c
index d1187a9..1fca1b3 100644
--- a/coders/pdb.c
+++ b/coders/pdb.c
@@ -743,9 +743,9 @@
   status=OpenBlob(image_info,image,WriteBinaryBlobMode,exception);
   if (status == MagickFalse)
     return(status);
-  if (IssRGBColorspace(image->colorspace) == MagickFalse)
+  if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+      (IsImageGray(image,exception) == MagickFalse))
     (void) TransformImageColorspace(image,sRGBColorspace,exception);
-
   if (image -> colors <= 2  ||  GetImageType( image, exception ) == BilevelType) { /* TS */
     bits_per_pixel = 1;
   } else if (image -> colors <= 4) {
diff --git a/coders/png.c b/coders/png.c
index b098c40..8d92d1f 100644
--- a/coders/png.c
+++ b/coders/png.c
@@ -1131,7 +1131,7 @@
   return(y);
 }
 
-static char *
+static const char *
 Magick_ColorType_from_PNG_ColorType(const int ping_colortype)
 {
   switch (ping_colortype)
diff --git a/coders/pnm.c b/coders/pnm.c
index d4e9242..5fa8918 100644
--- a/coders/pnm.c
+++ b/coders/pnm.c
@@ -1564,7 +1564,8 @@
       }
     if (format != '7')
       {
-        if (IssRGBColorspace(image->colorspace) == MagickFalse)
+        if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+            (IsImageGray(image,exception) == MagickFalse))
           (void) TransformImageColorspace(image,sRGBColorspace,exception);
         (void) FormatLocaleString(buffer,MaxTextExtent,"%.20g %.20g\n",
           (double) image->columns,(double) image->rows);
diff --git a/coders/ps.c b/coders/ps.c
index 0cb112f..137700b 100644
--- a/coders/ps.c
+++ b/coders/ps.c
@@ -1443,11 +1443,10 @@
     /*
       Scale relative to dots-per-inch.
     */
-    if ((image_info->type == TrueColorType) ||
-        (IsImageGray(image,exception) == MagickFalse))
-      if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
-          (image->colorspace != CMYKColorspace))
-        (void) TransformImageColorspace(image,sRGBColorspace,exception);
+    if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+        (IsImageGray(image,exception) == MagickFalse) &&
+        (image->colorspace != CMYKColorspace))
+      (void) TransformImageColorspace(image,sRGBColorspace,exception);
     delta.x=DefaultResolution;
     delta.y=DefaultResolution;
     resolution.x=image->resolution.x;
diff --git a/coders/sun.c b/coders/sun.c
index a4c0ff1..4a970d8 100644
--- a/coders/sun.c
+++ b/coders/sun.c
@@ -761,7 +761,8 @@
     /*
       Initialize SUN raster file header.
     */
-    if (IssRGBColorspace(image->colorspace) == MagickFalse)
+    if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+        (IsImageGray(image,exception) == MagickFalse))
       (void) TransformImageColorspace(image,sRGBColorspace,exception);
     sun_info.magic=0x59a66a95;
     if ((image->columns != (unsigned int) image->columns) ||
diff --git a/coders/vicar.c b/coders/vicar.c
index 855feda..87c99e4 100644
--- a/coders/vicar.c
+++ b/coders/vicar.c
@@ -40,6 +40,7 @@
   Include declarations.
 */
 #include "MagickCore/studio.h"
+#include "MagickCore/attribute.h"
 #include "MagickCore/blob.h"
 #include "MagickCore/blob-private.h"
 #include "MagickCore/cache.h"
@@ -457,7 +458,8 @@
   status=OpenBlob(image_info,image,WriteBinaryBlobMode,exception);
   if (status == MagickFalse)
     return(status);
-  if (IssRGBColorspace(image->colorspace) == MagickFalse)
+  if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+      (IsImageGray(image,exception) == MagickFalse))
     (void) TransformImageColorspace(image,sRGBColorspace,exception);
   /*
     Write header.
diff --git a/coders/viff.c b/coders/viff.c
index 7b01de1..a55f5d9 100644
--- a/coders/viff.c
+++ b/coders/viff.c
@@ -974,11 +974,9 @@
     /*
       Initialize VIFF image structure.
     */
-    if (IsImageGray(image,exception) != MagickFalse)
-      (void) SetImageStorageClass(image,DirectClass,exception);
-    else
-      if (IssRGBColorspace(image->colorspace) == MagickFalse)
-        (void) TransformImageColorspace(image,sRGBColorspace,exception);
+    if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+        (IsImageGray(image,exception) == MagickFalse))
+      (void) TransformImageColorspace(image,sRGBColorspace,exception);
     viff_info.identifier=(char) 0xab;
     viff_info.file_type=1;
     viff_info.release=1;
diff --git a/coders/wbmp.c b/coders/wbmp.c
index 8fa4f5c..4204818 100644
--- a/coders/wbmp.c
+++ b/coders/wbmp.c
@@ -39,6 +39,7 @@
   Include declarations.
 */
 #include "MagickCore/studio.h"
+#include "MagickCore/attribute.h"
 #include "MagickCore/blob.h"
 #include "MagickCore/blob-private.h"
 #include "MagickCore/cache.h"
@@ -377,7 +378,8 @@
   status=OpenBlob(image_info,image,WriteBinaryBlobMode,exception);
   if (status == MagickFalse)
     return(status);
-  if (IssRGBColorspace(image->colorspace) == MagickFalse)
+  if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+      (IsImageGray(image,exception) == MagickFalse))
     (void) TransformImageColorspace(image,sRGBColorspace,exception);
   /*
     Convert image to a bi-level image.
diff --git a/coders/xbm.c b/coders/xbm.c
index c950b48..2d8d92a 100644
--- a/coders/xbm.c
+++ b/coders/xbm.c
@@ -40,6 +40,7 @@
   Include declarations.
 */
 #include "MagickCore/studio.h"
+#include "MagickCore/attribute.h"
 #include "MagickCore/blob.h"
 #include "MagickCore/blob-private.h"
 #include "MagickCore/cache.h"
@@ -510,7 +511,8 @@
   status=OpenBlob(image_info,image,WriteBinaryBlobMode,exception);
   if (status == MagickFalse)
     return(status);
-  if (IssRGBColorspace(image->colorspace) == MagickFalse)
+  if ((IssRGBColorspace(image->colorspace) == MagickFalse) &&
+      (IsImageGray(image,exception) == MagickFalse))
     (void) TransformImageColorspace(image,sRGBColorspace,exception);
   /*
     Write X bitmap header.
diff --git a/coders/xcf.c b/coders/xcf.c
index 3d69997..cd82957 100644
--- a/coders/xcf.c
+++ b/coders/xcf.c
@@ -881,7 +881,7 @@
         scene;
 
       scene=inDocInfo->number_layers-layer-1;
-      if (scene > (image_info->scene+image_info->number_scenes-1))
+      if (scene > (ssize_t) (image_info->scene+image_info->number_scenes-1))
         {
           outLayer->image=CloneImage(image,0,0,MagickTrue,exception);
           if (outLayer->image == (Image *) NULL)