diff --git a/coders/psd.c b/coders/psd.c
index 2b1c196..66f75a8 100644
--- a/coders/psd.c
+++ b/coders/psd.c
@@ -68,6 +68,7 @@
   Define declaractions.
 */
 #define MaxPSDChannels  56
+#define PSDQuantum(x) (((long) (x)+1) & -2)
 
 /*
   Enumerated declaractions.
@@ -1987,15 +1988,35 @@
   */
   res_extra = 28; /* 0x03EB */
   profile=GetImageProfile(image,"8bim");
-  if (profile == (StringInfo *) NULL)
-    (void) WriteBlobMSBLong(image,(unsigned int) res_extra);
-  else
+  if (profile != (StringInfo *) NULL)
     {
       (void) WriteBlobMSBLong(image,(unsigned int) (res_extra+
         GetStringInfoLength(profile)));
       (void) WriteBlob(image,GetStringInfoLength(profile),GetStringInfoDatum(
         profile));
     }
+  else
+    {
+      profile=GetImageProfile(image,"icc");
+      if (profile == (StringInfo *) NULL)
+        (void) WriteBlobMSBLong(image,(unsigned int) res_extra);
+      else
+        {
+          size_t
+            length;
+
+          length=PSDQuantum(GetStringInfoLength(profile));
+          (void) WriteBlobMSBLong(image,(unsigned int) (res_extra+length+12));
+          (void) WriteBlob(image,4,(const unsigned char *) "8BIM");
+          (void) WriteBlobMSBShort(image,0x040F);
+          (void) WriteBlobMSBShort(image,0);
+          (void) WriteBlobMSBLong(image,GetStringInfoLength(profile));
+          (void) WriteBlob(image,GetStringInfoLength(profile),
+            GetStringInfoDatum(profile));
+          if (length != GetStringInfoLength(profile))
+            (void) WriteBlobByte(image,0);
+        }
+    }
   WriteResolutionResourceBlock(image);
 
 compute_layer_info: