Index: gnome-settings-daemon/gnome-settings-manager.h
===================================================================
--- gnome-settings-daemon/gnome-settings-manager.h	(revision 260)
+++ gnome-settings-daemon/gnome-settings-manager.h	(working copy)
@@ -67,7 +67,7 @@
                                                           GError              **error);
 gboolean               gnome_settings_manager_start      (GnomeSettingsManager *manager,
                                                           GError              **error);
-void                   gnome_settings_manager_stop       (GnomeSettingsManager *manager);
+gboolean               gnome_settings_manager_stop       (GnomeSettingsManager *manager);
 
 gboolean               gnome_settings_manager_awake      (GnomeSettingsManager *manager,
                                                           GError              **error);
Index: gnome-settings-daemon/gnome-settings-manager.xml
===================================================================
--- gnome-settings-daemon/gnome-settings-manager.xml	(revision 260)
+++ gnome-settings-daemon/gnome-settings-manager.xml	(working copy)
@@ -7,6 +7,7 @@
     <method name="StartWithSettingsPrefix">
       <arg name="settings_prefix" direction="in" type="s"/>
     </method>
+    <method name="Stop"/>
     <signal name="PluginActivated">
       <arg name="name" type="s"/>
     </signal>
Index: gnome-settings-daemon/gnome-settings-manager.c
===================================================================
--- gnome-settings-daemon/gnome-settings-manager.c	(revision 260)
+++ gnome-settings-daemon/gnome-settings-manager.c	(working copy)
@@ -101,6 +101,22 @@
         }
 }
 
+static void
+maybe_deactivate_plugin (GnomeSettingsPluginInfo *info, gpointer user_data)
+{
+        if (gnome_settings_plugin_info_get_enabled (info) &&
+            gnome_settings_plugin_info_is_active (info))
+        {
+                if (gnome_settings_plugin_info_deactivate (info)) {
+                        g_debug ("Plugin %s: deactivated", gnome_settings_plugin_info_get_location (info));
+                } else {
+                        g_debug ("Plugin %s: deactivation failed", gnome_settings_plugin_info_get_location (info));
+                }
+        } else {
+                g_debug ("Plugin %s: not active", gnome_settings_plugin_info_get_location (info));
+        }
+}
+
 static gint
 compare_location (GnomeSettingsPluginInfo *a,
                   GnomeSettingsPluginInfo *b)
@@ -275,6 +291,7 @@
 static void
 _unload_all (GnomeSettingsManager *manager)
 {
+         g_slist_foreach (manager->priv->plugins, (GFunc) maybe_deactivate_plugin, NULL);
          g_slist_foreach (manager->priv->plugins, (GFunc) g_object_unref, NULL);
          g_slist_free (manager->priv->plugins);
          manager->priv->plugins = NULL;
@@ -355,7 +372,7 @@
         return gnome_settings_manager_start (manager, error);
 }
 
-void
+gboolean
 gnome_settings_manager_stop (GnomeSettingsManager *manager)
 {
         g_debug ("Stopping settings manager");
@@ -370,6 +387,9 @@
 #endif
 
         _unload_all (manager);
+
+        /* We have no way to find out the state of the unload operation */
+        return TRUE;
 }
 
 static void
