diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index d293247..5ce7df4 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -272,12 +272,12 @@
                 <category android:name="android.intent.category.DEFAULT" />
                 <data android:mimeType="vnd.android.cursor.dir/contact" android:host="com.android.contacts" />
             </intent-filter>
+
         </activity>
 
         <!-- The contacts search/filter UI -->
-        <activity android:name="SearchResultsActivity"
-            android:theme="@style/TallTitleBarTheme"
-            android:label="@string/contactsList"
+        <activity-alias android:name="SearchResultsActivity"
+            android:targetActivity="ContactsSearchActivity"
         >
             <intent-filter>
                 <action android:name="android.intent.action.SEARCH" />
@@ -287,7 +287,7 @@
             <meta-data android:name="android.app.searchable"
                 android:resource="@xml/searchable"
             />
-        </activity>
+        </activity-alias>
 
         <!-- Used to select display and sync groups -->
         <activity android:name=".ui.ContactsPreferencesActivity" android:label="@string/displayGroups" />
diff --git a/res/layout/contacts_list_search_results.xml b/res/layout/contacts_list_search_results.xml
deleted file mode 100644
index 7053cb6..0000000
--- a/res/layout/contacts_list_search_results.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<LinearLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/pinned_header_list_layout"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:orientation="vertical"
-        >
-
-    <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            android:background="@*android:drawable/title_bar_medium"
-            android:paddingLeft="10dip"
-            android:paddingRight="10dip"
-            android:gravity="center_vertical"
-            >
-
-        <TextView
-            android:id="@+id/search_results_for"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="@string/titleJoinContactDataWith"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:shadowColor="#BB000000"
-            android:shadowRadius="2.75"
-        />
-
-        <TextView
-            android:id="@+id/search_results_found"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="-2dip"
-            android:textAppearance="?android:attr/textAppearanceSmall"
-        />
-
-    </LinearLayout>
-
-    <view
-        class="com.android.contacts.ContactEntryListView"
-        android:id="@android:id/list"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:fastScrollEnabled="true"
-    />
-
-    <include layout="@layout/contacts_list_empty"/>
-
-</LinearLayout>
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index 74a7a13..2801618 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -212,13 +212,10 @@
 
                 fragment.setDisplayWithPhonesOnlyOption(mRequest.getDisplayWithPhonesOnlyOption());
 
-                fragment.setVisibleContactsRestrictionEnabled(
-                        !mRequest.isSearchResultsMode()
-                        && mRequest.getDisplayOnlyVisible());
+                fragment.setVisibleContactsRestrictionEnabled(mRequest.getDisplayOnlyVisible());
 
                 fragment.setContextMenuAdapter(new ContactBrowseListContextMenuAdapter(fragment));
                 fragment.setSearchMode(mRequest.isSearchMode());
-                fragment.setSearchResultsMode(mRequest.isSearchResultsMode());
                 fragment.setQueryString(mRequest.getQueryString());
                 fragment.setDirectorySearchEnabled(mRequest.isDirectorySearchEnabled());
                 mListFragment = fragment;
@@ -336,10 +333,6 @@
     }
 
     private final class ContactBrowserActionListener implements OnContactBrowserActionListener {
-        public void onSearchAllContactsAction(String queryString) {
-            searchAllContacts(queryString, false);
-        }
-
         public void onViewContactAction(Uri contactLookupUri) {
             startActivity(new Intent(Intent.ACTION_VIEW, contactLookupUri));
         }
@@ -392,10 +385,6 @@
     }
 
     private final class ContactPickerActionListener implements OnContactPickerActionListener {
-        public void onSearchAllContactsAction(String queryString) {
-            searchAllContacts(queryString, true);
-        }
-
         public void onCreateNewContactAction() {
             Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
             startActivityAndForwardResult(intent);
@@ -415,10 +404,6 @@
 
     private final class PhoneNumberPickerActionListener implements
             OnPhoneNumberPickerActionListener {
-        public void onSearchAllContactsAction(String queryString) {
-            searchAllContacts(queryString, true);
-        }
-
         public void onPickPhoneNumberAction(Uri dataUri) {
             Intent intent = new Intent();
             setResult(RESULT_OK, intent.setData(dataUri));
@@ -433,10 +418,6 @@
 
     private final class PostalAddressPickerActionListener implements
             OnPostalAddressPickerActionListener {
-        public void onSearchAllContactsAction(String queryString) {
-            searchAllContacts(queryString, true);
-        }
-
         public void onPickPostalAddressAction(Uri dataUri) {
             Intent intent = new Intent();
             setResult(RESULT_OK, intent.setData(dataUri));
@@ -531,27 +512,6 @@
         }
     }
 
-    /**
-     * Starts a new activity that will run a search query and display search results.
-     */
-    protected void searchAllContacts(String queryString, boolean returnResult) {
-        String query = mListFragment.getQueryString();
-        if (TextUtils.isEmpty(query)) {
-            return;
-        }
-
-        Intent intent = new Intent(this, SearchResultsActivity.class);
-        intent.setAction(Intent.ACTION_SEARCH);
-        intent.putExtra(SearchManager.QUERY, query);
-        intent.putExtra(ContactsSearchManager.ORIGINAL_REQUEST_KEY, mRequest);
-
-        if (returnResult) {
-            startActivityForResult(intent, SUBACTIVITY_SEARCH);
-        } else {
-            startActivity(intent);
-        }
-    }
-
     @Override
     protected Dialog onCreateDialog(int id, Bundle bundle) {
         switch (id) {
@@ -782,8 +742,7 @@
      */
     @Override
     public boolean dispatchKeyEvent(KeyEvent event) {
-        if (!mSearchInitiated && !mRequest.isSearchMode()
-                && !mRequest.isSearchResultsMode()) {
+        if (!mSearchInitiated && !mRequest.isSearchMode()) {
             int unicodeChar = event.getUnicodeChar();
             if (unicodeChar != 0) {
                 mSearchInitiated = true;
diff --git a/src/com/android/contacts/SearchResultsActivity.java b/src/com/android/contacts/SearchResultsActivity.java
deleted file mode 100644
index 09f0014..0000000
--- a/src/com/android/contacts/SearchResultsActivity.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2007 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.contacts;
-
-/**
- * The activity that displays the list of contact search results.  We need a separate
- * class because it uses a different theme from {@link ContactsListActivity}.
- */
-public class SearchResultsActivity extends ContactsListActivity {
-}
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index 05f2364..4d7be3f 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -32,8 +32,6 @@
     protected void prepareEmptyView() {
         if (isSearchMode()) {
             return;
-        } else if (isSearchResultsMode()) {
-            setEmptyText(R.string.noMatchingContacts);
         } else if (isSyncActive()) {
             if (hasIccCard()) {
                 setEmptyText(R.string.noContactsHelpTextWithSync);
@@ -57,10 +55,6 @@
         mListener.onCreateNewContactAction();
     }
 
-    public void searchAllContacts() {
-        mListener.onSearchAllContactsAction((String)null);
-    }
-
     public void viewContact(Uri contactUri) {
         mListener.onViewContactAction(contactUri);
     }
diff --git a/src/com/android/contacts/list/ContactEntryListAdapter.java b/src/com/android/contacts/list/ContactEntryListAdapter.java
index 3f42f50..dc75659 100644
--- a/src/com/android/contacts/list/ContactEntryListAdapter.java
+++ b/src/com/android/contacts/list/ContactEntryListAdapter.java
@@ -56,7 +56,6 @@
 
     private String mQueryString;
     private boolean mSearchMode;
-    private boolean mSearchResultsMode;
     private boolean mDirectorySearchEnabled;
 
     private boolean mLoading = true;
@@ -124,14 +123,6 @@
         mSearchMode = flag;
     }
 
-    public boolean isSearchResultsMode() {
-        return mSearchResultsMode;
-    }
-
-    public void setSearchResultsMode(boolean searchResultsMode) {
-        mSearchResultsMode = searchResultsMode;
-    }
-
     public String getQueryString() {
         return mQueryString;
     }
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index c4ed0d7..1b3289d 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -86,7 +86,6 @@
     private boolean mSectionHeaderDisplayEnabled;
     private boolean mPhotoLoaderEnabled;
     private boolean mSearchMode;
-    private boolean mSearchResultsMode;
     private boolean mAizyEnabled;
     private String mQueryString;
     private boolean mDirectorySearchEnabled;
@@ -406,17 +405,6 @@
         return mSearchMode;
     }
 
-    public void setSearchResultsMode(boolean flag) {
-        mSearchResultsMode = flag;
-        if (mAdapter != null) {
-            mAdapter.setSearchResultsMode(flag);
-        }
-    }
-
-    public boolean isSearchResultsMode() {
-        return mSearchResultsMode;
-    }
-
     public String getQueryString() {
         return mQueryString;
     }
@@ -504,7 +492,6 @@
         boolean searchMode = isSearchMode();
         mAdapter.setSearchMode(searchMode);
         mAdapter.configureDefaultPartition(searchMode, searchMode);
-        mAdapter.setSearchResultsMode(isSearchResultsMode());
         mAdapter.setPhotoLoader(mPhotoLoader);
         mListView.setAdapter(mAdapter);
 
@@ -550,7 +537,6 @@
 
         configureAizy();
         configurePhotoLoader();
-        configureSearchResultText();
     }
 
     protected void configurePhotoLoader() {
@@ -567,16 +553,6 @@
         }
     }
 
-    protected void configureSearchResultText() {
-        if (isSearchResultsMode() && mView != null) {
-            TextView titleText = (TextView)mView.findViewById(R.id.search_results_for);
-            if (titleText != null) {
-                titleText.setText(Html.fromHtml(mContext.getString(R.string.search_results_for,
-                        "<b>" + getQueryString() + "</b>")));
-            }
-        }
-    }
-
     protected void configureAdapter() {
         if (mAdapter == null) {
             return;
diff --git a/src/com/android/contacts/list/ContactPickerFragment.java b/src/com/android/contacts/list/ContactPickerFragment.java
index de978d0..166294b 100644
--- a/src/com/android/contacts/list/ContactPickerFragment.java
+++ b/src/com/android/contacts/list/ContactPickerFragment.java
@@ -134,8 +134,6 @@
     protected void prepareEmptyView() {
         if (isSearchMode()) {
             return;
-        } else if (isSearchResultsMode()) {
-            setEmptyText(R.string.noMatchingContacts);
         } else if (isSyncActive()) {
             if (mShortcutRequested) {
                 // Help text is the same no matter whether there is SIM or not.
diff --git a/src/com/android/contacts/list/ContactsIntentResolver.java b/src/com/android/contacts/list/ContactsIntentResolver.java
index 8388daa..c0e9043 100644
--- a/src/com/android/contacts/list/ContactsIntentResolver.java
+++ b/src/com/android/contacts/list/ContactsIntentResolver.java
@@ -148,7 +148,7 @@
                 }
             } else {
                 request.setQueryString(intent.getStringExtra(SearchManager.QUERY));
-                request.setSearchResultsMode(true);
+                request.setSearchMode(true);
             }
         } else if (UI.FILTER_CONTACTS_ACTION.equals(action)) {
             // When we get a FILTER_CONTACTS_ACTION, it represents search in the context
@@ -171,29 +171,7 @@
             }
 
             request.setSearchMode(true);
-//        } else if (ACTION_SEARCH_INTERNAL.equals(action)) {
-//            String originalAction = null;
-//            Bundle extras = intent.getExtras();
-//            if (extras != null) {
-//                originalAction = extras.getString(ContactsSearchManager.ORIGINAL_ACTION_EXTRA_KEY);
-//            }
-//            mShortcutAction = intent.getStringExtra(SHORTCUT_ACTION_KEY);
-//
-//            if (Intent.ACTION_INSERT_OR_EDIT.equals(originalAction)) {
-//                request.setActionCode(ContactsRequest.MODE_QUERY_PICK_TO_EDIT;
-//                mShowSearchSnippets = true;
-//                mQueryString = intent.getStringExtra(SearchManager.QUERY);
-//            } else if (mShortcutAction != null && intent.hasExtra(Insert.PHONE)) {
-//                request.setActionCode(ContactsRequest.MODE_QUERY_PICK_PHONE;
-//                mQueryMode = QUERY_MODE_TEL;
-//                mQueryString = intent.getStringExtra(Insert.PHONE);
-//            } else {
-//                request.setActionCode(ContactsRequest.MODE_QUERY_PICK;
-//                mQueryMode = QUERY_MODE_NONE;
-//                mShowSearchSnippets = true;
-//                mQueryString = intent.getStringExtra(SearchManager.QUERY);
-//            }
-//            mSearchResultsMode = true;
+
         // Since this is the filter activity it receives all intents
         // dispatched from the SearchManager for security reasons
         // so we need to re-dispatch from here to the intended target.
diff --git a/src/com/android/contacts/list/ContactsRequest.java b/src/com/android/contacts/list/ContactsRequest.java
index 5bda8e2..33f1685 100644
--- a/src/com/android/contacts/list/ContactsRequest.java
+++ b/src/com/android/contacts/list/ContactsRequest.java
@@ -69,7 +69,6 @@
     private Intent mRedirectIntent;
     private CharSequence mTitle;
     private boolean mSearchMode;
-    private boolean mSearchResultsMode;
     private String mQueryString;
 
     public static final int DISPLAY_ONLY_WITH_PHONES_PREFERENCE = 0;
@@ -91,7 +90,6 @@
         mRedirectIntent = request.mRedirectIntent;
         mTitle = request.mTitle;
         mSearchMode = request.mSearchMode;
-        mSearchResultsMode = request.mSearchResultsMode;
         mQueryString = request.mQueryString;
         mDisplayOnlyWithPhones = request.mDisplayOnlyWithPhones;
         mDisplayOnlyVisible = request.mDisplayOnlyVisible;
@@ -113,7 +111,6 @@
             request.mRedirectIntent = source.readParcelable(this.getClass().getClassLoader());
             request.mTitle = source.readCharSequence();
             request.mSearchMode = source.readInt() != 0;
-            request.mSearchResultsMode = source.readInt() != 0;
             request.mQueryString = source.readString();
             request.mDisplayOnlyWithPhones = source.readInt();
             request.mDisplayOnlyVisible = source.readInt() != 0;
@@ -130,7 +127,6 @@
         dest.writeParcelable(mRedirectIntent, 0);
         dest.writeCharSequence(mTitle);
         dest.writeInt(mSearchMode ? 1 : 0);
-        dest.writeInt(mSearchResultsMode ? 1 : 0);
         dest.writeString(mQueryString);
         dest.writeInt(mDisplayOnlyWithPhones);
         dest.writeInt(mDisplayOnlyVisible ? 1 : 0);
@@ -199,14 +195,6 @@
         mSearchMode = flag;
     }
 
-    public boolean isSearchResultsMode() {
-        return mSearchResultsMode;
-    }
-
-    public void setSearchResultsMode(boolean flag) {
-        mSearchResultsMode = flag;
-    }
-
     public String getQueryString() {
         return mQueryString;
     }
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 9289404..a89de48 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -115,11 +115,7 @@
 
     @Override
     protected View inflateView(LayoutInflater inflater, ViewGroup container) {
-        if (isSearchResultsMode()) {
-            return inflater.inflate(R.layout.contacts_list_search_results, null);
-        } else {
-            return inflater.inflate(R.layout.contacts_list_content, null);
-        }
+        return inflater.inflate(R.layout.contacts_list_content, null);
     }
 
     @Override
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index 6819a6a..14c09e6 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -109,7 +109,7 @@
         bindName(view, cursor);
         bindPresence(view, cursor);
 
-        if (isSearchMode() || isSearchResultsMode()) {
+        if (isSearchMode()) {
             bindSearchSnippet(view, cursor);
         }
     }
diff --git a/src/com/android/contacts/list/OnContactBrowserActionListener.java b/src/com/android/contacts/list/OnContactBrowserActionListener.java
index 56f9bbc..2532c84 100644
--- a/src/com/android/contacts/list/OnContactBrowserActionListener.java
+++ b/src/com/android/contacts/list/OnContactBrowserActionListener.java
@@ -23,11 +23,6 @@
 public interface OnContactBrowserActionListener  {
 
     /**
-     * Searches all contacts for the specified string an show results for browsing.
-     */
-    void onSearchAllContactsAction(String string);
-
-    /**
      * Opens the specified contact for viewing.
      */
     void onViewContactAction(Uri contactLookupUri);
diff --git a/src/com/android/contacts/list/OnContactPickerActionListener.java b/src/com/android/contacts/list/OnContactPickerActionListener.java
index 7245fbc..1216888 100644
--- a/src/com/android/contacts/list/OnContactPickerActionListener.java
+++ b/src/com/android/contacts/list/OnContactPickerActionListener.java
@@ -24,11 +24,6 @@
 public interface OnContactPickerActionListener  {
 
     /**
-     * Searches all contacts for the specified string an show results for browsing.
-     */
-    void onSearchAllContactsAction(String string);
-
-    /**
      * Creates a new contact and then returns it to the caller.
      */
     void onCreateNewContactAction();
diff --git a/src/com/android/contacts/list/OnPhoneNumberPickerActionListener.java b/src/com/android/contacts/list/OnPhoneNumberPickerActionListener.java
index 701cc78..1a90122 100644
--- a/src/com/android/contacts/list/OnPhoneNumberPickerActionListener.java
+++ b/src/com/android/contacts/list/OnPhoneNumberPickerActionListener.java
@@ -32,9 +32,4 @@
      * Returns the selected number as a shortcut intent.
      */
     void onShortcutIntentCreated(Intent intent);
-
-    /**
-     * Searches all contacts for the specified string an show results for browsing.
-     */
-    void onSearchAllContactsAction(String string);
 }
diff --git a/src/com/android/contacts/list/OnPostalAddressPickerActionListener.java b/src/com/android/contacts/list/OnPostalAddressPickerActionListener.java
index a43dfe4..6ecde61 100644
--- a/src/com/android/contacts/list/OnPostalAddressPickerActionListener.java
+++ b/src/com/android/contacts/list/OnPostalAddressPickerActionListener.java
@@ -26,9 +26,4 @@
      * Returns the selected phone number to the requester.
      */
     void onPickPostalAddressAction(Uri dataUri);
-
-    /**
-     * Searches all contacts for the specified string an show results for browsing.
-     */
-    void onSearchAllContactsAction(String string);
 }
diff --git a/src/com/android/contacts/list/PostalAddressPickerFragment.java b/src/com/android/contacts/list/PostalAddressPickerFragment.java
index 6c429f2..1f07ce2 100644
--- a/src/com/android/contacts/list/PostalAddressPickerFragment.java
+++ b/src/com/android/contacts/list/PostalAddressPickerFragment.java
@@ -74,8 +74,6 @@
     protected View inflateView(LayoutInflater inflater, ViewGroup container) {
         if (isSearchMode()) {
             return inflater.inflate(R.layout.contacts_search_content, null);
-        } else if (isSearchResultsMode()) {
-            return inflater.inflate(R.layout.contacts_list_search_results, null);
         } else {
             return inflater.inflate(R.layout.contacts_list_content, null);
         }
