diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 56d9a02..b72bdce 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -188,6 +188,9 @@
                 <category android:name="android.intent.category.DEFAULT" />
                 <data android:mimeType="vnd.android.cursor.dir/person" android:host="contacts" />
                 <data android:mimeType="vnd.android.cursor.dir/contact" android:host="com.android.contacts" />
+                <data android:mimeType="vnd.android.cursor.item/person" android:host="contacts" />
+                <data android:mimeType="vnd.android.cursor.item/contact" android:host="com.android.contacts" />
+                <data android:mimeType="vnd.android.cursor.item/raw_contact" android:host="com.android.contacts" />
             </intent-filter>
         </activity>
 
@@ -428,9 +431,6 @@
             <intent-filter android:label="@string/viewContactDesription">
                 <action android:name="android.intent.action.VIEW" />
                 <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="vnd.android.cursor.item/person" android:host="contacts" />
-                <data android:mimeType="vnd.android.cursor.item/contact" android:host="com.android.contacts" />
-                <data android:mimeType="vnd.android.cursor.item/raw_contact" android:host="com.android.contacts" />
             </intent-filter>
         </activity>
 
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index 4d56be3..5e74f49 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -178,20 +178,21 @@
             return;
         }
 
-        setTitle(mRequest.getActivityTitle());
         setContentView(R.layout.contact_browser);
-
-        mHasActionBar = getWindow().hasFeature(Window.FEATURE_ACTION_BAR);
         mContactContentDisplayed = findViewById(R.id.detail_container) != null;
 
-        if (mRequest.getActionCode() == ContactsRequest.ACTION_VIEW_CONTACT) {
-            if (!mContactContentDisplayed) {
-                startActivity(new Intent(Intent.ACTION_VIEW, mRequest.getContactUri()));
-                finish();
-                return;
-            }
+        if (mRequest.getActionCode() == ContactsRequest.ACTION_VIEW_CONTACT
+                && !mContactContentDisplayed) {
+            redirect = new Intent(this, ContactDetailActivity.class);
+            redirect.setAction(Intent.ACTION_VIEW);
+            redirect.setData(mRequest.getContactUri());
+            startActivity(redirect);
+            finish();
+            return;
         }
 
+        setTitle(mRequest.getActivityTitle());
+        mHasActionBar = getWindow().hasFeature(Window.FEATURE_ACTION_BAR);
         if (mHasActionBar) {
             mActionBarAdapter = new ActionBarAdapter(this);
             mActionBarAdapter.onCreate(savedState, mRequest, getActionBar());
diff --git a/src/com/android/contacts/activities/ContactsFrontDoor.java b/src/com/android/contacts/activities/ContactsFrontDoor.java
index d8ffd7a..e12bbf1 100644
--- a/src/com/android/contacts/activities/ContactsFrontDoor.java
+++ b/src/com/android/contacts/activities/ContactsFrontDoor.java
@@ -30,7 +30,10 @@
     public void onCreate(Bundle savedState) {
         super.onCreate(savedState);
 
+        Intent originalIntent = getIntent();
         Intent intent = new Intent();
+        intent.setAction(originalIntent.getAction());
+        intent.setDataAndType(originalIntent.getData(), originalIntent.getType());
         intent.setFlags(
                 Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
         intent.putExtra(EXTRA_FRONT_DOOR, true);
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index a1c7c3f..892341e 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -289,19 +289,17 @@
 
     private void parseSelectedContactUri() {
         if (mSelectedContactUri != null) {
-            if (!mSelectedContactUri.toString()
-                    .startsWith(Contacts.CONTENT_LOOKUP_URI.toString())) {
-                throw new IllegalStateException(
-                        "Contact list contains a non-lookup URI: " + mSelectedContactUri);
+            String directoryParam =
+                mSelectedContactUri.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY);
+            mSelectedContactDirectoryId = TextUtils.isEmpty(directoryParam) ? Directory.DEFAULT
+                    : Long.parseLong(directoryParam);
+            if (mSelectedContactUri.toString().startsWith(Contacts.CONTENT_LOOKUP_URI.toString())) {
+                mSelectedContactLookupKey = Uri.encode(
+                        mSelectedContactUri.getPathSegments().get(2));
+            } else {
+                mSelectedContactLookupKey = null;
             }
 
-            String directoryParam =
-                    mSelectedContactUri.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY);
-            mSelectedContactDirectoryId = TextUtils.isEmpty(directoryParam)
-                    ? Directory.DEFAULT
-                    : Long.parseLong(directoryParam);
-            mSelectedContactLookupKey =
-                    Uri.encode(mSelectedContactUri.getPathSegments().get(2));
         } else {
             mSelectedContactDirectoryId = Directory.DEFAULT;
             mSelectedContactLookupKey = null;
