diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 4a2f95d..fa4d3b1 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -212,6 +212,15 @@
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.TAB" />
             </intent-filter>
+
+            <intent-filter>
+                <action android:name="android.intent.action.SEARCH" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+
+            <meta-data android:name="android.app.searchable"
+                android:resource="@xml/searchable"
+            />
         </activity>
         
         <activity android:name=".activities.ContactSelectionActivity"
@@ -291,16 +300,7 @@
 
         <!-- The contacts search/filter UI -->
         <activity-alias android:name="SearchResultsActivity"
-            android:targetActivity=".activities.ContactSearchActivity"
-        >
-            <intent-filter>
-                <action android:name="android.intent.action.SEARCH" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-
-            <meta-data android:name="android.app.searchable"
-                android:resource="@xml/searchable"
-            />
+            android:targetActivity=".activities.ContactBrowserActivity">
         </activity-alias>
 
         <!-- Used to set options -->
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index ab6576e..aa75414 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -172,6 +172,16 @@
         mHasActionBar = getWindow().hasFeature(Window.FEATURE_ACTION_BAR);
         mContactContentDisplayed = findViewById(R.id.detail_container) != null;
 
+        Uri contactUri = null;
+        if (mRequest.getActionCode() == ContactsRequest.ACTION_VIEW_CONTACT) {
+            contactUri = mRequest.getContactUri();
+            if (!mContactContentDisplayed) {
+                startActivity(new Intent(Intent.ACTION_VIEW, contactUri));
+                finish();
+                return;
+            }
+        }
+
         if (mHasActionBar) {
             mActionBarAdapter = new ActionBarAdapter(this);
             mActionBarAdapter.onCreate(savedState, mRequest, getActionBar());
@@ -180,7 +190,10 @@
             // TODO: request may ask for FREQUENT - set the filter accordingly
         }
 
-        configureListFragment();
+        configureListFragment(contactUri);
+        if (contactUri != null) {
+            setSelectedContactUri(contactUri);
+        }
 
         if (mContactContentDisplayed) {
             setupContactDetailFragment(mListFragment.getSelectedContactUri());
@@ -225,7 +238,7 @@
         return TextUtils.isEmpty(uriString) ? null : Uri.parse(uriString);
     }
 
-    private void configureListFragment() {
+    private void configureListFragment(Uri selectedContactUri) {
         boolean searchMode = mSearchMode;
         if (mHasActionBar) {
             searchMode = mActionBarAdapter.isSearchMode();
@@ -270,12 +283,18 @@
             }
         }
 
-        if (mListFragment.getSelectedContactUri() == null) {
-            Uri defaultUri = getDefaultSelectedContactUri();
-            if (defaultUri != null) {
-                mListFragment.setSelectedContactUri(defaultUri);
-                mListFragment.requestSelectionOnScreen(false);
-            }
+        Uri selectUri;
+        if (selectedContactUri != null) {
+            selectUri = selectedContactUri;
+        } else if (mListFragment.getSelectedContactUri() == null) {
+            selectUri = getDefaultSelectedContactUri();
+        } else {
+            selectUri = null;
+        }
+
+        if (selectUri != null) {
+            mListFragment.setSelectedContactUri(selectUri);
+            mListFragment.requestSelectionOnScreen(false);
         }
 
         if (replaceList) {
@@ -403,7 +422,7 @@
      */
     @Override
     public void onAction() {
-        configureListFragment();
+        configureListFragment(null);
         setupContactDetailFragment(mListFragment.getSelectedContactUri());
     }
 
diff --git a/src/com/android/contacts/list/ContactsIntentResolver.java b/src/com/android/contacts/list/ContactsIntentResolver.java
index 0570b2c..79dc1b0 100644
--- a/src/com/android/contacts/list/ContactsIntentResolver.java
+++ b/src/com/android/contacts/list/ContactsIntentResolver.java
@@ -183,7 +183,8 @@
                 newIntent.setData(data);
                 request.setRedirectIntent(newIntent);
             } else {
-                request.setRedirectIntent(new Intent(Intent.ACTION_VIEW, data));
+                request.setActionCode(ContactsRequest.ACTION_VIEW_CONTACT);
+                request.setContactUri(data);
             }
         } else if (Intents.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED.equals(action)) {
             request.setRedirectIntent(new Intent(Intent.ACTION_CALL_PRIVILEGED, intent.getData()));
diff --git a/src/com/android/contacts/list/ContactsRequest.java b/src/com/android/contacts/list/ContactsRequest.java
index 33f1685..e8ccb43 100644
--- a/src/com/android/contacts/list/ContactsRequest.java
+++ b/src/com/android/contacts/list/ContactsRequest.java
@@ -17,6 +17,7 @@
 package com.android.contacts.list;
 
 import android.content.Intent;
+import android.net.Uri;
 import android.os.Parcel;
 import android.os.Parcelable;
 
@@ -64,6 +65,9 @@
     /** Show all phone numbers and create an SMS shortcut for the picked number */
     public static final int ACTION_CREATE_SHORTCUT_SMS = 130;
 
+    /** Show all contacts and activate the specified one */
+    public static final int ACTION_VIEW_CONTACT = 140;
+
     private boolean mValid = true;
     private int mActionCode = ACTION_DEFAULT;
     private Intent mRedirectIntent;
@@ -80,6 +84,7 @@
     private String mGroupName;
     private boolean mLegacyCompatibilityMode;
     private boolean mDirectorySearchEnabled = true;
+    private Uri mContactUri;
 
     /**
      * Copies all fields.
@@ -96,6 +101,7 @@
         mGroupName = request.mGroupName;
         mLegacyCompatibilityMode = request.mLegacyCompatibilityMode;
         mDirectorySearchEnabled = request.mDirectorySearchEnabled;
+        mContactUri = request.mContactUri;
     }
 
     public static Parcelable.Creator<ContactsRequest> CREATOR = new Creator<ContactsRequest>() {
@@ -105,10 +111,11 @@
         }
 
         public ContactsRequest createFromParcel(Parcel source) {
+            ClassLoader classLoader = this.getClass().getClassLoader();
             ContactsRequest request = new ContactsRequest();
             request.mValid = source.readInt() != 0;
             request.mActionCode = source.readInt();
-            request.mRedirectIntent = source.readParcelable(this.getClass().getClassLoader());
+            request.mRedirectIntent = source.readParcelable(classLoader);
             request.mTitle = source.readCharSequence();
             request.mSearchMode = source.readInt() != 0;
             request.mQueryString = source.readString();
@@ -117,6 +124,7 @@
             request.mGroupName = source.readString();
             request.mLegacyCompatibilityMode  = source.readInt() != 0;
             request.mDirectorySearchEnabled = source.readInt() != 0;
+            request.mContactUri = source.readParcelable(classLoader);
             return request;
         }
     };
@@ -133,6 +141,7 @@
         dest.writeString(mGroupName);
         dest.writeInt(mLegacyCompatibilityMode ? 1 : 0);
         dest.writeInt(mDirectorySearchEnabled ? 1 : 0);
+        dest.writeParcelable(mContactUri, 0);
     }
 
     public int describeContents() {
@@ -230,4 +239,12 @@
     public void setDirectorySearchEnabled(boolean flag) {
         mDirectorySearchEnabled = flag;
     }
+
+    public Uri getContactUri() {
+        return mContactUri;
+    }
+
+    public void setContactUri(Uri contactUri) {
+        this.mContactUri = contactUri;
+    }
 }
