diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 0fce014..018744d 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -26,6 +26,7 @@
 import android.graphics.BitmapFactory;
 import android.graphics.PixelFormat;
 import android.os.Bundle;
+import android.os.Handler;
 import android.util.Log;
 import android.view.ActionMode;
 import android.view.ContextMenu;
@@ -115,7 +116,8 @@
         }
 
         String account = settings.getAutoLoginAccount(this);
-        if (settings.isAutoLoginEnabled() && account != null) {
+        if (settings.isAutoLoginEnabled() && account != null &&
+                !GoogleAccountLogin.isLoggedIn()) {
             GoogleAccountLogin login =
                     new GoogleAccountLogin(this, account);
             final ProgressDialog dialog = ProgressDialog.show(this,
@@ -125,9 +127,17 @@
                     true /* cancelable */,
                     login);
             final Bundle b = icicle;
-            final Runnable start = new Runnable() {
+            final Handler handler = new Handler();
+            final Runnable dismiss = new Runnable() {
                 @Override public void run() {
                     dialog.dismiss();
+                }
+            };
+            final Runnable start = new Runnable() {
+                @Override public void run() {
+                    // Post a delayed dismiss message to avoid a flash of the
+                    // progress dialog.
+                    handler.postDelayed(dismiss, 1000);
                     mController.start(b, getIntent());
                 }
             };
diff --git a/src/com/android/browser/GoogleAccountLogin.java b/src/com/android/browser/GoogleAccountLogin.java
index 8ff0972..04b3957 100644
--- a/src/com/android/browser/GoogleAccountLogin.java
+++ b/src/com/android/browser/GoogleAccountLogin.java
@@ -35,10 +35,11 @@
 import android.net.http.AndroidHttpClient;
 import android.net.Uri;
 import android.os.Bundle;
+import android.webkit.CookieManager;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
 
-import java.util.ArrayList;
+import java.util.StringTokenizer;
 
 public class GoogleAccountLogin extends Thread implements
         AccountManagerCallback<Bundle>, OnCancelListener {
@@ -182,6 +183,22 @@
         return AccountManager.get(ctx).getAccountsByType(GOOGLE);
     }
 
+    // Checks for the presence of the SID cookie on google.com.
+    public static boolean isLoggedIn() {
+        String cookies = CookieManager.getInstance().getCookie(
+                "http://www.google.com");
+        if (cookies != null) {
+            StringTokenizer tokenizer = new StringTokenizer(cookies, ";");
+            while (tokenizer.hasMoreTokens()) {
+                String cookie = tokenizer.nextToken().trim();
+                if (cookie.startsWith("SID=")) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
     // Used to indicate that the Browser should continue loading the main page.
     // This can happen on success, error, or timeout.
     private synchronized void done() {
