diff --git a/res/layout/title_bar.xml b/res/layout/title_bar.xml
index 3cc25ac..7245a9b 100644
--- a/res/layout/title_bar.xml
+++ b/res/layout/title_bar.xml
@@ -1,96 +1,71 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+   Copyright 2009, The Android Open Source Project
 
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
 
-          http://www.apache.org/licenses/LICENSE-2.0
+       http://www.apache.org/licenses/LICENSE-2.0
 
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:fitsSystemWindows="true"
-    android:orientation="horizontal"
+    android:id="@+id/search_plate"
     android:layout_width="fill_parent"
-    android:background="@drawable/tab_selected"
-    android:layout_height="45dip">
-    <ImageView android:id="@+id/favicon"
-        android:layout_height="20dip"
-        android:layout_width="20dip"
-        android:layout_marginLeft="6dip"
-        android:layout_marginRight="6dip"
-        android:layout_gravity="center_vertical"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:paddingLeft="12dip"
+    android:paddingRight="12dip"
+    android:paddingTop="0dip"
+    android:paddingBottom="16dip"
+    android:background="@*android:drawable/search_plate_global" >
+
+    <ProgressBar android:id="@+id/progress_horizontal"
+        style="?android:attr/progressBarStyleHorizontal"
+        android:layout_width="fill_parent"
+        android:layout_height="5dip"
+        android:max="100"
         />
-    <!-- layout which contains the title, progress bar, and url -->
+
     <LinearLayout
-        android:orientation="vertical"
-        android:layout_width="0dip"
-        android:layout_weight="1"
-        android:layout_height="wrap_content">
-        <!-- This part contains the favicon and the progress bar -->
-        <LinearLayout
-            android:orientation="vertical"
-            android:layout_marginTop="0dip"
-            android:layout_height="wrap_content"
-            android:layout_width="fill_parent"
-            >
-            <!-- need to make this no wider than the horizontal progress bar -->
-            <TextView android:id="@+id/title"
-                android:layout_height="wrap_content"
-                android:layout_width="wrap_content"
-                android:layout_marginLeft="6dip"
-                android:layout_marginTop="0dip"
-                android:textSize="14dip"
-                android:textColor="@color/white"
-                android:textStyle="bold"
-                android:singleLine="true"
-                android:padding="0dip"
-                />
-            <LinearLayout
-                android:orientation="horizontal"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content">
-                <TextView android:id="@+id/url"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginLeft="6dip"
-                    android:textSize="11dip"
-                    android:padding="0dip"
-                    android:textColor="@color/white"
-                    android:singleLine="true"
-                    />
-                <ProgressBar android:id="@+id/progress_circular"
-                    style="?android:attr/progressBarStyleSmallTitle"
-                    android:layout_marginLeft="3dip"
-                    android:layout_gravity="center_vertical"
-                    android:max="100"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content" />
-            <ImageView android:id="@+id/lock_icon"
-                android:layout_height="wrap_content"
-                android:layout_width="wrap_content"
-                android:layout_alignBottom="@id/title"
-                android:layout_alignParentRight="true"
-                android:visibility="gone"/>
-            </LinearLayout>
-            <ProgressBar android:id="@+id/progress_horizontal"
-                style="?android:attr/progressBarStyleHorizontal"
-                android:layout_width="fill_parent"
-                android:layout_weight="1"
-                android:layout_height="5dip"
-                android:max="100" />
-        </LinearLayout>
-    </LinearLayout>
-    <!-- This buttons will change look/functionality -->
-    <ImageView android:id="@+id/rt_button"
-        android:layout_width="52dip"
+        android:id="@+id/search_edit_frame"
+        android:layout_width="fill_parent"
         android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical"
-        android:src="@drawable/ic_close_tab"/>
+        android:layout_marginTop="3dip"
+        android:orientation="horizontal">
+
+        <TextView
+            android:id="@+id/title"
+            android:background="@*android:drawable/textfield_search"
+            android:layout_height="40dip"
+            android:layout_width="0dip"
+            android:layout_weight="1.0"
+            android:paddingLeft="8dip"
+            android:paddingRight="6dip"
+            android:singleLine="true"
+            android:ellipsize="end"
+        />
+        <ProgressBar android:id="@+id/progress_circular"
+            style="?android:attr/progressBarStyleSmallTitle"
+            android:layout_width="40dip"
+            android:layout_height="40dip"
+            android:layout_marginLeft="3dip"
+            android:max="100"
+            />
+        <ImageView
+            android:id="@+id/rt_btn"
+            android:layout_width="40dip"
+            android:layout_height="40dip"
+            android:layout_marginLeft="8dip"
+            android:scaleType="fitXY"
+            android:background="@*android:drawable/btn_search_dialog_voice"
+            android:src="@drawable/ic_menu_bookmark"
+        />
+    </LinearLayout>
 </LinearLayout>
diff --git a/res/menu/browser.xml b/res/menu/browser.xml
index c2f80d6..e7478f0 100644
--- a/res/menu/browser.xml
+++ b/res/menu/browser.xml
@@ -16,23 +16,22 @@
 
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
     <group android:id="@+id/MAIN_MENU">
-        <item android:id="@+id/goto_menu_id"
-            android:title="@string/goto_dot" 
-            android:alphabeticShortcut="l" 
-            android:icon="@android:drawable/ic_menu_search"/>
         <item android:id="@+id/stop_reload_menu_id"
             android:alphabeticShortcut="r" />
-        <item android:id="@+id/add_bookmark_menu_id"
-            android:title="@string/save_to_bookmarks"
-            android:icon="@drawable/ic_menu_bookmark" />
-        <item android:id="@+id/back_menu_id"
-            android:title="@string/back"
-            android:drawable="@*android:drawable/ic_menu_back"
-            android:alphabeticShortcut="j" />
+        <item android:id="@+id/new_tab_menu_id"
+            android:title="@string/new_tab"
+            android:icon="@drawable/ic_add_tab" />
+        <item android:id="@+id/close_menu_id"
+            android:icon="@drawable/ic_btn_close_panel"
+            android:title="@string/tab_picker_remove_tab"
+            android:alphabeticShortcut="w" />
         <item android:id="@+id/forward_menu_id"
             android:title="@string/forward" 
             android:alphabeticShortcut="k"
             android:icon="@*android:drawable/ic_menu_forward" />
+        <item android:id="@+id/add_bookmark_menu_id"
+            android:title="@string/save_to_bookmarks"
+            android:icon="@drawable/ic_menu_bookmark" />
         <item android:id="@+id/find_menu_id"
             android:title="@string/find_dot" 
             android:alphabeticShortcut="f" />
@@ -55,8 +54,6 @@
             android:visible="false" />
     </group>
     <group android:id="@+id/MAIN_SHORTCUT_MENU" android:visible="false">
-        <item android:id="@+id/close_menu_id"
-            android:alphabeticShortcut="w" />
         <item android:id="@+id/homepage_menu_id"
             android:alphabeticShortcut="&#32;" />
         <item android:id="@+id/classic_history_menu_id"
@@ -81,15 +78,23 @@
             android:alphabeticShortcut="7" />
         <item android:id="@+id/window_eight_menu_id"
             android:alphabeticShortcut="8" />
+        <item android:id="@+id/back_menu_id"
+            android:title="@string/back"
+            android:drawable="@*android:drawable/ic_menu_back"
+            android:alphabeticShortcut="j" />
+        <item android:id="@+id/goto_menu_id"
+            android:title="@string/goto_dot"
+            android:alphabeticShortcut="l"
+            android:icon="@android:drawable/ic_menu_search"/>
     </group>
     <!-- these items are toggled in and out of @+id/stop_reload_menu_id -->
     <item android:id="@+id/stop_menu_id"
-        android:title="@string/stop" 
+        android:title="@string/stop"
         android:icon="@*android:drawable/ic_menu_stop"
         android:visible="false" />
     <item android:id="@+id/reload_menu_id"
-        android:title="@string/reload" 
-        android:icon="@*android:drawable/ic_menu_refresh" 
+        android:title="@string/reload"
+        android:icon="@*android:drawable/ic_menu_refresh"
         android:visible="false" />
 </menu>
  
diff --git a/res/values/strings.xml b/res/values/strings.xml
index c0d1429..b224517 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -18,6 +18,8 @@
     <!-- The name of the application. -->
     <string name="application_name">Browser</string>
 
+    <!-- Name of menu item of a new tab.  Also used in the title bar when displaying a new tab -->
+    <string name="new_tab">New tab</string>
     <!-- Name of tab containing bookmarks -->
     <string name="tab_bookmarks">Bookmarks</string>
     <!-- Name of tab containing the user's most visited websites, organized by number of visits -->
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 0360a4f..5a27554 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -496,13 +496,13 @@
         }
 
         if (CUSTOM_BROWSER_BAR) {
+            mTitleBar.init(this);
             // Create title bars for all of the tabs that have been created
             for (int i = 0; i < mTabControl.getTabCount(); i ++) {
                 WebView view = mTabControl.getTab(i).getWebView();
                 mTitleBar.addTab(view, false);
             }
 
-            mTitleBar.setBrowserActivity(this);
             mTitleBar.setCurrentTab(mTabControl.getCurrentIndex());
         }
 
@@ -891,6 +891,12 @@
         }
     }
 
+    @Override
+    public boolean onMenuOpened(int featureId, Menu menu) {
+        mTitleBar.setVisibility(View.VISIBLE);
+        return true;
+    }
+
     /**
      *  onSaveInstanceState(Bundle map)
      *  onSaveInstanceState is called right before onStop(). The map contains
@@ -1293,6 +1299,11 @@
         }
         switch (item.getItemId()) {
             // -- Main menu
+            case R.id.new_tab_menu_id:
+                openTabAndShow(EMPTY_URL_DATA, false, null);
+                bookmarksOrHistoryPicker(false, true);
+                break;
+
             case R.id.goto_menu_id:
                 bookmarksOrHistoryPicker(false, false);
                 break;
@@ -1463,6 +1474,9 @@
                 menu.findItem(R.id.forward_menu_id)
                         .setEnabled(canGoForward);
 
+                menu.findItem(R.id.new_tab_menu_id).setEnabled(
+                        mTabControl.getTabCount() < TabControl.MAX_TABS);
+
                 // decide whether to show the share link option
                 PackageManager pm = getPackageManager();
                 Intent send = new Intent(Intent.ACTION_SEND);
diff --git a/src/com/android/browser/TitleBar.java b/src/com/android/browser/TitleBar.java
index 1d53e8d..42729d8 100644
--- a/src/com/android/browser/TitleBar.java
+++ b/src/com/android/browser/TitleBar.java
@@ -34,32 +34,42 @@
  */
 public class TitleBar extends LinearLayout {
     private TextView        mTitle;
-    private TextView        mUrl;
     private Drawable        mCloseDrawable;
     private ImageView       mRtButton;
     private ProgressBar     mCircularProgress;
     private ProgressBar     mHorizontalProgress;
-    private ImageView       mFavicon;
-    private ImageView       mLockIcon;  // FIXME: Needs to be below the favicon
+    private Drawable        mFavicon;
+    private Drawable        mLockIcon;
+    private Drawable        mStopDrawable;
+    private Drawable        mBookmarkDrawable;
     private boolean         mInLoad;
-    private boolean         mTitleSet;
     private WebView         mWebView;
+    private BrowserActivity mBrowserActivity;
 
-    public TitleBar(Context context, WebView webview) {
+    public TitleBar(Context context, WebView webview, BrowserActivity ba) {
         super(context, null);
         LayoutInflater factory = LayoutInflater.from(context);
         factory.inflate(R.layout.title_bar, this);
+        mBrowserActivity = ba;
 
         mTitle = (TextView) findViewById(R.id.title);
-        mUrl = (TextView) findViewById(R.id.url);
+        mTitle.setCompoundDrawablePadding(5);
 
-        mRtButton = (ImageView) findViewById(R.id.rt_button);
-
+        mRtButton = (ImageView) findViewById(R.id.rt_btn);
+        mRtButton.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View v) {
+                if (mInLoad) {
+                    if (mWebView != null) {
+                        mWebView.stopLoading();
+                    }
+                } else {
+                    mBrowserActivity.bookmarksOrHistoryPicker(false, false);
+                }
+            }
+        });
         mCircularProgress = (ProgressBar) findViewById(R.id.progress_circular);
         mHorizontalProgress = (ProgressBar) findViewById(
                 R.id.progress_horizontal);
-        mFavicon = (ImageView) findViewById(R.id.favicon);
-        mLockIcon = (ImageView) findViewById(R.id.lock_icon);
         mWebView = webview;
     }
 
@@ -71,15 +81,6 @@
     }
 
     /**
-     * Determine whether a point (from a touch) hits the right button.
-     */
-    /* package */ boolean hitRightButton(int x, int y) {
-        Rect hitRect = new Rect();
-        mRtButton.getHitRect(hitRect);
-        return hitRect.contains(x - getLeft(), y - getTop());
-    }
-
-    /**
      * Return whether the associated WebView is currently loading.  Needed to
      * determine whether a click should stop the load or close the tab.
      */
@@ -91,19 +92,22 @@
      * Set a new Drawable for the Favicon.
      */
     /* package */ void setFavicon(Drawable d) {
-        mFavicon.setImageDrawable(d);
+        if (d != null) {
+            d.setBounds(0, 0, 20, 20);
+        }
+        mTitle.setCompoundDrawables(d, null, mLockIcon, null);
+        mFavicon = d;
     }
 
     /**
      * Set the Drawable for the lock icon, or null to hide it.
      */
     /* package */ void setLock(Drawable d) {
-        if (d == null) {
-            mLockIcon.setVisibility(View.GONE);
-        } else {
-            mLockIcon.setImageDrawable(d);
-            mLockIcon.setVisibility(View.VISIBLE);
+        if (d != null) {
+            d.setBounds(0, 0, 20, 20);
         }
+        mTitle.setCompoundDrawables(mFavicon, null, d, null);
+        mLockIcon = d;
     }
 
     /**
@@ -113,31 +117,25 @@
         if (newProgress == mCircularProgress.getMax()) {
             mCircularProgress.setVisibility(View.GONE);
             mHorizontalProgress.setVisibility(View.GONE);
-            mRtButton.setVisibility(View.VISIBLE);
-            mUrl.setVisibility(View.VISIBLE);
-            if (mCloseDrawable != null) {
-                mRtButton.setImageDrawable(mCloseDrawable);
+            if (mBookmarkDrawable != null) {
+                mRtButton.setImageDrawable(mBookmarkDrawable);
             }
             mInLoad = false;
-            if (!mTitleSet) {
-                mTitle.setText(mUrl.getText());
-                mUrl.setText(null);
-                mTitleSet = true;
-            }
         } else {
             mCircularProgress.setProgress(newProgress);
             mHorizontalProgress.setProgress(newProgress);
             mCircularProgress.setVisibility(View.VISIBLE);
             mHorizontalProgress.setVisibility(View.VISIBLE);
-            mUrl.setVisibility(View.VISIBLE);
-            if (mCloseDrawable == null) {
-                // The drawable was assigned in the xml file, so it already
-                // exists.  Keep a pointer to it when we switch to the resource
-                // so we can easily switch back.
-                mCloseDrawable = mRtButton.getDrawable();
+            if (mBookmarkDrawable == null) {
+                mBookmarkDrawable = mRtButton.getDrawable();
             }
-            mRtButton.setImageResource(
-                    com.android.internal.R.drawable.ic_menu_stop);
+            if (mStopDrawable == null) {
+                mRtButton.setImageResource(
+                        com.android.internal.R.drawable.ic_menu_stop);
+                mStopDrawable = mRtButton.getDrawable();
+            } else {
+                mRtButton.setImageDrawable(mStopDrawable);
+            }
             mInLoad = true;
         }
     }
@@ -146,26 +144,11 @@
      * Update the title and url.
      */
     /* package */ void setTitleAndUrl(CharSequence title, CharSequence url) {
-        if (url != null) {
-            url = BrowserActivity.buildTitleUrl(url.toString());
-        }
-        if (null == title) {
-            if (mInLoad) {
-                mTitleSet = false;
-                mTitle.setText(R.string.title_bar_loading);
-            } else {
-                // If the page has no title, put the url in the title space
-                // and leave the url blank.
-                mTitle.setText(url);
-                mUrl.setText(null);
-                mTitleSet = true;
-                return;
-            }
+        if (url == null) {
+            mTitle.setText(R.string.title_bar_loading);
         } else {
-            mTitle.setText(title);
-            mTitleSet = true;
+            mTitle.setText(BrowserActivity.buildTitleUrl(url.toString()));
         }
-        mUrl.setText(url);
     }
 
     /* package */ void setToTabPicker() {
@@ -174,6 +157,5 @@
         setLock(null);
         mCircularProgress.setVisibility(View.GONE);
         mHorizontalProgress.setVisibility(View.GONE);
-        mUrl.setVisibility(View.INVISIBLE);
     }
 }
diff --git a/src/com/android/browser/TitleBarSet.java b/src/com/android/browser/TitleBarSet.java
index d26f0af..4bd3fd8 100644
--- a/src/com/android/browser/TitleBarSet.java
+++ b/src/com/android/browser/TitleBarSet.java
@@ -39,7 +39,6 @@
         implements AdapterView.OnItemSelectedListener {
     private Vector<TitleBar>    mTitleBars;
     private BrowserActivity     mBrowserActivity;
-    private View                mNewButton;
     private int                 mCount;
     private TitleAdapter        mTitleAdapter;
     private boolean             mIgnoreSelectedListener;
@@ -53,9 +52,6 @@
         super(context, attrs);
         mTitleBars = new Vector<TitleBar>(TabControl.MAX_TABS);
         mCount = 0;
-        // Now create the Plus button that goes on the right.
-        LayoutInflater factory = LayoutInflater.from(context);
-        mNewButton = factory.inflate(R.layout.new_window_button, null);
         mTitleAdapter = new TitleAdapter();
         setAdapter(mTitleAdapter);
         setCallbackDuringFling(false);
@@ -76,12 +72,9 @@
             return;
         }
         int newSelection = mCount;
-        TitleBar titleBar = new TitleBar(getContext(), view);
+        TitleBar titleBar = new TitleBar(getContext(), view, mBrowserActivity);
         mTitleBars.add(titleBar);
         mCount++;
-        if (TabControl.MAX_TABS == mCount) {
-            mNewButton.setEnabled(false);
-        }
         // Need to refresh our list
         setAdapter(mTitleAdapter);
         mIgnoreSelectedListener = true;
@@ -167,7 +160,6 @@
      */
     public boolean performItemClick(View view, int position, long id) {
         if (!(view instanceof TitleBar)) {
-            // For new window button
             return super.performItemClick(view, position, id);
         }
         // If we have no mLastTouchUp, this was not called from onSingleTapUp,
@@ -181,21 +173,7 @@
         if (titleBar != getTitleBarAt(position)) {
             return false;
         }
-        if (titleBar.hitRightButton((int) mLastTouchUp.getX() - mScrollX,
-                (int) mLastTouchUp.getY() - mScrollY)) {
-            if (titleBar.isInLoad()) {
-                WebView webView = titleBar.getWebView();
-                if (null == webView) {
-                    // FIXME: How did we get into this situation?
-                    return false;
-                }
-                webView.stopLoading();
-            } else {
-                mBrowserActivity.closeCurrentWindow();
-            }
-        } else {
-            mBrowserActivity.bookmarksOrHistoryPicker(false, false);
-        }
+        mBrowserActivity.onSearchRequested();
         return true;
     }
 
@@ -203,9 +181,6 @@
      * Remove the tab at the given position.
      */
     /* package */ void removeTab(int position) {
-        if (TabControl.MAX_TABS == mCount) {
-            mNewButton.setEnabled(true);
-        }
         mTitleBars.remove(position);
         mCount--;
         // Need to refresh our list
@@ -221,17 +196,10 @@
 
     /**
      * Set the owning BrowserActivity.  Necessary so that we can call methods
-     * on it.
+     * on it.  Only called once before adding any title bars.
      */
-    /* package */ void setBrowserActivity(final BrowserActivity ba) {
+    /* package */ void init(final BrowserActivity ba) {
         mBrowserActivity = ba;
-        View.OnClickListener listener = new View.OnClickListener() {
-            public void onClick(View v) {
-                ba.openTabAndShow(BrowserActivity.EMPTY_URL_DATA, false, null);
-                ba.bookmarksOrHistoryPicker(false, true);
-            }
-        };
-        mNewButton.findViewById(R.id.button).setOnClickListener(listener);
     }
 
     /**
@@ -319,8 +287,7 @@
         public void registerDataSetObserver(DataSetObserver observer) {}
         public void unregisterDataSetObserver(DataSetObserver observer) {}
         public int getCount() {
-            // To account for new window
-            return mCount + 1;
+            return mCount;
         }
         public Object getItem(int position) {
             return null;
@@ -332,13 +299,9 @@
             return true;
         }
         public View getView(int position, View convertView, ViewGroup parent) {
-            if (mCount == position) {
-                return mNewButton;
-            }
             TitleBar titleBar = getTitleBarAt(position);
             Gallery.LayoutParams lp;
-            int desiredWidth = TitleBarSet.this.getWidth()
-                    - (2 * mNewButton.getWidth());
+            int desiredWidth = TitleBarSet.this.getWidth();
             ViewGroup.LayoutParams old = titleBar.getLayoutParams();
             if (old == null || !(old instanceof Gallery.LayoutParams)) {
                 lp = new Gallery.LayoutParams(desiredWidth,
