diff -Nrup gimp/app/actions/context-commands.c gimp-p/app/actions/context-commands.c
--- gimp/app/actions/context-commands.c	2012-04-11 16:23:02.588705904 +0200
+++ gimp-p/app/actions/context-commands.c	2012-04-11 16:39:09.692755785 +0200
@@ -71,7 +71,11 @@ static const GimpLayerModeEffects paint_
   GIMP_HUE_MODE,
   GIMP_SATURATION_MODE,
   GIMP_COLOR_MODE,
-  GIMP_VALUE_MODE
+  GIMP_VALUE_MODE,
+  GIMP_LCH_HUE_MODE,
+  GIMP_LCH_SATURATION_MODE,
+  GIMP_LCH_COLOR_MODE,
+  GIMP_LCH_LIGHTNESS_MODE,
 };
 
 
diff -Nrup gimp/app/actions/layers-commands.c gimp-p/app/actions/layers-commands.c
--- gimp/app/actions/layers-commands.c	2012-04-11 16:23:02.592705905 +0200
+++ gimp-p/app/actions/layers-commands.c	2012-04-11 16:39:09.692755785 +0200
@@ -96,7 +96,11 @@ static const GimpLayerModeEffects layer_
   GIMP_HUE_MODE,
   GIMP_SATURATION_MODE,
   GIMP_COLOR_MODE,
-  GIMP_VALUE_MODE
+  GIMP_VALUE_MODE,
+  GIMP_LCH_HUE_MODE,
+  GIMP_LCH_SATURATION_MODE,
+  GIMP_LCH_COLOR_MODE,
+  GIMP_LCH_LIGHTNESS_MODE,
 };
 
 
diff -Nrup gimp/app/base/base-enums.c gimp-p/app/base/base-enums.c
--- gimp/app/base/base-enums.c	2012-04-11 16:23:02.600705906 +0200
+++ gimp-p/app/base/base-enums.c	2012-04-11 16:39:09.696755786 +0200
@@ -105,6 +105,10 @@ gimp_layer_mode_effects_get_type (void)
     { GIMP_ERASE_MODE, "GIMP_ERASE_MODE", "erase-mode" },
     { GIMP_REPLACE_MODE, "GIMP_REPLACE_MODE", "replace-mode" },
     { GIMP_ANTI_ERASE_MODE, "GIMP_ANTI_ERASE_MODE", "anti-erase-mode" },
+    { GIMP_LCH_HUE_MODE, "GIMP_LCH_HUE_MODE", "lch-hue-mode" },
+    { GIMP_LCH_SATURATION_MODE, "GIMP_LCH_SATURATION_MODE", "lch-saturation-mode" },
+    { GIMP_LCH_COLOR_MODE, "GIMP_LCH_COLOR_MODE", "lch-color-mode" },
+    { GIMP_LCH_LIGHTNESS_MODE, "GIMP_LCH_LIGHTNESS_MODE", "lch-lightness-mode" },
     { 0, NULL, NULL }
   };
 
@@ -121,10 +125,10 @@ gimp_layer_mode_effects_get_type (void)
     { GIMP_SUBTRACT_MODE, NC_("layer-mode-effects", "Subtract"), NULL },
     { GIMP_DARKEN_ONLY_MODE, NC_("layer-mode-effects", "Darken only"), NULL },
     { GIMP_LIGHTEN_ONLY_MODE, NC_("layer-mode-effects", "Lighten only"), NULL },
-    { GIMP_HUE_MODE, NC_("layer-mode-effects", "Hue"), NULL },
-    { GIMP_SATURATION_MODE, NC_("layer-mode-effects", "Saturation"), NULL },
-    { GIMP_COLOR_MODE, NC_("layer-mode-effects", "Color"), NULL },
-    { GIMP_VALUE_MODE, NC_("layer-mode-effects", "Value"), NULL },
+    { GIMP_HUE_MODE, NC_("layer-mode-effects", "Hue (legacy)"), NULL },
+    { GIMP_SATURATION_MODE, NC_("layer-mode-effects", "Saturation (legacy)"), NULL },
+    { GIMP_COLOR_MODE, NC_("layer-mode-effects", "Color (legacy)"), NULL },
+    { GIMP_VALUE_MODE, NC_("layer-mode-effects", "Value (legacy)"), NULL },
     { GIMP_DIVIDE_MODE, NC_("layer-mode-effects", "Divide"), NULL },
     { GIMP_DODGE_MODE, NC_("layer-mode-effects", "Dodge"), NULL },
     { GIMP_BURN_MODE, NC_("layer-mode-effects", "Burn"), NULL },
@@ -136,6 +140,10 @@ gimp_layer_mode_effects_get_type (void)
     { GIMP_ERASE_MODE, NC_("layer-mode-effects", "Erase"), NULL },
     { GIMP_REPLACE_MODE, NC_("layer-mode-effects", "Replace"), NULL },
     { GIMP_ANTI_ERASE_MODE, NC_("layer-mode-effects", "Anti erase"), NULL },
+    { GIMP_LCH_HUE_MODE, NC_("layer-mode-effects", "Hue"), NULL },
+    { GIMP_LCH_SATURATION_MODE, NC_("layer-mode-effects", "Saturation"), NULL },
+    { GIMP_LCH_COLOR_MODE, NC_("layer-mode-effects", "Color"), NULL },
+    { GIMP_LCH_LIGHTNESS_MODE, NC_("layer-mode-effects", "Lightness"), NULL },
     { 0, NULL, NULL }
   };
 
diff -Nrup gimp/app/base/base-enums.h gimp-p/app/base/base-enums.h
--- gimp/app/base/base-enums.h	2012-04-11 16:23:02.600705906 +0200
+++ gimp-p/app/base/base-enums.h	2012-04-11 16:39:09.696755786 +0200
@@ -77,10 +77,10 @@ typedef enum
   GIMP_SUBTRACT_MODE,        /*< desc="Subtract"             >*/
   GIMP_DARKEN_ONLY_MODE,     /*< desc="Darken only"          >*/
   GIMP_LIGHTEN_ONLY_MODE,    /*< desc="Lighten only"         >*/
-  GIMP_HUE_MODE,             /*< desc="Hue"                  >*/
-  GIMP_SATURATION_MODE,      /*< desc="Saturation"           >*/
-  GIMP_COLOR_MODE,           /*< desc="Color"                >*/
-  GIMP_VALUE_MODE,           /*< desc="Value"                >*/
+  GIMP_HUE_MODE,             /*< desc="Hue (legacy)"         >*/
+  GIMP_SATURATION_MODE,      /*< desc="Saturation (legacy)"  >*/
+  GIMP_COLOR_MODE,           /*< desc="Color (legacy)"       >*/
+  GIMP_VALUE_MODE,           /*< desc="Value (legacy)"       >*/
   GIMP_DIVIDE_MODE,          /*< desc="Divide"               >*/
   GIMP_DODGE_MODE,           /*< desc="Dodge"                >*/
   GIMP_BURN_MODE,            /*< desc="Burn"                 >*/
@@ -91,7 +91,11 @@ typedef enum
   GIMP_COLOR_ERASE_MODE,     /*< desc="Color erase"          >*/
   GIMP_ERASE_MODE,           /*< pdb-skip, desc="Erase"      >*/
   GIMP_REPLACE_MODE,         /*< pdb-skip, desc="Replace"    >*/
-  GIMP_ANTI_ERASE_MODE       /*< pdb-skip, desc="Anti erase" >*/
+  GIMP_ANTI_ERASE_MODE,      /*< pdb-skip, desc="Anti erase" >*/
+  GIMP_LCH_HUE_MODE = 26,    /*< desc="Hue"                  >*/
+  GIMP_LCH_SATURATION_MODE,  /*< desc="Saturation"           >*/
+  GIMP_LCH_COLOR_MODE,       /*< desc="Color"                >*/
+  GIMP_LCH_LIGHTNESS_MODE,   /*< desc="Lightness"            >*/
 } GimpLayerModeEffects;
 
 
diff -Nrup gimp/app/composite/gimp-composite.c gimp-p/app/composite/gimp-composite.c
--- gimp/app/composite/gimp-composite.c	2012-04-11 16:23:02.612705906 +0200
+++ gimp-p/app/composite/gimp-composite.c	2012-04-11 16:39:09.700755786 +0200
@@ -145,6 +145,10 @@ struct GimpCompositeOperationEffects gim
     { TRUE,  FALSE, TRUE,  },     /*  GIMP_ERASE_MODE         */
     { TRUE,  TRUE,  TRUE,  },     /*  GIMP_REPLACE_MODE       */
     { TRUE,  TRUE,  FALSE, },     /*  GIMP_ANTI_ERASE_MODE    */
+    { FALSE, FALSE, FALSE, },     /*  GIMP_LCH_HUE_MODE       */
+    { FALSE, FALSE, FALSE, },     /*  GIMP_LCH_SATURATION_MODE*/
+    { FALSE, FALSE, FALSE, },     /*  GIMP_LCH_COLOR_MODE     */
+    { FALSE, FALSE, FALSE, },     /*  GIMP_LCH_LIGHTNESS_MODE */
 
     { FALSE, FALSE, FALSE },      /*  GIMP_SWAP */
     { FALSE, FALSE, FALSE },      /*  GIMP_SCALE */
@@ -262,6 +266,10 @@ gimp_composite_mode_astext (GimpComposit
     case GIMP_COMPOSITE_ERASE:         return ("GIMP_COMPOSITE_ERASE");
     case GIMP_COMPOSITE_REPLACE:       return ("GIMP_COMPOSITE_REPLACE");
     case GIMP_COMPOSITE_ANTI_ERASE:    return ("GIMP_COMPOSITE_ANTI_ERASE");
+    case GIMP_COMPOSITE_LCH_HUE:       return ("GIMP_COMPOSITE_LCH_HUE");
+    case GIMP_COMPOSITE_LCH_SATURATION:return ("GIMP_COMPOSITE_LCH_SATURATION");
+    case GIMP_COMPOSITE_LCH_COLOR_ONLY:return ("GIMP_COMPOSITE_LCH_COLOR_ONLY");
+    case GIMP_COMPOSITE_LCH_LIGHTNESS: return ("GIMP_COMPOSITE_LCH_LIGHTNESS");
     case GIMP_COMPOSITE_BLEND:         return ("GIMP_COMPOSITE_BLEND");
     case GIMP_COMPOSITE_SHADE:         return ("GIMP_COMPOSITE_SHADE");
     case GIMP_COMPOSITE_SWAP:          return ("GIMP_COMPOSITE_SWAP");
diff -Nrup gimp/app/composite/gimp-composite-generic.c gimp-p/app/composite/gimp-composite-generic.c
--- gimp/app/composite/gimp-composite-generic.c	2012-04-11 16:23:02.608705906 +0200
+++ gimp-p/app/composite/gimp-composite-generic.c	2012-04-11 16:39:09.700755786 +0200
@@ -33,6 +33,7 @@
 
 #include "base/base-types.h"
 
+#include "gimp-lab-lch.h"
 #include "gimp-composite.h"
 #include "gimp-composite-generic.h"
 
@@ -412,6 +413,61 @@ gimp_composite_hue_any_any_any_generic (
 
 
 /**
+ * gimp_composite_lch_hue_any_any_any_generic:
+ * @ctx: The compositing context.
+ *
+ * Perform a conversion to hue only of the source ctx->A using
+ * the hue of ctx->B.
+ **/
+void
+gimp_composite_lch_hue_any_any_any_generic (GimpCompositeContext * ctx)
+{
+  const guchar *src1 = ctx->A;
+  const guchar *src2 = ctx->B;
+  guchar *dest = ctx->D;
+  guint length = ctx->n_pixels;
+  guint bytes1 = gimp_composite_pixel_bpp[ctx->pixelformat_A];
+  guint bytes2 = gimp_composite_pixel_bpp[ctx->pixelformat_B];
+  const guint has_alpha1 = HAS_ALPHA(bytes1);
+  const guint has_alpha2 = HAS_ALPHA(bytes2);
+  GimpLch16   lch1, lch2;
+
+  if (bytes1 > 2)
+    {
+      /*  assumes inputs are only 4 byte RGBA pixels  */
+      while (length--)
+        {
+          gimp_rgb_to_lch16 (src1[0], src1[1], src1[2], &lch1);
+          gimp_rgb_to_lch16 (src2[0], src2[1], src2[2], &lch2);
+
+          /*  Use L*,C* from below, H* from upper layer
+           *
+           *  Composition should have no effect if saturation is zero.
+           *  otherwise, black would be painted red (see bug #123296).
+           */
+          if (lch2.c > 0)
+            lch1.h = lch2.h;
+
+          gimp_lch16_to_rgb (&lch1, dest, dest + 1, dest + 2);
+
+          if (has_alpha1 && has_alpha2)
+            dest[3] = MIN(src1[3], src2[3]);
+          else if (has_alpha2)
+            dest[3] = src2[3];
+
+          src1 += bytes1;
+          src2 += bytes2;
+          dest += bytes2;
+        }
+    }
+  else
+    {
+      ctx->D = ctx->B;
+    }
+}
+
+
+/**
  * gimp_composite_saturation_any_any_any_generic:
  * @ctx: The compositing context.
  *
@@ -471,6 +527,54 @@ gimp_composite_saturation_any_any_any_ge
 
 
 /**
+ * gimp_composite_lch_saturation_any_any_any_generic:
+ * @ctx: The compositing context.
+ *
+ * Perform a conversion to saturation only of the source ctx->A using
+ * the saturation level of ctx->B.
+ *
+ **/
+void
+gimp_composite_lch_saturation_any_any_any_generic (GimpCompositeContext * ctx)
+{
+  const guchar *src1 = ctx->A;
+  const guchar *src2 = ctx->B;
+  guchar *dest = ctx->D;
+  guint length = ctx->n_pixels;
+  guint bytes1 = gimp_composite_pixel_bpp[ctx->pixelformat_A];
+  guint bytes2 = gimp_composite_pixel_bpp[ctx->pixelformat_B];
+  const guint has_alpha1 = HAS_ALPHA(bytes1);
+  const guint has_alpha2 = HAS_ALPHA(bytes2);
+  GimpLch16   lch1, lch2;
+
+  if (bytes1 > 2) {
+    /*  assumes inputs are only 4 byte RGBA pixels  */
+    while (length--)
+      {
+        gimp_rgb_to_lch16 (src1[0], src1[1], src1[2], &lch1);
+        gimp_rgb_to_lch16 (src2[0], src2[1], src2[2], &lch2);
+
+        /*  Use L*,H* from below, C* from upper layer */
+        lch1.c = lch2.c;
+
+        gimp_lch16_to_rgb (&lch1, dest, dest + 1, dest + 2);
+
+        if (has_alpha1 && has_alpha2)
+          dest[3] = MIN(src1[3], src2[3]);
+        else if (has_alpha2)
+          dest[3] = src2[3];
+
+        src1 += bytes1;
+        src2 += bytes2;
+        dest += bytes2;
+      }
+  } else {
+    ctx->D = ctx->B;
+  }
+}
+
+
+/**
  * gimp_composite_value_any_any_any_generic:
  * @ctx: The compositing context.
  *
@@ -531,6 +635,55 @@ gimp_composite_value_any_any_any_generic
 
 
 /**
+ * gimp_composite_lch_lightness_any_any_any_generic:
+ * @ctx: The compositing context.
+ *
+ * Perform a conversion to value only of the source ctx->A using
+ * the value of ctx->B.
+ *
+ **/
+void
+gimp_composite_lch_lightness_any_any_any_generic (GimpCompositeContext * ctx)
+{
+  const guchar *src1 = ctx->A;
+  const guchar *src2 = ctx->B;
+  guchar *dest = ctx->D;
+  guint length = ctx->n_pixels;
+  guint bytes1 = gimp_composite_pixel_bpp[ctx->pixelformat_A];
+  guint bytes2 = gimp_composite_pixel_bpp[ctx->pixelformat_B];
+  const guint has_alpha1 = HAS_ALPHA(bytes1);
+  const guint has_alpha2 = HAS_ALPHA(bytes2);
+  GimpLab16   lab1, lab2;
+
+  if (bytes1 > 2) {
+    /*  assumes inputs are only 4 byte RGBA pixels  */
+    /*  assumes inputs are only 4 byte RGBA pixels  */
+    while (length--)
+      {
+        gimp_rgb_to_lab16 (src1[0], src1[1], src1[2], &lab1);
+        gimp_rgb_to_lab16 (src2[0], src2[1], src2[2], &lab2);
+
+        /*  Use a*,b* from below, L* from upper layer */
+        lab1.l = lab2.l;
+
+        gimp_lab16_to_rgb (&lab1, dest, dest + 1, dest + 2);
+
+        if (has_alpha1 && has_alpha2)
+          dest[3] = MIN(src1[3], src2[3]);
+        else if (has_alpha2)
+          dest[3] = src2[3];
+
+        src1 += bytes1;
+        src2 += bytes2;
+        dest += bytes2;
+      }
+  } else {
+    ctx->D = ctx->B;
+  }
+}
+
+
+/**
  * gimp_composite_color_only_any_any_any_generic:
  * @ctx: The compositing context.
  *
@@ -590,6 +743,54 @@ gimp_composite_color_only_any_any_any_ge
   }
 }
 
+
+/**
+ * gimp_composite_lch_color_only_any_any_any_generic:
+ * @ctx: The compositing context.
+ *
+ * Perform a conversion to of the source ctx->A using
+ * the chroma and hue values of ctx->B.
+ *
+ **/
+void
+gimp_composite_lch_color_only_any_any_any_generic (GimpCompositeContext * ctx)
+{
+  const guchar *src1 = ctx->A;
+  const guchar *src2 = ctx->B;
+  guchar *dest = ctx->D;
+  guint length = ctx->n_pixels;
+  guint bytes1 = gimp_composite_pixel_bpp[ctx->pixelformat_A];
+  guint bytes2 = gimp_composite_pixel_bpp[ctx->pixelformat_B];
+  const guint has_alpha1 = HAS_ALPHA(bytes1);
+  const guint has_alpha2 = HAS_ALPHA(bytes2);
+  GimpLab16 lab1, lab2;
+
+  if (bytes1 > 2) {
+    /*  assumes inputs are only 4 byte RGBA pixels  */
+    while (length--)
+      {
+        gimp_rgb_to_lab16 (src1[0], src1[1], src1[2], &lab1);
+        gimp_rgb_to_lab16 (src2[0], src2[1], src2[2], &lab2);
+
+        /*  Use L* from below, a*b* from upper layer  */
+        lab2.l = lab1.l;
+
+        gimp_lab16_to_rgb (&lab2, dest, dest + 1, dest + 2);
+
+        if (has_alpha1 && has_alpha2)
+          dest[3] = MIN(src1[3], src2[3]);
+        else if (has_alpha2)
+          dest[3] = src2[3];
+
+        src1 += bytes1;
+        src2 += bytes2;
+        dest += bytes2;
+      }
+  } else {
+    ctx->D = ctx->B;
+  }
+}
+
 /**
  * gimp_composite_behind_any_any_any_generic:
  * @ctx: The compositing context.
@@ -1461,5 +1662,7 @@ gimp_composite_generic_init (void)
   for (i = 256; i <= 510; i++)
     add_lut[i] = 255;
 
+  lab_lch_init ();
+
   return TRUE;
 }
diff -Nrup gimp/app/composite/gimp-composite-generic.h gimp-p/app/composite/gimp-composite-generic.h
--- gimp/app/composite/gimp-composite-generic.h	2012-04-11 16:23:02.608705906 +0200
+++ gimp-p/app/composite/gimp-composite-generic.h	2012-04-11 16:39:09.700755786 +0200
@@ -43,4 +43,8 @@ void gimp_composite_subtract_any_any_any
 void gimp_composite_swap_any_any_any_generic (GimpCompositeContext *ctx);
 void gimp_composite_value_any_any_any_generic (GimpCompositeContext *ctx);
 void gimp_composite_behind_any_any_any_generic (GimpCompositeContext *ctx);
+void gimp_composite_lch_hue_any_any_any_generic (GimpCompositeContext *ctx);
+void gimp_composite_lch_saturation_any_any_any_generic (GimpCompositeContext *ctx);
+void gimp_composite_lch_color_only_any_any_any_generic (GimpCompositeContext *ctx);
+void gimp_composite_lch_lightness_any_any_any_generic (GimpCompositeContext *ctx);
 #endif
diff -Nrup gimp/app/composite/gimp-composite-generic-installer.c gimp-p/app/composite/gimp-composite-generic-installer.c
--- gimp/app/composite/gimp-composite-generic-installer.c	2012-04-11 16:23:02.608705906 +0200
+++ gimp-p/app/composite/gimp-composite-generic-installer.c	2012-04-11 16:39:09.696755786 +0200
@@ -1680,6 +1680,262 @@ static const struct install_table {
  { GIMP_COMPOSITE_ANTI_ERASE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, gimp_composite_anti_erase_any_any_any_generic },
  { GIMP_COMPOSITE_ANTI_ERASE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_anti_erase_any_any_any_generic },
  { GIMP_COMPOSITE_ANTI_ERASE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_anti_erase_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_HUE, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_hue_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_SATURATION, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_saturation_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_COLOR_ONLY, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_color_only_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_V8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_VA8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGB8, gimp_composite_lch_lightness_any_any_any_generic },
+ { GIMP_COMPOSITE_LCH_LIGHTNESS, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, GIMP_PIXELFORMAT_RGBA8, gimp_composite_lch_lightness_any_any_any_generic },
  { GIMP_COMPOSITE_BLEND, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, gimp_composite_blend_any_any_any_generic },
  { GIMP_COMPOSITE_BLEND, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_VA8, gimp_composite_blend_any_any_any_generic },
  { GIMP_COMPOSITE_BLEND, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_V8, GIMP_PIXELFORMAT_RGB8, gimp_composite_blend_any_any_any_generic },
diff -Nrup gimp/app/composite/gimp-composite.h gimp-p/app/composite/gimp-composite.h
--- gimp/app/composite/gimp-composite.h	2012-04-11 16:23:02.612705906 +0200
+++ gimp-p/app/composite/gimp-composite.h	2012-04-11 16:39:09.700755786 +0200
@@ -98,6 +98,10 @@ typedef enum
   GIMP_COMPOSITE_ERASE         = GIMP_ERASE_MODE,
   GIMP_COMPOSITE_REPLACE       = GIMP_REPLACE_MODE,
   GIMP_COMPOSITE_ANTI_ERASE    = GIMP_ANTI_ERASE_MODE,
+  GIMP_COMPOSITE_LCH_HUE       = GIMP_LCH_HUE_MODE,
+  GIMP_COMPOSITE_LCH_SATURATION = GIMP_LCH_SATURATION_MODE,
+  GIMP_COMPOSITE_LCH_COLOR_ONLY = GIMP_LCH_COLOR_MODE,
+  GIMP_COMPOSITE_LCH_LIGHTNESS  = GIMP_LCH_LIGHTNESS_MODE,
   GIMP_COMPOSITE_BLEND,
   GIMP_COMPOSITE_SHADE,
   GIMP_COMPOSITE_SWAP,
diff -Nrup gimp/app/composite/gimp-lab-lch.c gimp-p/app/composite/gimp-lab-lch.c
--- gimp/app/composite/gimp-lab-lch.c	1970-01-01 01:00:00.000000000 +0100
+++ gimp-p/app/composite/gimp-lab-lch.c	2012-04-11 16:39:09.704755786 +0200
@@ -0,0 +1,460 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ * Copyright (C) 2010 Rupert Weber
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "config.h"
+
+#include <math.h>
+#include <glib-object.h>
+
+#include "base/base-types.h"
+#include "gimp-lab-lch.h"
+
+
+/* Setting LAB_BITS > 15 will lead to overflows. */
+#define LAB_BITS       15
+
+/* a*b* scaling:
+ *  110 fits sRGB, 140 also fits AdobeRGB
+ */
+#define LAB_SCALE_AB  110.
+
+#define LAB_UMAX (1 << LAB_BITS)
+#define LAB_SMAX (LAB_UMAX / 2)
+
+#define FLT2SINT16(a) ((gint)((a) >= 0 ? (a) * LAB_SMAX + 0.5 : \
+                                         (a) * LAB_SMAX - 0.5))
+#define FLT2UINT16(a) ((gint)((a) * LAB_UMAX + 0.5))
+#define FLT2UINT8(a)  ((gint)((a) * 0xff + 0.5))
+
+/* Results are slightly better if we don't round here. Go figure.
+ * #define DIV_INT16(a,b) ((((a) << LAB_BITS) + ((b) >> 1)) / (b))
+ */
+#define DIV_INT16(a,b) (((a) << LAB_BITS) / (b))
+#define MUL_INT16(a,b) (((a)*(b) + (LAB_UMAX / 2)) >> LAB_BITS)
+
+#define LAB_LMIN (FLT2UINT16 (16./116. * 116./100.))
+
+static guint16        xyz_to_lab_lut[LAB_UMAX + 1];
+static gint32             cube16_lut[(LAB_UMAX*3)/2 + 1];
+static guint16              sq16_lut[2 * LAB_SMAX + 1];
+static guint16            sqrt16_lut[LAB_UMAX + 1];
+static guint16            atan16_lut[LAB_UMAX + 1];
+static gint16              cos16_lut[LAB_UMAX + 1];
+static guint16 srgb_to_xyz_gamma_lut[0x100];
+static guchar  xyz_to_srgb_gamma_lut[LAB_UMAX + 1];
+
+
+#define COS16(a) (cos16_lut[(a)])
+#define SIN16(a) ((a) < (LAB_UMAX / 4) ? COS16 ((a) + (LAB_UMAX*3) / 4 + 1) : \
+                                         COS16 ((a) - LAB_UMAX / 4          ))
+#define SQUARE16(a) (sq16_lut[(a) + LAB_SMAX])
+
+#define SQRT2 (FLT2UINT16 (1.4142))
+
+static inline gint atan2_int (gint y, gint x);
+static inline gint lab_to_xyz_comp (gint c);
+static inline void lab16_to_lch16 (const GimpLab16 *lab, GimpLch16 *lch);
+static inline void lch16_to_lab16 (const GimpLch16 *lch, GimpLab16 *lab);
+
+
+
+/**
+ * gimp_rgb_to_lab16
+ * @r:   Red value 0-255
+ * @g:   Green value 0-255
+ * @b:   Blue value 0-255
+ * @lab: Resulting CIELAB D65 color value
+ *
+ * Converts an sRGB color value to CIELAB D65
+ **/
+void
+gimp_rgb_to_lab16 (gint r, gint g, gint b, GimpLab16 *lab)
+{
+  gint64 x, y, z;
+  gint64 xtmp, ytmp, ztmp;
+
+ /*
+  * Sources:
+  *    http://www.brucelindbloom.com/
+  *    http://www.easyrgb.com
+  */
+
+  /* First convert sRGB to XYZ/D65 */
+
+  xtmp = srgb_to_xyz_gamma_lut[CLAMP (r, 0, 255)];
+  ytmp = srgb_to_xyz_gamma_lut[CLAMP (g, 0, 255)];
+  ztmp = srgb_to_xyz_gamma_lut[CLAMP (b, 0, 255)];
+
+  x  = MUL_INT16 (xtmp, FLT2UINT16 (.4124564 / 0.95047));
+  x += MUL_INT16 (ytmp, FLT2UINT16 (.3575761 / 0.95047));
+  x += MUL_INT16 (ztmp, FLT2UINT16 (.1804375 / 0.95047));
+  x = CLAMP (x, 0, LAB_UMAX);
+
+  y  = MUL_INT16 (xtmp, FLT2UINT16 (.2126729 / 1.00000));
+  y += MUL_INT16 (ytmp, FLT2UINT16 (.7151522 / 1.00000));
+  y += MUL_INT16 (ztmp, FLT2UINT16 (.0721750 / 1.00000));
+  y = CLAMP (y, 0, LAB_UMAX);
+
+  z  = MUL_INT16 (xtmp, FLT2UINT16 (.0193339 / 1.08883));
+  z += MUL_INT16 (ytmp, FLT2UINT16 (.1191920 / 1.08883));
+  z += MUL_INT16 (ztmp, FLT2UINT16 (.9503041 / 1.08883));
+  z = CLAMP (z, 0, LAB_UMAX);
+
+  /*                                    ^         ^
+   *                                    |         +--- D65 reference white
+   *                                    +------------- sRGB to XYZ/D65 matrix
+   */
+
+  /* From here on it's XYZ to L*a*b* */
+
+  x = xyz_to_lab_lut[x];
+  y = xyz_to_lab_lut[y];
+  z = xyz_to_lab_lut[z];
+
+  /* up to here, everything was in range [0..1.0], i.e. [0..32768],
+   * now we have to scale. (Actually, results were in [4520..32768])
+   * Beware that a* and b* are signed quantities. Gray means a*=0, b*=0.
+   *
+   * The ranges of a* and b* (and L*?) will depend on the source color space.
+   * Here, for sRGB with the scaling below, we get:
+   *
+   *  L*:    0.0   - 100.0    =>      0 - 32768
+   *  a*:  -86.183 -  98.234  => -12836 - 14632
+   *  b*: -107.860 -  94.478  => -16065 - 14072
+   */
+
+  lab->l = CLAMP (MUL_INT16 (FLT2UINT16 (116. / 100.), y) - LAB_LMIN,
+                  0, LAB_UMAX);
+  lab->A = MUL_INT16 (FLT2SINT16 (500. / LAB_SCALE_AB), x - y);
+  lab->B = MUL_INT16 (FLT2SINT16 (200. / LAB_SCALE_AB), y - z);
+}
+
+
+
+/**
+ * gimp_lab16_to_rgb
+ * @lab: CIELAB D65 color value to convert
+ * @r:   Red result 0-255
+ * @g:   Green result 0-255
+ * @b:   Blue result 0-255
+ *
+ * Converts a CIELAB D65 color value to sRGB
+ **/
+void
+gimp_lab16_to_rgb (const GimpLab16 *lab, guchar *r, guchar *g, guchar *b)
+{
+  gint64  x, y, z;
+  gint64  rtmp, gtmp, btmp;
+
+ /* This function assumes D65 and converts to sRGB!
+  *
+  * Sources:
+  *    http://www.brucelindbloom.com/
+  *    http://www.easyrgb.com
+  */
+
+  /* First, convert L*a*b* to XYZ */
+
+  y = DIV_INT16 (lab->l + LAB_LMIN, FLT2UINT16 (116. / 100.));
+  y = CLAMP (y, 0, LAB_UMAX);
+
+  x = y + DIV_INT16 (lab->A, FLT2SINT16 (500. / LAB_SCALE_AB));
+  z = y - DIV_INT16 (lab->B, FLT2SINT16 (200. / LAB_SCALE_AB));
+
+  x = lab_to_xyz_comp (x);
+  y = lab_to_xyz_comp (y);
+  z = lab_to_xyz_comp (z);
+
+  /* From here on convert XYZ/D65 to sRGB */
+
+  rtmp  = MUL_INT16 (x, FLT2UINT16 ( 3.2404542 * 0.9504700));
+  rtmp += MUL_INT16 (y, FLT2UINT16 (-1.5371385 * 1.0000000));
+  rtmp += MUL_INT16 (z, FLT2UINT16 (-0.4985314 * 1.0888300));
+
+  gtmp  = MUL_INT16 (x, FLT2UINT16 (-0.9692660 * 0.9504700));
+  gtmp += MUL_INT16 (y, FLT2UINT16 ( 1.8760108 * 1.0000000));
+  gtmp += MUL_INT16 (z, FLT2UINT16 ( 0.0415560 * 1.0888300));
+
+  btmp  = MUL_INT16 (x, FLT2UINT16 ( 0.0556434 * 0.9504700));
+  btmp += MUL_INT16 (y, FLT2UINT16 (-0.2040259 * 1.0000000));
+  btmp += MUL_INT16 (z, FLT2UINT16 ( 1.0572252 * 1.0888300));
+
+  /* these CLAMPs are where we say good-bye to out-of-gamut colors */
+  *r = xyz_to_srgb_gamma_lut[CLAMP (rtmp, 0, LAB_UMAX)];
+  *g = xyz_to_srgb_gamma_lut[CLAMP (gtmp, 0, LAB_UMAX)];
+  *b = xyz_to_srgb_gamma_lut[CLAMP (btmp, 0, LAB_UMAX)];
+
+}
+
+
+
+/**
+ * gimp_rgb_to_lch16
+ * @r:   Red value 0-255
+ * @g:   Green value 0-255
+ * @b:   Blue value 0-255
+ * @lch: Result in CIE L*C*H* D65
+ *
+ * Converts an sRGB color value to CIELCH D65 (?)
+ **/
+void
+gimp_rgb_to_lch16 (gint r, gint g, gint b, GimpLch16 *lch)
+{
+  GimpLab16 lab;
+
+  gimp_rgb_to_lab16 (r, g, b, &lab);
+  lab16_to_lch16 (&lab, lch);
+}
+
+
+
+/**
+ * gimp_lch16_to_rgb
+ * @lch: CIE L*C*H* D65 color value to convert
+ * @r:   Red result 0-255
+ * @g:   Green result 0-255
+ * @b:   Blue result 0-255
+ *
+ * Converts a CIELCH D65 (?) color value to RGB
+ **/
+void
+gimp_lch16_to_rgb (const GimpLch16 *lch, guchar *r, guchar *g, guchar *b)
+{
+  GimpLab16 lab;
+
+  lch16_to_lab16 (lch, &lab);
+  gimp_lab16_to_rgb (&lab, r, g, b);
+}
+
+
+
+/**
+ * lab_lch_init:
+ *
+ * Must be called before using any of the L*a*b or L*C*H* conversion
+ * functions.
+ **/
+void
+lab_lch_init (void)
+{
+  gint    i, n;
+  gdouble d;
+
+  n = G_N_ELEMENTS (xyz_to_lab_lut);
+  for (i = 0; i < n; i++)
+    {
+      d = (gdouble) i / (gdouble) (n - 1);
+      if (d > 0.008856)
+        xyz_to_lab_lut[i] = FLT2UINT16 (cbrt (d));
+      else
+        xyz_to_lab_lut[i] = FLT2UINT16 (7.787 * d + 16./116.);
+    }
+
+  n = G_N_ELEMENTS (cube16_lut);
+  for (i = 0; i < n; i++)
+    {
+      d =  i * 1.5 / (gdouble) (n - 1);
+      cube16_lut[i] = FLT2UINT16 (d * d * d);
+    }
+
+  n = G_N_ELEMENTS (sqrt16_lut);
+  for (i = 0; i < n; i++)
+    {
+      d = (gdouble) i / (gdouble) (n - 1);
+      sqrt16_lut[i] = FLT2UINT16 (sqrt (d));
+    }
+
+  n = G_N_ELEMENTS (sq16_lut);
+  for (i = 0; i < n; i++)
+    {
+      d = (gdouble) (i - (n-1)/2) / (gdouble) (n - 1) * 2.0;
+      sq16_lut[i] = FLT2UINT16 (d * d);
+    }
+
+  n = G_N_ELEMENTS (atan16_lut);
+  for (i = 0; i < n; i++)
+    {
+      d = (gdouble) i / (gdouble) (n - 1);
+      d = atan (d) / (2 * G_PI);
+      while (d > 1.0)
+        d -= 1.0;
+      while (d < 0)
+        d += 1.0;
+      atan16_lut[i] = FLT2UINT16 (d);
+    }
+
+  n = G_N_ELEMENTS (cos16_lut);
+  for (i = 0; i < n; i++)
+    {
+      d  = (gdouble) i / (gdouble) (n - 1);
+      d *= 2.0 * G_PI;
+      cos16_lut[i] = FLT2SINT16 (cos (d));
+    }
+
+  n = G_N_ELEMENTS (srgb_to_xyz_gamma_lut);
+  for (i = 0; i < n; i++)
+    {
+      d = (gdouble) i / (gdouble) (n - 1);
+
+      if (d > 0.04045)
+        d = pow ((d + 0.055) / 1.055, 2.4);
+      else
+        d = d / 12.92;
+
+      srgb_to_xyz_gamma_lut[i] = FLT2UINT16 (d);
+    }
+
+  n = G_N_ELEMENTS (xyz_to_srgb_gamma_lut);
+  for (i = 0; i < n; i++)
+    {
+      d = (gdouble) i / (gdouble) (n - 1);
+
+      if (d > 0.0031308)
+        d = 1.055 * pow (d, 1/2.4) - 0.055;
+      else
+        d = d * 12.92;
+
+      xyz_to_srgb_gamma_lut[i] = FLT2UINT8 (d);
+    }
+
+}
+
+
+
+/**************************************************************
+ * Local functions
+ **************************************************************/
+
+/**
+ * lab_to_xyz_comp:
+ * @c: component to translate to XYZ
+ *
+ * L*a*b* to XYZ single component
+ **/
+static inline gint
+lab_to_xyz_comp (gint c)
+{
+  gint x;
+
+  if (c > FLT2UINT16 (0.206893)) /* 0.206893 = 0.008856^(1/3) */
+      x = cube16_lut[CLAMP (c, 0, (LAB_UMAX * 3) / 2)];
+  else
+    { /* here both input and output may be < 0 (for out of sRGB-gamut colors) */
+      x = DIV_INT16 (MAX (c, 0) - FLT2UINT16 (16. / 116.),
+          FLT2UINT16 (7.787 / 8));
+      x /= 8;
+    }
+  return x;
+}
+
+
+
+/**
+ * atan2_int:
+ *
+ * atan2() for 16bit integers
+ **/
+static inline gint
+atan2_int (gint y, gint x)
+{
+  const gint pi = LAB_UMAX / 2;
+  gint       t, add = 0;
+
+  /* if either x or y are 0, return hard-coded answer */
+  if (x == 0)
+      return y == 0 ? 0 : y > 0 ? pi / 2 : (pi * 3) / 2;
+  if (y == 0)
+      return x > 0 ? 0 : pi;
+
+  /* rotate all quadrants to upper right */
+  if (x < 0)
+    {
+      if (y > 0)
+        { /* Q2 (upper left) */
+          add = pi / 2;
+          t = x;
+          x = y;
+          y = -t;
+        }
+      else
+        { /* Q3 (lower left) */
+          add = pi;
+          x = -x;
+          y = -y;
+        }
+    }
+  else /* x > 0 */
+    {
+      if (y < 0)
+        { /* Q4 (lower right) */
+          add = (pi * 3) / 2;
+          t = x;
+          x = -y;
+          y = t;
+        }
+      /* else we are already in Q1 */
+     }
+
+  if (y > x) /* fold Q1 to its lower half */
+      return add - atan16_lut[(x << LAB_BITS) / y] + pi / 2;
+
+  return  add + atan16_lut[(y << LAB_BITS) / x];
+}
+
+
+
+/**
+ * lab16_to_lch16
+ * @lab: L*a*b* color value to convert
+ * @lch: L*C*H* color value result
+ *
+ * Converts a CIE L*a*b* color value to CIE L*C*H*
+ **/
+static inline void
+lab16_to_lch16 (const GimpLab16 *lab, GimpLch16 *lch)
+{
+  gint sq;
+
+  lch->l = lab->l;
+
+  sq = SQUARE16 (lab->A) + SQUARE16 (lab->B);
+  lch->c = sqrt16_lut[sq / 2];
+
+  lch->h = atan2_int (lab->B, lab->A);
+  if (lch->h == LAB_UMAX)
+    lch->h = 0;
+}
+
+
+
+/**
+ * lch16_to_lab16
+ * @lch: L*C*H* color value to convert
+ * @lab: L*a*b* color value result
+ *
+ * Converts a CIE L*C*H* color value to CIE L*a*b*
+ **/
+static inline void
+lch16_to_lab16 (const GimpLch16 *lch, GimpLab16 *lab)
+{
+  lab->l = lch->l;
+
+  lab->A = MUL_INT16 (MUL_INT16(lch->c, COS16 (lch->h)), SQRT2);
+  lab->B = MUL_INT16 (MUL_INT16(lch->c, SIN16 (lch->h)), SQRT2);
+}
diff -Nrup gimp/app/composite/gimp-lab-lch.h gimp-p/app/composite/gimp-lab-lch.h
--- gimp/app/composite/gimp-lab-lch.h	1970-01-01 01:00:00.000000000 +0100
+++ gimp-p/app/composite/gimp-lab-lch.h	2012-04-11 16:39:09.704755786 +0200
@@ -0,0 +1,42 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ * Copyright (C) 2010 Rupert Weber
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef GIMP_LAB_LCH_H
+#define GIMP_LAB_LCH_H
+
+typedef struct {
+  gint  l;
+  gint  A;  /* still keeping these uppercase in case we want */
+  gint  B;  /* to add alpha to struct                        */
+} GimpLab16;
+
+typedef struct {
+  gint  l;
+  gint  c;
+  gint  h;
+} GimpLch16;
+
+void lab_lch_init (void);
+void gimp_rgb_to_lab16 (gint r, gint g, gint b, GimpLab16 *lab);
+void gimp_lab16_to_rgb (const GimpLab16 *lab, guchar *r, guchar *g, guchar *b);
+void gimp_rgb_to_lch16 (gint r, gint g, gint b, GimpLch16 *lch);
+void gimp_lch16_to_rgb (const GimpLch16 *lch, guchar *r, guchar *g, guchar *b);
+
+
+#endif
diff -Nrup gimp/app/composite/Makefile.am gimp-p/app/composite/Makefile.am
--- gimp/app/composite/Makefile.am	2012-04-11 16:23:02.608705906 +0200
+++ gimp-p/app/composite/Makefile.am	2012-04-11 16:39:09.696755786 +0200
@@ -60,6 +60,8 @@ libcompositevis_a_SOURCES = \
 libcomposite_a_sources = \
 	gimp-composite-generic.c	\
 	gimp-composite-generic.h	\
+	gimp-lab-lch.c			\
+	gimp-lab-lch.h			\
 	gimp-composite-util.h		\
 	gimp-composite-x86.h		\
 	gimp-composite.c		\
diff -Nrup gimp/app/composite/make-installer.py gimp-p/app/composite/make-installer.py
--- gimp/app/composite/make-installer.py	2012-04-11 16:23:02.612705906 +0200
+++ gimp-p/app/composite/make-installer.py	2012-04-11 16:39:09.704755786 +0200
@@ -73,6 +73,10 @@ composite_modes=[
   "GIMP_COMPOSITE_ERASE" ,
   "GIMP_COMPOSITE_REPLACE" ,
   "GIMP_COMPOSITE_ANTI_ERASE",
+  "GIMP_COMPOSITE_LCH_HUE",
+  "GIMP_COMPOSITE_LCH_SATURATION",
+  "GIMP_COMPOSITE_LCH_COLOR_ONLY",
+  "GIMP_COMPOSITE_LCH_LIGHTNESS",
   "GIMP_COMPOSITE_BLEND",
   "GIMP_COMPOSITE_SHADE",
   "GIMP_COMPOSITE_SWAP",
diff -Nrup gimp/app/core/gimpimage.h gimp-p/app/core/gimpimage.h
--- gimp/app/core/gimpimage.h	2012-04-11 16:23:02.644705908 +0200
+++ gimp-p/app/core/gimpimage.h	2012-04-11 16:39:09.704755786 +0200
@@ -91,6 +91,7 @@ typedef struct _GimpImageClass GimpImage
 struct _GimpImage
 {
   GimpViewable  parent_instance;
+  gboolean      was_loaded_with_obsolete_modes;
 
   Gimp         *gimp;  /*  the GIMP the image belongs to  */
 };
diff -Nrup gimp/app/core/gimplayer.c gimp-p/app/core/gimplayer.c
--- gimp/app/core/gimplayer.c	2012-04-11 16:23:02.648705908 +0200
+++ gimp-p/app/core/gimplayer.c	2012-04-11 16:39:09.704755786 +0200
@@ -1119,6 +1119,10 @@ gimp_layer_sync_mode_node (GimpLayer *la
         case GIMP_ERASE_MODE:
         case GIMP_REPLACE_MODE:
         case GIMP_ANTI_ERASE_MODE:
+        case GIMP_LCH_HUE_MODE:
+        case GIMP_LCH_SATURATION_MODE:
+        case GIMP_LCH_COLOR_MODE:
+        case GIMP_LCH_LIGHTNESS_MODE:
           gegl_node_set (mode_node,
                          "operation",  "gimp:point-layer-mode",
                          "blend-mode", layer->mode,
diff -Nrup gimp/app/gegl/gimp-gegl-utils.c gimp-p/app/gegl/gimp-gegl-utils.c
--- gimp/app/gegl/gimp-gegl-utils.c	2012-04-11 16:23:02.684705910 +0200
+++ gimp-p/app/gegl/gimp-gegl-utils.c	2012-04-11 16:39:09.704755786 +0200
@@ -146,6 +146,10 @@ gimp_layer_mode_to_gegl_operation (GimpL
     case GIMP_ERASE_MODE:         return "gimp:erase-mode";
     case GIMP_REPLACE_MODE:       return "gimp:replace-mode";
     case GIMP_ANTI_ERASE_MODE:    return "gimp:anti-erase-mode";
+    case GIMP_LCH_HUE_MODE:       return "gimp:hue-mode";
+    case GIMP_LCH_SATURATION_MODE:return "gimp:saturation-mode";
+    case GIMP_LCH_COLOR_MODE:     return "gimp:color-mode";
+    case GIMP_LCH_LIGHTNESS_MODE: return "gimp:value-mode";
     default:
       break;
     }
diff -Nrup gimp/app/gegl/gimpoperationpointlayermode.c gimp-p/app/gegl/gimpoperationpointlayermode.c
--- gimp/app/gegl/gimpoperationpointlayermode.c	2012-04-11 16:23:02.692705910 +0200
+++ gimp-p/app/gegl/gimpoperationpointlayermode.c	2012-04-11 16:39:09.704755786 +0200
@@ -208,25 +208,29 @@ gimp_operation_point_layer_mode_get_new_
 
   switch (blend_mode)
     {
-    case GIMP_HUE_MODE:
+    case GIMP_HUE_MODE: /* XXX FIXME */
+    case GIMP_LCH_HUE_MODE:
       new_lchab[L] = in_lchab[L];
       new_lchab[C] = in_lchab[C];
       new_lchab[H] = lay_lchab[H];
       break;
 
-    case GIMP_SATURATION_MODE:
+    case GIMP_SATURATION_MODE: /* XXX FIXME */
+    case GIMP_LCH_SATURATION_MODE:
       new_lchab[L] = in_lchab[L];
       new_lchab[C] = lay_lchab[C];
       new_lchab[H] = in_lchab[H];
       break;
 
-    case GIMP_COLOR_MODE:
+    case GIMP_COLOR_MODE: /* XXX FIXME */
+    case GIMP_LCH_COLOR_MODE:
       new_lchab[L] = in_lchab[L];
       new_lchab[C] = lay_lchab[C];
       new_lchab[H] = lay_lchab[H];
       break;
 
-    case GIMP_VALUE_MODE: /* GIMP_LIGHTNESS_MODE */
+    case GIMP_VALUE_MODE:  /* XXX FIXME */
+    case GIMP_LCH_LIGHTNESS_MODE:
       new_lchab[L] = lay_lchab[L];
       new_lchab[C] = in_lchab[C];
       new_lchab[H] = in_lchab[H];
@@ -534,7 +538,11 @@ gimp_operation_point_layer_mode_process
         case GIMP_HUE_MODE:
         case GIMP_SATURATION_MODE:
         case GIMP_COLOR_MODE:
-        case GIMP_VALUE_MODE: /* GIMP_LIGHTNESS_MODE */
+        case GIMP_VALUE_MODE:
+        case GIMP_LCH_HUE_MODE:
+        case GIMP_LCH_SATURATION_MODE:
+        case GIMP_LCH_COLOR_MODE:
+        case GIMP_LCH_LIGHTNESS_MODE:
           /* Custom SVG 1.2:
            *
            * f(Sc, Dc) = New color
diff -Nrup gimp/app/paint-funcs/paint-funcs.c gimp-p/app/paint-funcs/paint-funcs.c
--- gimp/app/paint-funcs/paint-funcs.c	2012-04-11 16:23:02.700705911 +0200
+++ gimp-p/app/paint-funcs/paint-funcs.c	2012-04-11 16:39:09.708755786 +0200
@@ -86,7 +86,11 @@ static const LayerMode layer_modes[] =
   { TRUE,  FALSE, TRUE,  },  /*  GIMP_COLOR_ERASE_MODE   */
   { TRUE,  FALSE, TRUE,  },  /*  GIMP_ERASE_MODE         */
   { TRUE,  TRUE,  TRUE,  },  /*  GIMP_REPLACE_MODE       */
-  { TRUE,  TRUE,  FALSE, }   /*  GIMP_ANTI_ERASE_MODE    */
+  { TRUE,  TRUE,  FALSE, },  /*  GIMP_ANTI_ERASE_MODE    */
+  { FALSE, FALSE, FALSE, },  /*  GIMP_LCH_HUE_MODE       */
+  { FALSE, FALSE, FALSE, },  /*  GIMP_LCH_SATURATION_MODE*/
+  { FALSE, FALSE, FALSE, },  /*  GIMP_LCH_COLOR_MODE     */
+  { FALSE, FALSE, FALSE, },  /*  GIMP_LCH_LIGHTNESS_MODE */
 };
 
 
diff -Nrup gimp/app/widgets/gimpbrushselect.c gimp-p/app/widgets/gimpbrushselect.c
--- gimp/app/widgets/gimpbrushselect.c	2012-04-11 16:23:02.768705914 +0200
+++ gimp-p/app/widgets/gimpbrushselect.c	2012-04-11 16:41:31.600763105 +0200
@@ -191,7 +191,7 @@ gimp_brush_select_constructed (GObject *
   gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
   gtk_widget_show (label);
 
-  select->paint_mode_menu = gimp_paint_mode_menu_new (TRUE, FALSE);
+  select->paint_mode_menu = gimp_paint_mode_menu_new (TRUE, FALSE, FALSE);
   gtk_box_pack_start (GTK_BOX (hbox), select->paint_mode_menu, TRUE, TRUE, 0);
   gtk_widget_show (select->paint_mode_menu);
 
diff -Nrup gimp/app/widgets/gimpitemtreeview.c gimp-p/app/widgets/gimpitemtreeview.c
--- gimp/app/widgets/gimpitemtreeview.c	2012-04-11 16:23:02.792705916 +0200
+++ gimp-p/app/widgets/gimpitemtreeview.c	2012-04-11 16:43:14.520768413 +0200
@@ -698,6 +698,77 @@ gimp_item_tree_view_add_options (GimpIte
     }
 }
 
+void
+gimp_item_tree_view_add_options_mul (GimpItemTreeView *view,
+                                     const gchar      *label,
+                                     GtkWidget        **options)
+{
+  GtkWidget *hbox;
+  GtkWidget *label_widget;
+  gint content_spacing;
+  gint button_spacing;
+  gint       i;
+  
+  g_return_if_fail (GIMP_IS_ITEM_TREE_VIEW (view));
+  g_return_if_fail (label != NULL && options != NULL);
+  for (i = 0; options[i] != NULL; i++)
+    g_return_if_fail (GTK_IS_WIDGET (options[i]));
+
+  gtk_widget_style_get (GTK_WIDGET (view),
+                        "content-spacing", &content_spacing,
+                        "button-spacing",  &button_spacing,
+                        NULL);
+
+  if (! view->priv->options_box)
+    {
+      GimpItemTreeViewClass *item_view_class;
+
+      item_view_class = GIMP_ITEM_TREE_VIEW_GET_CLASS (view);
+
+      view->priv->options_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, content_spacing);
+      gtk_box_pack_start (GTK_BOX (view), view->priv->options_box,
+                          FALSE, FALSE, 0);
+      gtk_box_reorder_child (GTK_BOX (view), view->priv->options_box, 0);
+      gtk_widget_show (view->priv->options_box);
+
+      if (! view->priv->image ||
+          ! item_view_class->get_active_item (view->priv->image))
+        {
+          gtk_widget_set_sensitive (view->priv->options_box, FALSE);
+        }
+    }
+
+      gboolean   group_created = FALSE;
+
+      hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, button_spacing);
+      gtk_box_pack_start (GTK_BOX (view->priv->options_box), hbox,
+                          FALSE, FALSE, 0);
+      gtk_widget_show (hbox);
+
+      if (! view->priv->options_group)
+        {
+          view->priv->options_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+          group_created = TRUE;
+        }
+
+      label_widget = gtk_label_new (label);
+      gtk_misc_set_alignment (GTK_MISC (label_widget), 0.0, 0.5);
+      gtk_size_group_add_widget (view->priv->options_group, label_widget);
+      gtk_box_pack_start (GTK_BOX (hbox), label_widget, FALSE, FALSE, 0);
+      gtk_widget_show (label_widget);
+
+      if (group_created)
+        g_object_unref (view->priv->options_group);
+      
+      /* pack multiple options, show only first one */
+      for (i = 0; options[i] != NULL; i++)
+      {
+        gtk_box_pack_start (GTK_BOX (hbox), options[i], TRUE, TRUE, 0);
+        if (i == 0)
+          gtk_widget_show (options[i]);
+      }
+}
+
 GtkWidget *
 gimp_item_tree_view_get_lock_box (GimpItemTreeView *view)
 {
diff -Nrup gimp/app/widgets/gimpitemtreeview.h gimp-p/app/widgets/gimpitemtreeview.h
--- gimp/app/widgets/gimpitemtreeview.h	2012-04-11 16:23:02.792705916 +0200
+++ gimp-p/app/widgets/gimpitemtreeview.h	2012-04-11 16:39:09.712755786 +0200
@@ -115,6 +115,9 @@ GimpImage * gimp_item_tree_view_get_imag
 void        gimp_item_tree_view_add_options     (GimpItemTreeView *view,
                                                  const gchar      *label,
                                                  GtkWidget        *options);
+void        gimp_item_tree_view_add_options_mul (GimpItemTreeView *view,
+                                                 const gchar      *label,
+                                                 GtkWidget       **options);
 GtkWidget * gimp_item_tree_view_get_lock_box    (GimpItemTreeView *view);
 
 GtkWidget * gimp_item_tree_view_get_new_button  (GimpItemTreeView *view);
diff -Nrup gimp/app/widgets/gimplayertreeview.c gimp-p/app/widgets/gimplayertreeview.c
--- gimp/app/widgets/gimplayertreeview.c	2012-04-11 16:23:02.792705916 +0200
+++ gimp-p/app/widgets/gimplayertreeview.c	2012-04-11 16:39:09.712755786 +0200
@@ -64,6 +64,8 @@
 struct _GimpLayerTreeViewPriv
 {
   GtkWidget       *paint_mode_menu;
+  GtkWidget       *paint_mode_menu_default;
+  GtkWidget       *paint_mode_menu_obsolete;
   GtkAdjustment   *opacity_adjustment;
   GtkWidget       *lock_alpha_toggle;
 
@@ -244,6 +246,7 @@ gimp_layer_tree_view_init (GimpLayerTree
   GtkWidget             *scale;
   GtkWidget             *hbox;
   GtkWidget             *image;
+  GtkWidget             *menus[3];
   GtkIconSize            icon_size;
   PangoAttribute        *attr;
 
@@ -263,17 +266,29 @@ gimp_layer_tree_view_init (GimpLayerTree
 
   /*  Paint mode menu  */
 
-  view->priv->paint_mode_menu = gimp_paint_mode_menu_new (FALSE, FALSE);
-  gimp_item_tree_view_add_options (GIMP_ITEM_TREE_VIEW (view),
-                                   _("Mode:"),
-                                   view->priv->paint_mode_menu);
+  view->priv->paint_mode_menu_default  = gimp_paint_mode_menu_new (FALSE, FALSE, FALSE);
+  view->priv->paint_mode_menu_obsolete = gimp_paint_mode_menu_new (FALSE, FALSE, TRUE);
+  view->priv->paint_mode_menu          = view->priv->paint_mode_menu_default;
+  menus[0] = view->priv->paint_mode_menu_default;
+  menus[1] = view->priv->paint_mode_menu_obsolete;
+  menus[2] = NULL;
+  gimp_item_tree_view_add_options_mul (GIMP_ITEM_TREE_VIEW (view),
+                                       _("Mode:"),
+                                       menus);
 
-  gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (view->priv->paint_mode_menu),
+  gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (view->priv->paint_mode_menu_default),
                               GIMP_NORMAL_MODE,
                               G_CALLBACK (gimp_layer_tree_view_paint_mode_menu_callback),
                               view);
 
-  gimp_help_set_help_data (view->priv->paint_mode_menu, NULL,
+  gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (view->priv->paint_mode_menu_obsolete),
+                              GIMP_NORMAL_MODE,
+                              G_CALLBACK (gimp_layer_tree_view_paint_mode_menu_callback),
+                              view);
+
+  gimp_help_set_help_data (view->priv->paint_mode_menu_default, NULL,
+                           GIMP_HELP_LAYER_DIALOG_PAINT_MODE_MENU);
+  gimp_help_set_help_data (view->priv->paint_mode_menu_obsolete, NULL,
                            GIMP_HELP_LAYER_DIALOG_PAINT_MODE_MENU);
 
   /*  Opacity scale  */
@@ -819,6 +834,24 @@ gimp_layer_tree_view_set_image (GimpItem
                                           gimp_layer_tree_view_floating_selection_changed,
                                           view);
 
+  if (image && GIMP_IS_LAYER_TREE_VIEW (view))
+    {
+      GimpLayerTreeView *ltview = GIMP_LAYER_TREE_VIEW (view);
+      GtkWidget         *menu;
+
+      if (image->was_loaded_with_obsolete_modes)
+        menu = ltview->priv->paint_mode_menu_obsolete;
+      else
+        menu = ltview->priv->paint_mode_menu_default;
+
+      if (menu != ltview->priv->paint_mode_menu)
+        {
+          gtk_widget_hide (ltview->priv->paint_mode_menu);
+          ltview->priv->paint_mode_menu = menu;
+          gtk_widget_show (ltview->priv->paint_mode_menu);
+        }
+    }
+
   GIMP_ITEM_TREE_VIEW_CLASS (parent_class)->set_image (view, image);
 
   if (gimp_item_tree_view_get_image (view))
diff -Nrup gimp/app/widgets/gimppropwidgets.c gimp-p/app/widgets/gimppropwidgets.c
--- gimp/app/widgets/gimppropwidgets.c	2012-04-11 16:23:02.800705916 +0200
+++ gimp-p/app/widgets/gimppropwidgets.c	2012-04-11 16:39:09.712755786 +0200
@@ -173,7 +173,7 @@ gimp_prop_paint_mode_menu_new (GObject
                 property_name, &value,
                 NULL);
 
-  menu = gimp_paint_mode_menu_new (with_behind_mode, with_replace_modes);
+  menu = gimp_paint_mode_menu_new (with_behind_mode, with_replace_modes, FALSE);
 
   gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (menu),
                               value,
diff -Nrup gimp/app/widgets/gimpwidgets-constructors.c gimp-p/app/widgets/gimpwidgets-constructors.c
--- gimp/app/widgets/gimpwidgets-constructors.c	2012-04-11 16:23:02.812705917 +0200
+++ gimp-p/app/widgets/gimpwidgets-constructors.c	2012-04-11 16:39:09.712755786 +0200
@@ -96,7 +96,8 @@ gimp_int_store_insert_separator_after (G
 
 GtkWidget *
 gimp_paint_mode_menu_new (gboolean with_behind_mode,
-                          gboolean with_replace_modes)
+                          gboolean with_replace_modes,
+                          gboolean with_obsolete_modes)
 {
   GtkListStore *store;
   GtkWidget    *combo;
@@ -125,10 +126,10 @@ gimp_paint_mode_menu_new (gboolean with_
                                            GIMP_GRAIN_MERGE_MODE,
                                            GIMP_DIVIDE_MODE,
 
-                                           GIMP_HUE_MODE,
-                                           GIMP_SATURATION_MODE,
-                                           GIMP_COLOR_MODE,
-                                           GIMP_VALUE_MODE);
+                                           GIMP_LCH_HUE_MODE,
+                                           GIMP_LCH_SATURATION_MODE,
+                                           GIMP_LCH_COLOR_MODE,
+                                           GIMP_LCH_LIGHTNESS_MODE);
 
   gimp_int_store_insert_separator_after (GIMP_INT_STORE (store),
                                          GIMP_DISSOLVE_MODE, -1);
@@ -168,6 +169,25 @@ gimp_paint_mode_menu_new (gboolean with_
                                           GIMP_ANTI_ERASE_MODE);
     }
 
+  if (with_obsolete_modes)
+    {
+      gimp_enum_store_insert_value_after (GIMP_ENUM_STORE (store),
+                                          GIMP_LCH_LIGHTNESS_MODE,
+                                          GIMP_HUE_MODE);
+      gimp_enum_store_insert_value_after (GIMP_ENUM_STORE (store),
+                                          GIMP_HUE_MODE,
+                                          GIMP_SATURATION_MODE);
+      gimp_enum_store_insert_value_after (GIMP_ENUM_STORE (store),
+                                          GIMP_SATURATION_MODE,
+                                          GIMP_COLOR_MODE);
+      gimp_enum_store_insert_value_after (GIMP_ENUM_STORE (store),
+                                          GIMP_COLOR_MODE,
+                                          GIMP_VALUE_MODE);
+
+      gimp_int_store_insert_separator_after (GIMP_INT_STORE (store),
+                                             GIMP_LCH_LIGHTNESS_MODE, -1);
+    }
+
   combo = gimp_enum_combo_box_new_with_model (GIMP_ENUM_STORE (store));
   g_object_unref (store);
 
diff -Nrup gimp/app/widgets/gimpwidgets-constructors.h gimp-p/app/widgets/gimpwidgets-constructors.h
--- gimp/app/widgets/gimpwidgets-constructors.h	2012-04-11 16:23:02.812705917 +0200
+++ gimp-p/app/widgets/gimpwidgets-constructors.h	2012-04-11 16:39:09.712755786 +0200
@@ -20,7 +20,8 @@
 
 
 GtkWidget * gimp_paint_mode_menu_new (gboolean     with_behind_mode,
-                                      gboolean     with_replace_modes);
+                                      gboolean     with_replace_modes,
+                                      gboolean     with_obsolete_modes);
 
 GtkWidget * gimp_stock_button_new    (const gchar *stock_id,
                                       const gchar *label);
diff -Nrup gimp/app/xcf/xcf-load.c gimp-p/app/xcf/xcf-load.c
--- gimp/app/xcf/xcf-load.c	2012-04-11 16:23:02.816705917 +0200
+++ gimp-p/app/xcf/xcf-load.c	2012-04-11 16:39:09.716755787 +0200
@@ -153,6 +153,8 @@ xcf_load_image (Gimp     *gimp,
 
   xcf_progress_update (info);
 
+  image->was_loaded_with_obsolete_modes = FALSE;
+
   /* read the image properties */
   if (! xcf_load_image_props (info, image))
     goto hard_error;
@@ -803,6 +805,15 @@ xcf_load_layer_props (XcfInfo    *info,
 
             info->cp += xcf_read_int32 (info->fp, &mode, 1);
             gimp_layer_set_mode (*layer, (GimpLayerModeEffects) mode, FALSE);
+            switch (mode)
+              {
+                case GIMP_HUE_MODE:
+                case GIMP_SATURATION_MODE:
+                case GIMP_COLOR_MODE:
+                case GIMP_VALUE_MODE:
+                  image->was_loaded_with_obsolete_modes = TRUE;
+                  break;
+              }
           }
           break;
 
diff -Nrup gimp/app/xcf/xcf-save.c gimp-p/app/xcf/xcf-save.c
--- gimp/app/xcf/xcf-save.c	2012-04-11 16:23:02.816705917 +0200
+++ gimp-p/app/xcf/xcf-save.c	2012-04-11 16:39:09.716755787 +0200
@@ -202,6 +202,13 @@ xcf_save_choose_format (XcfInfo   *info,
           save_version = MAX (2, save_version);
           break;
 
+        case GIMP_LCH_HUE_MODE:
+        case GIMP_LCH_SATURATION_MODE:
+        case GIMP_LCH_COLOR_MODE:
+        case GIMP_LCH_LIGHTNESS_MODE:
+          save_version = MAX (3, save_version);
+          break;
+
         default:
           break;
         }
diff -Nrup gimp/libgimp/gimpenums.h gimp-p/libgimp/gimpenums.h
--- gimp/libgimp/gimpenums.h	2012-04-11 16:23:02.996705926 +0200
+++ gimp-p/libgimp/gimpenums.h	2012-04-11 16:39:09.716755787 +0200
@@ -185,29 +185,33 @@ GType gimp_layer_mode_effects_get_type (
 
 typedef enum
 {
-  GIMP_NORMAL_MODE,
-  GIMP_DISSOLVE_MODE,
-  GIMP_BEHIND_MODE,
-  GIMP_MULTIPLY_MODE,
-  GIMP_SCREEN_MODE,
-  GIMP_OVERLAY_MODE,
-  GIMP_DIFFERENCE_MODE,
-  GIMP_ADDITION_MODE,
-  GIMP_SUBTRACT_MODE,
-  GIMP_DARKEN_ONLY_MODE,
-  GIMP_LIGHTEN_ONLY_MODE,
-  GIMP_HUE_MODE,
-  GIMP_SATURATION_MODE,
-  GIMP_COLOR_MODE,
-  GIMP_VALUE_MODE,
-  GIMP_DIVIDE_MODE,
-  GIMP_DODGE_MODE,
-  GIMP_BURN_MODE,
-  GIMP_HARDLIGHT_MODE,
-  GIMP_SOFTLIGHT_MODE,
-  GIMP_GRAIN_EXTRACT_MODE,
-  GIMP_GRAIN_MERGE_MODE,
-  GIMP_COLOR_ERASE_MODE
+  GIMP_NORMAL_MODE = 0,
+  GIMP_DISSOLVE_MODE = 1,
+  GIMP_BEHIND_MODE = 2,
+  GIMP_MULTIPLY_MODE = 3,
+  GIMP_SCREEN_MODE = 4,
+  GIMP_OVERLAY_MODE = 5,
+  GIMP_DIFFERENCE_MODE = 6,
+  GIMP_ADDITION_MODE = 7,
+  GIMP_SUBTRACT_MODE = 8,
+  GIMP_DARKEN_ONLY_MODE = 9,
+  GIMP_LIGHTEN_ONLY_MODE = 10,
+  GIMP_HUE_MODE = 11,
+  GIMP_SATURATION_MODE = 12,
+  GIMP_COLOR_MODE = 13,
+  GIMP_VALUE_MODE = 14,
+  GIMP_DIVIDE_MODE = 15,
+  GIMP_DODGE_MODE = 16,
+  GIMP_BURN_MODE = 17,
+  GIMP_HARDLIGHT_MODE = 18,
+  GIMP_SOFTLIGHT_MODE = 19,
+  GIMP_GRAIN_EXTRACT_MODE = 20,
+  GIMP_GRAIN_MERGE_MODE = 21,
+  GIMP_COLOR_ERASE_MODE = 22,
+  GIMP_LCH_HUE_MODE = 26,
+  GIMP_LCH_SATURATION_MODE = 27,
+  GIMP_LCH_COLOR_MODE = 28,
+  GIMP_LCH_LIGHTNESS_MODE = 29
 } GimpLayerModeEffects;
 
 
diff -Nrup gimp/plug-ins/common/file-psp.c gimp-p/plug-ins/common/file-psp.c
--- gimp/plug-ins/common/file-psp.c	2012-04-11 16:23:03.060705929 +0200
+++ gimp-p/plug-ins/common/file-psp.c	2012-04-11 16:39:09.716755787 +0200
@@ -995,13 +995,13 @@ gimp_layer_mode_from_psp_blend_mode (PSP
     case PSP_BLEND_LIGHTEN:
       return GIMP_LIGHTEN_ONLY_MODE;
     case PSP_BLEND_HUE:
-      return GIMP_HUE_MODE;
+      return GIMP_LCH_HUE_MODE;
     case PSP_BLEND_SATURATION:
-      return GIMP_SATURATION_MODE;
+      return GIMP_LCH_SATURATION_MODE;
     case PSP_BLEND_COLOR:
-      return GIMP_COLOR_MODE;
+      return GIMP_LCH_COLOR_MODE;
     case PSP_BLEND_LUMINOSITY:
-      return GIMP_VALUE_MODE;   /* ??? */
+      return GIMP_LCH_LIGHTNESS_MODE;   /* ??? */
     case PSP_BLEND_MULTIPLY:
       return GIMP_MULTIPLY_MODE;
     case PSP_BLEND_SCREEN:
diff -Nrup gimp/plug-ins/file-psd/psd-save.c gimp-p/plug-ins/file-psd/psd-save.c
--- gimp/plug-ins/file-psd/psd-save.c	2012-04-11 16:23:03.092705931 +0200
+++ gimp-p/plug-ins/file-psd/psd-save.c	2012-04-11 16:39:09.716755787 +0200
@@ -328,12 +328,15 @@ psd_lmode_layer (gint32  idLayer,
       strcpy (psdMode, "lite");
       break;
     case GIMP_HUE_MODE:
+    case GIMP_LCH_HUE_MODE:
       strcpy (psdMode, "hue ");
       break;
     case GIMP_SATURATION_MODE:
+    case GIMP_LCH_SATURATION_MODE:
       strcpy (psdMode, "sat ");
       break;
     case GIMP_COLOR_MODE:
+    case GIMP_LCH_COLOR_MODE:
       strcpy (psdMode, "colr");
       break;
     case GIMP_ADDITION_MODE:
@@ -352,6 +355,7 @@ psd_lmode_layer (gint32  idLayer,
       strcpy (psdMode, "diff");
       break;
     case GIMP_VALUE_MODE:                  /* ? */
+    case GIMP_LCH_LIGHTNESS_MODE:                  /* ? */
       strcpy (psdMode, "lum ");
       break;
     case GIMP_HARDLIGHT_MODE:
diff -Nrup gimp/plug-ins/file-psd/psd-util.c gimp-p/plug-ins/file-psd/psd-util.c
--- gimp/plug-ins/file-psd/psd-util.c	2012-04-11 16:23:03.092705931 +0200
+++ gimp-p/plug-ins/file-psd/psd-util.c	2012-04-11 16:39:09.720755787 +0200
@@ -613,7 +613,7 @@ psd_to_gimp_blend_mode (const gchar *psd
   if (g_ascii_strncasecmp (psd_mode, "lite", 4) == 0)           /* Lighten (ps3) */
       return GIMP_LIGHTEN_ONLY_MODE;
   if (g_ascii_strncasecmp (psd_mode, "hue ", 4) == 0)           /* Hue (ps3) */
-    return GIMP_HUE_MODE;
+    return GIMP_LCH_HUE_MODE;
   if (g_ascii_strncasecmp (psd_mode, "sat ", 4) == 0)           /* Saturation (ps3) */
     {
       if (CONVERSION_WARNINGS)
@@ -623,10 +623,10 @@ psd_to_gimp_blend_mode (const gchar *psd
                      "blend mode: %s. Results will differ.",
                      mode_name);
         }
-      return GIMP_SATURATION_MODE;
+      return GIMP_LCH_SATURATION_MODE;
     }
   if (g_ascii_strncasecmp (psd_mode, "colr", 4) == 0)           /* Color (ps3) */
-    return GIMP_COLOR_MODE;
+    return GIMP_LCH_COLOR_MODE;
   if (g_ascii_strncasecmp (psd_mode, "lum ", 4) == 0)           /* Luminosity (ps3) */
     {
       if (CONVERSION_WARNINGS)
@@ -636,7 +636,7 @@ psd_to_gimp_blend_mode (const gchar *psd
                      "blend mode: %s. Results will differ.",
                      mode_name);
         }
-      return GIMP_VALUE_MODE;
+      return GIMP_LCH_LIGHTNESS_MODE;
     }
   if (g_ascii_strncasecmp (psd_mode, "mul ", 4) == 0)           /* Multiply (ps3) */
     return GIMP_MULTIPLY_MODE;
@@ -800,9 +800,11 @@ gimp_to_psd_blend_mode (const GimpLayerM
         psd_mode = g_strndup ("lite", 4);                       /* Lighten (ps3) */
         break;
       case GIMP_HUE_MODE:
+      case GIMP_LCH_HUE_MODE:
         psd_mode = g_strndup ("hue ", 4);                       /* Hue (ps3) */
         break;
       case GIMP_SATURATION_MODE:
+      case GIMP_LCH_SATURATION_MODE:
         if (CONVERSION_WARNINGS)
           g_message ("Gimp uses a different equation to photoshop for "
                      "blend mode: %s. Results will differ.",
@@ -810,9 +812,11 @@ gimp_to_psd_blend_mode (const GimpLayerM
         psd_mode = g_strndup ("sat ", 4);                       /* Saturation (ps3) */
         break;
       case GIMP_COLOR_MODE:
+      case GIMP_LCH_COLOR_MODE:
         psd_mode = g_strndup ("colr", 4);                       /* Color (ps3) */
         break;
       case GIMP_VALUE_MODE:
+      case GIMP_LCH_LIGHTNESS_MODE:
         if (CONVERSION_WARNINGS)
           g_message ("Gimp uses a different equation to photoshop for "
                      "blend mode: %s. Results will differ.",
diff -Nrup gimp/plug-ins/file-xjt/xjt.c gimp-p/plug-ins/file-xjt/xjt.c
--- gimp/plug-ins/file-xjt/xjt.c	2012-04-11 16:23:03.096705931 +0200
+++ gimp-p/plug-ins/file-xjt/xjt.c	2012-04-11 16:39:09.720755787 +0200
@@ -717,10 +717,10 @@ p_to_GimpLayerModeEffects(XJTLayerModeEf
     case XJT_SUBTRACT_MODE:       return GIMP_SUBTRACT_MODE;
     case XJT_DARKEN_ONLY_MODE:    return GIMP_DARKEN_ONLY_MODE;
     case XJT_LIGHTEN_ONLY_MODE:   return GIMP_LIGHTEN_ONLY_MODE;
-    case XJT_HUE_MODE:            return GIMP_HUE_MODE;
-    case XJT_SATURATION_MODE:     return GIMP_SATURATION_MODE;
-    case XJT_COLOR_MODE:          return GIMP_COLOR_MODE;
-    case XJT_VALUE_MODE:          return GIMP_VALUE_MODE;
+    case XJT_HUE_MODE:            return GIMP_LCH_HUE_MODE;
+    case XJT_SATURATION_MODE:     return GIMP_LCH_SATURATION_MODE;
+    case XJT_COLOR_MODE:          return GIMP_LCH_COLOR_MODE;
+    case XJT_VALUE_MODE:          return GIMP_LCH_LIGHTNESS_MODE;
     case XJT_DIVIDE_MODE:         return GIMP_DIVIDE_MODE;
     case XJT_DODGE_MODE:          return GIMP_DODGE_MODE;
     case XJT_BURN_MODE:           return GIMP_BURN_MODE;
@@ -758,6 +758,10 @@ p_to_XJTLayerModeEffects(GimpLayerModeEf
     case GIMP_SATURATION_MODE:     return XJT_SATURATION_MODE;
     case GIMP_COLOR_MODE:          return XJT_COLOR_MODE;
     case GIMP_VALUE_MODE:          return XJT_VALUE_MODE;
+    case GIMP_LCH_HUE_MODE:        return XJT_HUE_MODE;
+    case GIMP_LCH_SATURATION_MODE: return XJT_SATURATION_MODE;
+    case GIMP_LCH_COLOR_MODE:      return XJT_COLOR_MODE;
+    case GIMP_LCH_LIGHTNESS_MODE:  return XJT_VALUE_MODE;
     case GIMP_DIVIDE_MODE:         return XJT_DIVIDE_MODE;
     case GIMP_DODGE_MODE:          return XJT_DODGE_MODE;
     case GIMP_BURN_MODE:           return XJT_BURN_MODE;
diff -Nrup gimp/tools/pdbgen/enums.pl gimp-p/tools/pdbgen/enums.pl
--- gimp/tools/pdbgen/enums.pl	2012-04-11 16:23:03.808705968 +0200
+++ gimp-p/tools/pdbgen/enums.pl	2012-04-11 16:39:09.720755787 +0200
@@ -425,7 +425,7 @@ package Gimp::CodeGen::enums;
 		       GIMP_HISTOGRAM_ALPHA => '4' }
 	},
     GimpLayerModeEffects =>
-	{ contig => 1,
+	{ contig => 0,
 	  header => 'base/base-enums.h',
 	  symbols => [ qw(GIMP_NORMAL_MODE GIMP_DISSOLVE_MODE
 			  GIMP_BEHIND_MODE GIMP_MULTIPLY_MODE
@@ -437,7 +437,9 @@ package Gimp::CodeGen::enums;
 			  GIMP_VALUE_MODE GIMP_DIVIDE_MODE GIMP_DODGE_MODE
 			  GIMP_BURN_MODE GIMP_HARDLIGHT_MODE
 			  GIMP_SOFTLIGHT_MODE GIMP_GRAIN_EXTRACT_MODE
-			  GIMP_GRAIN_MERGE_MODE GIMP_COLOR_ERASE_MODE) ],
+			  GIMP_GRAIN_MERGE_MODE GIMP_COLOR_ERASE_MODE
+			  GIMP_LCH_HUE_MODE GIMP_LCH_SATURATION_MODE
+			  GIMP_LCH_COLOR_MODE GIMP_LCH_LIGHTNESS_MODE) ],
 	  mapping => { GIMP_NORMAL_MODE => '0',
 		       GIMP_DISSOLVE_MODE => '1',
 		       GIMP_BEHIND_MODE => '2',
@@ -460,7 +462,11 @@ package Gimp::CodeGen::enums;
 		       GIMP_SOFTLIGHT_MODE => '19',
 		       GIMP_GRAIN_EXTRACT_MODE => '20',
 		       GIMP_GRAIN_MERGE_MODE => '21',
-		       GIMP_COLOR_ERASE_MODE => '22' }
+		       GIMP_COLOR_ERASE_MODE => '22',
+		       GIMP_LCH_HUE_MODE => '26',
+		       GIMP_LCH_SATURATION_MODE => '27',
+		       GIMP_LCH_COLOR_MODE => '28',
+		       GIMP_LCH_LIGHTNESS_MODE => '29' }
 	},
     GimpHueRange =>
 	{ contig => 1,
