diff --git a/res/menu/bookmarkscontext.xml b/res/menu/bookmarkscontext.xml
index ba5d1dc..badbb00 100644
--- a/res/menu/bookmarkscontext.xml
+++ b/res/menu/bookmarkscontext.xml
@@ -28,8 +28,8 @@
       android:title="@string/edit_bookmark"/>
     <item android:id="@+id/shortcut_context_menu_id"
       android:title="@string/create_shortcut_bookmark"/>
-    <item android:id="@+id/send_context_menu_id"
-      android:title="@string/tab_picker_send_url"/>
+    <item android:id="@+id/share_link_context_menu_id"
+      android:title="@string/contextmenu_sharelink"/>
     <item android:id="@+id/copy_url_context_menu_id"
       android:title="@string/contextmenu_copylink"/>
     <item android:id="@+id/delete_context_menu_id"
diff --git a/res/menu/historycontext.xml b/res/menu/historycontext.xml
index 5306396..bd4ede4 100644
--- a/res/menu/historycontext.xml
+++ b/res/menu/historycontext.xml
@@ -23,7 +23,7 @@
         android:title="@string/save_to_bookmarks"/>   
     <item android:id="@+id/share_link_context_menu_id"
         android:title="@string/contextmenu_sharelink"/>
-    <item android:id="@+id/copy_context_menu_id"
+    <item android:id="@+id/copy_url_context_menu_id"
         android:title="@string/contextmenu_copylink"/> 
     <item android:id="@+id/delete_context_menu_id"
         android:title="@string/remove_history_item"/>
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index d269546..87638d8 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -150,7 +150,7 @@
                 if (mTouchIconUrl != null) {
                     final Cursor c =
                             BrowserBookmarksAdapter.queryBookmarksForUrl(
-                                    cr, null, url);
+                                    cr, null, url, true);
                     new DownloadTouchIcon(cr, c, url)
                             .execute(mTouchIconUrl);
                 }
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 3c46fc9..68ccf79 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -2929,7 +2929,7 @@
         // currently accessible here.
         ContentResolver cr = getContentResolver();
         final Cursor c = BrowserBookmarksAdapter.queryBookmarksForUrl(
-                cr, view.getOriginalUrl(), view.getUrl());
+                cr, view.getOriginalUrl(), view.getUrl(), false);
         if (c != null) {
             boolean succeed = c.moveToFirst();
             ContentValues values = null;
@@ -3790,7 +3790,7 @@
             final ContentResolver cr = getContentResolver();
             final Cursor c =
                     BrowserBookmarksAdapter.queryBookmarksForUrl(cr,
-                            view.getOriginalUrl(), view.getUrl());
+                            view.getOriginalUrl(), view.getUrl(), true);
             if (c != null) {
                 if (c.getCount() > 0) {
                     new DownloadTouchIcon(cr, c, view).execute(url);
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java
index c3ccdfd..bf74ba2 100644
--- a/src/com/android/browser/BrowserBookmarksAdapter.java
+++ b/src/com/android/browser/BrowserBookmarksAdapter.java
@@ -52,10 +52,9 @@
     private ContentResolver         mContentResolver;
     private boolean                 mDataValid;
     private boolean                 mGridMode;
-
-    // When true, this adapter is used to pick a bookmark to create a shortcut
-    private boolean mCreateShortcut;
-    private int mExtraOffset;
+    private boolean                 mMostVisited;
+    private boolean                 mNeedsOffset;
+    private int                     mExtraOffset;
 
     // Implementation of WebIconDatabase.IconListener
     private class IconReceiver implements IconListener {
@@ -74,10 +73,10 @@
      *                  appropriately after a search.
      */
     public BrowserBookmarksAdapter(BrowserBookmarksPage b, String curPage,
-            String curTitle, boolean createShortcut) {
-        mDataValid = false;
-        mCreateShortcut = createShortcut;
-        mExtraOffset = createShortcut ? 0 : 1;
+            String curTitle, boolean createShortcut, boolean mostVisited) {
+        mNeedsOffset = !(createShortcut || mostVisited);
+        mMostVisited = mostVisited;
+        mExtraOffset = mNeedsOffset ? 1 : 0;
         mBookmarksPage = b;
         mCurrentPage = b.getResources().getString(R.string.current_page)
                 + curPage;
@@ -85,9 +84,14 @@
         mContentResolver = b.getContentResolver();
         mGridMode = false;
 
+        String whereClause;
         // FIXME: Should have a default sort order that the user selects.
-        String whereClause = Browser.BookmarkColumns.BOOKMARK + " != 0";
         String orderBy = Browser.BookmarkColumns.VISITS + " DESC";
+        if (mostVisited) {
+            whereClause = Browser.BookmarkColumns.VISITS + " != 0";
+        } else {
+            whereClause = Browser.BookmarkColumns.BOOKMARK + " != 0";
+        }
         mCursor = b.managedQuery(Browser.BOOKMARKS_URI,
                 Browser.HISTORY_PROJECTION, whereClause, null, orderBy);
         mCursor.registerContentObserver(new ChangeObserver());
@@ -264,7 +268,7 @@
 
     private static void updateBookmarkFavicon(ContentResolver cr,
             String originalUrl, String url, Bitmap favicon) {
-        final Cursor c = queryBookmarksForUrl(cr, originalUrl, url);
+        final Cursor c = queryBookmarksForUrl(cr, originalUrl, url, true);
         if (c == null) {
             return;
         }
@@ -285,7 +289,7 @@
     }
 
     /* package */ static Cursor queryBookmarksForUrl(ContentResolver cr,
-            String originalUrl, String url) {
+            String originalUrl, String url, boolean onlyBookmarks) {
         if (cr == null || url == null) {
             return null;
         }
@@ -309,11 +313,13 @@
         // http://www.google.com/m?some_query)
         final String[] selArgs = new String[] {
             originalUrlNoQuery, urlNoQuery, originalUrl, url };
-        final String where = "(" + BookmarkColumns.URL + " == ? OR "
+        String where = BookmarkColumns.URL + " == ? OR "
                 + BookmarkColumns.URL + " == ? OR "
                 + BookmarkColumns.URL + " GLOB ? || '*' OR "
-                + BookmarkColumns.URL + " GLOB ? || '*') AND "
-                + BookmarkColumns.BOOKMARK + " == 1";
+                + BookmarkColumns.URL + " GLOB ? || '*'";
+        if (onlyBookmarks) {
+            where = "(" + where + ") AND " + BookmarkColumns.BOOKMARK + " == 1";
+        }
         final String[] projection =
                 new String[] { Browser.BookmarkColumns._ID };
         return cr.query(Browser.BOOKMARKS_URI, projection, where, selArgs,
@@ -411,7 +417,7 @@
             ImageView thumb = (ImageView) convertView.findViewById(R.id.thumb);
             TextView tv = (TextView) convertView.findViewById(R.id.label);
 
-            if (0 == position && !mCreateShortcut) {
+            if (0 == position && mNeedsOffset) {
                 // This is to create a bookmark for the current page.
                 holder.setVisibility(View.VISIBLE);
                 tv.setText(mCurrentTitle);
@@ -436,7 +442,7 @@
             return convertView;
 
         }
-        if (position == 0 && !mCreateShortcut) {
+        if (position == 0 && mNeedsOffset) {
             AddNewBookmark b;
             if (convertView instanceof AddNewBookmark) {
                 b = (AddNewBookmark) convertView;
@@ -446,10 +452,20 @@
             b.setUrl(mCurrentPage);
             return b;
         }
-        if (convertView == null || !(convertView instanceof BookmarkItem)) {
-            convertView = new BookmarkItem(mBookmarksPage);
+        if (mMostVisited) {
+            if (convertView == null || !(convertView instanceof HistoryItem)) {
+                convertView = new HistoryItem(mBookmarksPage);
+            }
+        } else {
+            if (convertView == null || !(convertView instanceof BookmarkItem)) {
+                convertView = new BookmarkItem(mBookmarksPage);
+            }
         }
-        bind((BookmarkItem)convertView, position);
+        bind((BookmarkItem) convertView, position);
+        if (mMostVisited) {
+            ((HistoryItem) convertView).setIsBookmark(
+                    getIsBookmark(position));
+        }
         return convertView;
     }
 
@@ -491,6 +507,17 @@
     }
 
     /**
+     * Return whether or not this item represents a bookmarked site.
+     */
+    public boolean getIsBookmark(int position) {
+        if (position < mExtraOffset || position > mCount) {
+            return false;
+        }
+        mCursor.moveToPosition(position - mExtraOffset);
+        return (1 == mCursor.getInt(Browser.HISTORY_PROJECTION_BOOKMARK_INDEX));
+    }
+
+    /**
      * Private helper function to return the title or url.
      */
     private String getString(int cursorIndex, int position) {
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index 0fc2643..caadfdd 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -45,6 +45,8 @@
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
+import android.view.ViewStub;
 import android.view.ContextMenu.ContextMenuInfo;
 import android.widget.AdapterView;
 import android.widget.GridView;
@@ -67,6 +69,8 @@
     private AddNewBookmark          mAddHeader;
     private boolean                 mCanceled = false;
     private boolean                 mCreateShortcut;
+    private boolean                 mMostVisited;
+    private View                    mEmptyView;
     // XXX: There is no public string defining this intent so if Home changes
     // the value, we have to update this string.
     private static final String     INSTALL_SHORTCUT =
@@ -105,12 +109,18 @@
             sendBroadcast(send);
             break;
         case R.id.delete_context_menu_id:
-            displayRemoveBookmarkDialog(i.position);
+            if (mMostVisited) {
+                Browser.deleteFromHistory(getContentResolver(),
+                        getUrl(i.position));
+                refreshList();
+            } else {
+                displayRemoveBookmarkDialog(i.position);
+            }
             break;
         case R.id.new_window_context_menu_id:
             openInNewWindow(i.position);
             break;
-        case R.id.send_context_menu_id:
+        case R.id.share_link_context_menu_id:
             Browser.sendString(BrowserBookmarksPage.this, getUrl(i.position));
             break;
         case R.id.copy_url_context_menu_id:
@@ -122,6 +132,19 @@
             Toast.makeText(this, R.string.homepage_set,
                     Toast.LENGTH_LONG).show();
             break;
+        // Only for the Most visited page
+        case R.id.save_to_bookmarks_menu_id:
+            HistoryItem historyItem = ((HistoryItem) i.targetView);
+            // If the site is bookmarked, the item becomes remove from
+            // bookmarks.
+            if (historyItem.isBookmark()) {
+                Bookmarks.removeFromBookmarks(this, getContentResolver(),
+                            historyItem.getUrl());
+            } else {
+                Browser.saveBookmark(this, historyItem.getName(),
+                        historyItem.getUrl());
+            }
+            break;
         default:
             return super.onContextItemSelected(item);
         }
@@ -135,9 +158,13 @@
                     (AdapterView.AdapterContextMenuInfo) menuInfo;
 
             MenuInflater inflater = getMenuInflater();
-            inflater.inflate(R.menu.bookmarkscontext, menu);
+            if (mMostVisited) {
+                inflater.inflate(R.menu.historycontext, menu);
+            } else {
+                inflater.inflate(R.menu.bookmarkscontext, menu);
+            }
 
-            if (0 == i.position) {
+            if (0 == i.position && !mMostVisited) {
                 menu.setGroupVisible(R.id.CONTEXT_MENU, false);
                 if (mAddHeader == null) {
                     mAddHeader = new AddNewBookmark(BrowserBookmarksPage.this);
@@ -149,7 +176,17 @@
                 menu.setHeaderView(mAddHeader);
                 return;
             }
-            menu.setGroupVisible(R.id.ADD_MENU, false);
+            if (mMostVisited) {
+                if ((!mGridMode && ((HistoryItem) i.targetView).isBookmark())
+                        || mBookmarksAdapter.getIsBookmark(i.position)) {
+                    MenuItem item = menu.findItem(
+                            R.id.save_to_bookmarks_menu_id);
+                    item.setTitle(R.string.remove_from_bookmarks);
+                }
+            } else {
+                // The historycontext menu has no ADD_MENU group.
+                menu.setGroupVisible(R.id.ADD_MENU, false);
+            }
             if (mMaxTabsOpen) {
                 menu.findItem(R.id.new_window_context_menu_id).setVisible(
                         false);
@@ -181,11 +218,18 @@
             mCreateShortcut = true;
         }
         mMaxTabsOpen = getIntent().getBooleanExtra("maxTabsOpen", false);
+        mMostVisited = getIntent().getBooleanExtra("mostVisited", false);
 
-        setTitle(R.string.browser_bookmarks_page_bookmarks_text);
+        if (mCreateShortcut) {
+            setTitle(R.string.browser_bookmarks_page_bookmarks_text);
+        }
         mBookmarksAdapter = new BrowserBookmarksAdapter(this,
                         getIntent().getStringExtra("url"),
-                        getIntent().getStringExtra("title"), mCreateShortcut);
+                        getIntent().getStringExtra("title"), mCreateShortcut,
+                        mMostVisited);
+        if (mMostVisited) {
+            mEmptyView = new ViewStub(this, R.layout.empty_history);
+        }
         switchViewMode(true);
     }
 
@@ -209,6 +253,9 @@
                 mGridPage.setFocusableInTouchMode(true);
                 mGridPage.setSelector(android.R.drawable.gallery_thumb);
                 mGridPage.setVerticalSpacing(10);
+                if (mMostVisited) {
+                    mGridPage.setEmptyView(mEmptyView);
+                }
                 if (!mCreateShortcut) {
                     mGridPage.setOnCreateContextMenuListener(this);
                 }
@@ -226,6 +273,9 @@
                 listView.setDrawSelectorOnTop(false);
                 listView.setVerticalScrollBarEnabled(true);
                 listView.setOnItemClickListener(mListener);
+                if (mMostVisited) {
+                    listView.setEmptyView(mEmptyView);
+                }
 
                 if (!mCreateShortcut) {
                     listView.setOnCreateContextMenuListener(this);
@@ -233,6 +283,10 @@
             }
             setContentView(mVerticalList);
         }
+        if (mMostVisited) {
+            addContentView(mEmptyView, new LayoutParams(
+                    LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
+        }
     }
 
     private static final int SAVE_CURRENT_PAGE = 1000;
@@ -254,7 +308,7 @@
                 return;
             }
             if (!mCreateShortcut) {
-                if (0 == position) {
+                if (0 == position && !mMostVisited) {
                     // XXX: Work-around for a framework issue.
                     mHandler.sendEmptyMessage(SAVE_CURRENT_PAGE);
                 } else {
@@ -366,6 +420,9 @@
         if (!mCreateShortcut) {
             MenuInflater inflater = getMenuInflater();
             inflater.inflate(R.menu.bookmarks, menu);
+            // Most visited page does not have an option to bookmark the last
+            // viewed page.
+            menu.findItem(R.id.new_context_menu_id).setVisible(!mMostVisited);
             return true;
         }
         return result;
@@ -373,6 +430,10 @@
 
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
+        if (mBookmarksAdapter.getCount() == 0) {
+            // No need to show the menu if there are no items.
+            return false;
+        }
         menu.findItem(R.id.switch_mode_menu_id).setTitle(
                 mGridMode ? R.string.switch_to_list
                 : R.string.switch_to_thumbnails);
diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java
index 335d8fe..cb8340e 100644
--- a/src/com/android/browser/BrowserHistoryPage.java
+++ b/src/com/android/browser/BrowserHistoryPage.java
@@ -236,7 +236,7 @@
             case R.id.share_link_context_menu_id:
                 Browser.sendString(this, url);
                 return true;
-            case R.id.copy_context_menu_id:
+            case R.id.copy_url_context_menu_id:
                 copy(url);
                 return true;
             case R.id.delete_context_menu_id:
diff --git a/src/com/android/browser/CombinedBookmarkHistoryActivity.java b/src/com/android/browser/CombinedBookmarkHistoryActivity.java
index 26fd1ee..7162c88 100644
--- a/src/com/android/browser/CombinedBookmarkHistoryActivity.java
+++ b/src/com/android/browser/CombinedBookmarkHistoryActivity.java
@@ -91,8 +91,12 @@
         bookmarksIntent.putExtras(extras);
         createTab(bookmarksIntent, R.string.tab_bookmarks, BOOKMARKS_TAB);
 
-        Intent visitedIntent = new Intent(this, MostVisitedActivity.class);
-        visitedIntent.putExtras(extras);
+        Intent visitedIntent = new Intent(this, BrowserBookmarksPage.class);
+        // Need to copy extras so the bookmarks activity and this one will be
+        // different
+        Bundle visitedExtras = new Bundle(extras);
+        visitedExtras.putBoolean("mostVisited", true);
+        visitedIntent.putExtras(visitedExtras);
         createTab(visitedIntent, R.string.tab_most_visited, VISITED_TAB);
 
         Intent historyIntent = new Intent(this, BrowserHistoryPage.class);
