Index: gdm-2.24.0/common/gdm-settings-system-backend.c
===================================================================
--- gdm-2.24.0.orig/common/gdm-settings-system-backend.c
+++ gdm-2.24.0/common/gdm-settings-system-backend.c
@@ -33,7 +33,7 @@
 #include <glib/gi18n.h>
 #include <glib/gstdio.h>
 #include <glib-object.h>
-
+#include <gio/gio.h>
 #include "gdm-sysconfig.h"
 #include "gdm-settings-keys.h"
 #include "gdm-settings-system-backend.h"
@@ -53,6 +53,7 @@ struct GdmSettingsSystemBackendPrivate
         gchar     **lines;
         gboolean    dirty;
         guint       save_id;
+	GFileMonitor *monitor;
 
         gchar      *set_autologin_user;
         gboolean    set_autologin_enabled;
@@ -64,6 +65,22 @@ static void     gdm_settings_system_back
 
 G_DEFINE_TYPE (GdmSettingsSystemBackend, gdm_settings_system_backend, GDM_TYPE_SETTINGS_BACKEND)
 
+static void
+monitor_changed_cb (GFileMonitor      *monitor,
+                    GFile             *child,
+                    GFile             *other_file,
+                    GFileMonitorEvent  eflags,
+                    GdmSettingsSystemBackend *backend)
+{
+        g_strfreev (backend->priv->lines);
+        backend->priv->lines = gdm_sysconfig_load_file (backend->priv->filename);
+
+	/*   
+ 	 * set the key to NULL, the signal handler update all the needed keys 
+ 	 * */
+        gdm_settings_backend_value_changed ((GdmSettingsBackend *)backend, NULL, NULL, NULL);
+}
+
 static gboolean
 gdm_settings_system_backend_get_value (GdmSettingsBackend *backend,
                                        const char         *key,
@@ -271,6 +288,13 @@ gdm_settings_system_backend_init (GdmSet
 
         backend->priv->filename = g_strdup ("/etc/sysconfig/displaymanager");
         backend->priv->lines = gdm_sysconfig_load_file (backend->priv->filename);
+	
+	GFile *file;
+        file = g_file_new_for_path (backend->priv->filename);
+        backend->priv->monitor = g_file_monitor_file (file, 0, NULL, NULL);
+        g_signal_connect (backend->priv->monitor, "changed",
+                                        G_CALLBACK (monitor_changed_cb), backend);
+        g_object_unref (file);
 
         if (!backend->priv->lines) {
                 g_warning ("Unable to load file '%s'", backend->priv->filename);
@@ -293,6 +317,7 @@ gdm_settings_system_backend_finalize (GO
         g_strfreev (backend->priv->lines);
         g_free (backend->priv->filename);
         g_free (backend->priv->set_autologin_user);
+        g_file_monitor_cancel (backend->priv->monitor);
 
         G_OBJECT_CLASS (gdm_settings_system_backend_parent_class)->finalize (object);
 }
Index: gdm-2.24.0/configure.ac
===================================================================
--- gdm-2.24.0.orig/configure.ac
+++ gdm-2.24.0/configure.ac
@@ -69,6 +69,7 @@ AC_SUBST(COMMON_LIBS)
 PKG_CHECK_MODULES(DAEMON,
         dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION
         gobject-2.0 >= $GLIB_REQUIRED_VERSION
+	gio-2.0 >= $GLIB_REQUIRED_VERSION
 )
 AC_SUBST(DAEMON_CFLAGS)
 AC_SUBST(DAEMON_LIBS)
Index: gdm-2.24.0/daemon/gdm-local-display-factory.c
===================================================================
--- gdm-2.24.0.orig/daemon/gdm-local-display-factory.c
+++ gdm-2.24.0/daemon/gdm-local-display-factory.c
@@ -469,6 +469,14 @@ gdm_local_display_factory_start (GdmDisp
         return ret;
 }
 
+static void
+remove_display (const char *id,
+	         GdmDisplay *display,
+	         gpointer user_data)
+{
+	gdm_display_unmanage (display);
+}
+
 static gboolean
 gdm_local_display_factory_stop (GdmDisplayFactory *base_factory)
 {
@@ -476,6 +484,11 @@ gdm_local_display_factory_stop (GdmDispl
 
         g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE);
 
+	GdmDisplayStore *store;
+	
+	store = gdm_display_factory_get_display_store (base_factory);
+	gdm_display_store_foreach (store, remove_display, NULL);
+
         return TRUE;
 }
 
Index: gdm-2.24.0/daemon/gdm-manager.c
===================================================================
--- gdm-2.24.0.orig/daemon/gdm-manager.c
+++ gdm-2.24.0/daemon/gdm-manager.c
@@ -297,7 +297,23 @@ gdm_manager_set_local_enabled (GdmManage
 {
 	g_return_if_fail (GDM_IS_MANAGER (manager));
 	
-	manager->priv->local_enabled = enabled;
+        if (manager->priv->local_enabled != enabled) {
+                manager->priv->local_enabled = enabled;
+
+                if (manager->priv->local_enabled) {
+                        manager->priv->local_factory = gdm_local_display_factory_new (manager->priv->display_store);
+                        if (manager->priv->started) {
+                                gdm_display_factory_start (GDM_DISPLAY_FACTORY (manager->priv->local_factory));
+                        }
+                } else {
+                        if (manager->priv->started) {
+                                gdm_display_factory_stop (GDM_DISPLAY_FACTORY (manager->priv->local_factory));
+                        }
+
+                        g_object_unref (manager->priv->local_factory);
+                        manager->priv->local_factory = NULL;
+                }
+	}
 }
 
 void
@@ -383,7 +399,9 @@ gdm_manager_constructor (GType
                                                                                        n_construct_properties,
                                                                                        construct_properties));
 
-        manager->priv->local_factory = gdm_local_display_factory_new (manager->priv->display_store);
+	if (manager->priv->local_enabled) {
+	        manager->priv->local_factory = gdm_local_display_factory_new (manager->priv->display_store);
+	}
 
 #ifdef HAVE_LIBXDMCP
         if (manager->priv->xdmcp_enabled) {
@@ -467,6 +485,9 @@ gdm_manager_finalize (GObject *object)
 
         g_return_if_fail (manager->priv != NULL);
 
+	if (manager->priv->local_factory != NULL) {
+                g_object_unref (manager->priv->local_factory);
+	}
 #ifdef HAVE_LIBXDMCP
         if (manager->priv->xdmcp_factory != NULL) {
                 g_object_unref (manager->priv->xdmcp_factory);
Index: gdm-2.24.0/daemon/main.c
===================================================================
--- gdm-2.24.0.orig/daemon/main.c
+++ gdm-2.24.0/daemon/main.c
@@ -495,6 +495,33 @@ signal_cb (int      signo,
         return ret;
 }
 
+static void
+load_settings (GdmManager *manager)
+{
+        gboolean            local_enabled;
+        gboolean            xdmcp_enabled;
+
+        xdmcp_enabled = FALSE;
+        gdm_settings_direct_get_boolean (GDM_KEY_XDMCP_ENABLE, &xdmcp_enabled);
+        gdm_manager_set_xdmcp_enabled (manager, xdmcp_enabled);
+
+        local_enabled = TRUE;
+        gdm_settings_direct_get_boolean (GDM_KEY_LOCAL_XSERVER_ENABLE, &local_enabled);
+        gdm_manager_set_local_enabled (manager, local_enabled);
+}
+
+static void
+on_settings_value_changed (GdmSettings *backend,
+                const char         *key,
+                const char         *old_value,
+                const char         *new_value,
+                GdmManager *manager)
+{
+	if (key == NULL) {
+		load_settings (manager);
+	}
+}
+
 int
 main (int    argc,
       char **argv)
@@ -506,8 +533,6 @@ main (int    argc,
         GError             *error;
         int                 ret;
         gboolean            res;
-	gboolean 	    local_enabled;
-        gboolean            xdmcp_enabled;
         GdmSignalHandler   *signal_handler;
         static gboolean     debug            = FALSE;
         static gboolean     do_timed_exit    = FALSE;
@@ -609,13 +634,8 @@ main (int    argc,
                 goto out;
         }
 
-        xdmcp_enabled = FALSE;
-        gdm_settings_direct_get_boolean (GDM_KEY_XDMCP_ENABLE, &xdmcp_enabled);
-        gdm_manager_set_xdmcp_enabled (manager, xdmcp_enabled);
-
-	local_enabled = TRUE;
-        gdm_settings_direct_get_boolean (GDM_KEY_LOCAL_XSERVER_ENABLE, &local_enabled);
-        gdm_manager_set_local_enabled (manager, local_enabled);
+        load_settings (manager);
+        g_signal_connect (settings, "value_changed", on_settings_value_changed, manager);
 
         g_signal_connect (bus_proxy,
                           "destroy",
