diff --git a/src/com/android/browser/Bookmarks.java b/src/com/android/browser/Bookmarks.java
index dc1052f..afc99c3 100644
--- a/src/com/android/browser/Bookmarks.java
+++ b/src/com/android/browser/Bookmarks.java
@@ -177,13 +177,9 @@
             return null;
         }
 
-        url = eatTrailingSlash(url);
-
         // If originalUrl is null, just set it to url.
         if (originalUrl == null) {
             originalUrl = url;
-        } else {
-            originalUrl = eatTrailingSlash(originalUrl);
         }
 
         // Look for both the original url and the actual url. This takes in to
@@ -240,6 +236,14 @@
                             updateImages(cr, cursor.getString(0), values);
                         } while (cursor.moveToNext());
                     }
+
+                    cursor = queryCombinedForUrl(cr, eatTrailingSlash(originalUrl),
+                            eatTrailingSlash(url));
+                    if (cursor != null && cursor.moveToFirst()) {
+                        do {
+                            updateImages(cr, cursor.getString(0), values);
+                        } while (cursor.moveToNext());
+                    }
                 } catch (IllegalStateException e) {
                     // Ignore
                 } catch (SQLiteException s) {
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java
index d9bfcea..38e07e0 100644
--- a/src/com/android/browser/BrowserBookmarksAdapter.java
+++ b/src/com/android/browser/BrowserBookmarksAdapter.java
@@ -136,8 +136,13 @@
             item = new BrowserBookmarksAdapterItem();
         }
         Bitmap thumbnail = item.thumbnail != null ? item.thumbnail.getBitmap() : null;
+
         thumbnail = BrowserBookmarksPage.getBitmap(c,
-                BookmarksLoader.COLUMN_INDEX_THUMBNAIL, thumbnail);
+                BookmarksLoader.COLUMN_INDEX_TOUCH_ICON, thumbnail);
+        if (thumbnail == null) {
+            thumbnail = BrowserBookmarksPage.getBitmap(c,
+                    BookmarksLoader.COLUMN_INDEX_THUMBNAIL, thumbnail);
+        }
         item.has_thumbnail = thumbnail != null;
         if (thumbnail != null
                 && (item.thumbnail == null || item.thumbnail.getBitmap() != thumbnail)) {
diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java
index e2c831b..f0cec84 100644
--- a/src/com/android/browser/BrowserHistoryPage.java
+++ b/src/com/android/browser/BrowserHistoryPage.java
@@ -31,6 +31,8 @@
 import android.content.Loader;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.content.res.Configuration;
+import android.content.res.Resources;
 import android.database.Cursor;
 import android.database.DataSetObserver;
 import android.graphics.BitmapFactory;
@@ -237,6 +239,14 @@
         return mRoot;
     }
 
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        Resources res = getActivity().getResources();
+        int paddingTop = (int) res.getDimension(R.dimen.combo_paddingTop);
+        mRoot.setPadding(0, paddingTop, 0, 0);
+    }
+
     private void inflateSinglePane() {
         mHistoryList = (ExpandableListView) mRoot.findViewById(R.id.history);
         mHistoryList.setAdapter(mAdapter);
diff --git a/src/com/android/browser/BrowserSnapshotPage.java b/src/com/android/browser/BrowserSnapshotPage.java
index e2194d1..afa0269 100644
--- a/src/com/android/browser/BrowserSnapshotPage.java
+++ b/src/com/android/browser/BrowserSnapshotPage.java
@@ -26,6 +26,8 @@
 import android.content.Context;
 import android.content.CursorLoader;
 import android.content.Loader;
+import android.content.res.Configuration;
+import android.content.res.Resources;
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -82,6 +84,8 @@
     CombinedBookmarksCallbacks mCallback;
     long mAnimateId;
 
+    View mRoot;
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -100,6 +104,7 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
         View view = inflater.inflate(R.layout.snapshots, container, false);
+        mRoot = view;
         mEmpty = view.findViewById(android.R.id.empty);
         mGrid = (GridView) view.findViewById(R.id.grid);
         setupGrid(inflater);
@@ -108,6 +113,14 @@
     }
 
     @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        Resources res = getActivity().getResources();
+        int paddingTop = (int) res.getDimension(R.dimen.combo_paddingTop);
+        mRoot.setPadding(0, paddingTop, 0, 0);
+    }
+
+    @Override
     public void onDestroyView() {
         super.onDestroyView();
         getLoaderManager().destroyLoader(LOADER_SNAPSHOTS);
diff --git a/src/com/android/browser/ComboTabsAdapter.java b/src/com/android/browser/ComboTabsAdapter.java
index f73a88c..2490047 100644
--- a/src/com/android/browser/ComboTabsAdapter.java
+++ b/src/com/android/browser/ComboTabsAdapter.java
@@ -41,29 +41,29 @@
  */
 public class ComboTabsAdapter extends FragmentPagerAdapter
     implements ActionBar.TabListener, ViewPager.OnPageChangeListener {
-        private final Context mContext;
-        private final ActionBar mActionBar;
-        private final ViewPager mViewPager;
-        private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
+    private final Context mContext;
+    private final ActionBar mActionBar;
+    private final ViewPager mViewPager;
+    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
 
-        static final class TabInfo {
-            private final Class<?> clss;
-            private final Bundle args;
+    static final class TabInfo {
+        private final Class<?> clss;
+        private final Bundle args;
 
-            TabInfo(Class<?> _class, Bundle _args) {
-                clss = _class;
-                args = _args;
-            }
+        TabInfo(Class<?> _class, Bundle _args) {
+            clss = _class;
+            args = _args;
         }
+    }
 
-        public ComboTabsAdapter(Activity activity, ViewPager pager) {
-            super(activity.getFragmentManager());
-            mContext = activity;
-            mActionBar = activity.getActionBar();
-            mViewPager = pager;
-            mViewPager.setAdapter(this);
-            mViewPager.setOnPageChangeListener(this);
-        }
+    public ComboTabsAdapter(Activity activity, ViewPager pager) {
+        super(activity.getFragmentManager());
+        mContext = activity;
+        mActionBar = activity.getActionBar();
+        mViewPager = pager;
+        mViewPager.setAdapter(this);
+        mViewPager.setOnPageChangeListener(this);
+    }
 
     public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) {
         TabInfo info = new TabInfo(clss, args);
@@ -74,6 +74,11 @@
         notifyDataSetChanged();
     }
 
+    public void removeAllTabs() {
+        mActionBar.removeAllTabs();
+        notifyDataSetChanged();
+    }
+
     @Override
     public int getCount() {
         return mTabs.size();
diff --git a/src/com/android/browser/ComboView.java b/src/com/android/browser/ComboView.java
index 01ff54f..3dabb50 100644
--- a/src/com/android/browser/ComboView.java
+++ b/src/com/android/browser/ComboView.java
@@ -37,7 +37,8 @@
 import java.util.Iterator;
 import java.util.Set;
 
-public class ComboView extends LinearLayout implements CombinedBookmarksCallbacks, View.OnLayoutChangeListener {
+public class ComboView extends LinearLayout
+        implements CombinedBookmarksCallbacks, View.OnLayoutChangeListener {
 
     private Activity mActivity;
     private ViewPager mViewPager;
@@ -140,6 +141,7 @@
 
         // Compare the items in args with old args and recreate the fragments if they don't match.
         if (mExtraArgs != null && !compareArgs(mExtraArgs, args)) {
+            mTabsAdapter.removeAllTabs();
             mTabsAdapter = null;
         }
 
diff --git a/src/com/android/browser/NavigationBarBase.java b/src/com/android/browser/NavigationBarBase.java
index 753e362..d247066 100644
--- a/src/com/android/browser/NavigationBarBase.java
+++ b/src/com/android/browser/NavigationBarBase.java
@@ -125,19 +125,21 @@
 
     public void setLock(Drawable d, Tab.SecurityState securityState) {
         mSecurityState = securityState;
-        switch (mSecurityState) {
-            case SECURITY_STATE_SECURE:
-                mFaviconBadge.setImageResource(R.drawable.ic_fav_overlay_good);
-                break;
-            case SECURITY_STATE_MIXED:
-                mFaviconBadge.setImageResource(R.drawable.ic_fav_overlay_warning);
-                break;
-            case SECURITY_STATE_BAD_CERTIFICATE:
-                mFaviconBadge.setImageResource(R.drawable.ic_fav_overlay_severe);
-                break;
-            case SECURITY_STATE_NOT_SECURE:
-            default:
-                mFaviconBadge.setImageResource(R.drawable.ic_fav_overlay_normal);
+        if (mFaviconBadge != null) {
+            switch (mSecurityState) {
+                case SECURITY_STATE_SECURE:
+                    mFaviconBadge.setImageResource(R.drawable.ic_fav_overlay_good);
+                    break;
+                case SECURITY_STATE_MIXED:
+                    mFaviconBadge.setImageResource(R.drawable.ic_fav_overlay_warning);
+                    break;
+                case SECURITY_STATE_BAD_CERTIFICATE:
+                    mFaviconBadge.setImageResource(R.drawable.ic_fav_overlay_severe);
+                    break;
+                case SECURITY_STATE_NOT_SECURE:
+                default:
+                    mFaviconBadge.setImageResource(R.drawable.ic_fav_overlay_normal);
+            }
         }
         if (mLockIcon == null) return;
         if (d == null) {
@@ -287,7 +289,7 @@
             bundle.putInt(SiteSpecificPreferencesFragment.EXTRA_SECURITY_CERT_ERR, certError);
         }
 
-        Bitmap favicon = mUiController.getCurrentTab().getFavicon();
+        Bitmap favicon = mUiController.getCurrentTopWebView().getFavicon();
         if (favicon != null) {
             ByteArrayOutputStream baos = new ByteArrayOutputStream();
             favicon.compress(Bitmap.CompressFormat.PNG, 50, baos);
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
index addbf72..254e73d 100644
--- a/src/com/android/browser/XLargeUi.java
+++ b/src/com/android/browser/XLargeUi.java
@@ -141,6 +141,19 @@
     }
 
     @Override
+    public void onProgressChanged(Tab tab) {
+        super.onProgressChanged(tab);
+        if (mComboView != null && !mComboView.isShowing()) {
+            mActionBar = mActivity.getActionBar();
+            setupActionBar();
+            if (mActionBar != null)
+                mActionBar.show();
+            if (mNavBar != null)
+                mNavBar.setVisibility(View.VISIBLE);
+        }
+    }
+
+    @Override
     public void onDestroy() {
         hideTitleBar();
     }
@@ -268,6 +281,7 @@
     public void setFavicon(Tab tab) {
         super.setFavicon(tab);
         mTabBar.onFavicon(tab, tab.getFavicon());
+/*
         if (mActiveTab == tab) {
             int color = NavigationBarBase.getSiteIconColor(tab.getUrl());
             if (tab.hasFavicon()) {
@@ -275,6 +289,7 @@
             }
             mActionBar.setBackgroundDrawable(new ColorDrawable(color));
         }
+*/
     }
 
     @Override
diff --git a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
index cadc924..8d1ce6b 100644
--- a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
+++ b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
@@ -84,10 +84,14 @@
 
             String value = BrowserSettings.getInstance().getEdgeSwipeAction();
 
-            for (int i = 0; i < options.length; i++) {
-                if (value.equals(options[i])) {
-                    edgeSwipePref.setValueIndex(i);
-                    break;
+            if (value.equals(mFragment.getString(R.string.value_unknown_edge_swipe))) {
+                edgeSwipePref.setSummary(mFragment.getString(R.string.pref_edge_swipe_unknown));
+            } else {
+                for (int i = 0; i < options.length; i++) {
+                    if (value.equals(options[i])) {
+                        edgeSwipePref.setValueIndex(i);
+                        break;
+                    }
                 }
             }
         }
diff --git a/src/com/android/browser/preferences/SWEPreferenceFragment.java b/src/com/android/browser/preferences/SWEPreferenceFragment.java
index 79781da..77c39c7 100644
--- a/src/com/android/browser/preferences/SWEPreferenceFragment.java
+++ b/src/com/android/browser/preferences/SWEPreferenceFragment.java
@@ -29,16 +29,19 @@
 
 package com.android.browser.preferences;
 
+import android.app.ActionBar;
+import android.graphics.drawable.ColorDrawable;
 import android.os.Bundle;
 import android.preference.PreferenceFragment;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.WindowManager;
 import android.widget.LinearLayout;
 import android.widget.ListView;
 import android.widget.Switch;
 
+import com.android.browser.R;
+
 public abstract class SWEPreferenceFragment extends PreferenceFragment  {
 
     @Override
@@ -76,6 +79,16 @@
         return view;
     }
 
+    @Override
+    public void onResume() {
+        super.onResume();
+
+        ActionBar bar = getActivity().getActionBar();
+        if (bar != null) {
+            bar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.accent)));
+        }
+    }
+
     private final void findAndResizeSwitchPreferenceWidget(View parent) {
         LinearLayout layout = (LinearLayout) parent.findViewById(android.R.id.widget_frame);
         if (layout != null) {
diff --git a/src/com/android/browser/preferences/SiteSpecificPreferencesFragment.java b/src/com/android/browser/preferences/SiteSpecificPreferencesFragment.java
index 68c3ebc..329f66c 100644
--- a/src/com/android/browser/preferences/SiteSpecificPreferencesFragment.java
+++ b/src/com/android/browser/preferences/SiteSpecificPreferencesFragment.java
@@ -433,8 +433,15 @@
             mSecurityViews.appendText(SiteSecurityViewFactory.ViewType.WARNING, warningText);
         }
 
-        showPermission("distracting_contents", PermissionsServiceFactory.PermissionType.WEBREFINER,
+        permission = showPermission("distracting_contents",
+                PermissionsServiceFactory.PermissionType.WEBREFINER,
                 R.string.pref_security_allowed, R.string.pref_security_not_allowed);
+        pref = findPreference("distracting_contents");
+        if (permission == PermissionsServiceFactory.Permission.BLOCK) {
+            ((TwoStatePreference) pref).setChecked(true);
+        } else {
+            ((TwoStatePreference) pref).setChecked(false);
+        }
 
         showPermission("popup_windows", PermissionsServiceFactory.PermissionType.POPUP,
                 R.string.pref_security_allowed, R.string.pref_security_not_allowed);
@@ -451,7 +458,9 @@
                     findPreference("site_specific_prefs");
 
             pref = findPreference("site_security_info_title");
-            screen.removePreference(pref);
+            if (pref != null && screen != null) {
+                screen.removePreference(pref);
+            }
         }
 
     }
@@ -643,13 +652,13 @@
         } else if (pref.getKey().toString().equalsIgnoreCase("distracting_contents")) {
             WebRefiner refiner = WebRefiner.getInstance();
             if (refiner != null) {
-                boolean enable = (boolean) objValue;
+                boolean disable = (boolean) objValue;
                 String[] origins = new String[1];
                 origins[0] = mOriginInfo.getOrigin();
-                if (enable) {
-                    refiner.enableRulesForDomains(WebRefiner.CATEGORY_ALL, origins);
-                } else {
+                if (disable) {
                     refiner.disableRulesForDomains(WebRefiner.CATEGORY_ALL, origins);
+                } else {
+                    refiner.enableRulesForDomains(WebRefiner.CATEGORY_ALL, origins);
                 }
             }
             updateTwoStatePreference(pref,
diff --git a/src/com/android/browser/preferences/WebsiteSettingsFragment.java b/src/com/android/browser/preferences/WebsiteSettingsFragment.java
index 7ffb5c1..6c032d9 100644
--- a/src/com/android/browser/preferences/WebsiteSettingsFragment.java
+++ b/src/com/android/browser/preferences/WebsiteSettingsFragment.java
@@ -193,10 +193,6 @@
             }
 
             notifyDataSetChanged();
-
-            if (getCount() == 0) {
-                finish(); // we close the screen
-            }
         }
 
         @Override
