Index: audio-profile.c
===================================================================
--- audio-profile.c	(revision 3495)
+++ audio-profile.c	(working copy)
@@ -1034,7 +1034,7 @@
 
   gconf_client_set_string (conf,
                            key,
-                           _("wav"),
+                           "wav",
                            &err);
   if (err != NULL) g_print ("ERROR: msg: %s\n", err->message);
   BAIL_OUT_CHECK ();
Index: audio-profile-choose.c
===================================================================
--- audio-profile-choose.c	(revision 3481)
+++ audio-profile-choose.c	(working copy)
@@ -23,6 +23,7 @@
 
 #include <string.h>
 #include <glib/gi18n.h>
+#include "gmp-conf.h"
 #include "gmp-util.h"
 #include "audio-profile-choose.h"
 #include "audio-profile.h"
@@ -35,9 +36,104 @@
 {
   NAME_COLUMN,
   ID_COLUMN,
+  EXISTS_COLUMN,
   N_COLUMNS
 };
 
+typedef struct {
+  GtkComboBox parent;
+
+  guint id;
+  GConfClient *client;
+} GMAudioProfileBox;
+typedef GtkComboBoxClass GMAudioProfileBoxClass;
+
+#define GM_TYPE_AUDIO_PROFILE_BOX \
+  (gm_audio_profile_box_get_type ())
+#define GM_AUDIO_PROFILE_BOX(o) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((o), GM_TYPE_AUDIO_PROFILE_BOX, \
+			       GMAudioProfileBox))
+G_DEFINE_TYPE (GMAudioProfileBox, gm_audio_profile_box,
+	       GTK_TYPE_COMBO_BOX);
+
+static void
+gm_audio_profile_box_dispose (GObject *o)
+{
+  GMAudioProfileBox *box = GM_AUDIO_PROFILE_BOX (o);
+
+  if (box->id) {
+    gconf_client_notify_remove (box->client, box->id);
+    g_object_unref (box->client);
+    box->id = 0;
+  }
+}
+
+static void
+gm_audio_profile_box_class_init (GMAudioProfileBoxClass *klass)
+{
+  G_OBJECT_CLASS (klass)->dispose = gm_audio_profile_box_dispose;
+}
+
+static void
+gm_audio_profile_box_init (GMAudioProfileBox *box)
+{
+}
+
+/*
+ * Real code here.
+ */
+
+static void
+cb_gconf (GConfClient *client, guint cnx, GConfEntry *entry,
+	  GtkComboBox *box)
+{
+#define is_key(name, t) \
+  !strcmp (entry->key, name) && entry->value != NULL && \
+  entry->value->type == t
+  if (is_key (CONF_GLOBAL_PREFIX "/profile_list", GCONF_VALUE_LIST) ||
+      gconf_value_get_list_type (entry->value) != GCONF_VALUE_STRING) {
+    GSList *list = gconf_value_get_list (entry->value), *item;
+    GtkTreeModel *model = gtk_combo_box_get_model (box);
+    gboolean res, found;
+    GtkTreeIter iter;
+    gchar *t;
+
+    for (res = gtk_tree_model_get_iter_first (model, &iter);
+	 !found && res; res = gtk_tree_model_iter_next (model, &iter))
+      gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+			  EXISTS_COLUMN, FALSE, -1);
+    for (item = list; item != NULL; item = item->next) {
+      const gchar *str = gconf_value_get_string (item->data);
+
+      for (res = gtk_tree_model_get_iter_first (model, &iter), found = FALSE;
+	   !found && res; res = gtk_tree_model_iter_next (model, &iter)) {
+        gtk_tree_model_get (model, &iter, ID_COLUMN, &t, -1);
+	if (!strcmp (t, str)) {
+	  found = TRUE;
+	  gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+			      EXISTS_COLUMN, TRUE, -1);
+	}
+	g_free (t);
+      }
+      if (!found)
+        g_print ("New entry %s\n", str);
+    }
+    for (res = gtk_tree_model_get_iter_first (model, &iter);
+	 res; res = gtk_tree_model_iter_next (model, &iter)) {
+      gchar *t;
+
+      gtk_tree_model_get (model, &iter, EXISTS_COLUMN, &found, -1);
+      if (!found) {
+        gtk_tree_model_get (model, &iter, ID_COLUMN, &t, -1);
+        g_print ("%s was removed\n", t);
+	g_free (t);
+      }
+    }
+  } else {
+    g_print ("Key %s changed\n", entry->key);
+  }
+}
+
 /* create and return a new Profile Choose combobox widget
  * given the GConf connection
  */
@@ -50,9 +146,11 @@
   GtkCellRenderer *renderer;
   GList *profiles, *orig;
   GtkWidget *combo;
+  GMAudioProfileBox *box;
 
   /* Create the model */
-  list_store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING);
+  list_store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING,
+		 		   G_TYPE_BOOLEAN);
   orig = profiles = gm_audio_profile_get_active_list ();
   while (profiles) {
     GMAudioProfile *profile = profiles->data;
@@ -73,7 +171,9 @@
     g_free (profile_name);
   }
   g_list_free (orig);
-  combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (list_store));
+  combo = box = g_object_new (GM_TYPE_AUDIO_PROFILE_BOX, NULL);
+  gtk_combo_box_set_model (GTK_COMBO_BOX (combo),
+			   GTK_TREE_MODEL (list_store));
 
   /* display name in the combobox */
   renderer = gtk_cell_renderer_text_new ();
@@ -86,6 +186,14 @@
 
   /* activate first one */
   gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
+
+  box->client = gconf_client_get_default ();
+  gconf_client_add_dir (box->client, CONF_PREFIX,
+		        GCONF_CLIENT_PRELOAD_RECURSIVE, NULL);
+  gconf_client_notify_add (box->client, CONF_PREFIX,
+			   (GConfClientNotifyFunc) cb_gconf,
+			   combo, NULL, NULL);
+
   return combo;
 }
 
