diff --git a/src/com/android/contacts/ContactPhotoManager.java b/src/com/android/contacts/ContactPhotoManager.java
index c57583b..e61d379 100644
--- a/src/com/android/contacts/ContactPhotoManager.java
+++ b/src/com/android/contacts/ContactPhotoManager.java
@@ -627,6 +627,7 @@
                         ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT))
                         .appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
                                 String.valueOf(MAX_PHOTOS_TO_PRELOAD))
+                        .appendQueryParameter(ContactsContract.ALLOW_PROFILE, "1")
                         .build();
                 cursor = mResolver.query(uri, new String[] { Contacts.PHOTO_ID },
                         Contacts.PHOTO_ID + " NOT NULL AND " + Contacts.PHOTO_ID + "!=0",
@@ -683,7 +684,8 @@
 
             Cursor cursor = null;
             try {
-                cursor = mResolver.query(Data.CONTENT_URI,
+                cursor = mResolver.query(Data.CONTENT_URI.buildUpon()
+                        .appendQueryParameter(ContactsContract.ALLOW_PROFILE, "1").build(),
                         COLUMNS,
                         mStringBuilder.toString(),
                         mPhotoIdsAsStrings.toArray(EMPTY_STRING_ARRAY),
diff --git a/src/com/android/contacts/list/PhoneNumberListAdapter.java b/src/com/android/contacts/list/PhoneNumberListAdapter.java
index fee1064..53a9e5f 100644
--- a/src/com/android/contacts/list/PhoneNumberListAdapter.java
+++ b/src/com/android/contacts/list/PhoneNumberListAdapter.java
@@ -27,6 +27,7 @@
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.Directory;
 import android.text.TextUtils;
+import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
 
@@ -34,6 +35,7 @@
  * A cursor adapter for the {@link Phone#CONTENT_TYPE} content type.
  */
 public class PhoneNumberListAdapter extends ContactEntryListAdapter {
+    private static final String TAG = PhoneNumberListAdapter.class.getSimpleName();
 
     protected static final String[] PHONES_PROJECTION = new String[] {
         Phone._ID,                          // 0
@@ -137,11 +139,18 @@
 
     /**
      * Builds a {@link Data#CONTENT_URI} for the given cursor position.
+     *
+     * @return Uri for the data. may be null if the cursor is not ready.
      */
     public Uri getDataUri(int position) {
         Cursor cursor = ((Cursor)getItem(position));
-        long id = cursor.getLong(PHONE_ID_COLUMN_INDEX);
-        return ContentUris.withAppendedId(Data.CONTENT_URI, id);
+        if (cursor != null) {
+            long id = cursor.getLong(PHONE_ID_COLUMN_INDEX);
+            return ContentUris.withAppendedId(Data.CONTENT_URI, id);
+        } else {
+            Log.w(TAG, "Cursor was null in getDataUri() call. Returning null instead.");
+            return null;
+        }
     }
 
     @Override
diff --git a/src/com/android/contacts/list/PhoneNumberPickerFragment.java b/src/com/android/contacts/list/PhoneNumberPickerFragment.java
index b40f80a..3be55ce 100644
--- a/src/com/android/contacts/list/PhoneNumberPickerFragment.java
+++ b/src/com/android/contacts/list/PhoneNumberPickerFragment.java
@@ -21,6 +21,7 @@
 
 import android.content.Intent;
 import android.net.Uri;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -30,6 +31,8 @@
  */
 public class PhoneNumberPickerFragment extends ContactEntryListFragment<ContactEntryListAdapter>
         implements OnShortcutIntentCreatedListener {
+    private static final String TAG = PhoneNumberPickerFragment.class.getSimpleName();
+
     private OnPhoneNumberPickerActionListener mListener;
     private String mShortcutAction;
 
@@ -58,12 +61,20 @@
 
     @Override
     protected void onItemClick(int position, long id) {
+        final Uri phoneUri;
         if (!isLegacyCompatibilityMode()) {
             PhoneNumberListAdapter adapter = (PhoneNumberListAdapter)getAdapter();
-            pickPhoneNumber(adapter.getDataUri(position));
+            phoneUri = adapter.getDataUri(position);
+
         } else {
             LegacyPhoneNumberListAdapter adapter = (LegacyPhoneNumberListAdapter)getAdapter();
-            pickPhoneNumber(adapter.getPhoneUri(position));
+            phoneUri = adapter.getPhoneUri(position);
+        }
+
+        if (phoneUri != null) {
+            pickPhoneNumber(phoneUri);
+        } else {
+            Log.w(TAG, "Item at " + position + " was clicked before adapter is ready. Ignoring");
         }
     }
 
