diff --git a/res/drawable/ic_btn_bookmark_browsertab.png b/res/drawable/ic_btn_bookmark_browsertab.png
new file mode 100644
index 0000000..1c52124
--- /dev/null
+++ b/res/drawable/ic_btn_bookmark_browsertab.png
Binary files differ
diff --git a/res/drawable/tab_browser_selected.9.png b/res/drawable/tab_browser_selected.9.png
new file mode 100644
index 0000000..40ad080
--- /dev/null
+++ b/res/drawable/tab_browser_selected.9.png
Binary files differ
diff --git a/res/drawable/tab_browser_unselected.9.png b/res/drawable/tab_browser_unselected.9.png
new file mode 100644
index 0000000..9b5ec0e
--- /dev/null
+++ b/res/drawable/tab_browser_unselected.9.png
Binary files differ
diff --git a/res/layout/title_bar.xml b/res/layout/title_bar.xml
index 7245a9b..be5f51c 100644
--- a/res/layout/title_bar.xml
+++ b/res/layout/title_bar.xml
@@ -16,15 +16,14 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/search_plate"
     android:layout_width="fill_parent"
     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" >
+    android:paddingBottom="0dip"
+    android:background="@drawable/tab_browser_selected" >
 
     <ProgressBar android:id="@+id/progress_horizontal"
         style="?android:attr/progressBarStyleHorizontal"
@@ -34,7 +33,6 @@
         />
 
     <LinearLayout
-        android:id="@+id/search_edit_frame"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:layout_marginTop="3dip"
@@ -42,8 +40,8 @@
 
         <TextView
             android:id="@+id/title"
-            android:background="@*android:drawable/textfield_search"
-            android:layout_height="40dip"
+            android:background="@*android:drawable/textfield_default"
+            android:layout_height="wrap_content"
             android:layout_width="0dip"
             android:layout_weight="1.0"
             android:paddingLeft="8dip"
@@ -51,21 +49,20 @@
             android:singleLine="true"
             android:ellipsize="end"
         />
-        <ProgressBar android:id="@+id/progress_circular"
-            style="?android:attr/progressBarStyleSmallTitle"
-            android:layout_width="40dip"
-            android:layout_height="40dip"
+        <ImageView android:id="@+id/lock"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
             android:layout_marginLeft="3dip"
-            android:max="100"
+            android:layout_gravity="center_vertical"
+            android:visibility="gone"
             />
         <ImageView
             android:id="@+id/rt_btn"
-            android:layout_width="40dip"
-            android:layout_height="40dip"
+            android:layout_width="42dip"
+            android:layout_height="42dip"
             android:layout_marginLeft="8dip"
-            android:scaleType="fitXY"
             android:background="@*android:drawable/btn_search_dialog_voice"
-            android:src="@drawable/ic_menu_bookmark"
+            android:src="@drawable/ic_btn_bookmark_browsertab"
         />
     </LinearLayout>
 </LinearLayout>
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 3706167..3b0745e 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -481,7 +481,11 @@
             }
 
             if (urlData.isEmpty()) {
-                bookmarksOrHistoryPicker(false, true);
+                if (mSettings.isLoginInitialized()) {
+                    webView.loadUrl(mSettings.getHomePage());
+                } else {
+                    waitForCredentials();
+                }
             } else {
                 if (extra != null) {
                     urlData.setPostData(extra
@@ -1250,11 +1254,10 @@
     /* package */ void closeCurrentWindow() {
         final TabControl.Tab current = mTabControl.getCurrentTab();
         if (mTabControl.getTabCount() == 1) {
-            // This is the last tab.  Open a new one, as well as the history
-            // picker, and close the current one.
+            // This is the last tab.  Open a new one, with the home
+            // page and close the current one.
             TabControl.Tab newTab = openTabAndShow(
-                    BrowserActivity.EMPTY_URL_DATA, false, null);
-            bookmarksOrHistoryPicker(false, true);
+                    mSettings.getHomePage(), false, null);
             closeTab(current);
             mTabControl.setCurrentTab(newTab);
             return;
@@ -1298,12 +1301,11 @@
         switch (item.getItemId()) {
             // -- Main menu
             case R.id.new_tab_menu_id:
-                openTabAndShow(EMPTY_URL_DATA, false, null);
-                bookmarksOrHistoryPicker(false, true);
+                openTabAndShow(mSettings.getHomePage(), false, null);
                 break;
 
             case R.id.goto_menu_id:
-                bookmarksOrHistoryPicker(false, false);
+                bookmarksOrHistoryPicker(false);
                 break;
 
             case R.id.add_bookmark_menu_id:
@@ -1371,7 +1373,7 @@
                 break;
 
             case R.id.classic_history_menu_id:
-                bookmarksOrHistoryPicker(true, false);
+                bookmarksOrHistoryPicker(true);
                 break;
 
             case R.id.share_page_menu_id:
@@ -1623,7 +1625,7 @@
         }
 
         WebView view = t.getWebView();
-        view.addTitleBar(mTitleBar);
+        view.setEmbeddedTitleBar(mTitleBar);
         // Attach the sub window if necessary
         attachSubWindow(t);
         // Request focus on the top window.
@@ -1651,7 +1653,7 @@
         }
 
         WebView view = t.getWebView();
-        view.addTitleBar(null);
+        view.setEmbeddedTitleBar(null);
 
         // Remove the sub window if it exists.
         if (t.getSubWebView() != null) {
@@ -2042,7 +2044,7 @@
                 return KeyTracker.State.DONE_TRACKING;
             }
             if (stage == KeyTracker.Stage.LONG_REPEAT) {
-                bookmarksOrHistoryPicker(true, false);
+                bookmarksOrHistoryPicker(true);
                 return KeyTracker.State.DONE_TRACKING;
             } else if (stage == KeyTracker.Stage.UP) {
                 // FIXME: Currently, we do not have a notion of the
@@ -3870,32 +3872,12 @@
                             getTopWindow().loadUrl(data);
                         }
                     }
-/*
-                FIXME: Removing this breaks the behavior of pressing BACK from
-                the Go page resulting in the window being closed.  However, it
-                needs to be removed so that the user can use the Search bar to
-                enter a URL.  Further, the Go behavior is going to change
-                drastically, so this behavior may not last anyway.
-                } else if (resultCode == RESULT_CANCELED
-                        && mCancelGoPageMeansClose) {
-                    if (mTabControl.getTabCount() == 1) {
-                        // finish the Browser.  When the Browser opens up again,
-                        // we will go through onCreate and once again open up
-                        // the Go page.
-                        finish();
-                        return;
-                    }
-                    closeCurrentWindow();
-*/
                 }
                 break;
             default:
                 break;
         }
-        mCancelGoPageMeansClose = false;
-        if (getTopWindow() != null) {
-            getTopWindow().requestFocus();
-        }
+        getTopWindow().requestFocus();
     }
 
     /*
@@ -3911,20 +3893,12 @@
 
     }
 
-    // True if canceling the "Go" screen should result in closing the current
-    // window/browser.
-    private boolean mCancelGoPageMeansClose;
-
     /**
      * Open the Go page.
      * @param startWithHistory If true, open starting on the history tab.
      *                         Otherwise, start with the bookmarks tab.
-     * @param cancelGoPageMeansClose Set to true if this came from a new tab, or
-     *                               from the only tab, and canceling means to
-     *                               close the tab (and possibly the browser)
      */
-    /* package */ void bookmarksOrHistoryPicker(boolean startWithHistory,
-            boolean cancelGoPageMeansClose) {
+    /* package */ void bookmarksOrHistoryPicker(boolean startWithHistory) {
         WebView current = mTabControl.getCurrentWebView();
         if (current == null) {
             return;
@@ -3948,17 +3922,14 @@
         }
         intent.putExtra("title", title);
         intent.putExtra("url", url);
-        // If this is opening in a new window, then disable opening in a
-        // (different) new window.  Also disable it if we have maxed out the
-        // windows.
-        intent.putExtra("disable_new_window", cancelGoPageMeansClose
-                || mTabControl.getTabCount() >= TabControl.MAX_TABS);
+        // Disable opening in a new window if we have maxed out the windows
+        intent.putExtra("disable_new_window", mTabControl.getTabCount()
+                >= TabControl.MAX_TABS);
         intent.putExtra("touch_icon_url", current.getTouchIconUrl());
         if (startWithHistory) {
             intent.putExtra(CombinedBookmarkHistoryActivity.STARTING_TAB,
                     CombinedBookmarkHistoryActivity.HISTORY_TAB);
         }
-        mCancelGoPageMeansClose = cancelGoPageMeansClose;
         startActivityForResult(intent, COMBO_PAGE);
     }
 
diff --git a/src/com/android/browser/TitleBar.java b/src/com/android/browser/TitleBar.java
index f03e2da..c2e822c 100644
--- a/src/com/android/browser/TitleBar.java
+++ b/src/com/android/browser/TitleBar.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.graphics.Rect;
+import android.graphics.drawable.Animatable;
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
@@ -36,10 +37,10 @@
     private TextView        mTitle;
     private Drawable        mCloseDrawable;
     private ImageView       mRtButton;
-    private ProgressBar     mCircularProgress;
+    private Drawable        mCircularProgress;
     private ProgressBar     mHorizontalProgress;
     private Drawable        mFavicon;
-    private Drawable        mLockIcon;
+    private ImageView       mLockIcon;
     private Drawable        mStopDrawable;
     private Drawable        mBookmarkDrawable;
     private boolean         mInLoad;
@@ -55,6 +56,8 @@
         mTitle = (TextView) findViewById(R.id.title);
         mTitle.setCompoundDrawablePadding(5);
 
+        mLockIcon = (ImageView) findViewById(R.id.lock);
+
         mRtButton = (ImageView) findViewById(R.id.rt_btn);
         mRtButton.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
@@ -63,11 +66,13 @@
                         mWebView.stopLoading();
                     }
                 } else {
-                    mBrowserActivity.bookmarksOrHistoryPicker(false, false);
+                    mBrowserActivity.bookmarksOrHistoryPicker(false);
                 }
             }
         });
-        mCircularProgress = (ProgressBar) findViewById(R.id.progress_circular);
+        mCircularProgress = (Drawable) context.getResources().getDrawable(
+                com.android.internal.R.drawable.search_spinner);
+        mCircularProgress.setBounds(0,0,20,20);
         mHorizontalProgress = (ProgressBar) findViewById(
                 R.id.progress_horizontal);
         mWebView = webview;
@@ -95,7 +100,8 @@
         if (d != null) {
             d.setBounds(0, 0, 20, 20);
         }
-        mTitle.setCompoundDrawables(d, null, mLockIcon, null);
+        Drawable progress = mInLoad ? mCircularProgress : null;
+        mTitle.setCompoundDrawables(d, null, progress, null);
         mFavicon = d;
     }
 
@@ -103,40 +109,45 @@
      * Set the Drawable for the lock icon, or null to hide it.
      */
     /* package */ void setLock(Drawable d) {
-        if (d != null) {
-            d.setBounds(0, 0, 20, 20);
+        if (null == d) {
+            mLockIcon.setVisibility(View.GONE);
+        } else {
+            mLockIcon.setImageDrawable(d);
+            mLockIcon.setVisibility(View.VISIBLE);
         }
-        mTitle.setCompoundDrawables(mFavicon, null, d, null);
-        mLockIcon = d;
     }
 
     /**
      * Update the progress, from 0 to 100.
      */
     /* package */ void setProgress(int newProgress) {
-        if (newProgress == mCircularProgress.getMax()) {
-            mCircularProgress.setVisibility(View.GONE);
-            mHorizontalProgress.setVisibility(View.GONE);
+        if (newProgress == mHorizontalProgress.getMax()) {
+            mTitle.setCompoundDrawables(mFavicon, null, null, null);
+            ((Animatable) mCircularProgress).stop();
+            mHorizontalProgress.setVisibility(View.INVISIBLE);
             if (mBookmarkDrawable != null) {
                 mRtButton.setImageDrawable(mBookmarkDrawable);
             }
             mInLoad = false;
         } else {
-            mCircularProgress.setProgress(newProgress);
             mHorizontalProgress.setProgress(newProgress);
-            mCircularProgress.setVisibility(View.VISIBLE);
-            mHorizontalProgress.setVisibility(View.VISIBLE);
-            if (mBookmarkDrawable == null) {
-                mBookmarkDrawable = mRtButton.getDrawable();
+            if (!mInLoad) {
+                mTitle.setCompoundDrawables(mFavicon, null, mCircularProgress,
+                        null);
+                ((Animatable) mCircularProgress).start();
+                mHorizontalProgress.setVisibility(View.VISIBLE);
+                if (mBookmarkDrawable == null) {
+                    mBookmarkDrawable = mRtButton.getDrawable();
+                }
+                if (mStopDrawable == null) {
+                    mRtButton.setImageResource(
+                            com.android.internal.R.drawable.ic_menu_stop);
+                    mStopDrawable = mRtButton.getDrawable();
+                } else {
+                    mRtButton.setImageDrawable(mStopDrawable);
+                }
+                mInLoad = true;
             }
-            if (mStopDrawable == null) {
-                mRtButton.setImageResource(
-                        com.android.internal.R.drawable.ic_menu_stop);
-                mStopDrawable = mRtButton.getDrawable();
-            } else {
-                mRtButton.setImageDrawable(mStopDrawable);
-            }
-            mInLoad = true;
         }
     }
 
@@ -155,7 +166,6 @@
         mTitle.setText(R.string.tab_picker_title);
         setFavicon(null);
         setLock(null);
-        mCircularProgress.setVisibility(View.GONE);
         mHorizontalProgress.setVisibility(View.GONE);
     }
 }
diff --git a/src/com/android/browser/TitleBarSet.java b/src/com/android/browser/TitleBarSet.java
index 873f40b..c71cfa7 100644
--- a/src/com/android/browser/TitleBarSet.java
+++ b/src/com/android/browser/TitleBarSet.java
@@ -58,6 +58,8 @@
         setCallbackOnUnselectedItemClick(true);
         setSpacing(0);
         setOnItemSelectedListener(this);
+        setBackgroundResource(R.drawable.tab_browser_unselected);
+        setPadding(0,0,0,0);
     }
 
     /**
