diff --git a/src/com/android/browser/GoogleAccountLogin.java b/src/com/android/browser/GoogleAccountLogin.java
index 93996cd..cd96346 100644
--- a/src/com/android/browser/GoogleAccountLogin.java
+++ b/src/com/android/browser/GoogleAccountLogin.java
@@ -16,12 +16,6 @@
 
 package com.android.browser;
 
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.util.EntityUtils;
-
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.accounts.AccountManagerCallback;
@@ -35,13 +29,17 @@
 import android.net.Uri;
 import android.net.http.AndroidHttpClient;
 import android.os.Bundle;
-import android.os.Handler;
-import android.preference.PreferenceManager;
 import android.util.Log;
 import android.webkit.CookieSyncManager;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
 
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.util.EntityUtils;
+
 public class GoogleAccountLogin implements Runnable,
         AccountManagerCallback<Bundle>, OnCancelListener {
 
@@ -56,14 +54,11 @@
     // Google account type
     private static final String GOOGLE = "com.google";
     // Last auto login time
-    private static final String PREF_AUTOLOGIN_TIME = "last_autologin_time";
+    public static final String PREF_AUTOLOGIN_TIME = "last_autologin_time";
 
     private final Activity mActivity;
     private final Account mAccount;
     private final WebView mWebView;
-    // Does not matter if this is initialized in a non-ui thread.
-    // Dialog.dismiss() will post to the right handler.
-    private final Handler mHandler = new Handler();
     private Runnable mRunnable;
     private ProgressDialog mProgressDialog;
 
@@ -93,15 +88,13 @@
             }
             @Override
             public void onPageFinished(WebView view, String url) {
-                saveLoginTime();
                 done();
             }
         });
     }
 
     private void saveLoginTime() {
-        Editor ed = PreferenceManager.
-                getDefaultSharedPreferences(mActivity).edit();
+        Editor ed = BrowserSettings.getInstance().getPreferences().edit();
         ed.putLong(PREF_AUTOLOGIN_TIME, System.currentTimeMillis());
         ed.apply();
     }
@@ -228,7 +221,7 @@
     public static void startLoginIfNeeded(Activity activity,
             Runnable runnable) {
         // Already logged in?
-        if (isLoggedIn(activity)) {
+        if (isLoggedIn()) {
             runnable.run();
             return;
         }
@@ -246,6 +239,7 @@
     }
 
     private void startLogin() {
+        saveLoginTime();
         mProgressDialog = ProgressDialog.show(mActivity,
                 mActivity.getString(R.string.pref_autologin_title),
                 mActivity.getString(R.string.pref_autologin_progress,
@@ -263,11 +257,10 @@
     }
 
     // Checks if we already did pre-login.
-    private static boolean isLoggedIn(Context ctx) {
+    private static boolean isLoggedIn() {
         // See if we last logged in less than a week ago.
-        long lastLogin = PreferenceManager.
-                getDefaultSharedPreferences(ctx).
-                getLong(PREF_AUTOLOGIN_TIME, -1);
+        long lastLogin = BrowserSettings.getInstance().getPreferences()
+                .getLong(PREF_AUTOLOGIN_TIME, -1);
         if (lastLogin == -1) {
             return false;
         }
diff --git a/src/com/android/browser/PreferenceKeys.java b/src/com/android/browser/PreferenceKeys.java
index 4174732..ce8ec9f 100644
--- a/src/com/android/browser/PreferenceKeys.java
+++ b/src/com/android/browser/PreferenceKeys.java
@@ -70,6 +70,7 @@
     static final String PREF_NORMAL_LAYOUT = "normal_layout";
     static final String PREF_SMALL_SCREEN = "small_screen";
     static final String PREF_WIDE_VIEWPORT = "wide_viewport";
+    static final String PREF_RESET_PRELOGIN = "reset_prelogin";
 
     // ----------------------
     // Keys for lab_preferences.xml
diff --git a/src/com/android/browser/preferences/DebugPreferencesFragment.java b/src/com/android/browser/preferences/DebugPreferencesFragment.java
index 984c12a..566eee2 100644
--- a/src/com/android/browser/preferences/DebugPreferencesFragment.java
+++ b/src/com/android/browser/preferences/DebugPreferencesFragment.java
@@ -18,6 +18,7 @@
 
 import com.android.browser.BrowserActivity;
 import com.android.browser.BrowserSettings;
+import com.android.browser.GoogleAccountLogin;
 import com.android.browser.PreferenceKeys;
 import com.android.browser.R;
 
@@ -25,10 +26,11 @@
 import android.os.Bundle;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceFragment;
 
 public class DebugPreferencesFragment extends PreferenceFragment
-        implements OnPreferenceChangeListener {
+        implements OnPreferenceChangeListener, OnPreferenceClickListener {
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -38,6 +40,8 @@
 
         Preference e = findPreference(PreferenceKeys.PREF_ENABLE_HARDWARE_ACCEL);
         e.setOnPreferenceChangeListener(this);
+        e = findPreference(PreferenceKeys.PREF_RESET_PRELOGIN);
+        e.setOnPreferenceClickListener(this);
     }
 
     @Override
@@ -47,4 +51,15 @@
                 getActivity(), BrowserActivity.class));
         return true;
     }
+
+    @Override
+    public boolean onPreferenceClick(Preference preference) {
+        if (PreferenceKeys.PREF_RESET_PRELOGIN.equals(preference.getKey())) {
+            BrowserSettings.getInstance().getPreferences().edit()
+                    .remove(GoogleAccountLogin.PREF_AUTOLOGIN_TIME)
+                    .apply();
+            return true;
+        }
+        return false;
+    }
 }
