diff --git a/coders/fits.c b/coders/fits.c
index 0f0374c..e8bc772 100644
--- a/coders/fits.c
+++ b/coders/fits.c
@@ -416,6 +416,7 @@
       fits_info.bits_per_pixel;
     image->endian=fits_info.endian;
     image->scene=(size_t) scene;
+    image->colorspace=GRAYColorspace;
     if ((image_info->ping != MagickFalse) && (image_info->number_scenes != 0))
       if (image->scene >= (image_info->scene+image_info->number_scenes-1))
         break;
@@ -444,10 +445,8 @@
       for (x=0; x < (ssize_t) image->columns; x++)
       {
         pixel=GetFITSPixel(image,fits_info.bits_per_pixel);
-        SetPixelRed(image,ClampToQuantum(scale*(fits_info.scale*
+        SetPixelGray(image,ClampToQuantum(scale*(fits_info.scale*
           (pixel-fits_info.min_data)+fits_info.zero)),q);
-        SetPixelGreen(image,GetPixelRed(image,q),q);
-        SetPixelBlue(image,GetPixelRed(image,q),q);
         q+=GetPixelChannels(image);
       }
       if (SyncAuthenticPixels(image,exception) == MagickFalse)
diff --git a/coders/jp2.c b/coders/jp2.c
index fcae3b6..0c74b7a 100644
--- a/coders/jp2.c
+++ b/coders/jp2.c
@@ -467,6 +467,8 @@
   image->columns=jas_image_width(jp2_image);
   image->rows=jas_image_height(jp2_image);
   image->compression=JPEG2000Compression;
+  if (number_components == 1)
+    image->colorspace=GRAYColorspace;
   for (i=0; i < (ssize_t) number_components; i++)
   {
     size_t
@@ -538,9 +540,7 @@
         for (x=0; x < (ssize_t) image->columns; x++)
         {
           pixel=(QuantumAny) jas_matrix_getv(pixels[0],x/x_step[0]);
-          SetPixelRed(image,ScaleAnyToQuantum((QuantumAny) pixel,range[0]),q);
-          SetPixelGreen(image,GetPixelRed(image,q),q);
-          SetPixelBlue(image,GetPixelRed(image,q),q);
+          SetPixelGray(image,ScaleAnyToQuantum((QuantumAny) pixel,range[0]),q);
           q+=GetPixelChannels(image);
         }
         break;
diff --git a/coders/pnm.c b/coders/pnm.c
index dfb6042..906b21d 100644
--- a/coders/pnm.c
+++ b/coders/pnm.c
@@ -1161,6 +1161,8 @@
         /*
           Convert PFM raster image to pixel packets.
         */
+        if (format == 'f')
+          image->colorspace=GRAYColorspace;
         quantum_type=format == 'f' ? GrayQuantum : RGBQuantum;
         image->endian=quantum_scale < 0.0 ? LSBEndian : MSBEndian;
         image->depth=32;
diff --git a/coders/psd.c b/coders/psd.c
index ff41054..6024249 100644
--- a/coders/psd.c
+++ b/coders/psd.c
@@ -642,10 +642,9 @@
         {
           SetPixelRed(image,pixel,q);
           if (channels == 1)
-            {
-              SetPixelGreen(image,GetPixelRed(image,q),q);
-              SetPixelBlue(image,GetPixelRed(image,q),q);
-            }
+            SetPixelGray(image,pixel,q);
+          else
+            SetPixelRed(image,pixel,q);
           if (image->storage_class == PseudoClass)
             {
               if (packet_size == 1)
diff --git a/coders/xcf.c b/coders/xcf.c
index fddfc85..ed6693e 100644
--- a/coders/xcf.c
+++ b/coders/xcf.c
@@ -373,9 +373,7 @@
       {
         for (x=0; x < (ssize_t) tile_image->columns; x++)
         {
-          SetPixelRed(tile_image,ScaleCharToQuantum(*graydata),q);
-          SetPixelGreen(tile_image,GetPixelRed(image,q),q);
-          SetPixelBlue(tile_image,GetPixelRed(image,q),q);
+          SetPixelGray(tile_image,ScaleCharToQuantum(*graydata),q);
           SetPixelAlpha(tile_image,ScaleCharToQuantum((unsigned char)
             inLayerInfo->alpha),q);
           graydata++;
@@ -471,9 +469,9 @@
               {
                 case 0:
                 {
-                  SetPixelRed(tile_image,ScaleCharToQuantum(data),q);
-                  if (inDocInfo->image_type == GIMP_GRAY)
+                  if (inDocInfo->image_type != GIMP_GRAY)
                     {
+                      SetPixelRed(tile_image,ScaleCharToQuantum(data),q);
                       SetPixelGreen(tile_image,ScaleCharToQuantum(data),q);
                       SetPixelBlue(tile_image,ScaleCharToQuantum(data),q);
                       SetPixelAlpha(tile_image,ScaleCharToQuantum(
@@ -481,8 +479,7 @@
                     }
                   else
                     {
-                      SetPixelGreen(tile_image,GetPixelRed(image,q),q);
-                      SetPixelBlue(tile_image,GetPixelRed(image,q),q);
+                      SetPixelGray(tile_image,ScaleCharToQuantum(data),q);
                       SetPixelAlpha(tile_image,ScaleCharToQuantum(
                         (unsigned char) inLayerInfo->alpha),q);
                     }
@@ -531,9 +528,9 @@
               {
                 case 0:
                 {
-                  SetPixelRed(tile_image,ScaleCharToQuantum(data),q);
-                  if (inDocInfo->image_type == GIMP_GRAY)
+                  if (inDocInfo->image_type != GIMP_GRAY)
                     {
+                      SetPixelRed(tile_image,ScaleCharToQuantum(data),q);
                       SetPixelGreen(tile_image,ScaleCharToQuantum(data),q);
                       SetPixelBlue(tile_image,ScaleCharToQuantum(data),q);
                       SetPixelAlpha(tile_image,ScaleCharToQuantum(
@@ -541,8 +538,7 @@
                     }
                   else
                     {
-                      SetPixelGreen(tile_image,GetPixelRed(image,q),q);
-                      SetPixelBlue(tile_image,GetPixelRed(image,q),q);
+                      SetPixelGray(tile_image,ScaleCharToQuantum(data),q);
                       SetPixelAlpha(tile_image,ScaleCharToQuantum(
                         (unsigned char) inLayerInfo->alpha),q);
                     }