diff --git a/coders/hdr.c b/coders/hdr.c
index 09d3406..7b7d2a7 100644
--- a/coders/hdr.c
+++ b/coders/hdr.c
@@ -61,6 +61,12 @@
 #include "magick/module.h"
 
 /*
+  Forward declarations.
+*/
+static MagickBooleanType
+  WriteHDRImage(const ImageInfo *,Image *);
+
+/*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %                                                                             %
 %                                                                             %
@@ -93,6 +99,8 @@
     return(MagickFalse);
   if (LocaleNCompare((const char *) magick,"#?RADIANCE",10) == 0)
     return(MagickTrue);
+  if (LocaleNCompare((const char *) magick,"#?RGBE",6) == 0)
+    return(MagickTrue);
   return(MagickFalse);
 }
 
@@ -437,6 +445,7 @@
 
   entry=SetMagickInfo("HDR");
   entry->decoder=(DecodeImageHandler *) ReadHDRImage;
+  entry->encoder=(EncodeImageHandler *) WriteHDRImage;
   entry->description=ConstantString("Radiance RGBE image format");
   entry->module=ConstantString("HDR");
   entry->magick=(IsImageFormatHandler *) IsHDR;
@@ -467,3 +476,106 @@
 {
   (void) UnregisterMagickInfo("HDR");
 }
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%   W r i t e H D R I m a g e                                                 %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  WriteHDRImage() writes an image in the Radience RGBE image format.
+%
+%  The format of the WriteHDRImage method is:
+%
+%      MagickBooleanType WriteHDRImage(const ImageInfo *image_info,
+%        Image *image)
+%
+%  A description of each parameter follows.
+%
+%    o image_info: the image info.
+%
+%    o image:  The image.
+%
+*/
+static MagickBooleanType WriteHDRImage(const ImageInfo *image_info,Image *image)
+{
+  char
+    header[MaxTextExtent];
+
+  int
+    y;
+
+  MagickBooleanType
+    status;
+
+  QuantumInfo
+    *quantum_info;
+
+  register const PixelPacket
+    *p;
+
+  ssize_t
+    count;
+
+  size_t
+    length;
+
+  unsigned char
+    *pixels;
+
+  /*
+    Open output image file.
+  */
+  assert(image_info != (const ImageInfo *) NULL);
+  assert(image_info->signature == MagickSignature);
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickSignature);
+  if (image->debug != MagickFalse)
+    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
+  status=OpenBlob(image_info,image,WriteBinaryBlobMode,&image->exception);
+  if (status == MagickFalse)
+    return(status);
+  if (image->colorspace != RGBColorspace)
+    (void) TransformImageColorspace(image,RGBColorspace);
+  /*
+    Write header.
+  */
+  (void) ResetMagickMemory(header,' ',MaxTextExtent);
+  (void) FormatMagickString(header,MaxTextExtent,
+    "LBLSIZE=%.20g FORMAT='BYTE' TYPE='IMAGE' BUFSIZE=20000 DIM=2 EOL=0 "
+    "RECSIZE=%.20g ORG='BSQ' NL=%.20g NS=%.20g NB=1 N1=0 N2=0 N3=0 N4=0 NBB=0 "
+    "NLB=0 TASK='ImageMagick'",(double) MaxTextExtent,(double) image->columns,
+    (double) image->rows,(double) image->columns);
+  (void) WriteBlob(image,MaxTextExtent,(unsigned char *) header);
+  /*
+    Write HDR pixels.
+  */
+  image->depth=8;
+  quantum_info=AcquireQuantumInfo(image_info,image);
+  if (quantum_info == (QuantumInfo *) NULL)
+    ThrowWriterException(ResourceLimitError,"MemoryAllocationFailed");
+  pixels=GetQuantumPixels(quantum_info);
+  for (y=0; y < (ssize_t) image->rows; y++)
+  {
+    p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+    if (p == (const PixelPacket *) NULL)
+      break;
+    length=ExportQuantumPixels(image,(const CacheView *) NULL,quantum_info,
+      GrayQuantum,pixels,&image->exception);
+    count=WriteBlob(image,length,pixels);
+    if (count != (ssize_t) length)
+      break;
+    status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
+      image->rows);
+    if (status == MagickFalse)
+      break;
+  }
+  quantum_info=DestroyQuantumInfo(quantum_info);
+  (void) CloseBlob(image);
+  return(MagickTrue);
+}
diff --git a/coders/vicar.c b/coders/vicar.c
index 5e1b11d..4431b2c 100644
--- a/coders/vicar.c
+++ b/coders/vicar.c
@@ -485,7 +485,7 @@
     if (count != (ssize_t) length)
       break;
     status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
-                image->rows);
+      image->rows);
     if (status == MagickFalse)
       break;
   }
diff --git a/magick/magic.c b/magick/magic.c
index 859d656..4a759ff 100644
--- a/magick/magic.c
+++ b/magick/magic.c
@@ -121,7 +121,7 @@
     { "GPLT", 0, MagickString("#!/usr/local/bin/gnuplot") },
     { "HDF", 1, MagickString("HDF") },
     { "HDR", 0, MagickString("#?RADIANCE") },
-    { "HDR", 0, MagickString("VIEW= ") },
+    { "HDR", 0, MagickString("#?RGBE") },
     { "HPGL", 0, MagickString("IN;") },
     { "HTML", 1, MagickString("HTML") },
     { "HTML", 1, MagickString("html") },