diff --git a/src/com/android/browser/Bookmarks.java b/src/com/android/browser/Bookmarks.java
index a3dc919..40aaa63 100644
--- a/src/com/android/browser/Bookmarks.java
+++ b/src/com/android/browser/Bookmarks.java
@@ -162,17 +162,17 @@
      *  @param url URL of the website to be removed.
      */
     /* package */ static void removeFromBookmarks(Context context,
-            ContentResolver cr, String url) {
+            ContentResolver cr, String url, String title) {
         Cursor cursor = cr.query(
                 Browser.BOOKMARKS_URI,
                 Browser.HISTORY_PROJECTION,
-                "url = ?",
-                new String[] { url },
+                "url = ? AND title = ?",
+                new String[] { url, title },
                 null);
         boolean first = cursor.moveToFirst();
         // Should be in the database no matter what
         if (!first) {
-            throw new AssertionError("URL is not in the database!");
+            throw new AssertionError("URL is not in the database! " + url + " " + title);
         }
         // Remove from bookmarks
         WebIconDatabase.getInstance().releaseIconForPageUrl(url);
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index b441a09..faf0e6b 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -2071,6 +2071,7 @@
             currentIndex--;
         }
         mTabControl.setCurrentTab(mTabControl.getTab(currentIndex));
+        resetTitleIconAndProgress();
     }
 
     private void goBackOnePageOrQuit() {
@@ -2146,8 +2147,14 @@
                 mMenuIsDown = true;
                 break;
             case KeyEvent.KEYCODE_SPACE:
-                // Browser's hidden shortcut key. Don't call super so that
-                // search won't be triggered.
+                // WebView/WebTextView handle the keys in the KeyDown. As
+                // the Activity's shortcut keys are only handled when WebView
+                // doesn't, have to do it in onKeyDown instead of onKeyUp.
+                if (event.isShiftPressed()) {
+                    getTopWindow().pageUp(false);
+                } else {
+                    getTopWindow().pageDown(false);
+                }
                 return true;
             case KeyEvent.KEYCODE_BACK:
                 if (event.getRepeatCount() == 0) {
@@ -2169,13 +2176,6 @@
             case KeyEvent.KEYCODE_MENU:
                 mMenuIsDown = false;
                 break;
-            case KeyEvent.KEYCODE_SPACE:
-                if (event.isShiftPressed()) {
-                    getTopWindow().pageUp(false);
-                } else {
-                    getTopWindow().pageDown(false);
-                }
-                return true;
             case KeyEvent.KEYCODE_BACK:
                 if (event.isTracking() && !event.isCanceled()) {
                     if (mCustomView != null) {
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java
index 36af1fc..6b464cc 100644
--- a/src/com/android/browser/BrowserBookmarksAdapter.java
+++ b/src/com/android/browser/BrowserBookmarksAdapter.java
@@ -188,7 +188,8 @@
         }
         mCursor.moveToPosition(position- mExtraOffset);
         String url = mCursor.getString(Browser.HISTORY_PROJECTION_URL_INDEX);
-        Bookmarks.removeFromBookmarks(null, mContentResolver, url);
+        String title = mCursor.getString(Browser.HISTORY_PROJECTION_TITLE_INDEX);
+        Bookmarks.removeFromBookmarks(null, mContentResolver, url, title);
         refreshList();
     }
     
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index 23fcc5a..019806c 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -154,7 +154,7 @@
             // If the site is bookmarked, the item becomes remove from
             // bookmarks.
             if (isBookmark) {
-                Bookmarks.removeFromBookmarks(this, getContentResolver(), url);
+                Bookmarks.removeFromBookmarks(this, getContentResolver(), url, name);
             } else {
                 Browser.saveBookmark(this, name, url);
             }
diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java
index d364c9c..9c9dc60 100644
--- a/src/com/android/browser/BrowserHistoryPage.java
+++ b/src/com/android/browser/BrowserHistoryPage.java
@@ -238,7 +238,7 @@
             case R.id.save_to_bookmarks_menu_id:
                 if (historyItem.isBookmark()) {
                     Bookmarks.removeFromBookmarks(this, getContentResolver(),
-                            url);
+                            url, title);
                 } else {
                     Browser.saveBookmark(this, title, url);
                 }
diff --git a/src/com/android/browser/HistoryItem.java b/src/com/android/browser/HistoryItem.java
index e8f15b1..9d6dec7 100644
--- a/src/com/android/browser/HistoryItem.java
+++ b/src/com/android/browser/HistoryItem.java
@@ -49,7 +49,7 @@
                             mContext.getContentResolver(), mUrl, getName(), true);
                 } else {
                     Bookmarks.removeFromBookmarks(mContext,
-                            mContext.getContentResolver(), mUrl);
+                            mContext.getContentResolver(), mUrl, getName());
                 }
             }
         };
