diff --git a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
index 52570c0..8dec437 100644
--- a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
@@ -28,18 +28,17 @@
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import com.android.dialer.DialerPhoneNumber;
-import com.android.dialer.NumberAttributes;
 import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.AnnotatedCallLog;
 import com.android.dialer.calllog.datasources.CallLogDataSource;
 import com.android.dialer.calllog.datasources.CallLogMutations;
 import com.android.dialer.calllog.datasources.util.RowCombiner;
+import com.android.dialer.calllogutils.NumberAttributesConverter;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
 import com.android.dialer.common.concurrent.Annotations.LightweightExecutor;
 import com.android.dialer.phonelookup.PhoneLookup;
 import com.android.dialer.phonelookup.PhoneLookupInfo;
-import com.android.dialer.phonelookup.consolidator.PhoneLookupInfoConsolidator;
 import com.android.dialer.phonelookup.database.contract.PhoneLookupHistoryContract;
 import com.android.dialer.phonelookup.database.contract.PhoneLookupHistoryContract.PhoneLookupHistory;
 import com.google.common.collect.ImmutableMap;
@@ -573,23 +572,8 @@
   }
 
   private void updateContentValues(ContentValues contentValues, PhoneLookupInfo phoneLookupInfo) {
-    PhoneLookupInfoConsolidator phoneLookupInfoConsolidator =
-        new PhoneLookupInfoConsolidator(phoneLookupInfo);
     contentValues.put(
         AnnotatedCallLog.NUMBER_ATTRIBUTES,
-        NumberAttributes.newBuilder()
-            .setName(phoneLookupInfoConsolidator.getName())
-            .setPhotoUri(phoneLookupInfoConsolidator.getPhotoUri())
-            .setPhotoId(phoneLookupInfoConsolidator.getPhotoId())
-            .setLookupUri(phoneLookupInfoConsolidator.getLookupUri())
-            .setNumberTypeLabel(phoneLookupInfoConsolidator.getNumberLabel())
-            .setIsBusiness(phoneLookupInfoConsolidator.isBusiness())
-            .setIsVoicemail(phoneLookupInfoConsolidator.isVoicemail())
-            .setIsBlocked(phoneLookupInfoConsolidator.isBlocked())
-            .setIsSpam(phoneLookupInfoConsolidator.isSpam())
-            .setCanReportAsInvalidNumber(phoneLookupInfoConsolidator.canReportAsInvalidNumber())
-            .setIsCp2InfoIncomplete(phoneLookupInfoConsolidator.isCp2LocalInfoIncomplete())
-            .build()
-            .toByteArray());
+        NumberAttributesConverter.fromPhoneLookupInfo(phoneLookupInfo).build().toByteArray());
   }
 }
diff --git a/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java b/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java
index 5083a95..69c4319 100644
--- a/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java
+++ b/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java
@@ -23,8 +23,8 @@
 import android.support.annotation.VisibleForTesting;
 import android.util.ArrayMap;
 import com.android.dialer.DialerPhoneNumber;
-import com.android.dialer.NumberAttributes;
 import com.android.dialer.calllog.model.CoalescedRow;
+import com.android.dialer.calllogutils.NumberAttributesConverter;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
@@ -33,7 +33,6 @@
 import com.android.dialer.inject.ApplicationContext;
 import com.android.dialer.phonelookup.PhoneLookup;
 import com.android.dialer.phonelookup.PhoneLookupInfo;
-import com.android.dialer.phonelookup.consolidator.PhoneLookupInfoConsolidator;
 import com.android.dialer.phonelookup.database.contract.PhoneLookupHistoryContract;
 import com.android.dialer.phonelookup.database.contract.PhoneLookupHistoryContract.PhoneLookupHistory;
 import com.google.common.collect.ImmutableMap;
@@ -198,23 +197,8 @@
 
   private CoalescedRow applyPhoneLookupInfoToRow(
       PhoneLookupInfo phoneLookupInfo, CoalescedRow row) {
-    PhoneLookupInfoConsolidator phoneLookupInfoConsolidator =
-        new PhoneLookupInfoConsolidator(phoneLookupInfo);
     return row.toBuilder()
-        .setNumberAttributes(
-            // TODO(zachh): Put this in a common location.
-            NumberAttributes.newBuilder()
-                .setName(phoneLookupInfoConsolidator.getName())
-                .setPhotoUri(phoneLookupInfoConsolidator.getPhotoUri())
-                .setPhotoId(phoneLookupInfoConsolidator.getPhotoId())
-                .setLookupUri(phoneLookupInfoConsolidator.getLookupUri())
-                .setNumberTypeLabel(phoneLookupInfoConsolidator.getNumberLabel())
-                .setIsBusiness(phoneLookupInfoConsolidator.isBusiness())
-                .setIsVoicemail(phoneLookupInfoConsolidator.isVoicemail())
-                .setIsBlocked(phoneLookupInfoConsolidator.isBlocked())
-                .setIsSpam(phoneLookupInfoConsolidator.isSpam())
-                .setCanReportAsInvalidNumber(phoneLookupInfoConsolidator.canReportAsInvalidNumber())
-                .build())
+        .setNumberAttributes(NumberAttributesConverter.fromPhoneLookupInfo(phoneLookupInfo).build())
         .build();
   }
 }
diff --git a/java/com/android/dialer/calllogutils/NumberAttributesConverter.java b/java/com/android/dialer/calllogutils/NumberAttributesConverter.java
index bed1edd..efd1d72 100644
--- a/java/com/android/dialer/calllogutils/NumberAttributesConverter.java
+++ b/java/com/android/dialer/calllogutils/NumberAttributesConverter.java
@@ -16,13 +16,16 @@
 
 package com.android.dialer.calllogutils;
 
+import android.text.TextUtils;
 import com.android.dialer.NumberAttributes;
 import com.android.dialer.glidephotomanager.PhotoInfo;
+import com.android.dialer.phonelookup.PhoneLookupInfo;
+import com.android.dialer.phonelookup.consolidator.PhoneLookupInfoConsolidator;
 
 /** Converts {@link NumberAttributes} to {@link PhotoInfo} */
 public final class NumberAttributesConverter {
 
-  /** Converts to {@link PhotoInfo.Builder} */
+  /** Converts {@link NumberAttributes} to {@link PhotoInfo.Builder} */
   public static PhotoInfo.Builder toPhotoInfoBuilder(NumberAttributes numberAttributes) {
     return PhotoInfo.builder()
         .setName(numberAttributes.getName())
@@ -34,4 +37,25 @@
         .setIsVoicemail(numberAttributes.getIsVoicemail())
         .setIsBlocked(numberAttributes.getIsBlocked());
   }
+
+  /** Converts {@link PhoneLookupInfo} to {@link NumberAttributes.Builder} */
+  public static NumberAttributes.Builder fromPhoneLookupInfo(PhoneLookupInfo phoneLookupInfo) {
+    PhoneLookupInfoConsolidator phoneLookupInfoConsolidator =
+        new PhoneLookupInfoConsolidator(phoneLookupInfo);
+    return NumberAttributes.newBuilder()
+        .setName(phoneLookupInfoConsolidator.getName())
+        .setPhotoUri(
+            !TextUtils.isEmpty(phoneLookupInfoConsolidator.getPhotoThumbnailUri())
+                ? phoneLookupInfoConsolidator.getPhotoThumbnailUri()
+                : phoneLookupInfoConsolidator.getPhotoUri())
+        .setPhotoId(phoneLookupInfoConsolidator.getPhotoId())
+        .setLookupUri(phoneLookupInfoConsolidator.getLookupUri())
+        .setNumberTypeLabel(phoneLookupInfoConsolidator.getNumberLabel())
+        .setIsBusiness(phoneLookupInfoConsolidator.isBusiness())
+        .setIsVoicemail(phoneLookupInfoConsolidator.isVoicemail())
+        .setIsBlocked(phoneLookupInfoConsolidator.isBlocked())
+        .setIsSpam(phoneLookupInfoConsolidator.isSpam())
+        .setCanReportAsInvalidNumber(phoneLookupInfoConsolidator.canReportAsInvalidNumber())
+        .setIsCp2InfoIncomplete(phoneLookupInfoConsolidator.isCp2LocalInfoIncomplete());
+  }
 }
diff --git a/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java b/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java
index ce4030d..9c54110 100644
--- a/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java
+++ b/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java
@@ -108,6 +108,28 @@
 
   /**
    * The {@link PhoneLookupInfo} passed to the constructor is associated with a number. This method
+   * returns the photo thumbnail URI associated with that number.
+   *
+   * <p>If no photo thumbnail URI can be obtained from the {@link PhoneLookupInfo}, an empty string
+   * will be returned.
+   */
+  public String getPhotoThumbnailUri() {
+    switch (nameSource) {
+      case NameSource.CP2_LOCAL:
+        return Assert.isNotNull(firstCp2LocalContact).getPhotoThumbnailUri();
+      case NameSource.CP2_REMOTE:
+        return Assert.isNotNull(firstCp2RemoteContact).getPhotoThumbnailUri();
+      case NameSource.PEOPLE_API:
+      case NameSource.NONE:
+        return "";
+      default:
+        throw Assert.createUnsupportedOperationFailException(
+            String.format("Unsupported name source: %s", nameSource));
+    }
+  }
+
+  /**
+   * The {@link PhoneLookupInfo} passed to the constructor is associated with a number. This method
    * returns the photo URI associated with that number.
    *
    * <p>If no photo URI can be obtained from the {@link PhoneLookupInfo}, an empty string will be
diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2Projections.java b/java/com/android/dialer/phonelookup/cp2/Cp2Projections.java
index e392999..5a211ed 100644
--- a/java/com/android/dialer/phonelookup/cp2/Cp2Projections.java
+++ b/java/com/android/dialer/phonelookup/cp2/Cp2Projections.java
@@ -35,12 +35,13 @@
       new String[] {
         Phone.DISPLAY_NAME_PRIMARY, // 0
         Phone.PHOTO_THUMBNAIL_URI, // 1
-        Phone.PHOTO_ID, // 2
-        Phone.TYPE, // 3
-        Phone.LABEL, // 4
-        Phone.NORMALIZED_NUMBER, // 5
-        Phone.CONTACT_ID, // 6
-        Phone.LOOKUP_KEY // 7
+        Phone.PHOTO_URI, // 2
+        Phone.PHOTO_ID, // 3
+        Phone.TYPE, // 4
+        Phone.LABEL, // 5
+        Phone.NORMALIZED_NUMBER, // 6
+        Phone.CONTACT_ID, // 7
+        Phone.LOOKUP_KEY // 8
       };
 
   // Projection for performing lookups using the PHONE_LOOKUP table
@@ -48,23 +49,25 @@
       new String[] {
         PhoneLookup.DISPLAY_NAME_PRIMARY, // 0
         PhoneLookup.PHOTO_THUMBNAIL_URI, // 1
-        PhoneLookup.PHOTO_ID, // 2
-        PhoneLookup.TYPE, // 3
-        PhoneLookup.LABEL, // 4
-        PhoneLookup.NORMALIZED_NUMBER, // 5
-        PhoneLookup.CONTACT_ID, // 6
-        PhoneLookup.LOOKUP_KEY // 7
+        PhoneLookup.PHOTO_URI, // 2
+        PhoneLookup.PHOTO_ID, // 3
+        PhoneLookup.TYPE, // 4
+        PhoneLookup.LABEL, // 5
+        PhoneLookup.NORMALIZED_NUMBER, // 6
+        PhoneLookup.CONTACT_ID, // 7
+        PhoneLookup.LOOKUP_KEY // 8
       };
 
   // The following indexes should match both PHONE_PROJECTION and PHONE_LOOKUP_PROJECTION above.
   private static final int CP2_INFO_NAME_INDEX = 0;
-  private static final int CP2_INFO_PHOTO_URI_INDEX = 1;
-  private static final int CP2_INFO_PHOTO_ID_INDEX = 2;
-  private static final int CP2_INFO_TYPE_INDEX = 3;
-  private static final int CP2_INFO_LABEL_INDEX = 4;
-  private static final int CP2_INFO_NORMALIZED_NUMBER_INDEX = 5;
-  private static final int CP2_INFO_CONTACT_ID_INDEX = 6;
-  private static final int CP2_INFO_LOOKUP_KEY_INDEX = 7;
+  private static final int CP2_INFO_PHOTO_THUMBNAIL_URI_INDEX = 1;
+  private static final int CP2_INFO_PHOTO_URI_INDEX = 2;
+  private static final int CP2_INFO_PHOTO_ID_INDEX = 3;
+  private static final int CP2_INFO_TYPE_INDEX = 4;
+  private static final int CP2_INFO_LABEL_INDEX = 5;
+  private static final int CP2_INFO_NORMALIZED_NUMBER_INDEX = 6;
+  private static final int CP2_INFO_CONTACT_ID_INDEX = 7;
+  private static final int CP2_INFO_LOOKUP_KEY_INDEX = 8;
 
   private Cp2Projections() {}
 
@@ -82,6 +85,7 @@
    */
   static Cp2ContactInfo buildCp2ContactInfoFromCursor(Context appContext, Cursor cursor) {
     String displayName = cursor.getString(CP2_INFO_NAME_INDEX);
+    String photoThumbnailUri = cursor.getString(CP2_INFO_PHOTO_THUMBNAIL_URI_INDEX);
     String photoUri = cursor.getString(CP2_INFO_PHOTO_URI_INDEX);
     int photoId = cursor.getInt(CP2_INFO_PHOTO_ID_INDEX);
     int type = cursor.getInt(CP2_INFO_TYPE_INDEX);
@@ -93,6 +97,9 @@
     if (!TextUtils.isEmpty(displayName)) {
       infoBuilder.setName(displayName);
     }
+    if (!TextUtils.isEmpty(photoThumbnailUri)) {
+      infoBuilder.setPhotoThumbnailUri(photoThumbnailUri);
+    }
     if (!TextUtils.isEmpty(photoUri)) {
       infoBuilder.setPhotoUri(photoUri);
     }
diff --git a/java/com/android/dialer/phonelookup/phone_lookup_info.proto b/java/com/android/dialer/phonelookup/phone_lookup_info.proto
index e9cb9f8..dd6bf66 100644
--- a/java/com/android/dialer/phonelookup/phone_lookup_info.proto
+++ b/java/com/android/dialer/phonelookup/phone_lookup_info.proto
@@ -19,6 +19,7 @@
   message Cp2Info {
     // Information about a single contact, which can be a local contact or a
     // remote one.
+    // Next ID: 8
     message Cp2ContactInfo {
       // For a local contact:
       //   android.provider.ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY
@@ -30,13 +31,19 @@
       //   android.provider.ContactsContract.CommonDataKinds.Phone.PHOTO_THUMBNAIL_URI
       // For a remote contact:
       //   android.provider.ContactsContract.PhoneLookup.PHOTO_THUMBNAIL_URI
-      optional string photo_uri = 2;
+      optional string photo_thumbnail_uri = 2;
+
+      // For a local contact:
+      //   android.provider.ContactsContract.CommonDataKinds.Phone.PHOTO_URI
+      // For a remote contact:
+      //   android.provider.ContactsContract.PhoneLookup.PHOTO_URI
+      optional string photo_uri = 3;
 
       // For a local contact:
       //   android.provider.ContactsContract.CommonDataKinds.Phone.PHOTO_ID
       // For a remote contact:
       //   android.provider.ContactsContract.PhoneLookup.PHOTO_ID
-      optional fixed64 photo_id = 3;
+      optional fixed64 photo_id = 4;
 
       // For a local contact:
       //   android.provider.ContactsContract.CommonDataKinds.Phone.LABEL
@@ -44,13 +51,13 @@
       //   android.provider.ContactsContract.PhoneLookup.LABEL
       //
       // The value can be "Home", "Mobile", ect.
-      optional string label = 4;
+      optional string label = 5;
 
       // For a local contact:
       //   android.provider.ContactsContract.CommonDataKinds.Phone.CONTACT_ID
       // For a remote contact:
       //   android.provider.ContactsContract.PhoneLookup.CONTACT_ID
-      optional fixed64 contact_id = 5;
+      optional fixed64 contact_id = 6;
 
       // For a local contact:
       //   constructed based on
@@ -58,7 +65,7 @@
       // For a remote contact:
       //   constructed based on
       //   android.provider.ContactsContract.PhoneLookup.LOOKUP_KEY
-      optional string lookup_uri = 6;
+      optional string lookup_uri = 7;
     }
     // Repeated because one phone number can be associated with multiple CP2
     // contacts.
