diff --git a/res/drawable/ic_menu_hideurl.png b/res/drawable/ic_menu_hideurl.png
new file mode 100644
index 0000000..571457b
--- /dev/null
+++ b/res/drawable/ic_menu_hideurl.png
Binary files differ
diff --git a/res/layout/tab_bar.xml b/res/layout/tab_bar.xml
index 60f08ef..0b3fae1 100644
--- a/res/layout/tab_bar.xml
+++ b/res/layout/tab_bar.xml
@@ -15,28 +15,20 @@
     android:id="@+id/tabbarcontent"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:background="#ffdddddd"
+    style="@style/ActionBarStyle"
     android:orientation="horizontal">
-    <com.android.browser.TabScrollView
-        android:id="@+id/tabs"
-        android:layout_width="0dp"
-        android:layout_height="match_parent"
-        android:layout_weight="1.0"
-        android:orientation="horizontal" />
     <ImageButton
         android:id="@+id/showurl"
         android:src="@drawable/ic_menu_showurl"
         android:layout_width="48dip"
         android:layout_height="48dip"
-        android:layout_marginLeft="6dip"
+        android:layout_marginLeft="3dip"
         android:background="@drawable/browserbarbutton"
-        android:visibility="invisible" />
-    <ImageButton
-        android:id="@+id/newtab"
-        android:src="@drawable/ic_menu_new_window"
-        android:layout_width="48dip"
+        android:visibility="gone" />
+    <com.android.browser.TabScrollView
+        android:id="@+id/tabs"
+        android:layout_width="0dp"
         android:layout_height="48dip"
-        android:layout_marginLeft="6dip"
-        android:layout_marginRight="6dip"
-        android:background="@drawable/browserbarbutton" />
+        android:layout_weight="1.0"
+        android:orientation="horizontal" />
 </LinearLayout>
diff --git a/res/layout/tab_title.xml b/res/layout/tab_title.xml
index 6166d24..9fdddeb 100644
--- a/res/layout/tab_title.xml
+++ b/res/layout/tab_title.xml
@@ -10,7 +10,7 @@
         the specific language governing permissions and limitations under the
         License.
     -->
-<LinearLayout
+<merge
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="0dip"
     android:layout_weight="1.0"
@@ -46,4 +46,4 @@
         android:layout_height="wrap_content"
         android:layout_marginLeft="6dip"
         android:src="@drawable/btn_close_window" />
-</LinearLayout>
+</merge>
diff --git a/res/layout/url_bar.xml b/res/layout/url_bar.xml
index 9bf617d..a8e5a8d 100644
--- a/res/layout/url_bar.xml
+++ b/res/layout/url_bar.xml
@@ -96,14 +96,6 @@
                 android:background="@drawable/browserbarbutton" />
         </LinearLayout>
         <ImageButton
-            android:id="@+id/menu"
-            android:src="@drawable/ic_menu"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:layout_marginLeft="6dip"
-            android:layout_marginRight="6dip"
-            android:background="@drawable/browserbarbutton" />
-        <ImageButton
             android:id="@+id/all_btn"
             android:layout_width="wrap_content"
             android:layout_height="match_parent"
diff --git a/res/menu-xlarge/browser.xml b/res/menu-xlarge/browser.xml
index 0fc20be..191f99f 100644
--- a/res/menu-xlarge/browser.xml
+++ b/res/menu-xlarge/browser.xml
@@ -16,14 +16,11 @@
 
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
     <group android:id="@+id/MAIN_MENU">
-        <item android:id="@+id/new_tab_menu_id"
-            android:title="@string/new_tab"
+        <item android:id="@+id/newtab"
             android:icon="@drawable/ic_menu_new_window"
+            android:title="@string/new_tab"
+            android:showAsAction="always"
             android:alphabeticShortcut="n" />
-        <item android:id="@+id/active_tabs_menu_id"
-            android:title="@string/active_tabs"
-            android:icon="@drawable/ic_menu_windows"
-            android:alphabeticShortcut="t" />
         <item android:id="@+id/find_menu_id"
             android:title="@string/find_dot"
             android:icon="@drawable/ic_menu_find"
diff --git a/res/values-xlarge/styles.xml b/res/values-xlarge/styles.xml
new file mode 100644
index 0000000..844f54f
--- /dev/null
+++ b/res/values-xlarge/styles.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ *
+ * Copyright 2006,2007,2008 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
+ *
+ *     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.
+ */
+-->
+<resources>
+    <style name="BrowserTheme" parent="@android:Theme.Black">
+        <item name="android:windowBackground">@color/white</item>
+        <item name="android:colorBackground">#FFFFFFFF</item>
+        <item name="android:windowActionBar">true</item>
+        <item name="android:windowNoTitle">false</item>
+        <item name="android:windowActionBarStyle">@style/ActionBarStyle</item>
+        <item name="android:windowContentOverlay">@null</item>
+    </style>
+    <style name="BookmarkTheme" parent="@android:Theme.Black">
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowContentOverlay">@null</item>
+    </style>
+    <style name="ActionBarStyle">
+        <item name="android:background">#ffdddddd</item>
+        <item name="android:height">48dip</item>
+        <item name="android:padding">0dip</item>
+        <item name="android:displayOptions">hideHome</item>
+    </style>
+    <style name="TitleBar">
+        <item name="android:windowEnterAnimation">@anim/title_bar_enter</item>
+        <item name="android:windowExitAnimation">@anim/title_bar_exit</item>
+    </style>
+</resources>
+
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 2e8510a..a339b57 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -1,19 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-/* 
+/*
  *
  * Copyright 2006,2007,2008 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 
+ * 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.
  */
 -->
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index d6f7177..ee231a7 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -16,6 +16,7 @@
 
 package com.android.browser;
 
+import android.app.ActionBar;
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.ProgressDialog;
@@ -199,6 +200,13 @@
         mMixLockIcon = Resources.getSystem().getDrawable(
                 android.R.drawable.ic_partial_secure);
 
+        // Create the tab control and our initial tab
+        mTabControl = new TabControl(this);
+
+        mXLargeScreenSize = (getResources().getConfiguration().screenLayout
+                & Configuration.SCREENLAYOUT_SIZE_MASK)
+                == Configuration.SCREENLAYOUT_SIZE_XLARGE;
+
         FrameLayout frameLayout = (FrameLayout) getWindow().getDecorView()
                 .findViewById(com.android.internal.R.id.content);
         mBrowserFrameLayout = (FrameLayout) LayoutInflater.from(this)
@@ -210,28 +218,19 @@
         mCustomViewContainer = (FrameLayout) mBrowserFrameLayout
                 .findViewById(R.id.fullscreen_custom_content);
         frameLayout.addView(mBrowserFrameLayout, COVER_SCREEN_PARAMS);
-        mXLargeScreenSize = (getResources().getConfiguration().screenLayout
-                & Configuration.SCREENLAYOUT_SIZE_MASK)
-                == Configuration.SCREENLAYOUT_SIZE_XLARGE;
 
-        // Create the tab control and our initial tab
-        mTabControl = new TabControl(this);
         if (mXLargeScreenSize) {
             mTitleBar = new TitleBarXLarge(this);
             mTitleBar.setProgress(100);
             mFakeTitleBar = new TitleBarXLarge(this);
+            ActionBar actionBar = getActionBar();
             mTabBar = new TabBar(this, mTabControl, (TitleBarXLarge) mFakeTitleBar);
-            LinearLayout layout = (LinearLayout) mBrowserFrameLayout.
-                    findViewById(R.id.vertical_layout);
-            layout.addView(mTabBar, 0, new LinearLayout.LayoutParams(
-                    ViewGroup.LayoutParams.MATCH_PARENT,
-                    ViewGroup.LayoutParams.WRAP_CONTENT));
+            actionBar.setCustomNavigationMode(mTabBar);
         } else {
             mTitleBar = new TitleBar(this);
             // mTitleBar will be always be shown in the fully loaded mode on
             // phone
             mTitleBar.setProgress(100);
-            // Fake title bar is not needed in xlarge layout
             mFakeTitleBar = new TitleBar(this);
         }
 
@@ -1341,6 +1340,12 @@
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
+        // check the action bar button before mCanChord check, as the prepare call
+        // doesn't come for action bar buttons
+        if (item.getItemId() == R.id.newtab) {
+            bookmarksOrHistoryPicker(false, true);
+            return true;
+        }
         if (!mCanChord) {
             // The user has already fired a shortcut with this hold down of the
             // menu key.
@@ -1630,8 +1635,10 @@
                 final MenuItem forward = menu.findItem(R.id.forward_menu_id);
                 forward.setEnabled(canGoForward);
 
-                final MenuItem newtab = menu.findItem(R.id.new_tab_menu_id);
-                newtab.setEnabled(mTabControl.canCreateNewTab());
+                if (!mXLargeScreenSize) {
+                    final MenuItem newtab = menu.findItem(R.id.new_tab_menu_id);
+                    newtab.setEnabled(mTabControl.canCreateNewTab());
+                }
 
                 // decide whether to show the share link option
                 PackageManager pm = getPackageManager();
diff --git a/src/com/android/browser/ScrollWebView.java b/src/com/android/browser/ScrollWebView.java
index 16404aa..97bd2c7 100644
--- a/src/com/android/browser/ScrollWebView.java
+++ b/src/com/android/browser/ScrollWebView.java
@@ -68,6 +68,10 @@
         super(context);
     }
 
+    void hideEmbeddedTitleBar() {
+        scrollBy(0, getVisibleTitleHeight());
+    }
+
     @Override
     public void setEmbeddedTitleBar(final View title) {
         super.setEmbeddedTitleBar(title);
diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java
index da18614..6fc919e 100644
--- a/src/com/android/browser/TabBar.java
+++ b/src/com/android/browser/TabBar.java
@@ -25,11 +25,13 @@
 import android.graphics.drawable.LayerDrawable;
 import android.graphics.drawable.PaintDrawable;
 import android.view.ContextMenu;
+import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.MenuInflater;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.webkit.WebView;
+import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
@@ -48,19 +50,18 @@
 
     private static final int PROGRESS_MAX = 100;
 
-    private static final int TAB_WIDTH_SELECTED = 300;
-    private static final int TAB_WIDTH_UNSELECTED = 300;
-
     private BrowserActivity mBrowserActivity;
 
-    private final float mTabWidthSelected;
-    private final float mTabWidthUnselected;
+    private final int mTabWidthSelected;
+    private final int mTabWidthUnselected;
+
+    private final Drawable mShowUrlDrawable;
+    private final Drawable mHideUrlDrawable;
 
     private TitleBarXLarge mTitleBar;
 
     private TabScrollView mTabs;
-    private View mNewButton;
-    private View mShowUrlButton;
+    private ImageButton mShowUrlButton;
     private TabControl mControl;
 
     private Map<Tab, TabViewData> mTabMap;
@@ -68,12 +69,15 @@
     private float mDensityScale;
     private boolean mUserRequestedUrlbar;
     private boolean mTitleVisible;
+    private boolean mShowUrlMode;
 
     public TabBar(BrowserActivity context, TabControl tabcontrol, TitleBarXLarge titlebar) {
         super(context);
         Resources res = context.getResources();
-        mTabWidthSelected = res.getDimension(R.dimen.tab_width_selected);
-        mTabWidthUnselected = res.getDimension(R.dimen.tab_width_unselected);
+        mTabWidthSelected = (int) res.getDimension(R.dimen.tab_width_selected);
+        mTabWidthUnselected = (int) res.getDimension(R.dimen.tab_width_unselected);
+        mShowUrlDrawable = res.getDrawable(R.drawable.ic_menu_showurl);
+        mHideUrlDrawable = res.getDrawable(R.drawable.ic_menu_hideurl);
 
         mTitleBar = titlebar;
         mTitleBar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
@@ -86,13 +90,11 @@
         LayoutInflater factory = LayoutInflater.from(context);
         factory.inflate(R.layout.tab_bar, this);
         mTabs = (TabScrollView) findViewById(R.id.tabs);
-        mNewButton = findViewById(R.id.newtab);
-        mShowUrlButton = findViewById(R.id.showurl);
+        mShowUrlButton = (ImageButton) findViewById(R.id.showurl);
 
         // TODO: Change enabled states based on whether you can go
         // back/forward.  Probably should be done inside onPageStarted.
 
-        mNewButton.setOnClickListener(this);
         mShowUrlButton.setOnClickListener(this);
 
         // build tabs
@@ -112,14 +114,21 @@
 
     public void onClick(View view) {
         if (mShowUrlButton == view) {
-            mBrowserActivity.stopScrolling();
-            mBrowserActivity.showFakeTitleBar();
-            mUserRequestedUrlbar = true;
-        } else if (mNewButton == view) {
-            mBrowserActivity.bookmarksOrHistoryPicker(false, true);
+            if (mShowUrlMode) {
+                showUrlBar();
+            } else if (!isLoading()) {
+                ScrollWebView swv = (ScrollWebView) mControl.getCurrentWebView();
+                swv.hideEmbeddedTitleBar();
+                mBrowserActivity.hideFakeTitleBar();
+            }
         } else if (mTabs.getSelectedTab() == view) {
-            mBrowserActivity.showFakeTitleBar();
-            mTitleBar.requestUrlInputFocus();
+            if (mBrowserActivity.isFakeTitleBarShowing() && !isLoading()) {
+                mBrowserActivity.hideFakeTitleBar();
+            } else {
+                showUrlBar();
+            }
+            // temporarily disabled
+            // mTitleBar.requestUrlInputFocus();
         } else {
             TabViewData data = (TabViewData) view.getTag();
             int ix = mControl.getTabIndex(data.mTab);
@@ -128,18 +137,48 @@
         }
     }
 
-    void onShowTitleBar() {
-        mShowUrlButton.setVisibility(View.INVISIBLE);
+    private void showUrlBar() {
+        mBrowserActivity.stopScrolling();
+        mBrowserActivity.showFakeTitleBar();
+        mUserRequestedUrlbar = true;
     }
 
+    private void setShowUrlMode(boolean showUrl) {
+        mShowUrlMode = showUrl;
+        Drawable newDrawable = mShowUrlMode ? mShowUrlDrawable : mHideUrlDrawable;
+        mShowUrlButton.setImageDrawable(newDrawable);
+    }
+
+    // callback after fake titlebar is shown
+    void onShowTitleBar() {
+        setShowUrlMode(false);
+    }
+
+    // callback after fake titlebar is hidden
     void onHideTitleBar() {
-        mShowUrlButton.setVisibility(mTitleVisible ? View.INVISIBLE : View.VISIBLE);
+        setShowUrlMode(!mTitleVisible);
         Tab tab = mControl.getCurrentTab();
         tab.getWebView().requestFocus();
         mUserRequestedUrlbar = false;
     }
 
-    // UrlInputListener implementation
+    // webview scroll listener
+
+    @Override
+    public void onScroll(boolean titleVisible) {
+        mTitleVisible = titleVisible;
+        if (!mShowUrlMode && !mTitleVisible && !isLoading()) {
+            if (mUserRequestedUrlbar) {
+                mBrowserActivity.hideFakeTitleBar();
+            } else {
+                setShowUrlMode(true);
+            }
+        } else if (mTitleVisible && !isLoading()) {
+            if (mShowUrlMode) {
+                setShowUrlMode(false);
+            }
+        }
+    }
 
     @Override
     public void createContextMenu(ContextMenu menu) {
@@ -182,8 +221,11 @@
         public TabView(Context context, TabViewData tab) {
             super(context);
             mTabData = tab;
+            setGravity(Gravity.CENTER_VERTICAL);
+            setOrientation(LinearLayout.HORIZONTAL);
+            setBackgroundResource(R.drawable.tab_background);
             LayoutInflater inflater = LayoutInflater.from(mContext);
-            mTabContent = inflater.inflate(R.layout.tab_title, this);
+            mTabContent = inflater.inflate(R.layout.tab_title, this, true);
             mTitle = (TextView) mTabContent.findViewById(R.id.title);
             mIconView = (ImageView) mTabContent.findViewById(R.id.favicon);
             mLock = (ImageView) mTabContent.findViewById(R.id.lock);
@@ -226,8 +268,7 @@
             mTitle.setTextColor(mSelected ? Color.BLACK : Color.GRAY);
             super.setSelected(selected);
             setLayoutParams(new LayoutParams(selected ?
-                    (int) (TAB_WIDTH_SELECTED * mDensityScale)
-                    : (int) (TAB_WIDTH_UNSELECTED * mDensityScale),
+                    mTabWidthSelected : mTabWidthUnselected,
                     LayoutParams.MATCH_PARENT));
         }
 
@@ -355,7 +396,6 @@
     public void onNewTab(Tab tab) {
         TabViewData tvd = buildTab(tab);
         buildView(tvd);
-        mShowUrlButton.setVisibility(View.INVISIBLE);
     }
 
     @Override
@@ -397,20 +437,4 @@
         return mTabMap.get(mControl.getCurrentTab()).mTabView.mInLoad;
     }
 
-    // webview scroll listener
-
-    @Override
-    public void onScroll(boolean titleVisible) {
-        mTitleVisible = titleVisible;
-        boolean buttonVisible = (mShowUrlButton.getVisibility() == View.VISIBLE);
-        if (!buttonVisible && !mTitleVisible && !isLoading()) {
-            mShowUrlButton.setVisibility(View.VISIBLE);
-            if (mUserRequestedUrlbar) {
-                mBrowserActivity.hideFakeTitleBar();
-            }
-        } else if (mTitleVisible && !isLoading()) {
-            mShowUrlButton.setVisibility(View.INVISIBLE);
-        }
-    }
-
 }
diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java
index c1fdee3..f858e2e 100644
--- a/src/com/android/browser/TitleBarXLarge.java
+++ b/src/com/android/browser/TitleBarXLarge.java
@@ -49,7 +49,6 @@
     private View mStar;
     private View mSearchButton;
     private ImageView mStopButton;
-    private View mMenu;
     private View mAllButton;
     private ImageView mProgressView;
     private UrlInputView mUrlView;
@@ -76,7 +75,6 @@
         mBackButton = findViewById(R.id.back);
         mForwardButton = findViewById(R.id.forward);
         mStar = findViewById(R.id.star);
-        mMenu = findViewById(R.id.menu);
         mStopButton = (ImageView) findViewById(R.id.stop);
         mSearchButton = findViewById(R.id.search);
         mLockIcon = (ImageView) findViewById(R.id.lock);
@@ -89,7 +87,6 @@
         mAllButton.setOnClickListener(this);
         mStopButton.setOnClickListener(this);
         mSearchButton.setOnClickListener(this);
-        mMenu.setOnClickListener(this);
         mUrlView.setUrlInputListener(this);
     }
 
@@ -101,8 +98,6 @@
             mBrowserActivity.getTopWindow().goForward();
         } else if (mStar == v) {
             mBrowserActivity.promptAddOrInstallBookmark();
-        } else if (mMenu == v) {
-            mBrowserActivity.openOptionsMenu();
         } else if (mAllButton == v) {
             mBrowserActivity.bookmarksOrHistoryPicker(false, false);
         } else if (mSearchButton == v) {
@@ -135,6 +130,7 @@
     public void onDismiss() {
         mBrowserActivity.getTabControl().getCurrentTopWebView().requestFocus();
         mBrowserActivity.hideFakeTitleBar();
+        mUrlView.setText(mBrowserActivity.getTabControl().getCurrentWebView().getUrl());
     }
 
     @Override
diff --git a/src/com/android/browser/UrlInputView.java b/src/com/android/browser/UrlInputView.java
index f564d6a..77d7daf 100644
--- a/src/com/android/browser/UrlInputView.java
+++ b/src/com/android/browser/UrlInputView.java
@@ -35,13 +35,14 @@
 import android.widget.Filterable;
 import android.widget.ImageView;
 import android.widget.TextView;
+import android.widget.TextView.OnEditorActionListener;
 
 /**
  * url/search input view
  * handling suggestions
  */
 public class UrlInputView extends AutoCompleteTextView
-        implements OnFocusChangeListener, OnItemClickListener {
+        implements OnFocusChangeListener, OnItemClickListener, OnEditorActionListener {
 
     private UrlInputListener   mListener;
     private InputMethodManager mInputManager;
@@ -66,13 +67,7 @@
     private void init(Context ctx) {
         mFocusDrawable = ctx.getResources().getDrawable(R.drawable.textfield_stroke);
         mInputManager = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
-        setOnEditorActionListener(new OnEditorActionListener() {
-            @Override
-            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
-                finishInput(getText().toString());
-                return true;
-            }
-        });
+        setOnEditorActionListener(this);
         setOnFocusChangeListener(this);
         final ContentResolver cr = mContext.getContentResolver();
         mAdapter = new SuggestionsAdapter(mContext,
@@ -83,6 +78,12 @@
     }
 
     @Override
+    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+        finishInput(getText().toString());
+        return true;
+    }
+
+    @Override
     public void onFocusChange(View v, boolean hasFocus) {
         setBackgroundDrawable(hasFocus ? mFocusDrawable : null);
         if (hasFocus) {
