diff --git a/src/com/android/browser/NavigationBarBase.java b/src/com/android/browser/NavigationBarBase.java
index eb8dc53..246235a 100644
--- a/src/com/android/browser/NavigationBarBase.java
+++ b/src/com/android/browser/NavigationBarBase.java
@@ -727,7 +727,7 @@
         mHandler.removeMessages(WEBREFINER_COUNTER_MSG);
         mHandler.sendEmptyMessageDelayed(WEBREFINER_COUNTER_MSG,
                 WEBREFINER_COUNTER_MSG_DELAY);
-        mStopButton.setImageResource(R.drawable.ic_action_stop);
+        mStopButton.setImageResource(R.drawable.ic_action_stop_inverted);
         mStopButton.setContentDescription(getResources().
                 getString(R.string.accessibility_button_stop));
     }
@@ -736,7 +736,7 @@
         if (!isEditingUrl()) {
             mFaviconTile.setVisibility(View.VISIBLE);
         }
-        mStopButton.setImageResource(R.drawable.ic_action_reload);
+        mStopButton.setImageResource(R.drawable.ic_action_reload_inverted);
         mStopButton.setContentDescription(getResources().
                 getString(R.string.accessibility_button_refresh));
     }
diff --git a/src/com/android/browser/NavigationBarTablet.java b/src/com/android/browser/NavigationBarTablet.java
index ce482d9..d2d63b3 100644
--- a/src/com/android/browser/NavigationBarTablet.java
+++ b/src/com/android/browser/NavigationBarTablet.java
@@ -33,8 +33,6 @@
     private ImageButton mBackButton;
     private ImageButton mForwardButton;
     private ImageView mStar;
-    private ImageView mSearchButton;
-    private View mAllButton;
     private View mNavButtons;
     private boolean mHideNavButtons;
 
@@ -60,18 +58,14 @@
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
-        mAllButton = findViewById(R.id.all_btn);
         mNavButtons = findViewById(R.id.navbuttons);
         mBackButton = (ImageButton) findViewById(R.id.back);
         mForwardButton = (ImageButton) findViewById(R.id.forward);
         mStar = (ImageView) findViewById(R.id.star);
-        mSearchButton = (ImageView) findViewById(R.id.search);
         mUrlContainer = findViewById(R.id.urlbar_focused);
         mBackButton.setOnClickListener(this);
         mForwardButton.setOnClickListener(this);
         mStar.setOnClickListener(this);
-        mAllButton.setOnClickListener(this);
-        mSearchButton.setOnClickListener(this);
         mUrlInput.setContainer(mUrlContainer);
         mUrlInput.setStateListener(this);
     }
@@ -124,10 +118,6 @@
             if (intent != null) {
                 getContext().startActivity(intent);
             }
-        } else if (mAllButton == v) {
-            mUiController.bookmarksOrHistoryPicker(ComboViews.Bookmarks);
-        } else if (mSearchButton == v) {
-            mBaseUi.editUrl(true, true);
         } else {
             super.onClick(v);
         }
@@ -140,14 +130,12 @@
             if (mHideNavButtons) {
                 hideNavButtons();
             }
-            mSearchButton.setVisibility(View.GONE);
             mStar.setVisibility(View.GONE);
         } else {
             if (mHideNavButtons) {
                 showNavButtons();
             }
             showHideStar(mUiController.getCurrentTab());
-            mSearchButton.setVisibility(View.VISIBLE);
         }
     }
 
diff --git a/src/com/android/browser/SiteTileView.java b/src/com/android/browser/SiteTileView.java
index 8d69dba..0c93bd0 100644
--- a/src/com/android/browser/SiteTileView.java
+++ b/src/com/android/browser/SiteTileView.java
@@ -304,7 +304,7 @@
                 sDefaultSiteBitmap = BitmapFactory.decodeResource(getResources(),
                         DEFAULT_SITE_FAVICON);
             mFaviconBitmap = sDefaultSiteBitmap;
-            fundamentalColor = 0xFF262626;
+            fundamentalColor = 0xFFFAFAFA;
         }
 
         if (mFaviconBitmap != null) {
@@ -343,7 +343,7 @@
 
         // bitmap paint (copy, smooth scale)
         sBitmapPaint = new Paint();
-        sBitmapPaint.setColor(Color.BLACK);
+        sBitmapPaint.setColor(Color.WHITE);
         sBitmapPaint.setFilterBitmap(true);
 
         // badge text paint (anti-aliased)
diff --git a/src/com/android/browser/SnapshotBar.java b/src/com/android/browser/SnapshotBar.java
index eeb300b..926c4ca 100644
--- a/src/com/android/browser/SnapshotBar.java
+++ b/src/com/android/browser/SnapshotBar.java
@@ -51,7 +51,6 @@
     private ImageView mReadericon;
     private TextView mDate;
     private TextView mTitle;
-    private View mBookmarks;
     private TitleBar mTitleBar;
     private View mTabSwitcher;
     private TextView mTabText;
@@ -114,15 +113,11 @@
         mReadericon = (ImageView) findViewById(R.id.reader_icon);
         mDate = (TextView) findViewById(R.id.date);
         mTitle = (TextView) findViewById(R.id.title);
-        mBookmarks = findViewById(R.id.all_btn);
         mTabSwitcher = findViewById(R.id.tab_switcher);
         mTabText = (TextView) findViewById(R.id.tab_switcher_text);
         mOverflowMenu = findViewById(R.id.more);
         mToggleContainer = findViewById(R.id.toggle_container);
 
-        if (mBookmarks != null) {
-            mBookmarks.setOnClickListener(this);
-        }
         if (mTabSwitcher != null) {
             mTabSwitcher.setOnClickListener(this);
         }
@@ -196,9 +191,7 @@
 
     @Override
     public void onClick(View v) {
-        if (mBookmarks == v) {
-            mTitleBar.getUiController().bookmarksOrHistoryPicker(ComboViews.Bookmarks);
-        } else if (mTabSwitcher == v) {
+        if (mTabSwitcher == v) {
             ((PhoneUi) mTitleBar.getUi()).toggleNavScreen();
         } else if (mOverflowMenu == v) {
             NavigationBarBase navBar = mTitleBar.getNavigationBar();
diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java
index 378557e..ed49563 100644
--- a/src/com/android/browser/TabBar.java
+++ b/src/com/android/browser/TabBar.java
@@ -354,8 +354,8 @@
                             getColor(R.color.NavigationBarBackground));
                     Bitmap inactiveTexture = Bitmap.createBitmap(
                             mCurrentTextureWidth, mCurrentTextureHeight, Bitmap.Config.ARGB_8888);
-                    inactiveTexture.eraseColor(getResources().
-                            getColor(R.color.TabNavBackgroundColor));
+                    //inactiveTexture.eraseColor(getResources().
+                    //        getColor(R.color.TabNavBackgroundColor));
 
                     mActiveShader = new BitmapShader(activeTexture,
                             Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
