diff -up glib-2.36.3/gio/gsettings.c.glpatch glib-2.36.3/gio/gsettings.c
--- glib-2.36.3/gio/gsettings.c.glpatch	2013-06-10 00:03:17.000000000 +0200
+++ glib-2.36.3/gio/gsettings.c	2014-05-26 17:26:33.742105175 +0200
@@ -2310,6 +2310,7 @@ typedef struct
   GSettingsSchemaKey key;
   GSettings *settings;
   GObject *object;
+  GVariant *last_value;
 
   GSettingsBindGetMapping get_mapping;
   GSettingsBindSetMapping set_mapping;
@@ -2352,6 +2353,9 @@ g_settings_binding_free (gpointer data)
 
   g_object_unref (binding->settings);
 
+  if (binding->last_value)
+    g_variant_unref (binding->last_value);
+
   g_slice_free (GSettingsBinding, binding);
 }
 
@@ -2420,8 +2424,11 @@ g_settings_binding_key_changed (GSetting
                  binding->key.name, g_settings_schema_get_id (binding->key.schema));
     }
 
-  g_object_set_property (binding->object, binding->property->name, &value);
-  g_variant_unref (variant);
+  if (!binding->last_value || !g_variant_equal (binding->last_value, variant))
+    g_object_set_property (binding->object, binding->property->name, &value);
+  if (binding->last_value)
+    g_variant_unref (binding->last_value);
+  binding->last_value = variant;
   g_value_unset (&value);
 
   binding->running = FALSE;
@@ -2470,8 +2477,11 @@ g_settings_binding_property_changed (GOb
           return;
         }
 
-      g_settings_write_to_backend (binding->settings, &binding->key, variant);
-      g_variant_unref (variant);
+      if (!binding->last_value || !g_variant_equal (binding->last_value, variant))
+        g_settings_write_to_backend (binding->settings, &binding->key, variant);
+      if (binding->last_value)
+        g_variant_unref (binding->last_value);
+      binding->last_value = variant;
     }
   g_value_unset (&value);
 
