diff --git a/src/com/android/browser/GoogleAccountLogin.java b/src/com/android/browser/GoogleAccountLogin.java
index 6bec8dc..f019b52 100644
--- a/src/com/android/browser/GoogleAccountLogin.java
+++ b/src/com/android/browser/GoogleAccountLogin.java
@@ -280,13 +280,15 @@
             return false;
         }
 
+        // Use /a/ to grab hosted cookies as well as the base set of google.com
+        // cookies.
         String cookies = CookieManager.getInstance().getCookie(
-                "http://www.google.com");
+                "http://www.google.com/a/");
         if (cookies != null) {
             StringTokenizer tokenizer = new StringTokenizer(cookies, ";");
             while (tokenizer.hasMoreTokens()) {
                 String cookie = tokenizer.nextToken().trim();
-                if (cookie.startsWith("SID=")) {
+                if (cookie.startsWith("SID=") || cookie.startsWith("ASIDAP=")) {
                     return true;
                 }
             }
diff --git a/src/com/android/browser/SuggestionsAdapter.java b/src/com/android/browser/SuggestionsAdapter.java
index 3c1a689..6e55539 100644
--- a/src/com/android/browser/SuggestionsAdapter.java
+++ b/src/com/android/browser/SuggestionsAdapter.java
@@ -78,8 +78,6 @@
 
         public void onSelect(String txt, int type, String extraData);
 
-        public void onFilterComplete(int count);
-
     }
 
     public SuggestionsAdapter(Context ctx, CompletionListener listener) {
@@ -240,7 +238,6 @@
             mSuggestResults = items;
             mMixedResults = buildSuggestionResults();
             notifyDataSetChanged();
-            mListener.onFilterComplete(mMixedResults.getLineCount());
         }
     }
 
@@ -334,9 +331,8 @@
         protected void publishResults(CharSequence constraint, FilterResults fresults) {
             if (fresults.values instanceof SuggestionResults) {
                 mMixedResults = (SuggestionResults) fresults.values;
-                mListener.onFilterComplete(fresults.count);
+                notifyDataSetChanged();
             }
-            notifyDataSetChanged();
         }
 
     }
diff --git a/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java b/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java
index 91705e5..409ddb7 100644
--- a/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java
+++ b/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java
@@ -71,8 +71,12 @@
         values[i] = "";
         autologinPref.setEntries(names);
         autologinPref.setEntryValues(values);
-        autologinPref.setValue(BrowserSettings.getInstance()
-                .getAutoLoginAccount(getActivity()));
+        BrowserSettings bs = BrowserSettings.getInstance();
+        if (bs.isAutoLoginEnabled()) {
+            autologinPref.setValue(bs.getAutoLoginAccount(getActivity()));
+        } else {
+            autologinPref.setValue("");
+        }
     }
 
     private void updateAutoLoginSummary(Preference pref) {
diff --git a/src/com/android/browser/widget/BookmarkThumbnailWidgetService.java b/src/com/android/browser/widget/BookmarkThumbnailWidgetService.java
index 631bf84..cc06349 100644
--- a/src/com/android/browser/widget/BookmarkThumbnailWidgetService.java
+++ b/src/com/android/browser/widget/BookmarkThumbnailWidgetService.java
@@ -109,7 +109,10 @@
             int[] ids = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
             if (ids != null) {
                 for (int id : ids) {
-                    mFactories.remove(id);
+                    BookmarkFactory bf = mFactories.remove(id);
+                    // Workaround a known framework bug
+                    // onDestroy is currently never called
+                    bf.onDestroy();
                 }
             }
         } else if (ACTION_CHANGE_FOLDER.equals(action)) {
@@ -309,9 +312,18 @@
 
         @Override
         public void onDestroy() {
-            recycleBitmaps();
             SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
             prefs.unregisterOnSharedPreferenceChangeListener(this);
+
+            // Workaround known framework bug
+            // This class currently leaks, so free as much memory as we can
+            recycleBitmaps();
+            mBookmarks.clear();
+            mBreadcrumbs.clear();
+            if (mLoadTask != null) {
+                mLoadTask.cancel(false);
+                mLoadTask = null;
+            }
         }
 
         @Override
