diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index af2fbfa..17a98ac 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -40,9 +40,6 @@
 import android.view.Window;
 
 import org.chromium.base.VisibleForTesting;
-import com.android.browser.R;
-import com.android.browser.search.DefaultSearchEngine;
-import com.android.browser.search.SearchEngine;
 import com.android.browser.stub.NullController;
 
 import java.util.Locale;
@@ -108,17 +105,6 @@
             bar.hide();
         }
 
-        // If this was a web search request, pass it on to the default web
-        // search provider and finish this activity.
-        /*
-        SearchEngine searchEngine = BrowserSettings.getInstance().getSearchEngine();
-        boolean result = IntentHandler.handleWebSearchIntent(this, null, getIntent());
-        if (result && (searchEngine instanceof DefaultSearchEngine)) {
-            finish();
-            return;
-        }
-        */
-
         mActivityScheduler = EngineInitializer.onActivityCreate(BrowserActivity.this);
 
         Thread.setDefaultUncaughtExceptionHandler(new CrashLogExceptionHandler(this));
diff --git a/src/com/android/browser/search/DefaultSearchEngine.java b/src/com/android/browser/search/DefaultSearchEngine.java
deleted file mode 100644
index 41bd238..0000000
--- a/src/com/android/browser/search/DefaultSearchEngine.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (C) 2010 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.search;
-
-import android.app.PendingIntent;
-import android.app.SearchManager;
-import android.app.SearchableInfo;
-import android.content.ActivityNotFoundException;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ActivityInfo;
-import android.content.pm.PackageManager;
-import android.database.Cursor;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.util.Log;
-
-import com.android.browser.platformsupport.Browser;
-import com.android.browser.reflect.ReflectHelper;
-
-public class DefaultSearchEngine implements SearchEngine {
-
-    private static final String TAG = "DefaultSearchEngine";
-
-    private final SearchableInfo mSearchable;
-
-    private final CharSequence mLabel;
-
-    private DefaultSearchEngine(Context context, SearchableInfo searchable) {
-        mSearchable = searchable;
-        mLabel = loadLabel(context, mSearchable.getSearchActivity());
-    }
-
-    public static DefaultSearchEngine create(Context context) {
-        SearchManager searchManager =
-                (SearchManager) context.getSystemService(Context.SEARCH_SERVICE);
-        ComponentName name = (ComponentName) ReflectHelper.invokeMethod(
-                              searchManager, "getWebSearchActivity", null, null);
-
-        if (name == null) return null;
-        SearchableInfo searchable = searchManager.getSearchableInfo(name);
-        if (searchable == null) return null;
-        return new DefaultSearchEngine(context, searchable);
-    }
-
-    private CharSequence loadLabel(Context context, ComponentName activityName) {
-        PackageManager pm = context.getPackageManager();
-        try {
-            ActivityInfo ai = pm.getActivityInfo(activityName, 0);
-            return ai.loadLabel(pm);
-        } catch (PackageManager.NameNotFoundException ex) {
-            Log.e(TAG, "Web search activity not found: " + activityName);
-            return null;
-        }
-    }
-
-    public String getName() {
-        String packageName = mSearchable.getSearchActivity().getPackageName();
-        // Use "google" as name to avoid showing Google twice (app + OpenSearch)
-        if ("com.google.android.googlequicksearchbox".equals(packageName)) {
-            return SearchEngine.GOOGLE;
-        } else if ("com.android.quicksearchbox".equals(packageName)) {
-            return SearchEngine.GOOGLE;
-        } else {
-            return packageName;
-        }
-    }
-
-    public CharSequence getLabel() {
-        return mLabel;
-    }
-
-    public void startSearch(Context context, String query,
-                            Bundle appData, String extraData) {
-        try {
-            Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
-            intent.setComponent(mSearchable.getSearchActivity());
-            intent.addCategory(Intent.CATEGORY_DEFAULT);
-            intent.putExtra(SearchManager.QUERY, query);
-            if (appData != null) {
-                intent.putExtra(SearchManager.APP_DATA, appData);
-            }
-            if (extraData != null) {
-                intent.putExtra(SearchManager.EXTRA_DATA_KEY, extraData);
-            }
-            intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName());
-            Intent viewIntent = new Intent(Intent.ACTION_VIEW);
-            viewIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-            viewIntent.setPackage(context.getPackageName());
-            PendingIntent pending = PendingIntent.getActivity(context, 0, viewIntent,
-                    PendingIntent.FLAG_ONE_SHOT);
-            intent.putExtra(SearchManager.EXTRA_WEB_SEARCH_PENDINGINTENT, pending);
-            context.startActivity(intent);
-        } catch (ActivityNotFoundException ex) {
-            Log.e(TAG, "Web search activity not found: " +
-                        mSearchable.getSearchActivity());
-        }
-    }
-
-    public Cursor getSuggestions(Context context, String query) {
-        SearchManager searchManager =
-                (SearchManager) context.getSystemService(Context.SEARCH_SERVICE);
-        Object[] params  = {mSearchable, query};
-        Class[] type = new Class[] {SearchableInfo.class, String.class};
-        Cursor cursor = (Cursor) ReflectHelper.invokeMethod(
-                                   searchManager, "getSuggestions", type, params);
-        return cursor;
-    }
-
-    public boolean supportsSuggestions() {
-        return !TextUtils.isEmpty(mSearchable.getSuggestAuthority());
-    }
-
-    public void close() {
-    }
-
-    @Override
-    public String toString() {
-        return "ActivitySearchEngine{" + mSearchable + "}";
-    }
-
-    @Override
-    public boolean wantsEmptyQuery() {
-        return false;
-    }
-
-}
diff --git a/src/com/android/browser/search/SearchEnginePreference.java b/src/com/android/browser/search/SearchEnginePreference.java
index a129ef1..579160e 100644
--- a/src/com/android/browser/search/SearchEnginePreference.java
+++ b/src/com/android/browser/search/SearchEnginePreference.java
@@ -18,15 +18,9 @@
 import com.android.browser.R;
 import com.android.browser.mdm.SearchEngineRestriction;
 
-import android.app.SearchManager;
-import android.content.ComponentName;
 import android.content.Context;
-import android.content.pm.ActivityInfo;
-import android.content.pm.PackageManager;
-import android.content.res.Resources;
 import android.preference.ListPreference;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.view.View;
 import android.widget.Toast;
 
@@ -42,14 +36,6 @@
         ArrayList<CharSequence> entryValues = new ArrayList<CharSequence>();
         ArrayList<CharSequence> entries = new ArrayList<CharSequence>();
 
-        SearchEngine defaultSearchEngine = SearchEngines.getDefaultSearchEngine(context);
-        String defaultSearchEngineName = null;
-        if (defaultSearchEngine != null) {
-            defaultSearchEngineName = defaultSearchEngine.getName();
-            entryValues.add(defaultSearchEngineName);
-            entries.add(defaultSearchEngine.getLabel());
-        }
-
         SearchEngineInfo managedSearchEngineInfo = SearchEngineRestriction.getInstance()
                 .getSearchEngineInfo();
 
@@ -61,10 +47,8 @@
             for (SearchEngineInfo searchEngineInfo : SearchEngines.getSearchEngineInfos(context)) {
                 String name = searchEngineInfo.getName();
                 // Skip entry if name is same as the default or the managed
-                if (!name.equals(defaultSearchEngineName)) {
-                    entryValues.add(name);
-                    entries.add(searchEngineInfo.getLabel());
-                }
+                entryValues.add(name);
+                entries.add(searchEngineInfo.getLabel());
             }
         }
 
diff --git a/src/com/android/browser/search/SearchEngines.java b/src/com/android/browser/search/SearchEngines.java
index 64497c3..9a196a6 100644
--- a/src/com/android/browser/search/SearchEngines.java
+++ b/src/com/android/browser/search/SearchEngines.java
@@ -17,7 +17,6 @@
 
 import com.android.browser.R;
 import android.content.Context;
-import android.content.res.Resources;
 import android.text.TextUtils;
 import android.util.Log;
 
@@ -29,10 +28,6 @@
 
     private static final String TAG = "SearchEngines";
 
-    public static SearchEngine getDefaultSearchEngine(Context context) {
-        return DefaultSearchEngine.create(context);
-    }
-
     public static List<SearchEngineInfo> getSearchEngineInfos(Context context) {
         ArrayList<SearchEngineInfo> searchEngineInfos = new ArrayList<SearchEngineInfo>();
         String[] searchEngines = context.getResources().getStringArray(R.array.search_engines);
@@ -46,13 +41,11 @@
 
     public static SearchEngine get(Context context, String name) {
         // TODO: cache
-        SearchEngine defaultSearchEngine = getDefaultSearchEngine(context);
-        if (TextUtils.isEmpty(name)
-                || (defaultSearchEngine != null && name.equals(defaultSearchEngine.getName()))) {
-            return defaultSearchEngine;
+        if (TextUtils.isEmpty(name)) {
+            return null;
         }
         SearchEngineInfo searchEngineInfo = getSearchEngineInfo(context, name);
-        if (searchEngineInfo == null) return defaultSearchEngine;
+        if (searchEngineInfo == null) return null;
         return new OpenSearchSearchEngine(context, searchEngineInfo);
     }
 
