diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index eb33e5e..8d9f1fe 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -622,6 +622,12 @@
             }
 
             case BOOKMARKS_FOLDER: {
+                // Don't allow selections to be applied to the default folder
+                if (!TextUtils.isEmpty(selection) || selectionArgs != null) {
+                    throw new UnsupportedOperationException(
+                            "selections aren't supported on this URI");
+                }
+
                 // Look for an account
                 boolean useAccount = false;
                 String accountType = uri.getQueryParameter(Bookmarks.PARAM_ACCOUNT_TYPE);
@@ -643,48 +649,37 @@
                 }
                 if (!useAccount) {
                     qb.setProjectionMap(BOOKMARKS_PROJECTION_MAP);
-                    String where = Bookmarks.PARENT + "=? AND " + Bookmarks.IS_DELETED + "=0";
-                    where = DatabaseUtils.concatenateWhere(where, selection);
+                    query = qb.buildQuery(projection,
+                            Bookmarks.PARENT + "=? AND " + Bookmarks.IS_DELETED + "=0",
+                            null, null, null, sortOrder, null);
+
                     args = new String[] { Long.toString(FIXED_ID_ROOT) };
-                    if (selectionArgs != null) {
-                        args = DatabaseUtils.appendSelectionArgs(args, selectionArgs);
-                    }
-                    query = qb.buildQuery(projection, where, null, null, sortOrder, null);
                 } else {
                     qb.setProjectionMap(BOOKMARKS_PROJECTION_MAP);
-                    String where = Bookmarks.ACCOUNT_TYPE + "=? AND " + Bookmarks.ACCOUNT_NAME + "=? " +
-                            "AND parent = " +
-                            "(SELECT _id FROM " + TABLE_BOOKMARKS + " WHERE " +
-                            ChromeSyncColumns.SERVER_UNIQUE + "=" +
-                            "'" + ChromeSyncColumns.FOLDER_NAME_BOOKMARKS_BAR + "' " +
-                            "AND account_type = ? AND account_name = ?) " +
-                            "AND " + Bookmarks.IS_DELETED + "=0";
-                    where = DatabaseUtils.concatenateWhere(where, selection);
                     String bookmarksBarQuery = qb.buildQuery(projection,
-                            selection, null, null, null, null);
-                    args = new String[] {accountType, accountName,
-                            accountType, accountName};
-                    if (selectionArgs != null) {
-                        args = DatabaseUtils.appendSelectionArgs(args, selectionArgs);
-                    }
+                            Bookmarks.ACCOUNT_TYPE + "=? AND " + Bookmarks.ACCOUNT_NAME + "=? " +
+                                    "AND parent = " +
+                                        "(SELECT _id FROM " + TABLE_BOOKMARKS + " WHERE " +
+                                        ChromeSyncColumns.SERVER_UNIQUE + "=" +
+                                        "'" + ChromeSyncColumns.FOLDER_NAME_BOOKMARKS_BAR + "' " +
+                                        "AND account_type = ? AND account_name = ?) " +
+                                    "AND " + Bookmarks.IS_DELETED + "=0",
+                            null, null, null, null, null);
 
-                    where = Bookmarks.ACCOUNT_TYPE + "=? AND " + Bookmarks.ACCOUNT_NAME + "=?" +
-                            " AND " + ChromeSyncColumns.SERVER_UNIQUE + "=?";
-                    where = DatabaseUtils.concatenateWhere(where, selection);
                     qb.setProjectionMap(OTHER_BOOKMARKS_PROJECTION_MAP);
                     String otherBookmarksQuery = qb.buildQuery(projection,
-                            where, null, null, null, null);
+                            Bookmarks.ACCOUNT_TYPE + "=? AND " + Bookmarks.ACCOUNT_NAME + "=?" +
+                                    " AND " + ChromeSyncColumns.SERVER_UNIQUE + "=?",
+                            null, null, null, null, null);
 
                     query = qb.buildUnionQuery(
                             new String[] { bookmarksBarQuery, otherBookmarksQuery },
                             sortOrder, limit);
 
-                    args = DatabaseUtils.appendSelectionArgs(args, new String[] {
+                    args = new String[] {
+                            accountType, accountName, accountType, accountName,
                             accountType, accountName, ChromeSyncColumns.FOLDER_NAME_OTHER_BOOKMARKS,
-                            });
-                    if (selectionArgs != null) {
-                        args = DatabaseUtils.appendSelectionArgs(args, selectionArgs);
-                    }
+                            };
                 }
 
                 Cursor cursor = db.rawQuery(query, args);
