diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index d4d1c0d..f92272f 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -170,22 +170,6 @@
         // TODO: Figure out what to do here (if anything?)
     }
 
-    long getFolderId() {
-        LoaderManager manager = getLoaderManager();
-        BookmarksLoader loader =
-                (BookmarksLoader) ((Loader<?>)manager.getLoader(LOADER_BOOKMARKS));
-
-        Uri uri = loader.getUri();
-        if (uri != null) {
-            try {
-                return ContentUris.parseId(uri);
-            } catch (NumberFormatException nfx) {
-                return -1;
-            }
-        }
-        return -1;
-    }
-
     @Override
     public boolean onContextItemSelected(MenuItem item) {
         BookmarkContextMenuInfo i = (BookmarkContextMenuInfo)item.getMenuInfo();
diff --git a/src/com/android/browser/CombinedBookmarkHistoryView.java b/src/com/android/browser/CombinedBookmarkHistoryView.java
index 1fdc260..785b2cd 100644
--- a/src/com/android/browser/CombinedBookmarkHistoryView.java
+++ b/src/com/android/browser/CombinedBookmarkHistoryView.java
@@ -312,7 +312,7 @@
             mUiController.onUrlSelected(settings.getHomePage(), false);
             return true;
         case R.id.add_bookmark:
-            mUiController.bookmarkCurrentPage(mBookmarks.getFolderId(), false);
+            mUiController.bookmarkCurrentPage(false);
             return true;
         case R.id.preferences_menu_id:
             Intent intent = new Intent(mActivity, BrowserPreferencesPage.class);
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 986b617..9472b41 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -1555,7 +1555,7 @@
                 break;
 
             case R.id.add_bookmark_menu_id:
-                bookmarkCurrentPage(AddBookmarkPage.DEFAULT_FOLDER_ID, false);
+                bookmarkCurrentPage(false);
                 break;
 
             case R.id.stop_reload_menu_id:
@@ -1907,7 +1907,7 @@
      *          existing bookmark.
      */
     @Override
-    public void bookmarkCurrentPage(long folderId, boolean canBeAnEdit) {
+    public void bookmarkCurrentPage(boolean canBeAnEdit) {
         Intent i = new Intent(mActivity,
                 AddBookmarkPage.class);
         WebView w = getCurrentTopWebView();
@@ -1926,8 +1926,6 @@
                 createScreenshot(w, getDesiredThumbnailWidth(mActivity),
                 getDesiredThumbnailHeight(mActivity)));
         i.putExtra(BrowserContract.Bookmarks.FAVICON, w.getFavicon());
-        i.putExtra(BrowserContract.Bookmarks.PARENT,
-                folderId);
         if (canBeAnEdit) {
             i.putExtra(AddBookmarkPage.CHECK_FOR_DUPE, true);
         }
diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java
index 91709cc..69f6949 100644
--- a/src/com/android/browser/TitleBarXLarge.java
+++ b/src/com/android/browser/TitleBarXLarge.java
@@ -165,8 +165,7 @@
         } else if (mForwardButton == v) {
             mUiController.getCurrentTopWebView().goForward();
         } else if (mStar == v) {
-            mUiController.bookmarkCurrentPage(
-                    AddBookmarkPage.DEFAULT_FOLDER_ID, true);
+            mUiController.bookmarkCurrentPage(true);
         } else if (mAllButton == v) {
             mUiController.bookmarksOrHistoryPicker(false);
         } else if (mSearchButton == v) {
diff --git a/src/com/android/browser/UiController.java b/src/com/android/browser/UiController.java
index 4fc37af..05eaf8e 100644
--- a/src/com/android/browser/UiController.java
+++ b/src/com/android/browser/UiController.java
@@ -57,7 +57,7 @@
 
     void stopLoading();
 
-    void bookmarkCurrentPage(long folderId, boolean canBeAnEdit);
+    void bookmarkCurrentPage(boolean canBeAnEdit);
 
     void bookmarksOrHistoryPicker(boolean openHistory);
 
