diff -Nru gnome-screensaver-2.14.3.orig/data/gnome-screensaver.schemas.in gnome-screensaver-2.14.3/data/gnome-screensaver.schemas.in
--- gnome-screensaver-2.14.3.orig/data/gnome-screensaver.schemas.in	2006-03-09 15:49:38.000000000 +0100
+++ gnome-screensaver-2.14.3/data/gnome-screensaver.schemas.in	2006-10-28 22:25:35.000000000 +0200
@@ -175,5 +175,19 @@
         </long>
       </locale>
     </schema>
+    <schema>
+      <key>/schemas/apps/gnome-screensaver/try_auth_first</key>
+      <applyto>/apps/gnome-screensaver/try_auth_first</applyto>
+      <owner>gnome-screensaver</owner>
+      <type>bool</type>
+      <default>FALSE</default>
+      <locale name="C">
+	<short>Try authentication first</short>
+	<long>
+	  Set this to TRUE to try to authenticate before a password
+	  has been entered.
+	</long>
+      </locale>
+    </schema>
   </schemalist>
 </gconfschemafile>
diff -Nru gnome-screensaver-2.14.3.orig/src/gs-lock-plug.c gnome-screensaver-2.14.3/src/gs-lock-plug.c
--- gnome-screensaver-2.14.3.orig/src/gs-lock-plug.c	2006-07-12 03:48:56.000000000 +0200
+++ gnome-screensaver-2.14.3/src/gs-lock-plug.c	2006-10-28 22:22:42.000000000 +0200
@@ -36,6 +37,7 @@
 #include <gdk/gdkx.h>
 #include <X11/XKBlib.h>
 #include <gtk/gtk.h>
+#include <gconf/gconf-client.h>
 
 /* for fast user switching */
 #include <libgnomevfs/gnome-vfs-init.h>
@@ -46,6 +48,8 @@
 
 #include "fusa-manager.h"
 
+#define KEY_TRY_AUTH_FIRST    "/apps/gnome-screensaver/try_auth_first"
+
 /* Profiling stuff adapted from gtkfilechooserdefault */
 
 #undef PROFILE_LOCK_DIALOG
@@ -143,6 +147,8 @@
         guint        password_check_idle_id;
         guint        password_reset_idle_id;
         guint        response_idle_id;
+	
+	gboolean     initial_auth_check;
 
         GTimeVal     start_time;
 };
@@ -451,9 +457,24 @@
                                              plug);
 }
 
+static gboolean
+get_try_lock_first (GSLockPlug *plug)
+{
+    gboolean     try_first;
+    GConfClient *client;
+
+    client = gconf_client_get_default ();
+    try_first = gconf_client_get_bool (client, KEY_TRY_AUTH_FIRST, NULL);
+    g_object_unref (client);
+
+    return try_first;
+}
+
 static void
 gs_lock_plug_show (GtkWidget *widget)
 {
+	GSLockPlug *plug = GS_LOCK_PLUG (widget);
+	
         profile_start ("start", NULL);
 
         profile_start ("start", "parent");
@@ -467,6 +488,12 @@
 
         restart_monitor_progress (GS_LOCK_PLUG (widget));
 
+	if (get_try_lock_first (plug)) {
+	    /* Try to check auth right away */
+	    plug->priv->initial_auth_check = TRUE;
+	    plug->priv->password_check_idle_id = g_idle_add((GSourceFunc)password_check_idle_cb, plug);
+	}
+	
         profile_end ("end", NULL);
 }
 
