diff --git a/res/layout/active_tabs.xml b/res/layout/active_tabs.xml
new file mode 100644
index 0000000..d25f154
--- /dev/null
+++ b/res/layout/active_tabs.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 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
+
+          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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_height="fill_parent"
+    android:layout_width="fill_parent"
+    android:orientation="vertical"
+    android:background="@color/black"
+    >
+    <RelativeLayout
+        style="?android:attr/windowTitleBackgroundStyle"
+        android:layout_width="fill_parent"
+        android:layout_height="?android:attr/windowTitleSize"
+        >
+        <TextView android:id="@android:id/title"
+            style="?android:attr/windowTitleStyle"
+            android:layout_width="fill_parent"
+            android:layout_height="fill_parent"
+            android:background="@null"
+            android:fadingEdge="horizontal"
+            android:gravity="center_vertical"
+            android:text="@string/active_tabs"
+            />
+    </RelativeLayout>
+    <ListView android:id="@+id/list"
+        android:layout_width="fill_parent"
+        android:layout_height="0dip"
+        android:layout_weight="1"
+        android:cacheColorHint="@color/black"
+        />
+</LinearLayout>
diff --git a/res/layout/tab_view.xml b/res/layout/tab_view.xml
new file mode 100644
index 0000000..8f42937
--- /dev/null
+++ b/res/layout/tab_view.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 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
+
+          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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:layout_width="fill_parent"
+    android:orientation="horizontal"
+    android:gravity="center_vertical"
+    >
+    <com.android.browser.FakeWebView android:id="@+id/screen_shot"
+        android:layout_width="40dip"
+        android:layout_height="40dip"
+        android:layout_marginLeft="4dip"
+        android:layout_marginRight="4dip"
+        />
+    <LinearLayout
+        android:layout_width="0dip"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:orientation="vertical"
+        >
+        <TextView android:id="@+id/title"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:maxLines="1"
+            android:singleLine="true"
+            android:ellipsize="end"
+            />
+        <TextView android:id="@+id/url"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:maxLines="1"
+            android:singleLine="true"
+            android:ellipsize="end"
+            />
+    </LinearLayout>
+    <ImageView android:id="@+id/close"
+        android:src="@drawable/ic_close_tab"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="4dip"
+        android:layout_marginRight="4dip"
+        />
+</LinearLayout>
diff --git a/res/layout/title_bar.xml b/res/layout/title_bar.xml
index be5f51c..eb9f7f9 100644
--- a/res/layout/title_bar.xml
+++ b/res/layout/title_bar.xml
@@ -46,6 +46,9 @@
             android:layout_weight="1.0"
             android:paddingLeft="8dip"
             android:paddingRight="6dip"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textColor="@color/black"
+            android:gravity="center_vertical"
             android:singleLine="true"
             android:ellipsize="end"
         />
diff --git a/res/menu/browser.xml b/res/menu/browser.xml
index e7478f0..ea284d3 100644
--- a/res/menu/browser.xml
+++ b/res/menu/browser.xml
@@ -21,10 +21,10 @@
         <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/active_tabs_menu_id"
+            android:title="@string/active_tabs"
+            android:icon="@drawable/ic_menu_windows"
+            />
         <item android:id="@+id/forward_menu_id"
             android:title="@string/forward" 
             android:alphabeticShortcut="k"
@@ -86,6 +86,10 @@
             android:title="@string/goto_dot"
             android:alphabeticShortcut="l"
             android:icon="@android:drawable/ic_menu_search"/>
+        <item android:id="@+id/close_menu_id"
+            android:icon="@drawable/ic_btn_close_panel"
+            android:title="@string/tab_picker_remove_tab"
+            android:alphabeticShortcut="w" />
     </group>
     <!-- these items are toggled in and out of @+id/stop_reload_menu_id -->
     <item android:id="@+id/stop_menu_id"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b224517..3654c74 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -20,6 +20,8 @@
 
     <!-- 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 menu item which brings up a list of the currently active tabs -->
+    <string name="active_tabs">Tabs</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/ActiveTabsPage.java b/src/com/android/browser/ActiveTabsPage.java
new file mode 100644
index 0000000..c1b402a
--- /dev/null
+++ b/src/com/android/browser/ActiveTabsPage.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 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
+ *
+ *      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.
+ */
+
+package com.android.browser;
+
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.TextView;
+
+public class ActiveTabsPage extends LinearLayout {
+    private final BrowserActivity   mBrowserActivity;
+    private final LayoutInflater    mFactory;
+    private final TabControl        mControl;
+    private final TabsListAdapter   mAdapter;
+    private final ListView          mListView;
+
+    public ActiveTabsPage(BrowserActivity context, TabControl control) {
+        super(context);
+        mBrowserActivity = context;
+        mControl = control;
+        mFactory = LayoutInflater.from(context);
+        mFactory.inflate(R.layout.active_tabs, this);
+        mListView = (ListView) findViewById(R.id.list);
+        mAdapter = new TabsListAdapter();
+        mListView.setAdapter(mAdapter);
+        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+                public void onItemClick(AdapterView<?> parent, View view,
+                        int position, long id) {
+                    if (mControl.getTabCount() < TabControl.MAX_TABS) {
+                        position--;
+                    }
+                    boolean needToAttach = false;
+                    if (position == -1) {
+                        // Create a new tab
+                        mBrowserActivity.openTabToHomePage();
+                    } else {
+                        // Open the corresponding tab
+                        // If the tab is the current one, switchToTab will
+                        // do nothing and return, so we need to make sure
+                        // it gets attached back to its mContentView in
+                        // removeActiveTabPage
+                        needToAttach = !mBrowserActivity.switchToTab(position);
+                    }
+                    mBrowserActivity.removeActiveTabPage(needToAttach);
+                }
+        });
+    }
+
+    public boolean dispatchKeyEvent(KeyEvent event) {
+        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
+            if (event.isDown()) return true;
+            mBrowserActivity.removeActiveTabPage(true);
+            return true;
+        }
+        return super.dispatchKeyEvent(event);
+    }
+
+    private class TabsListAdapter extends BaseAdapter {
+        public int getCount() {
+            int count = mControl.getTabCount();
+            if (count < TabControl.MAX_TABS) {
+                count++;
+            }
+            return count;
+        }
+        public Object getItem(int position) {
+            return null;
+        }
+        public long getItemId(int position) {
+            return position;
+        }
+        public View getView(int position, View convertView, ViewGroup parent) {
+            if (convertView == null) {
+                convertView = mFactory.inflate(R.layout.tab_view, null);
+            }
+            TextView title = (TextView) convertView.findViewById(R.id.title);
+            TextView url = (TextView) convertView.findViewById(R.id.url);
+            FakeWebView webView
+                    = (FakeWebView) convertView.findViewById(R.id.screen_shot);
+            View close = convertView.findViewById(R.id.close);
+
+            final int tabCount = mControl.getTabCount();
+            if (tabCount < TabControl.MAX_TABS) {
+                position--;
+            }
+            if (position == -1) {
+                title.setText(R.string.new_tab);
+                url.setText(R.string.http);
+                webView.setImageResource(R.drawable.ic_add_tab);
+                close.setVisibility(View.GONE);
+            } else {
+                TabControl.Tab tab = mControl.getTab(position);
+                mControl.populatePickerData(tab);
+                title.setText(tab.getTitle());
+                url.setText(tab.getUrl());
+                webView.setTab(tab);
+                close.setVisibility(View.VISIBLE);
+                final int closePosition = position;
+                close.setOnClickListener(new View.OnClickListener() {
+                        public void onClick(View v) {
+                            mBrowserActivity.closeTab(
+                                    mControl.getTab(closePosition));
+                            if (tabCount == 1) {
+                                mBrowserActivity.openTabToHomePage();
+                                mBrowserActivity.removeActiveTabPage(false);
+                            } else {
+                                mListView.setAdapter(mAdapter);
+                            }
+                        }
+                });
+            }
+            return convertView;
+        }
+    }
+}
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 887f832..bff8d04 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -1251,15 +1251,17 @@
         return true;
     }
 
+    /* package */ TabControl.Tab openTabToHomePage() {
+        return openTabAndShow(mSettings.getHomePage(), false, null);
+    }
+
     /* package */ void closeCurrentWindow() {
         final TabControl.Tab current = mTabControl.getCurrentTab();
         if (mTabControl.getTabCount() == 1) {
             // This is the last tab.  Open a new one, with the home
             // page and close the current one.
-            TabControl.Tab newTab = openTabAndShow(
-                    mSettings.getHomePage(), false, null);
+            TabControl.Tab newTab = openTabToHomePage();
             closeTab(current);
-            mTabControl.setCurrentTab(newTab);
             return;
         }
         final TabControl.Tab parent = current.getParentTab();
@@ -1281,6 +1283,23 @@
         }
     }
 
+    private ActiveTabsPage mActiveTabsPage;
+
+    /**
+     * Remove the active tabs page.
+     * @param needToAttach If true, the active tabs page did not attach a tab
+     *                     to the content view, so we need to do that here.
+     */
+    /* package */ void removeActiveTabPage(boolean needToAttach) {
+        mContentView.removeView(mActiveTabsPage);
+        mActiveTabsPage = null;
+        mMenuState = R.id.MAIN_MENU;
+        if (needToAttach) {
+            attachTabToContentView(mTabControl.getCurrentTab());
+        }
+        getTopWindow().requestFocus();
+    }
+
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (!mCanChord) {
@@ -1301,13 +1320,21 @@
         switch (item.getItemId()) {
             // -- Main menu
             case R.id.new_tab_menu_id:
-                openTabAndShow(mSettings.getHomePage(), false, null);
+                openTabToHomePage();
                 break;
 
             case R.id.goto_menu_id:
                 bookmarksOrHistoryPicker(false);
                 break;
 
+            case R.id.active_tabs_menu_id:
+                mActiveTabsPage = new ActiveTabsPage(this, mTabControl);
+                removeTabFromContentView(mTabControl.getCurrentTab());
+                mContentView.addView(mActiveTabsPage, COVER_SCREEN_PARAMS);
+                mActiveTabsPage.requestFocus();
+                mMenuState = EMPTY_MENU;
+                break;
+
             case R.id.add_bookmark_menu_id:
                 Intent i = new Intent(BrowserActivity.this,
                         AddBookmarkPage.class);
@@ -1696,7 +1723,11 @@
             if (CUSTOM_BROWSER_BAR) {
                 mTitleBar.addTab(webview, true);
             }
-            removeTabFromContentView(currentTab);
+            // If the last tab was removed from the active tabs page, currentTab
+            // will be null.
+            if (currentTab != null) {
+                removeTabFromContentView(currentTab);
+            }
             attachTabToContentView(tab);
             // We must set the new tab as the current tab to reflect the old
             // animation behavior.
@@ -1956,13 +1987,20 @@
     }
 
     /**
-     * Close the tab after removing its associated title bar.
+     * Close the tab, remove its associated title bar, and adjust mTabControl's
+     * current tab to a valid value.
      */
-    private void closeTab(TabControl.Tab t) {
+    /* package */ void closeTab(TabControl.Tab t) {
+        int currentIndex = mTabControl.getCurrentIndex();
+        int removeIndex = mTabControl.getTabIndex(t);
         if (CUSTOM_BROWSER_BAR) {
-            mTitleBar.removeTab(mTabControl.getTabIndex(t));
+            mTitleBar.removeTab(removeIndex);
         }
         mTabControl.removeTab(t);
+        if (currentIndex >= removeIndex && currentIndex != 0) {
+            currentIndex--;
+        }
+        mTabControl.setCurrentTab(mTabControl.getTab(currentIndex));
     }
 
     private void goBackOnePageOrQuit() {
@@ -2012,6 +2050,9 @@
                     pauseWebViewTimers();
                     mActivityInPause = savedState;
                     removeTabFromContentView(current);
+                    if (CUSTOM_BROWSER_BAR) {
+                        mTitleBar.removeTab(mTabControl.getTabIndex(current));
+                    }
                     mTabControl.removeTab(current);
                 }
                 /*
