diff gnome-settings-daemon-3.4.2/plugins/gconf/conf-watcher.c gnome-settings-daemon-3.4.2-marga/plugins/gconf/conf-watcher.c
--- gnome-settings-daemon-3.4.2/plugins/gconf/conf-watcher.c	2012-10-29 13:58:28.000000000 -0700
+++ gnome-settings-daemon-3.4.2-marga/plugins/gconf/conf-watcher.c	2012-10-29 17:02:14.473348298 -0700
@@ -27,6 +27,11 @@
                                  const gchar *key,
                                  ConfWatcher *watcher);
 
+static gboolean settings_change_event_cb (GSettings *settings,
+                                          gpointer keys,
+                                          gint n_keys,
+                                          gpointer user_data);
+
 static void
 conf_watcher_finalize (GObject *object)
 {
@@ -34,6 +39,7 @@
 
 	if (watcher->settings != NULL) {
                 g_signal_handlers_disconnect_by_func (watcher->settings, settings_changed_cb, watcher);
+                g_signal_handlers_disconnect_by_func (watcher->settings, settings_change_event_cb, watcher);
 		g_object_unref (watcher->settings);
         }
 
@@ -62,6 +68,20 @@
 {
 }
 
+static gboolean
+settings_change_event_cb (GSettings *settings,
+                          gpointer keys,
+                          gint n_keys,
+                          gpointer user_data)
+{
+	/* This is needed to prevent dconf update from
+	   overwriting user settings with system settings. */
+	if (n_keys == 0) {
+		return TRUE;
+	}
+	return FALSE;
+}
+
 static void
 settings_changed_cb (GSettings *settings,
 		     const gchar *key,
@@ -128,6 +148,8 @@
 	watcher->settings = g_settings_new (watcher->settings_id);
 	g_signal_connect (watcher->settings, "changed",
 			  G_CALLBACK (settings_changed_cb), watcher);
+	g_signal_connect (watcher->settings, "change_event",
+			  G_CALLBACK (settings_change_event_cb), watcher);
 
 	watcher->conf_client = gconf_client_get_default ();
 }

