diff -Naur gnome-control-center_orig/capplets/appearance/appearance.h gnome-control-center_mod/capplets/appearance/appearance.h
--- gnome-control-center_orig/capplets/appearance/appearance.h	2007-11-24 19:28:35.000000000 +0100
+++ gnome-control-center_mod/capplets/appearance/appearance.h	2007-11-24 20:57:37.000000000 +0100
@@ -66,4 +66,7 @@
   GdkPixbuf *gtk_theme_icon;
   GdkPixbuf *window_theme_icon;
   GdkPixbuf *icon_theme_icon;
+  
+  /* color schemes key file */
+  GKeyFile *color_schemes_key_file;
 } AppearanceData;
diff -Naur gnome-control-center_orig/capplets/appearance/appearance-style.c gnome-control-center_mod/capplets/appearance/appearance-style.c
--- gnome-control-center_orig/capplets/appearance/appearance-style.c	2007-11-24 19:28:35.000000000 +0100
+++ gnome-control-center_mod/capplets/appearance/appearance-style.c	2007-11-26 11:15:13.000000000 +0100
@@ -202,6 +202,134 @@
   g_free (setting);
 }
 
+static gboolean
+color_scheme_key_file_load (AppearanceData *data)
+{
+  gchar    *theme_name   = NULL;
+  gchar    *themes_dir   = NULL;
+  gchar    *schemes_path = NULL;
+  gboolean result        = FALSE;
+  
+  themes_dir = gtk_rc_get_theme_dir ();
+  theme_name = gconf_client_get_string (data->client, METACITY_THEME_KEY, NULL); 
+
+  schemes_path = g_build_filename (themes_dir, theme_name, "colorschemes.ini", NULL);
+
+  result = g_key_file_load_from_file (data->color_schemes_key_file, schemes_path, 
+                                      G_KEY_FILE_NONE, NULL);
+
+  g_free (theme_name);
+  g_free (themes_dir);
+  g_free (schemes_path);
+  
+  return result;
+}
+
+static GString *
+color_scheme_key_file_get_scheme (guint index, AppearanceData *data)
+{
+  guint       i, j;
+  gchar       *colorstr       = NULL;
+  gchar       **scheme_groups = NULL;
+  gchar       **color_keys    = NULL;
+  GString     *scheme = g_string_new (NULL);
+
+  scheme_groups = g_key_file_get_groups (data->color_schemes_key_file, NULL);
+  color_keys = g_key_file_get_keys (data->color_schemes_key_file, scheme_groups[index], 
+                                    NULL, NULL);
+  
+  /* generate a valid gconf color scheme */
+  for (i = 0; i < NUM_SYMBOLIC_COLORS; ++i)
+  {
+    for (j = 0; color_keys[j]; ++j)  
+    {
+      if (strcmp (color_keys[j], symbolic_names[i]) == 0) 
+      {
+        colorstr = g_key_file_get_string (data->color_schemes_key_file, 
+                                          scheme_groups[index], color_keys[j], 
+                                          NULL);
+        g_string_append_printf (scheme, "%s:%s\n", color_keys[j], colorstr);
+        g_free (colorstr);
+        
+        break; /* disregard color redefinitions */
+      }
+    }
+  }
+    
+  g_strfreev (color_keys);
+  g_strfreev (scheme_groups);
+
+  if (scheme->str)
+    g_string_truncate (scheme, scheme->len - 1);
+    
+  return scheme;
+}
+
+static void
+color_scheme_combo_update (GtkSettings *settings, AppearanceData *data)
+{
+  guint       i;
+  gboolean    found           = FALSE;
+  gchar       **scheme_groups = NULL;
+  gchar       *scheme_name    = NULL;
+  gchar       *cur_scheme     = NULL;
+  gchar       *def_scheme     = NULL;
+  gchar       *theme_name     = NULL;
+  GtkComboBox *combo          = NULL;
+  GString     *scheme = g_string_new (NULL);
+
+  combo = GTK_COMBO_BOX (glade_xml_get_widget (data->xml, "color_scheme_combo"));
+  gtk_list_store_clear (GTK_LIST_STORE (gtk_combo_box_get_model (combo)));
+        
+  gtk_combo_box_append_text (combo, "Default");
+
+  theme_name = gconf_client_get_string (data->client, METACITY_THEME_KEY, NULL);
+  def_scheme = gtkrc_get_color_scheme_for_theme (theme_name);  
+  g_object_get (settings, "gtk-color-scheme", &cur_scheme, NULL);
+  
+  if (theme_name && def_scheme && cur_scheme) 
+  {
+    /* default theme selection */
+    if (gnome_theme_color_scheme_equal (def_scheme, cur_scheme)) {
+      gtk_combo_box_set_active (combo, 0);
+      found = TRUE;
+    }
+    
+    /* update combo box with color scheme names from the file */
+    if (data->color_schemes_key_file) 
+    {
+      scheme_groups = g_key_file_get_groups (data->color_schemes_key_file, NULL);
+    
+      for (i = 0; scheme_groups[i]; ++i) 
+      {
+        scheme_name = g_key_file_get_locale_string (data->color_schemes_key_file, 
+                                                    scheme_groups[i], "Name", NULL, NULL);
+        if (scheme_name)
+          gtk_combo_box_append_text (combo, scheme_name);
+      
+        /* autoselect the current color scheme */
+        if (!found) {
+          scheme = color_scheme_key_file_get_scheme (i, data);
+          
+          if (gnome_theme_color_scheme_equal (cur_scheme, scheme->str)) {
+            gtk_combo_box_set_active (combo, i + 1);
+            found = TRUE;
+          }
+          
+          g_string_free (scheme, TRUE);
+        }
+        
+        g_free (scheme_name);
+      }
+    }
+  }
+  
+  g_free (def_scheme);
+  g_free (cur_scheme);
+  g_free (theme_name);
+  g_strfreev (scheme_groups);
+}
+
 static void
 color_scheme_changed (GObject    *settings,
                       GParamSpec *pspec,
@@ -275,6 +403,9 @@
   if (!gnome_theme_color_scheme_equal (old_scheme, scheme->str)) {
     gconf_client_set_string (data->client, COLOR_SCHEME_KEY, scheme->str, NULL);
 
+    gtk_combo_box_set_active (GTK_COMBO_BOX (glade_xml_get_widget (data->xml, 
+                              "color_scheme_combo")), -1);
+
     gtk_widget_set_sensitive (glade_xml_get_widget (data->xml, "color_scheme_defaults_button"), TRUE);
   }
   g_free (old_scheme);
@@ -282,9 +413,38 @@
 }
 
 static void
+color_scheme_combo_changed_cb (GtkWidget *combo, AppearanceData *data)
+{
+  gint    scheme_selected;
+  gchar   *old_scheme = NULL;
+  GString *scheme = g_string_new (NULL);
+  
+  if (data->color_schemes_key_file)
+  {
+    scheme_selected = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
+    
+    if (scheme_selected == 0) {    /* default */
+      gconf_client_unset (data->client, COLOR_SCHEME_KEY, NULL); 
+      
+    } else if (scheme_selected > 0) {
+      old_scheme = gconf_client_get_string (data->client, COLOR_SCHEME_KEY, NULL);
+      scheme = color_scheme_key_file_get_scheme (scheme_selected - 1, data);
+
+      if (!gnome_theme_color_scheme_equal (old_scheme, scheme->str))
+        gconf_client_set_string (data->client, COLOR_SCHEME_KEY, scheme->str, NULL);
+      
+      g_free (old_scheme);  
+      g_string_free (scheme, TRUE);
+    }
+  }
+}
+
+static void
 color_scheme_defaults_button_clicked_cb (GtkWidget *button, AppearanceData *data)
 {
-  gconf_client_unset (data->client, COLOR_SCHEME_KEY, NULL);
+  gtk_combo_box_set_active (GTK_COMBO_BOX (glade_xml_get_widget (data->xml, 
+                            "color_scheme_combo")), 0);
+
   gtk_widget_set_sensitive (glade_xml_get_widget (data->xml, "color_scheme_defaults_button"), FALSE);
 }
 
@@ -329,6 +489,17 @@
 
   gtk_widget_set_sensitive (glade_xml_get_widget (data->xml, "gtk_themes_delete"),
 			    theme_is_writable (theme));
+
+  /* Load the color scheme file and update the combo box */
+  if (data->color_schemes_key_file == NULL)
+    data->color_schemes_key_file = g_key_file_new ();
+    
+  if (!color_scheme_key_file_load (data)) {
+    g_key_file_free (data->color_schemes_key_file);
+    data->color_schemes_key_file = NULL;
+  }
+  
+  color_scheme_combo_update (settings, data);
 }
 
 static void
@@ -857,6 +1028,7 @@
   data->gtk_theme_icon = gdk_pixbuf_new_from_file (GNOMECC_PIXMAP_DIR "/gtk-theme-thumbnailing.png", NULL);
   data->window_theme_icon = gdk_pixbuf_new_from_file (GNOMECC_PIXMAP_DIR "/window-theme-thumbnailing.png", NULL);
   data->icon_theme_icon = gdk_pixbuf_new_from_file (GNOMECC_PIXMAP_DIR "/icon-theme-thumbnailing.png", NULL);
+  data->color_schemes_key_file = NULL;
 
   w = glade_xml_get_widget (data->xml, "theme_details");
   g_signal_connect (w, "response", (GCallback) style_response_cb, NULL);
@@ -911,6 +1083,8 @@
   g_signal_connect (glade_xml_get_widget (data->xml, "window_themes_delete"), "clicked", (GCallback) window_theme_delete_cb, data);
   g_signal_connect (glade_xml_get_widget (data->xml, "icon_themes_delete"), "clicked", (GCallback) icon_theme_delete_cb, data);
   g_signal_connect (glade_xml_get_widget (data->xml, "cursor_themes_delete"), "clicked", (GCallback) cursor_theme_delete_cb, data);
+  /* color schemes */
+  g_signal_connect (glade_xml_get_widget (data->xml, "color_scheme_combo"), "changed", (GCallback) color_scheme_combo_changed_cb, data);
 
   gnome_theme_info_register_theme_change ((ThemeChangedCallback) changed_on_disk_cb, data);
 }
@@ -924,4 +1098,6 @@
     g_object_unref (data->window_theme_icon);
   if (data->icon_theme_icon)
     g_object_unref (data->icon_theme_icon);
+  if (data->color_schemes_key_file)
+    g_key_file_free (data->color_schemes_key_file);
 }
diff -Naur gnome-control-center_orig/capplets/appearance/data/appearance.glade gnome-control-center_mod/capplets/appearance/data/appearance.glade
--- gnome-control-center_orig/capplets/appearance/data/appearance.glade	2007-11-24 19:28:33.000000000 +0100
+++ gnome-control-center_mod/capplets/appearance/data/appearance.glade	2007-11-25 21:36:25.000000000 +0100
@@ -2209,6 +2209,39 @@
                   </packing>
                 </child>
                 <child>
+                  <widget class="GtkTable" id="color_scheme_selection_table">
+                    <property name="visible">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="n_rows">1</property>
+                    <property name="n_columns">2</property>
+                    <child>
+                      <widget class="GtkComboBox" id="color_scheme_combo">
+                        <property name="visible">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="items" translatable="yes"></property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="right_attach">2</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="color_scheme_selection_label">
+                        <property name="visible">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">_Color Schemes:</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">color_scheme_combo</property>
+                      </widget>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="fill">False</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+                <child>
                   <widget class="GtkHButtonBox" id="hbuttonbox4">
                     <property name="visible">True</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
@@ -2225,7 +2258,7 @@
                   </widget>
                   <packing>
                     <property name="expand">False</property>
-                    <property name="position">2</property>
+                    <property name="position">3</property>
                   </packing>
                 </child>
               </widget>
