diff -rupN a/configure.ac b/configure.ac
--- a/configure.ac	Tue Apr  3 18:59:44 2012
+++ b/configure.ac	Fri Apr 13 11:41:01 2012
@@ -61,7 +61,7 @@ m4_define([libcurl_required_version], [7
 m4_define([dbus_glib_required_version], [0.70])
 m4_define([libgudev_required_version], [167])
 m4_define([exif_required_version], [0.6.15])
-m4_define([lcms_required_version], [1.16])
+m4_define([lcms_required_version], [2.3])
 m4_define([libpng_required_version], [1.2.37])
 
 
@@ -1540,7 +1540,7 @@ AC_ARG_WITH(lcms, [  --without-lcms     
 have_lcms="no (lcms support disabled)"
 if test "x$with_lcms" != xno; then
   have_lcms=yes
-  PKG_CHECK_MODULES(LCMS, lcms >= lcms_required_version,
+  PKG_CHECK_MODULES(LCMS, lcms2 >= lcms_required_version,
     AC_DEFINE(HAVE_LCMS, 1, [Define to 1 if lcms is available])
     LCMS='lcms$(EXEEXT)',
     have_lcms="no (lcms not found or unusable)")
diff -rupN a/modules/color-selector-cmyk-lcms.c b/modules/color-selector-cmyk-lcms.c
--- a/modules/color-selector-cmyk-lcms.c	Tue Apr  3 17:36:28 2012
+++ b/modules/color-selector-cmyk-lcms.c	Tue May  1 14:46:37 2012
@@ -19,7 +19,7 @@
 
 #include <glib.h>  /* lcms.h uses the "inline" keyword */
 
-#include <lcms.h>
+#include <lcms2.h>
 
 #include <gtk/gtk.h>
 
@@ -70,13 +70,13 @@ static void   colorsel_cmyk_init        
 static void   colorsel_cmyk_dispose        (GObject           *object);
 
 static void   colorsel_cmyk_set_color      (GimpColorSelector *selector,
-                                            const GimpRGB     *rgb,
-                                            const GimpHSV     *hsv);
+    const GimpRGB     *rgb,
+    const GimpHSV     *hsv);
 static void   colorsel_cmyk_set_config     (GimpColorSelector *selector,
-                                            GimpColorConfig   *config);
+    GimpColorConfig   *config);
 
 static void   colorsel_cmyk_adj_update     (GtkAdjustment     *adj,
-                                            ColorselCmyk      *module);
+    ColorselCmyk      *module);
 static void   colorsel_cmyk_config_changed (ColorselCmyk      *module);
 
 
@@ -151,8 +151,6 @@ colorsel_cmyk_class_init (ColorselCmykCl
   selector_class->stock_id   = GTK_STOCK_PRINT;  /* FIXME */
   selector_class->set_color  = colorsel_cmyk_set_color;
   selector_class->set_config = colorsel_cmyk_set_config;
-
-  cmsErrorAction (LCMS_ERROR_IGNORE);
 }
 
 static void
@@ -391,9 +389,11 @@ colorsel_cmyk_config_changed (ColorselCm
 {
   GimpColorSelector *selector = GIMP_COLOR_SELECTOR (module);
   GimpColorConfig   *config   = module->config;
-  DWORD              flags    = 0;
+  cmsUInt32Number    flags    = 0;
+  cmsUInt32Number    descSize =0;
   cmsHPROFILE        rgb_profile;
   cmsHPROFILE        cmyk_profile;
+  gchar             *descData;
   const gchar       *name;
   gchar             *text;
 
@@ -419,13 +419,32 @@ colorsel_cmyk_config_changed (ColorselCm
       ! (cmyk_profile = cmsOpenProfileFromFile (config->cmyk_profile, "r")))
     goto out;
 
-  name = cmsTakeProductDesc (cmyk_profile);
+  descSize = cmsGetProfileInfoASCII (cmyk_profile, cmsInfoDescription, "en", "US", NULL, 0);
+  if (descSize > 0)
+    {
+      descData = (gchar*) g_malloc (descSize + sizeof(gchar));
+      descSize = cmsGetProfileInfoASCII (cmyk_profile, cmsInfoDescription, "en", "US", descData, descSize);
+      if (descSize > 0)
+        {
+          name = descData;
+        }
+    }
+
   if (name && ! g_utf8_validate (name, -1, NULL))
     name = _("(invalid UTF-8 string)");
 
   if (! name)
     {
-      name = cmsTakeProductName (cmyk_profile);
+      descSize = cmsGetProfileInfoASCII (cmyk_profile, cmsInfoModel, "en", "US", NULL, 0);
+      if (descSize > 0)
+        {
+          descData = (gchar*) g_malloc (descSize + sizeof(gchar));
+          descSize = cmsGetProfileInfoASCII( cmyk_profile, cmsInfoModel, "en", "US", descData, descSize);
+          if (descSize > 0)
+            {
+              name = descData;
+            }
+        }
       if (name && ! g_utf8_validate (name, -1, NULL))
         name = _("(invalid UTF-8 string)");
     }
@@ -455,7 +474,7 @@ colorsel_cmyk_config_changed (ColorselCm
   cmsCloseProfile (rgb_profile);
   cmsCloseProfile (cmyk_profile);
 
- out:
+out:
   if (! module->in_destruction)
     colorsel_cmyk_set_color (selector, &selector->rgb, &selector->hsv);
 }
diff -rupN a/modules/display-filter-lcms.c b/modules/display-filter-lcms.c
--- a/modules/display-filter-lcms.c	Thu Apr 12 14:25:50 2012
+++ b/modules/display-filter-lcms.c	Tue May  1 18:06:57 2012
@@ -19,13 +19,11 @@
 
 #include <glib.h>  /* lcms.h uses the "inline" keyword */
 
-//#ifdef G_OS_WIN32
-//#define STRICT
+#ifdef G_OS_WIN32
 #include <windows.h>
-//#define LCMS_WIN_TYPES_ALREADY_DEFINED
-//#endif
+#endif
 
-#include <lcms.h>
+#include <lcms2.h>
 
 #include <gtk/gtk.h>
 
@@ -35,6 +33,7 @@
 #include <CoreServices/CoreServices.h>
 #endif
 
+#include "libgimpbase/gimpbase.h"
 #include "libgimpcolor/gimpcolor.h"
 #include "libgimpconfig/gimpconfig.h"
 #include "libgimpmath/gimpmath.h"
@@ -73,7 +72,7 @@ static void         cdisplay_lcms_finali
 
 static GtkWidget  * cdisplay_lcms_configure            (GimpColorDisplay  *display);
 static void         cdisplay_lcms_convert_surface      (GimpColorDisplay  *display,
-                                                        cairo_surface_t   *surface);
+    cairo_surface_t   *surface);
 static void         cdisplay_lcms_changed              (GimpColorDisplay  *display);
 
 static cmsHPROFILE  cdisplay_lcms_get_rgb_profile      (CdisplayLcms      *lcms);
@@ -81,14 +80,14 @@ static cmsHPROFILE  cdisplay_lcms_get_di
 static cmsHPROFILE  cdisplay_lcms_get_printer_profile  (CdisplayLcms      *lcms);
 
 static void         cdisplay_lcms_attach_labelled      (GtkTable          *table,
-                                                        gint               row,
-                                                        const gchar       *text,
-                                                        GtkWidget         *widget);
+    gint               row,
+    const gchar       *text,
+    GtkWidget         *widget);
 static void         cdisplay_lcms_update_profile_label (CdisplayLcms      *lcms,
-                                                        const gchar       *name);
+    const gchar       *name);
 static void         cdisplay_lcms_notify_profile       (GObject           *config,
-                                                        GParamSpec        *pspec,
-                                                        CdisplayLcms      *lcms);
+    GParamSpec        *pspec,
+    CdisplayLcms      *lcms);
 
 
 static const GimpModuleInfo cdisplay_lcms_info =
@@ -133,8 +132,6 @@ cdisplay_lcms_class_init (CdisplayLcmsCl
   display_class->configure       = cdisplay_lcms_configure;
   display_class->convert_surface = cdisplay_lcms_convert_surface;
   display_class->changed         = cdisplay_lcms_changed;
-
-  cmsErrorAction (LCMS_ERROR_IGNORE);
 }
 
 static void
@@ -167,17 +164,49 @@ cdisplay_lcms_profile_get_info (cmsHPROF
                                 const gchar **name,
                                 const gchar **info)
 {
+  cmsUInt32Number    descSize =0;
+  gchar             *descData;
+
   if (profile)
     {
-      *name = cmsTakeProductDesc (profile);
+      descSize = cmsGetProfileInfoASCII (profile, cmsInfoDescription, "en", "US", NULL, 0);
+      if (descSize > 0)
+        {
+          descData = (gchar*) g_malloc (descSize + sizeof (gchar));
+          descSize = cmsGetProfileInfoASCII (profile, cmsInfoDescription, "en", "US", descData, descSize);
+          if (descSize > 0)
+            {
+              *name = gimp_any_to_utf8 ((gchar*)descData, -1, NULL);
+            }
+        }
 
       if (! *name)
-        *name = cmsTakeProductName (profile);
+        {
+          descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel, "en", "US", NULL, 0);
+          if (descSize > 0)
+            {
+              descData = (gchar*) g_malloc( descSize + sizeof (gchar));
+              descSize = cmsGetProfileInfoASCII(profile, cmsInfoModel, "en", "US", descData, descSize);
+              if (descSize > 0)
+                {
+                  name = descData;
+                }
+            }
+        }
 
       if (*name && ! g_utf8_validate (*name, -1, NULL))

         *name = _("(invalid UTF-8 string)");
 
-      *info = cmsTakeProductInfo (profile);
+      descSize = cmsGetProfileInfoASCII (profile, cmsInfoManufacturer, "en", "US", NULL, 0);
+      if (descSize > 0)
+        {
+          descData = (gchar*) g_malloc (descSize + sizeof (gchar));
+          descSize = cmsGetProfileInfoASCII (profile, cmsInfoManufacturer, "en", "US", descData, descSize);
+          if (descSize > 0)
+            {
+              *info = descData;
+            }
+        }
       if (*name && ! g_utf8_validate (*info, -1, NULL))
         *info = NULL;
     }
@@ -300,6 +329,7 @@ cdisplay_lcms_convert_surface (GimpColor
           GIMP_CAIRO_ARGB32_SET_PIXEL (buf + 4*x, r, g, b, a);
         }
     }
+
   g_free (rowbuf);
 }
 
@@ -312,7 +342,8 @@ cdisplay_lcms_changed (GimpColorDisplay 
   cmsHPROFILE      src_profile   = NULL;
   cmsHPROFILE      dest_profile  = NULL;
   cmsHPROFILE      proof_profile = NULL;
-  DWORD            flags         = 0;
+  cmsUInt32Number  flags         = 0;
+  cmsUInt16Number  alarmCodes[cmsMAXCHANNELS] = { 0 };
 
   if (lcms->transform)
     {
@@ -347,10 +378,10 @@ cdisplay_lcms_changed (GimpColorDisplay 
   if (proof_profile)
     {
       if (! src_profile)
-       src_profile = cmsCreate_sRGBProfile ();
+        src_profile = cmsCreate_sRGBProfile ();
 
       if (! dest_profile)
-       dest_profile = cmsCreate_sRGBProfile ();
+        dest_profile = cmsCreate_sRGBProfile ();
 
       flags |= cmsFLAGS_SOFTPROOFING;
 
@@ -362,24 +393,27 @@ cdisplay_lcms_changed (GimpColorDisplay 
 
           gimp_rgb_get_uchar (&config->out_of_gamut_color, &r, &g, &b);
 
-          cmsSetAlarmCodes (r, g, b);
+          alarmCodes[0] = (cmsUInt16Number)r;
+          alarmCodes[1] = (cmsUInt16Number)g;
+          alarmCodes[2] = (cmsUInt16Number)b;
+          cmsSetAlarmCodes (alarmCodes);
         }
 
       lcms->transform = cmsCreateProofingTransform (src_profile, TYPE_ARGB_8,
-                                                    dest_profile, TYPE_ARGB_8,
-                                                    proof_profile,
-                                                    config->simulation_intent,
-                                                    config->display_intent,
-                                                    flags);
+                        dest_profile, TYPE_ARGB_8,
+                        proof_profile,
+                        config->simulation_intent,
+                        config->display_intent,
+                        flags);
       cmsCloseProfile (proof_profile);
     }
   else if (src_profile || dest_profile)
     {
       if (! src_profile)
-       src_profile = cmsCreate_sRGBProfile ();
+        src_profile = cmsCreate_sRGBProfile ();
 
       if (! dest_profile)
-       dest_profile = cmsCreate_sRGBProfile ();
+        dest_profile = cmsCreate_sRGBProfile ();
 
       lcms->transform = cmsCreateTransform (src_profile, TYPE_ARGB_8,
                                             dest_profile, TYPE_ARGB_8,
@@ -397,7 +431,7 @@ cdisplay_lcms_changed (GimpColorDisplay 
 static gboolean
 cdisplay_lcms_profile_is_rgb (cmsHPROFILE profile)
 {
-  return (cmsGetColorSpace (profile) == icSigRgbData);
+  return (cmsGetColorSpace (profile) == cmsSigRgbData);
 }
 
 static cmsHPROFILE
@@ -457,7 +491,7 @@ cdisplay_lcms_get_screen (CdisplayLcms *
       GtkWidget *widget = GTK_WIDGET (managed);
 
       *monitor = gdk_screen_get_monitor_at_window (screen,
-                                                   gtk_widget_get_window (widget));
+                 gtk_widget_get_window (widget));
     }
   else
     {
diff -rupN a/modules/display-filter-proof.c b/modules/display-filter-proof.c
--- a/modules/display-filter-proof.c	Tue Apr  3 17:36:28 2012
+++ b/modules/display-filter-proof.c	Tue May  1 14:55:16 2012
@@ -19,7 +19,7 @@
 
 #include <glib.h>  /* lcms.h uses the "inline" keyword */
 
-#include <lcms.h>
+#include <lcms2.h>
 
 #include <gtk/gtk.h>
 
@@ -72,17 +72,17 @@ GType              cdisplay_proof_get_ty
 
 static void        cdisplay_proof_finalize        (GObject          *object);
 static void        cdisplay_proof_get_property    (GObject          *object,
-                                                   guint             property_id,
-                                                   GValue           *value,
-                                                   GParamSpec       *pspec);
+    guint             property_id,
+    GValue           *value,
+    GParamSpec       *pspec);
 static void        cdisplay_proof_set_property    (GObject          *object,
-                                                   guint             property_id,
-                                                   const GValue     *value,
-                                                   GParamSpec       *pspec);
+    guint             property_id,
+    const GValue     *value,
+    GParamSpec       *pspec);
 
 
 static void        cdisplay_proof_convert_surface (GimpColorDisplay *display,
-                                                   cairo_surface_t  *surface);
+    cairo_surface_t  *surface);
 static GtkWidget * cdisplay_proof_configure       (GimpColorDisplay *display);
 static void        cdisplay_proof_changed         (GimpColorDisplay *display);
 
@@ -145,8 +145,6 @@ cdisplay_proof_class_init (CdisplayProof
   display_class->convert_surface = cdisplay_proof_convert_surface;
   display_class->configure       = cdisplay_proof_configure;
   display_class->changed         = cdisplay_proof_changed;
-
-  cmsErrorAction (LCMS_ERROR_IGNORE);
 }
 
 static void
@@ -290,18 +288,39 @@ static void
 cdisplay_proof_combo_box_set_active (GimpColorProfileComboBox *combo,
                                      const gchar              *filename)
 {
-  cmsHPROFILE  profile = NULL;
-  gchar       *label   = NULL;
+  cmsHPROFILE      profile = NULL;
+  gchar           *label   = NULL;
+  cmsUInt32Number  descSize =0;
+  gchar           *descData;
 
   if (filename)
     profile = cmsOpenProfileFromFile (filename, "r");
 
   if (profile)
     {
-      label = gimp_any_to_utf8 (cmsTakeProductDesc (profile), -1, NULL);
+      descSize = cmsGetProfileInfoASCII( profile, cmsInfoDescription, "en", "US", NULL, 0);
+      if (descSize > 0)
+        {
+          descData = (gchar*) g_malloc (descSize + sizeof (gchar));
+          descSize = cmsGetProfileInfoASCII (profile, cmsInfoDescription, "en", "US", descData, descSize);
+          if (descSize > 0)
+            {
+              label = gimp_any_to_utf8 (descData, -1, NULL);
+            }
+        }
       if (! label)
-        label = gimp_any_to_utf8 (cmsTakeProductName (profile), -1, NULL);
-
+        {
+          descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel, "en", "US", NULL, 0);
+          if (descSize > 0)
+            {
+              descData = (gchar*) g_malloc (descSize + sizeof (gchar));
+              descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel, "en", "US", descData, descSize);
+              if (descSize > 0)
+                {
+                  label = gimp_any_to_utf8 (descData, -1, NULL);
+                }
+            }
+        }
       cmsCloseProfile (profile);
     }
 
@@ -311,8 +330,8 @@ cdisplay_proof_combo_box_set_active (Gim
 
 static void
 cdisplay_proof_file_chooser_dialog_response (GtkFileChooser           *dialog,
-                                             gint                      response,
-                                             GimpColorProfileComboBox *combo)
+    gint                      response,
+    GimpColorProfileComboBox *combo)
 {
   if (response == GTK_RESPONSE_ACCEPT)
     {
@@ -345,9 +364,9 @@ cdisplay_proof_file_chooser_dialog_new (
                                         NULL);
 
   gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
-                                           GTK_RESPONSE_ACCEPT,
-                                           GTK_RESPONSE_CANCEL,
-                                           -1);
+      GTK_RESPONSE_ACCEPT,
+      GTK_RESPONSE_CANCEL,
+      -1);
 
   gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
 
@@ -465,17 +484,17 @@ cdisplay_proof_changed (GimpColorDisplay
 
   if (proofProfile)
     {
-      DWORD flags = cmsFLAGS_SOFTPROOFING;
+      cmsUInt32Number flags = cmsFLAGS_SOFTPROOFING;
 
       if (proof->bpc)
         flags |= cmsFLAGS_BLACKPOINTCOMPENSATION;
 
       proof->transform = cmsCreateProofingTransform (rgbProfile, TYPE_ARGB_8,
-                                                     rgbProfile, TYPE_ARGB_8,
-                                                     proofProfile,
-                                                     proof->intent,
-                                                     proof->intent,
-                                                     flags);
+                         rgbProfile, TYPE_ARGB_8,
+                         proofProfile,
+                         proof->intent,
+                         proof->intent,
+                         flags);
 
       cmsCloseProfile (proofProfile);
     }
diff -rupN a/plug-ins/common/lcms.c b/plug-ins/common/lcms.c
--- a/plug-ins/common/lcms.c	Tue Apr  3 17:36:29 2012
+++ b/plug-ins/common/lcms.c	Tue May  1 15:06:25 2012
@@ -24,7 +24,7 @@
 
 #include <glib.h>  /* lcms.h uses the "inline" keyword */
 
-#include <lcms.h>
+#include <lcms2.h>
 
 #include <libgimp/gimp.h>
 #include <libgimp/gimpui.h>
@@ -86,67 +86,67 @@ static void  run   (const gchar      *na
                     GimpParam       **return_vals);
 
 static GimpPDBStatusType  lcms_icc_set       (GimpColorConfig  *config,
-                                              gint32            image,
-                                              const gchar      *filename);
+    gint32            image,
+    const gchar      *filename);
 static GimpPDBStatusType  lcms_icc_apply     (GimpColorConfig  *config,
-                                              GimpRunMode       run_mode,
-                                              gint32            image,
-                                              const gchar      *filename,
-                                              GimpColorRenderingIntent intent,
-                                              gboolean          bpc,
-                                              gboolean         *dont_ask);
+    GimpRunMode       run_mode,
+    gint32            image,
+    const gchar      *filename,
+    GimpColorRenderingIntent intent,
+    gboolean          bpc,
+    gboolean         *dont_ask);
 static GimpPDBStatusType  lcms_icc_info      (GimpColorConfig  *config,
-                                              gint32            image,
-                                              gchar           **name,
-                                              gchar           **desc,
-                                              gchar           **info);
+    gint32            image,
+    gchar           **name,
+    gchar           **desc,
+    gchar           **info);
 static GimpPDBStatusType  lcms_icc_file_info (const gchar      *filename,
-                                              gchar           **name,
-                                              gchar           **desc,
-                                              gchar           **info);
+    gchar           **name,
+    gchar           **desc,
+    gchar           **info);
 
 static cmsHPROFILE  lcms_image_get_profile       (GimpColorConfig *config,
-                                                  gint32           image,
-                                                  guchar          *checksum);
+    gint32           image,
+    guchar          *checksum);
 static gboolean     lcms_image_set_profile       (gint32           image,
-                                                  cmsHPROFILE      profile,
-                                                  const gchar     *filename,
-                                                  gboolean         undo_group);
+    cmsHPROFILE      profile,
+    const gchar     *filename,
+    gboolean         undo_group);
 static gboolean     lcms_image_apply_profile     (gint32           image,
-                                                  cmsHPROFILE      src_profile,
-                                                  cmsHPROFILE      dest_profile,
-                                                  const gchar     *filename,
-                                                  GimpColorRenderingIntent intent,
-                                                  gboolean          bpc);
+    cmsHPROFILE      src_profile,
+    cmsHPROFILE      dest_profile,
+    const gchar     *filename,
+    GimpColorRenderingIntent intent,
+    gboolean          bpc);
 static void         lcms_image_transform_rgb     (gint32           image,
-                                                  cmsHPROFILE      src_profile,
-                                                  cmsHPROFILE      dest_profile,
-                                                  GimpColorRenderingIntent intent,
-                                                  gboolean          bpc);
+    cmsHPROFILE      src_profile,
+    cmsHPROFILE      dest_profile,
+    GimpColorRenderingIntent intent,
+    gboolean          bpc);
 static void         lcms_image_transform_indexed (gint32           image,
-                                                  cmsHPROFILE      src_profile,
-                                                  cmsHPROFILE      dest_profile,
-                                                  GimpColorRenderingIntent intent,
-                                                  gboolean          bpc);
+    cmsHPROFILE      src_profile,
+    cmsHPROFILE      dest_profile,
+    GimpColorRenderingIntent intent,
+    gboolean          bpc);
 
 static void         lcms_drawable_transform      (GimpDrawable    *drawable,
-                                                  cmsHTRANSFORM    transform,
-                                                  gdouble          progress_start,
-                                                  gdouble          progress_end);
+    cmsHTRANSFORM    transform,
+    gdouble          progress_start,
+    gdouble          progress_end);
 static void         lcms_sRGB_checksum           (guchar          *digest);
 
 static cmsHPROFILE  lcms_load_profile            (const gchar     *filename,
-                                                  guchar          *checksum);
+    guchar          *checksum);
 
 static gboolean     lcms_icc_apply_dialog        (gint32           image,
-                                                  cmsHPROFILE      src_profile,
-                                                  cmsHPROFILE      dest_profile,
-                                                  gboolean        *dont_ask);
+    cmsHPROFILE      src_profile,
+    cmsHPROFILE      dest_profile,
+    gboolean        *dont_ask);
 
 static GimpPDBStatusType  lcms_dialog            (GimpColorConfig *config,
-                                                  gint32           image,
-                                                  gboolean         apply,
-                                                  LcmsValues      *values);
+    gint32           image,
+    gboolean         apply,
+    LcmsValues      *values);
 
 
 static const GimpParamDef set_args[] =
@@ -428,8 +428,6 @@ run (const gchar      *name,
         }
     }
 
-  cmsErrorAction (LCMS_ERROR_SHOW);
-
   switch (proc)
     {
     case PROC_SET:
@@ -454,36 +452,34 @@ run (const gchar      *name,
 
     case PROC_INFO:
     case PROC_FILE_INFO:
-      {
-        gchar *name = NULL;
-        gchar *desc = NULL;
-        gchar *info = NULL;
-
-        cmsErrorAction (LCMS_ERROR_IGNORE);
-
-        if (proc == PROC_INFO)
-          status = lcms_icc_info (config, image, &name, &desc, &info);
-        else
-          status = lcms_icc_file_info (filename, &name, &desc, &info);
-
-        if (status == GIMP_PDB_SUCCESS)
-          {
-            *nreturn_vals = NUM_RETURN_VALS;
-
-            values[PROFILE_NAME].type          = GIMP_PDB_STRING;
-            values[PROFILE_NAME].data.d_string = name;
-
-            values[PROFILE_DESC].type          = GIMP_PDB_STRING;
-            values[PROFILE_DESC].data.d_string = desc;
-
-            values[PROFILE_INFO].type          = GIMP_PDB_STRING;
-            values[PROFILE_INFO].data.d_string = info;
-          }
-      }
-      break;
+    {
+      gchar *name = NULL;
+      gchar *desc = NULL;
+      gchar *info = NULL;
+
+      if (proc == PROC_INFO)
+        status = lcms_icc_info (config, image, &name, &desc, &info);
+      else
+        status = lcms_icc_file_info (filename, &name, &desc, &info);
+
+      if (status == GIMP_PDB_SUCCESS)
+        {
+          *nreturn_vals = NUM_RETURN_VALS;
+
+          values[PROFILE_NAME].type          = GIMP_PDB_STRING;
+          values[PROFILE_NAME].data.d_string = name;
+
+          values[PROFILE_DESC].type          = GIMP_PDB_STRING;
+          values[PROFILE_DESC].data.d_string = desc;
+
+          values[PROFILE_INFO].type          = GIMP_PDB_STRING;
+          values[PROFILE_INFO].data.d_string = info;
+        }
+    }
+    break;
     }
 
- done:
+done:
   if (run_mode != GIMP_RUN_NONINTERACTIVE)
     gimp_displays_flush ();
 
@@ -496,25 +492,55 @@ run (const gchar      *name,
 static gchar *
 lcms_icc_profile_get_name (cmsHPROFILE profile)
 {
-  return gimp_any_to_utf8 (cmsTakeProductName (profile), -1, NULL);
+  cmsUInt32Number     descSize = 0;
+  gchar               *descData ="";
+
+  descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel, "en", "US", NULL, 0);
+  if (descSize > 0)
+    {
+      descData = (gchar*) g_malloc (descSize + sizeof (gchar));
+      descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel, "en", "US", descData, descSize);
+    }
+
+  return gimp_any_to_utf8 (descData, -1, NULL);
 }
 
 static gchar *
 lcms_icc_profile_get_desc (cmsHPROFILE profile)
 {
-  return gimp_any_to_utf8 (cmsTakeProductDesc (profile), -1, NULL);
+  cmsUInt32Number     descSize = 0;
+  gchar               *descData = "";
+
+  descSize = cmsGetProfileInfoASCII (profile, cmsInfoDescription, "en", "US", NULL, 0);
+  if (descSize > 0)
+    {
+      descData = (gchar*) g_malloc (descSize + sizeof (gchar));
+      descSize = cmsGetProfileInfoASCII (profile, cmsInfoDescription, "en", "US", descData, descSize);
+    }
+
+  return gimp_any_to_utf8 (descData, -1, NULL);
 }
 
 static gchar *
 lcms_icc_profile_get_info (cmsHPROFILE profile)
 {
-  return gimp_any_to_utf8 (cmsTakeProductInfo (profile), -1, NULL);
+  cmsUInt32Number     descSize = 0;
+  gchar               *descData = "";
+
+  descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel, "en", "US", NULL, 0);
+  if (descSize > 0)
+    {
+      descData = (gchar*) g_malloc (descSize + sizeof (gchar));
+      descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel, "en", "US", descData, descSize);
+    }
+
+  return gimp_any_to_utf8 (descData, -1, NULL);
 }
 
 static gboolean
 lcms_icc_profile_is_rgb (cmsHPROFILE profile)
 {
-  return (cmsGetColorSpace (profile) == icSigRgbData);
+  return (cmsGetColorSpace (profile) == cmsSigRgbData);
 }
 
 static GimpPDBStatusType
@@ -738,8 +764,8 @@ lcms_calculate_checksum (const gchar *da
       GChecksum *md5 = g_checksum_new (G_CHECKSUM_MD5);
 
       g_checksum_update (md5,
-                         (const guchar *) data + sizeof (icHeader),
-                         len - sizeof (icHeader));
+                         (const guchar *) data + sizeof (cmsICCHeader),
+                         len - sizeof (cmsICCHeader));
 
       len = 16;
       g_checksum_get_digest (md5, digest, &len);
@@ -881,13 +907,13 @@ lcms_image_apply_profile (gint32        
     gchar  *src  = lcms_icc_profile_get_desc (src_profile);
     gchar  *dest = lcms_icc_profile_get_desc (dest_profile);
 
-      /* ICC color profile conversion */
-      gimp_progress_init_printf (_("Converting from '%s' to '%s'"), src, dest);
+    /* ICC color profile conversion */
+    gimp_progress_init_printf (_("Converting from '%s' to '%s'"), src, dest);
 
-      g_printerr ("lcms: converting from '%s' to '%s'\n", src, dest);
+    g_printerr ("lcms: converting from '%s' to '%s'\n", src, dest);
 
-      g_free (dest);
-      g_free (src);
+    g_free (dest);
+    g_free (src);
   }
 
   if (! gimp_selection_is_empty (image))
@@ -934,18 +960,18 @@ lcms_image_transform_rgb (gint32        
                           GimpColorRenderingIntent  intent,
                           gboolean                  bpc)
 {
-  cmsHTRANSFORM  transform   = NULL;
-  DWORD          last_format = 0;
-  gint          *layers;
-  gint           num_layers;
-  gint           i;
+  cmsHTRANSFORM    transform   = NULL;
+  cmsUInt32Number  last_format = 0;
+  gint            *layers;
+  gint             num_layers;
+  gint             i;
 
   layers = gimp_image_get_layers (image, &num_layers);
 
   for (i = 0; i < num_layers; i++)
     {
       GimpDrawable *drawable = gimp_drawable_get (layers[i]);
-      DWORD         format;
+      cmsUInt32Number         format;
 
       switch (drawable->bpp)
         {
@@ -1239,9 +1265,9 @@ lcms_icc_apply_dialog (gint32       imag
                                                   GTK_ICON_SIZE_BUTTON));
 
   gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
-                                           GTK_RESPONSE_OK,
-                                           GTK_RESPONSE_CANCEL,
-                                           -1);
+      GTK_RESPONSE_OK,
+      GTK_RESPONSE_CANCEL,
+      -1);
 
   gimp_window_set_transient (GTK_WINDOW (dialog));
 
@@ -1335,9 +1361,9 @@ lcms_icc_file_chooser_dialog_new (void)
                                         NULL);
 
   gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
-                                           GTK_RESPONSE_ACCEPT,
-                                           GTK_RESPONSE_CANCEL,
-                                           -1);
+      GTK_RESPONSE_ACCEPT,
+      GTK_RESPONSE_CANCEL,
+      -1);
 
   gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
 
@@ -1465,9 +1491,9 @@ lcms_dialog (GimpColorConfig *config,
                             NULL);
 
   gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
-                                           GTK_RESPONSE_OK,
-                                           GTK_RESPONSE_CANCEL,
-                                           -1);
+      GTK_RESPONSE_OK,
+      GTK_RESPONSE_CANCEL,
+      -1);
 
   gimp_window_set_transient (GTK_WINDOW (dialog));
 
@@ -1592,5 +1618,5 @@ lcms_dialog (GimpColorConfig *config,
 
   return (run ?
           (success ? GIMP_PDB_SUCCESS : GIMP_PDB_EXECUTION_ERROR) :
-          GIMP_PDB_CANCEL);
+              GIMP_PDB_CANCEL);
 }
diff -rupN a/plug-ins/file-jpeg/jpeg-load.c b/plug-ins/file-jpeg/jpeg-load.c
--- a/plug-ins/file-jpeg/jpeg-load.c	Tue Apr  3 17:36:30 2012
+++ b/plug-ins/file-jpeg/jpeg-load.c	Fri Apr 13 12:07:37 2012
@@ -31,7 +31,7 @@
 #endif /* HAVE_LIBEXIF */
 
 #ifdef HAVE_LCMS
-#include <lcms.h>
+#include <lcms2.h>
 #endif
 
 #include <libgimp/gimp.h>
@@ -50,21 +50,21 @@
 
 
 static void  jpeg_load_resolution           (gint32    image_ID,
-                                             struct jpeg_decompress_struct
-                                                       *cinfo);
+    struct jpeg_decompress_struct
+    *cinfo);
 
 #ifdef HAVE_LIBEXIF
 static gboolean  jpeg_load_exif_resolution  (gint32    image_ID,
-                                             ExifData *exif_data);
+    ExifData *exif_data);
 #endif
 
 static void      jpeg_load_sanitize_comment (gchar    *comment);
 
 static gpointer  jpeg_load_cmyk_transform   (guint8   *profile_data,
-                                             gsize     profile_len);
+    gsize     profile_len);
 static void      jpeg_load_cmyk_to_rgb      (guchar   *buf,
-                                             glong     pixels,
-                                             gpointer  transform);
+    glong     pixels,
+    gpointer  transform);
 
 
 GimpDrawable    *drawable_global;
@@ -719,8 +719,8 @@ load_thumbnail_image (const gchar  *file
 
   if (cinfo.src == NULL)
     cinfo.src = (struct jpeg_source_mgr *)(*cinfo.mem->alloc_small)
-      ((j_common_ptr) &cinfo, JPOOL_PERMANENT,
-       sizeof (my_source_mgr));
+                ((j_common_ptr) &cinfo, JPOOL_PERMANENT,
+                 sizeof (my_source_mgr));
 
   src = (my_src_ptr) cinfo.src;
 
@@ -966,7 +966,7 @@ jpeg_load_cmyk_transform (guint8 *profil
   GimpColorConfig *config       = gimp_get_color_configuration ();
   cmsHPROFILE      cmyk_profile = NULL;
   cmsHPROFILE      rgb_profile  = NULL;
-  DWORD            flags        = 0;
+  cmsUInt32Number  flags        = 0;

   cmsHTRANSFORM    transform;
 
   /*  try to load the embedded CMYK profile  */
@@ -976,7 +976,7 @@ jpeg_load_cmyk_transform (guint8 *profil
 
       if (cmyk_profile)
         {
-          if (! cmsGetColorSpace (cmyk_profile) == icSigCmykData)
+          if (! cmsGetColorSpace (cmyk_profile) == cmsSigCmykData)
             {
               cmsCloseProfile (cmyk_profile);
               cmyk_profile = NULL;
@@ -989,7 +989,7 @@ jpeg_load_cmyk_transform (guint8 *profil
     {
       cmyk_profile = cmsOpenProfileFromFile (config->cmyk_profile, "r");
 
-      if (cmyk_profile && ! cmsGetColorSpace (cmyk_profile) == icSigCmykData)
+      if (cmyk_profile && ! cmsGetColorSpace (cmyk_profile) == cmsSigCmykData)
         {
           cmsCloseProfile (cmyk_profile);
           cmyk_profile = NULL;
@@ -1008,7 +1008,7 @@ jpeg_load_cmyk_transform (guint8 *profil
     {
       rgb_profile = cmsOpenProfileFromFile (config->rgb_profile, "r");
 
-      if (rgb_profile && ! cmsGetColorSpace (rgb_profile) == icSigRgbData)
+      if (rgb_profile && ! cmsGetColorSpace (rgb_profile) == cmsSigRgbData)
         {
           cmsCloseProfile (rgb_profile);
           rgb_profile = NULL;
