diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
index 3eef745f..39e59147 100644
--- a/daemon/gdm-manager.c
+++ b/daemon/gdm-manager.c
@@ -2696,60 +2696,61 @@ gdm_manager_init (GdmManager *manager)
                                                                    NULL,
                                                                    (GDestroyNotify)
                                                                    NULL,
                                                                    (GDestroyNotify)
                                                                    g_object_unref);
         g_signal_connect (G_OBJECT (manager->priv->display_store),
                           "display-added",
                           G_CALLBACK (on_display_added),
                           manager);
 
         g_signal_connect (G_OBJECT (manager->priv->display_store),
                           "display-removed",
                           G_CALLBACK (on_display_removed),
                           manager);
 }
 
 static void
 unexport_display (const char *id,
                   GdmDisplay *display,
                   GdmManager *manager)
 {
         if (!g_dbus_connection_is_closed (manager->priv->connection))
                 g_dbus_object_manager_server_unexport (manager->priv->object_manager, id);
 }
 
 static void
 finish_display (const char *id,
                 GdmDisplay *display,
                 GdmManager *manager)
 {
+        gdm_display_stop_greeter_session (display);
         if (gdm_display_get_status (display) == GDM_DISPLAY_MANAGED)
                 gdm_display_unmanage (display);
         gdm_display_finish (display);
 }
 
 static void
 gdm_manager_dispose (GObject *object)
 {
         GdmManager *manager;
 
         g_return_if_fail (object != NULL);
         g_return_if_fail (GDM_IS_MANAGER (object));
 
         manager = GDM_MANAGER (object);
 
         g_return_if_fail (manager->priv != NULL);
 
 #ifdef HAVE_LIBXDMCP
         g_clear_object (&manager->priv->xdmcp_factory);
 #endif
         g_clear_object (&manager->priv->local_factory);
         g_clear_pointer (&manager->priv->open_reauthentication_requests,
                          (GDestroyNotify)
                          g_hash_table_unref);
         g_clear_pointer (&manager->priv->transient_sessions,
                          (GDestroyNotify)
                          g_hash_table_unref);
 
         g_list_foreach (manager->priv->user_sessions,
                         (GFunc) gdm_session_close,
