Index: gdm-2.30.5/daemon/gdm-simple-slave.c
===================================================================
--- gdm-2.30.5.orig/daemon/gdm-simple-slave.c	2010-10-05 20:16:52.931928245 +0200
+++ gdm-2.30.5/daemon/gdm-simple-slave.c	2010-10-05 22:47:00.375423640 +0200
@@ -214,6 +214,23 @@ queue_greeter_reset (GdmSimpleSlave *sla
         slave->priv->greeter_reset_id = g_idle_add ((GSourceFunc)greeter_reset_timeout, slave);
 }
 
+static gboolean
+greeter_stop_timeout (GdmSimpleSlave *slave)
+{
+        gdm_slave_stopped (GDM_SLAVE (slave));
+        return FALSE;
+}
+
+static void
+queue_greeter_stop (GdmSimpleSlave *slave)
+{
+        if (slave->priv->greeter_reset_id > 0) {
+                return;
+        }
+
+        slave->priv->greeter_reset_id = g_timeout_add_seconds (2, (GSourceFunc)greeter_stop_timeout, slave);
+}
+
 static void
 on_session_setup_complete (GdmSession     *session,
                            GdmSimpleSlave *slave)
@@ -387,7 +404,7 @@ start_session_timeout (GdmSimpleSlave *s
                    when Xorg exits it switches to the VT it was
                    started from.  That interferes with fast
                    user switching. */
-                queue_greeter_reset (slave);
+                queue_greeter_stop (slave);
 
                 goto out;
         }
@@ -460,7 +477,7 @@ on_session_accreditation_failed (GdmSess
            user switching. */
         destroy_session (slave);
 
-        queue_greeter_reset (slave);
+        queue_greeter_stop (slave);
 }
 
 static void
