Index: gdm-3.0.0/daemon/gdm-simple-slave.c
===================================================================
--- gdm-3.0.0.orig/daemon/gdm-simple-slave.c	2011-05-04 18:46:10.943454386 +0200
+++ gdm-3.0.0/daemon/gdm-simple-slave.c	2011-05-04 21:08:55.293323358 +0200
@@ -470,12 +470,7 @@ start_session_timeout (GdmSimpleSlave *s
         g_debug ("GdmSimpleSlave: migrated: %d", migrated);
         if (migrated) {
                 destroy_session (slave);
-
-                /* We don't stop the slave here because
-                   when Xorg exits it switches to the VT it was
-                   started from.  That interferes with fast
-                   user switching. */
-                queue_greeter_reset (slave);
+                gdm_slave_stopped (GDM_SLAVE (slave));
 
                 goto out;
         }
@@ -548,7 +543,7 @@ on_session_accreditation_failed (GdmSess
            user switching. */
         destroy_session (slave);
 
-        queue_greeter_reset (slave);
+        gdm_slave_stopped (GDM_SLAVE (slave));
 }
 
 static void
Index: gdm-3.0.0/daemon/gdm-server.c
===================================================================
--- gdm-3.0.0.orig/daemon/gdm-server.c	2011-05-04 18:46:09.127445508 +0200
+++ gdm-3.0.0/daemon/gdm-server.c	2011-05-04 21:04:52.384135839 +0200
@@ -1143,7 +1143,12 @@ gdm_server_init (GdmServer *server)
         server->priv = GDM_SERVER_GET_PRIVATE (server);
 
         server->priv->pid = -1;
+#ifdef __linux__
+        /* -novtswitch is Linux-only in Xorg */
+        server->priv->command = g_strdup (X_SERVER " -br -verbose -novtswitch");
+#else
         server->priv->command = g_strdup (X_SERVER " -br -verbose");
+#endif
         server->priv->log_dir = g_strdup (LOGDIR);
 
         add_ready_handler (server);
