diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index 81c4a2b..85b70fe 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -56,8 +56,10 @@
         @Override
         public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
             long selectedId = ListView.INVALID_ROW_ID;
-            if (data.moveToFirst()) {
-                selectedId = data.getLong(0);
+            if (data != null) {
+                if (data.moveToFirst()) {
+                    selectedId = data.getLong(0);
+                }
             }
             getAdapter().setSelectedContactId(selectedId);
             return;
diff --git a/src/com/android/contacts/list/ContactListAdapter.java b/src/com/android/contacts/list/ContactListAdapter.java
index cb1e63f..2389dfb 100644
--- a/src/com/android/contacts/list/ContactListAdapter.java
+++ b/src/com/android/contacts/list/ContactListAdapter.java
@@ -21,6 +21,7 @@
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.ContactCounts;
 import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Directory;
 import android.provider.ContactsContract.SearchSnippetColumns;
 import android.view.View;
 import android.view.ViewGroup;
@@ -146,14 +147,20 @@
      * {@link ListView} position.
      */
     public Uri getContactUri(int position) {
+        int partitionIndex = getPartitionForPosition(position);
         Cursor item = (Cursor)getItem(position);
-        return item != null ? getContactUri(item) : null;
+        return item != null ? getContactUri(partitionIndex, item) : null;
     }
 
-    public Uri getContactUri(Cursor cursor) {
+    public Uri getContactUri(int partitionIndex, Cursor cursor) {
         long contactId = cursor.getLong(CONTACT_ID_COLUMN_INDEX);
         String lookupKey = cursor.getString(CONTACT_LOOKUP_KEY_COLUMN_INDEX);
-        return Contacts.getLookupUri(contactId, lookupKey);
+        Uri uri = Contacts.getLookupUri(contactId, lookupKey);
+        if (partitionIndex != Directory.DEFAULT && partitionIndex != Directory.LOCAL_INVISIBLE) {
+            uri = uri.buildUpon().appendQueryParameter(
+                    ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(partitionIndex)).build();
+        }
+        return uri;
     }
 
     @Override
@@ -181,14 +188,15 @@
         getPhotoLoader().loadPhoto(view.getPhotoView(), photoId);
     }
 
-    protected void bindQuickContact(final ContactListItemView view, Cursor cursor) {
+    protected void bindQuickContact(
+            final ContactListItemView view, int partitionIndex, Cursor cursor) {
         long photoId = 0;
         if (!cursor.isNull(CONTACT_PHOTO_ID_COLUMN_INDEX)) {
             photoId = cursor.getLong(CONTACT_PHOTO_ID_COLUMN_INDEX);
         }
 
         QuickContactBadge quickContact = view.getQuickContact();
-        quickContact.assignContactUri(getContactUri(cursor));
+        quickContact.assignContactUri(getContactUri(partitionIndex, cursor));
         getPhotoLoader().loadPhoto(quickContact, photoId);
     }
 
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index c1bb1e8..ec261c8 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -105,7 +105,7 @@
         bindSectionHeaderAndDivider(view, position);
 
         if (isQuickContactEnabled()) {
-            bindQuickContact(view, cursor);
+            bindQuickContact(view, partition, cursor);
         } else {
             bindPhoto(view, cursor);
         }
diff --git a/src/com/android/contacts/list/JoinContactListAdapter.java b/src/com/android/contacts/list/JoinContactListAdapter.java
index 7e162db..8b636cf 100644
--- a/src/com/android/contacts/list/JoinContactListAdapter.java
+++ b/src/com/android/contacts/list/JoinContactListAdapter.java
@@ -224,7 +224,7 @@
     }
 
     @Override
-    public Uri getContactUri(Cursor cursor) {
+    public Uri getContactUri(int partitionIndex, Cursor cursor) {
         long contactId = cursor.getLong(CONTACT_ID_COLUMN_INDEX);
         String lookupKey = cursor.getString(CONTACT_LOOKUP_KEY_COLUMN_INDEX);
         return Contacts.getLookupUri(contactId, lookupKey);
diff --git a/src/com/android/contacts/list/StrequentContactListAdapter.java b/src/com/android/contacts/list/StrequentContactListAdapter.java
index c198c38..886f5b3 100644
--- a/src/com/android/contacts/list/StrequentContactListAdapter.java
+++ b/src/com/android/contacts/list/StrequentContactListAdapter.java
@@ -203,7 +203,7 @@
         }
 
         bindName(view, cursor);
-        bindQuickContact(view, cursor);
+        bindQuickContact(view, partition, cursor);
         bindPresence(view, cursor);
 
         // Make the call button visible if requested.
