diff --git a/app/dialogs/preferences-dialog.c b/app/dialogs/preferences-dialog.c
index be14267..82b9697 100644
--- a/app/dialogs/preferences-dialog.c
+++ b/app/dialogs/preferences-dialog.c
@@ -2282,14 +2282,18 @@ prefs_dialog_new (Gimp       *gimp,
     }
     profiles[] =
     {
-      { N_("_RGB profile:"),
-        N_("Select RGB Color Profile"),     "rgb-profile"     },
-      { N_("_CMYK profile:"),
-        N_("Select CMYK Color Profile"),    "cmyk-profile"    },
-      { N_("_Monitor profile:"),
-        N_("Select Monitor Color Profile"), "display-profile" },
+      { N_("R_GB profile:"),
+        N_("Select RGB Color Profile"),               "rgb-profile"      },
+      { N_("_Fallback sRGB profile:"),
+        N_("Select fallback sRGB Color Profile"),     "srgb-profile"     },
+      { N_("Fallback _AdobeRGB profile:"),
+        N_("Select fallback AdobeRGB Color Profile"), "adobergb-profile" },
+      { N_("CMY_K profile:"),
+        N_("Select CMYK Color Profile"),              "cmyk-profile"     },
+      { N_("Mo_nitor profile:"),
+        N_("Select Monitor Color Profile"),           "display-profile"  },
       { N_("_Print simulation profile:"),
-        N_("Select Printer Color Profile"), "printer-profile" }
+        N_("Select Printer Color Profile"),           "printer-profile"  }
     };
 
     GObject      *color_config;
@@ -2322,8 +2326,20 @@ prefs_dialog_new (Gimp       *gimp,
                                    gettext (profiles[i].label), 0.0, 0.5,
                                    button, 1, FALSE);
 
+        if (i == 0) /* RGB profile */
+          {
+            button =
+              gimp_prop_check_button_new (color_config,
+                                          "use-fallback-rgb-profiles",
+                                          _("_Use fallback RGB profiles"));
+
+            gtk_table_attach_defaults (GTK_TABLE (table),
+                                       button, 1, 2, row, row + 1);
+            gtk_widget_show (button);
+            row++;
+          }
 
-        if (i == 2) /* display profile */
+        if (i == 4) /* display profile */
           {
             gtk_table_set_row_spacing (GTK_TABLE (table), row - 2, 12);
 
@@ -2356,7 +2372,7 @@ prefs_dialog_new (Gimp       *gimp,
             row++;
           }
 
-        if (i == 3) /* printer profile */
+        if (i == 5) /* printer profile */
           {
             prefs_enum_combo_box_add (color_config,
                                       "simulation-rendering-intent", 0, 0,
diff --git a/libgimpconfig/gimpcolorconfig.c b/libgimpconfig/gimpcolorconfig.c
index 7698337..976f6c6 100644
--- a/libgimpconfig/gimpcolorconfig.c
+++ b/libgimpconfig/gimpcolorconfig.c
@@ -84,6 +84,12 @@
      "which can not be represented in the target color space.")
 #define OUT_OF_GAMUT_COLOR_BLURB \
   N_("The color to use for marking colors which are out of gamut.")
+#define USE_FALLBACK_RGB_PROFILES_BLURB \
+  N_("Use the fallback color profiles (if the camera does not embed an ICC profile).")
+#define SRGB_PROFILE_BLURB \
+  N_("The fallback sRGB color profile (for cameras that do not embed ICC profiles).")
+#define ADOBERGB_PROFILE_BLURB \
+  N_("The fallback AdobeRGB color profile (for cameras that do not embed ICC profiles).")
 
 
 
@@ -102,7 +108,10 @@ enum
   PROP_SIMULATION_USE_BPC,
   PROP_SIMULATION_GAMUT_CHECK,
   PROP_OUT_OF_GAMUT_COLOR,
-  PROP_DISPLAY_MODULE
+  PROP_DISPLAY_MODULE,
+  PROP_USE_FALLBACK_RGB_PROFILES,
+  PROP_SRGB_PROFILE,
+  PROP_ADOBERGB_PROFILE
 };
 
 
@@ -199,6 +208,19 @@ gimp_color_config_class_init (GimpColorConfigClass *klass)
                                    "display-module", NULL,
                                    "CdisplayLcms",
                                    GIMP_PARAM_STATIC_STRINGS);
+  GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_USE_FALLBACK_RGB_PROFILES,
+                                    "use-fallback-rgb-profiles",
+                                    USE_FALLBACK_RGB_PROFILES_BLURB,
+                                    FALSE,
+                                    GIMP_PARAM_STATIC_STRINGS);
+  GIMP_CONFIG_INSTALL_PROP_PATH (object_class, PROP_SRGB_PROFILE,
+                                 "srgb-profile", SRGB_PROFILE_BLURB,
+                                 GIMP_CONFIG_PATH_FILE, NULL,
+                                 GIMP_PARAM_STATIC_STRINGS);
+  GIMP_CONFIG_INSTALL_PROP_PATH (object_class, PROP_ADOBERGB_PROFILE,
+                                 "adobergb-profile", ADOBERGB_PROFILE_BLURB,
+                                 GIMP_CONFIG_PATH_FILE, NULL,
+                                 GIMP_PARAM_STATIC_STRINGS);
 }
 
 static void
@@ -226,6 +248,12 @@ gimp_color_config_finalize (GObject *object)
   if (color_config->display_module)
     g_free (color_config->display_module);
 
+  if (color_config->srgb_profile)
+    g_free (color_config->srgb_profile);
+
+  if (color_config->adobergb_profile)
+    g_free (color_config->adobergb_profile);
+
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
@@ -283,6 +311,17 @@ gimp_color_config_set_property (GObject      *object,
       g_free (color_config->display_module);
       color_config->display_module = g_value_dup_string (value);
       break;
+    case PROP_USE_FALLBACK_RGB_PROFILES:
+      color_config->use_fallback_rgb_profiles = g_value_get_boolean (value);
+      break;
+    case PROP_SRGB_PROFILE:
+      g_free (color_config->srgb_profile);
+      color_config->srgb_profile = g_value_dup_string (value);
+      break;
+    case PROP_ADOBERGB_PROFILE:
+      g_free (color_config->adobergb_profile);
+      color_config->adobergb_profile = g_value_dup_string (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
@@ -338,6 +377,15 @@ gimp_color_config_get_property (GObject    *object,
     case PROP_DISPLAY_MODULE:
       g_value_set_string (value, color_config->display_module);
       break;
+    case PROP_USE_FALLBACK_RGB_PROFILES:
+      g_value_set_boolean (value, color_config->use_fallback_rgb_profiles);
+      break;
+    case PROP_SRGB_PROFILE:
+      g_value_set_string (value, color_config->srgb_profile);
+      break;
+    case PROP_ADOBERGB_PROFILE:
+      g_value_set_string (value, color_config->adobergb_profile);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
diff --git a/libgimpconfig/gimpcolorconfig.h b/libgimpconfig/gimpcolorconfig.h
index 9d99428..076407f 100644
--- a/libgimpconfig/gimpcolorconfig.h
+++ b/libgimpconfig/gimpcolorconfig.h
@@ -58,6 +58,10 @@ struct _GimpColorConfig
   gboolean                    display_use_black_point_compensation;
   gboolean                    simulation_use_black_point_compensation;
 
+  gboolean                    use_fallback_rgb_profiles;
+  gchar                      *srgb_profile;
+  gchar                      *adobergb_profile;
+
   /*< private >*/
   /* Padding for future expansion */
 #if (GLIB_SIZEOF_VOID_P == 8)
diff --git a/plug-ins/file-jpeg/jpeg-load.c b/plug-ins/file-jpeg/jpeg-load.c
index f306a87..6ddf32e 100644
--- a/plug-ins/file-jpeg/jpeg-load.c
+++ b/plug-ins/file-jpeg/jpeg-load.c
@@ -78,6 +78,9 @@ load_image (const gchar  *filename,
   gint             scanlines;
   gint             i, start, end;
   cmsHTRANSFORM    cmyk_transform = NULL;
+  gchar           *value;
+  GimpColorConfig *config;
+  GimpParasite    *parasite;
 
   /* We set up the normal JPEG error routines. */
   cinfo.err = jpeg_std_error (&jerr.pub);
@@ -293,8 +296,6 @@ load_image (const gchar  *filename,
       /* if we found any comments, then make a parasite for them */
       if (comment_buffer && comment_buffer->len)
         {
-          GimpParasite *parasite;
-
           jpeg_load_sanitize_comment (comment_buffer->str);
           parasite = gimp_parasite_new ("gimp-comment",
                                         GIMP_PARASITE_PERSISTENT,
@@ -308,6 +309,10 @@ load_image (const gchar  *filename,
 
       /* Step 5.3: check for an embedded ICC profile in APP2 markers */
       jpeg_icc_read_profile (&cinfo, &profile, &profile_size);
+#ifdef GIMP_UNSTABLE
+      g_print ("jpeg-load: embedded color profile had size %d bytes (0 bytes means NO EMBEDDED PROFILE)\n",
+               (gint) profile_size);
+#endif
 
       if (cinfo.out_color_space == JCS_CMYK)
         {
@@ -315,8 +320,6 @@ load_image (const gchar  *filename,
         }
       else if (profile) /* don't attach the profile if we are transforming */
         {
-          GimpParasite *parasite;
-
           parasite = gimp_parasite_new ("icc-profile",
                                         GIMP_PARASITE_PERSISTENT |
                                         GIMP_PARASITE_UNDOABLE,
@@ -324,6 +327,98 @@ load_image (const gchar  *filename,
           gimp_image_attach_parasite (image_ID, parasite);
           gimp_parasite_free (parasite);
         }
+      else /* no embedded profile found, check Interoperability Index */
+        {
+          GFile *file = g_file_new_for_path (filename);
+       
+          GimpMetadata *metadata;
+          metadata = gimp_metadata_load_from_file (file, error);
+
+          if (metadata)
+            {
+#ifdef GIMP_UNSTABLE
+              g_print ("jpeg-load: metadata read from file\n");
+#endif
+
+              value = gexiv2_metadata_get_tag_interpreted_string (metadata, "Exif.Iop.InteroperabilityIndex");
+
+#ifdef GIMP_UNSTABLE
+              g_print ("jpeg-load: found Interop Index '%s'\n",
+                       value);
+#endif
+
+              if (! strcmp(value, "R03")) /* Adobe RGB or equivalent */
+                {
+#ifdef GIMP_UNSTABLE
+                  g_print ("jpeg-load: Interop Index matched 'R03' (AdobeRGB or compatible)\n");
+#endif
+                  config = gimp_get_color_configuration ();
+
+                  if (config->use_fallback_rgb_profiles)
+                    {
+                      gboolean  file_read = TRUE;
+                      gchar    *contents  = NULL;
+                      gsize     length    = 0;
+
+                      file_read = g_file_get_contents (config->adobergb_profile,
+                                                       &contents,
+                                                       &length,
+                                                       NULL);
+                      if (file_read)
+                        {
+#ifdef GIMP_UNSTABLE
+                          g_print ("jpeg-load: fallback AdobeRGB profile loaded, size %d bytes\n",
+                                   (gint) length);
+#endif
+                          parasite = gimp_parasite_new ("icc-profile",
+                                                        GIMP_PARASITE_PERSISTENT |
+                                                        GIMP_PARASITE_UNDOABLE,
+                                                        length, contents);
+                          gimp_image_attach_parasite (image_ID, parasite);
+                          gimp_parasite_free (parasite);
+                        }
+                    }
+
+                  g_object_unref (config);
+                }
+
+              if (! strcmp(value, "R98")) /* sRGB or equivalent */
+                {
+
+#ifdef GIMP_UNSTABLE
+                  g_print ("jpeg-load: Interop Index matched 'R98' (sRGB)\n");
+#endif
+                  config = gimp_get_color_configuration ();
+
+                  if (config->use_fallback_rgb_profiles)
+                    {
+                      gboolean  file_read = TRUE;
+                      gchar    *contents  = NULL;
+                      gsize     length    = 0;
+
+                      file_read = g_file_get_contents (config->srgb_profile,
+                                                       &contents,
+                                                       &length,
+                                                       NULL);
+                      if (file_read)
+                        {
+#ifdef GIMP_UNSTABLE
+                          g_print ("jpeg-load: fallback sRGB profile loaded, size %d bytes\n",
+                                   (gint) length);
+#endif
+                          parasite = gimp_parasite_new ("icc-profile",
+                                                        GIMP_PARASITE_PERSISTENT |
+                                                        GIMP_PARASITE_UNDOABLE,
+                                                        length, contents);
+                          gimp_image_attach_parasite (image_ID, parasite);
+                          gimp_parasite_free (parasite);
+                        }
+                    }
+
+                  g_object_unref (config);
+                }
+            }
+        }
 
       g_free (profile);
 
