diff --git a/MagickCore/colorspace.c b/MagickCore/colorspace.c
index fc39ce0..8eaf06f 100644
--- a/MagickCore/colorspace.c
+++ b/MagickCore/colorspace.c
@@ -421,6 +421,71 @@
       image->type=GrayscaleType;
       return(status);
     }
+    case HCLColorspace:
+    {
+      /*
+        Transform image from sRGB to HCL.
+      */
+      if (image->storage_class == PseudoClass)
+        {
+          if (SyncImage(image,exception) == MagickFalse)
+            return(MagickFalse);
+          if (SetImageStorageClass(image,DirectClass,exception) == MagickFalse)
+            return(MagickFalse);
+        }
+      image_view=AcquireAuthenticCacheView(image,exception);
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+      #pragma omp parallel for schedule(static,4) shared(status) \
+        dynamic_number_threads(image,image->columns,image->rows,1)
+#endif
+      for (y=0; y < (ssize_t) image->rows; y++)
+      {
+        MagickBooleanType
+          sync;
+
+        register ssize_t
+          x;
+
+        register Quantum
+          *restrict q;
+
+        if (status == MagickFalse)
+          continue;
+        q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,
+          exception);
+        if (q == (Quantum *) NULL)
+          {
+            status=MagickFalse;
+            continue;
+          }
+        for (x=0; x < (ssize_t) image->columns; x++)
+        {
+          double
+            blue,
+            chroma,
+            green,
+            hue,
+            luma,
+            red;
+
+          red=QuantumRange*DecompandsRGB(QuantumScale*GetPixelRed(image,q));
+          green=QuantumRange*DecompandsRGB(QuantumScale*GetPixelGreen(image,q));
+          blue=QuantumRange*DecompandsRGB(QuantumScale*GetPixelBlue(image,q));
+          ConvertRGBToHCL(red,green,blue,&hue,&chroma,&luma);
+          SetPixelRed(image,ClampToQuantum(QuantumRange*hue),q);
+          SetPixelGreen(image,ClampToQuantum(QuantumRange*chroma),q);
+          SetPixelBlue(image,ClampToQuantum(QuantumRange*luma),q);
+          q+=GetPixelChannels(image);
+        }
+        sync=SyncCacheViewAuthenticPixels(image_view,exception);
+        if (sync == MagickFalse)
+          status=MagickFalse;
+      }
+      image_view=DestroyCacheView(image_view);
+      if (SetImageColorspace(image,colorspace,exception) == MagickFalse)
+        return(MagickFalse);
+      return(status);
+    }
     case HSBColorspace:
     {
       /*
@@ -2155,6 +2220,74 @@
         return(MagickFalse);
       return(status);
     }
+    case HCLColorspace:
+    {
+      /*
+        Transform image from HCL to sRGB.
+      */
+      if (image->storage_class == PseudoClass)
+        {
+          if (SyncImage(image,exception) == MagickFalse)
+            return(MagickFalse);
+          if (SetImageStorageClass(image,DirectClass,exception) == MagickFalse)
+            return(MagickFalse);
+        }
+      image_view=AcquireAuthenticCacheView(image,exception);
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+      #pragma omp parallel for schedule(static,4) shared(status) \
+        dynamic_number_threads(image,image->columns,image->rows,1)
+#endif
+      for (y=0; y < (ssize_t) image->rows; y++)
+      {
+        MagickBooleanType
+          sync;
+
+        register ssize_t
+          x;
+
+        register Quantum
+          *restrict q;
+
+        if (status == MagickFalse)
+          continue;
+        q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,
+          exception);
+        if (q == (Quantum *) NULL)
+          {
+            status=MagickFalse;
+            continue;
+          }
+        for (x=0; x < (ssize_t) image->columns; x++)
+        {
+          double
+            blue,
+            chroma,
+            green,
+            hue,
+            luma,
+            red;
+
+          hue=(double) (QuantumScale*GetPixelRed(image,q));
+          chroma=(double) (QuantumScale*GetPixelGreen(image,q));
+          luma=(double) (QuantumScale*GetPixelBlue(image,q));
+          ConvertHCLToRGB(hue,chroma,luma,&red,&green,&blue);
+          red=QuantumRange*CompandsRGB(QuantumScale*red);
+          green=QuantumRange*CompandsRGB(QuantumScale*green);
+          blue=QuantumRange*CompandsRGB(QuantumScale*blue);
+          SetPixelRed(image,ClampToQuantum(red),q);
+          SetPixelGreen(image,ClampToQuantum(green),q);
+          SetPixelBlue(image,ClampToQuantum(blue),q);
+          q+=GetPixelChannels(image);
+        }
+        sync=SyncCacheViewAuthenticPixels(image_view,exception);
+        if (sync == MagickFalse)
+          status=MagickFalse;
+      }
+      image_view=DestroyCacheView(image_view);
+      if (SetImageColorspace(image,sRGBColorspace,exception) == MagickFalse)
+        return(MagickFalse);
+      return(status);
+    }
     case HSBColorspace:
     {
       /*
diff --git a/MagickCore/colorspace.h b/MagickCore/colorspace.h
index 3bade3b..0442d8a 100644
--- a/MagickCore/colorspace.h
+++ b/MagickCore/colorspace.h
@@ -28,6 +28,7 @@
   CMYColorspace,
   CMYKColorspace,
   GRAYColorspace,
+  HCLColorspace,
   HSBColorspace,
   HSLColorspace,
   HWBColorspace,
diff --git a/MagickCore/gem-private.h b/MagickCore/gem-private.h
index 6c236bb..fce2351 100644
--- a/MagickCore/gem-private.h
+++ b/MagickCore/gem-private.h
@@ -32,10 +32,14 @@
   GetOptimalKernelWidth2D(const double,const double);
 
 extern MagickPrivate void
+  ConvertHCLToRGB(const double,const double,const double,double *,double *,
+    double *),
   ConvertHSBToRGB(const double,const double,const double,double *,double *,
     double *),
   ConvertHWBToRGB(const double,const double,const double,double *,double *,
     double *),
+  ConvertRGBToHCL(const double,const double,const double,double *,double *,
+    double *),
   ConvertRGBToHSB(const double,const double,const double,double *,double *,
     double *),
   ConvertRGBToHWB(const double,const double,const double,double *,double *,
diff --git a/MagickCore/gem.c b/MagickCore/gem.c
index 00946e0..8d0e258 100644
--- a/MagickCore/gem.c
+++ b/MagickCore/gem.c
@@ -63,6 +63,98 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
+%   C o n v e r t H C L T o R G B                                             %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  ConvertHCLToRGB() transforms a (hue, chroma, luma) to a (red, green,
+%  blue) triple.
+%
+%  The format of the ConvertHCLToRGBImage method is:
+%
+%      void ConvertHCLToRGB(const double hue,const double chroma,
+%        const double luma,double *red,double *green,double *blue)
+%
+%  A description of each parameter follows:
+%
+%    o hue, chroma, luma: A double value representing a
+%      component of the HCL color space.
+%
+%    o red, green, blue: A pointer to a pixel component of type Quantum.
+%
+*/
+MagickPrivate void ConvertHCLToRGB(const double hue,const double chroma,
+  const double luma,double *red,double *green,double *blue)
+{
+  double
+    b,
+    c,
+    g,
+    h,
+    m,
+    r,
+    x;
+
+  /*
+    Convert HCL to RGB colorspace.
+  */
+  assert(red != (double *) NULL);
+  assert(green != (double *) NULL);
+  assert(blue != (double *) NULL);
+  h=6.0*hue;
+  c=chroma;
+  x=c*(1.0-fabs(fmod(h,2.0)-1.0));
+  r=0.0;
+  g=0.0;
+  b=0.0;
+  if ((0.0 <= h) && (h < 1.0))
+    {
+      r=c;      
+      g=x;      
+    }
+  else
+    if ((1.0 <= h) && (h < 2.0))
+      {
+        r=x;      
+        g=c;      
+      }
+    else
+      if ((2.0 <= h) && (h < 3.0))
+        {
+          g=c;      
+          b=x;      
+        }
+      else
+        if ((3.0 <= h) && (h < 4.0))
+          {
+            g=x;      
+            b=c;      
+          }
+        else
+          if ((4.0 <= h) && (h < 5.0))
+            {
+              r=x;      
+              b=c;      
+            }
+          else
+            if ((5.0 <= h) && (h < 6.0))
+              {
+                r=c;      
+                b=x;      
+              }
+  m=luma-0.298839*r+0.586811*g+0.114350*b;
+  *red=QuantumRange*(r+m);
+  *green=QuantumRange*(g+m);
+  *blue=QuantumRange*(b+m);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
 %   C o n v e r t H S B T o R G B                                             %
 %                                                                             %
 %                                                                             %
@@ -321,6 +413,73 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
+%   C o n v e r t R G B T o H C L                                             %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  ConvertRGBToHCL() transforms a (red, green, blue) to a (hue, chroma,
+%  luma) triple.
+%
+%  The format of the ConvertRGBToHCL method is:
+%
+%      void ConvertRGBToHCL(const double red,const double green,
+%        const double blue,double *hue,double *chroma,double *luma)
+%
+%  A description of each parameter follows:
+%
+%    o red, green, blue: A Quantum value representing the red, green, and
+%      blue component of a pixel.
+%
+%    o hue, chroma, luma: A pointer to a double value representing a
+%      component of the HCL color space.
+%
+*/
+MagickPrivate void ConvertRGBToHCL(const double red,const double green,
+  const double blue,double *hue,double *chroma,double *luma)
+{
+  double
+    b,
+    c,
+    g,
+    h,
+    max,
+    r;
+
+  /*
+    Convert RGB to HCL colorspace.
+  */
+  assert(hue != (double *) NULL);
+  assert(chroma != (double *) NULL);
+  assert(luma != (double *) NULL);
+  r=red;
+  g=green;
+  b=blue;
+  max=MagickMax(r,MagickMax(g,b));
+  c=max-(double) MagickMin(r,MagickMin(g,b));
+  h=0.0;
+  if (c == 0)
+    h=0.0;
+  else
+    if (red == max)
+      h=fmod((g-b)/c,6.0);
+    else
+      if (green == max)
+        h=((b-r)/c)+2.0;
+      else
+        if (blue == max)
+          h=((r-g)/c)+4.0;
+  *hue=(h/6.0);
+  *chroma=QuantumScale*c;
+  *luma=QuantumScale*(0.298839*r+0.586811*g+0.114350*b);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
 %   C o n v e r t R G B T o H S B                                             %
 %                                                                             %
 %                                                                             %
diff --git a/MagickCore/option.c b/MagickCore/option.c
index 9b5283d..1774378 100644
--- a/MagickCore/option.c
+++ b/MagickCore/option.c
@@ -865,6 +865,7 @@
     { "CMY", CMYColorspace, UndefinedOptionFlag, MagickFalse },
     { "CMYK", CMYKColorspace, UndefinedOptionFlag, MagickFalse },
     { "Gray", GRAYColorspace, UndefinedOptionFlag, MagickFalse },
+    { "HCL", HCLColorspace, UndefinedOptionFlag, MagickFalse },
     { "HSB", HSBColorspace, UndefinedOptionFlag, MagickFalse },
     { "HSL", HSLColorspace, UndefinedOptionFlag, MagickFalse },
     { "HWB", HWBColorspace, UndefinedOptionFlag, MagickFalse },
diff --git a/MagickCore/version.h b/MagickCore/version.h
index 9b7d08f..6e09fef 100644
--- a/MagickCore/version.h
+++ b/MagickCore/version.h
@@ -27,14 +27,14 @@
 */
 #define MagickPackageName "ImageMagick"
 #define MagickCopyright  "Copyright (C) 1999-2012 ImageMagick Studio LLC"
-#define MagickSVNRevision  "8756"
+#define MagickSVNRevision  "8815M"
 #define MagickLibVersion  0x700
 #define MagickLibVersionText  "7.0.0"
 #define MagickLibVersionNumber  7,0,0
 #define MagickLibAddendum  "-0"
 #define MagickLibInterface  7
 #define MagickLibMinInterface  7
-#define MagickReleaseDate  "2012-07-29"
+#define MagickReleaseDate  "2012-08-04"
 #define MagickChangeDate   "20110801"
 #define MagickAuthoritativeURL  "http://www.imagemagick.org"
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
diff --git a/config/ImageMagick.rdf b/config/ImageMagick.rdf
index 6aa2b3c..e62c7c8 100644
--- a/config/ImageMagick.rdf
+++ b/config/ImageMagick.rdf
@@ -5,7 +5,7 @@
     <name>ImageMagick</name>
     <shortdesc xml:lang="en">ImageMagick: convert, edit, and compose images.</shortdesc>
     <homepage rdf:resource="http://www.imagemagick.org/"/>
-    <created>2012-07-29</created>
+    <created>2012-08-04</created>
 
     <description xml:lang="en">
 ImageMagick® is a software suite to create, edit, compose, or convert bitmap images. It can read and write images in a variety of formats (over 100) including DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PhotoCD, PNG, Postscript, SVG, and TIFF. Use ImageMagick to resize, flip, mirror, rotate, distort, shear and transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses and Bézier curves.
@@ -57,7 +57,7 @@
     <release>
       <Version>
           <name>stable</name>
-          <created>2012-07-29</created>
+          <created>2012-08-04</created>
           <revision>7.0.0</revision>
           <patch-level>-0</patch-level>
       </Version>
diff --git a/config/configure.xml b/config/configure.xml
index 18b1179..f9ca4ae 100644
--- a/config/configure.xml
+++ b/config/configure.xml
@@ -10,8 +10,8 @@
   <configure name="VERSION" value="7.0.0"/>
   <configure name="LIB_VERSION" value="0x700"/>
   <configure name="LIB_VERSION_NUMBER" value="7,0,0,0"/>
-  <configure name="SVN_REVISION" value="8756" />
-  <configure name="RELEASE_DATE" value="2012-07-29"/>
+  <configure name="SVN_REVISION" value="8815M" />
+  <configure name="RELEASE_DATE" value="2012-08-04"/>
   <configure name="CONFIGURE" value="./configure "/>
   <configure name="PREFIX" value="/usr/local"/>
   <configure name="EXEC-PREFIX" value="/usr/local"/>