diff --git a/coders/gif.c b/coders/gif.c
index 287dd8e..f782248 100644
--- a/coders/gif.c
+++ b/coders/gif.c
@@ -1099,6 +1099,7 @@
                   "MemoryAllocationFailed");
               (void) CopyMagickMemory(comments+length,header,(size_t) count);
             }
+            comments[length+count]='\0';
             (void) SetImageProperty(image,"comment",comments,exception);
             comments=DestroyString(comments);
             break;
@@ -1674,38 +1675,29 @@
         if ((LocaleCompare(write_info->magick,"GIF87") != 0) &&
             (GetImageProperty(image,"comment",exception) != (const char *) NULL))
           {
-            char
-              *comments;
+            const char
+              *value;
+
+            register const char 
+              *p;
 
             size_t
-              length;
-
-            ssize_t
               count;
-
-            unsigned char
-              header[MaxTextExtent];
-
+    
             /*
-              Read comment extension.
-            */
-            comments=AcquireString((char *) NULL);
-            for (length=0; ; length+=count)
+              Write Comment extension.
+           */
+            (void) WriteBlobByte(image,(unsigned char) 0x21);
+            (void) WriteBlobByte(image,(unsigned char) 0xfe);
+            value=GetImageProperty(image,"comment");
+            for (p=value; *p != '\0'; )
             {
-              count=(ssize_t) ReadBlobBlock(image,header);
-              if (count == 0)
-                break;
-              header[count]='\0';
-              comments=(char *) ResizeQuantumMemory(comments,length+count+1,
-                sizeof(*comments));
-              if (comments == (char *) NULL)
-                ThrowBinaryException(ResourceLimitError,
-                  "MemoryAllocationFailed",image->filename);
-              (void) CopyMagickMemory(comments+length,header,(size_t) count);
+              count=MagickMin(strlen(p),255);
+              (void) WriteBlobByte(image,(unsigned char) count);
+              for (i=0; i < (ssize_t) count; i++)
+                (void) WriteBlobByte(image,(unsigned char) *p++);
             }
-            (void) SetImageProperty(image,"comment",comments,exception);
-            comments=DestroyString(comments);
-            break;
+            (void) WriteBlobByte(image,(unsigned char) 0x00);
           }
         if ((GetPreviousImageInList(image) == (Image *) NULL) &&
             (GetNextImageInList(image) != (Image *) NULL) &&