diff --git a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
index 935ea74..cdde638 100644
--- a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
@@ -584,7 +584,7 @@
         AnnotatedCallLog.CAN_REPORT_AS_INVALID_NUMBER,
         PhoneLookupSelector.canReportAsInvalidNumber(phoneLookupInfo));
     contentValues.put(
-        AnnotatedCallLog.CP2_INFO_INCOMPLETE, phoneLookupInfo.getCp2Info().getIsIncomplete());
+        AnnotatedCallLog.CP2_INFO_INCOMPLETE, phoneLookupInfo.getCp2LocalInfo().getIsIncomplete());
   }
 
   private static Uri numberUri(String number) {
diff --git a/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java b/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java
index 814efc7..74b7def 100644
--- a/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java
+++ b/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java
@@ -23,7 +23,7 @@
 import com.android.dialer.common.concurrent.Annotations.Ui;
 import com.android.dialer.phonelookup.PhoneLookupInfo;
 import com.android.dialer.phonelookup.PhoneLookupInfo.Cp2Info;
-import com.android.dialer.phonelookup.cp2.Cp2PhoneLookup;
+import com.android.dialer.phonelookup.cp2.Cp2LocalPhoneLookup;
 import com.android.dialer.phonelookup.selector.PhoneLookupSelector;
 import com.google.common.base.Optional;
 import com.google.common.util.concurrent.Futures;
@@ -46,7 +46,7 @@
 public final class RealtimeRowProcessor {
 
   private final ListeningExecutorService uiExecutor;
-  private final Cp2PhoneLookup cp2PhoneLookup;
+  private final Cp2LocalPhoneLookup cp2LocalPhoneLookup;
   private final PhoneLookupSelector phoneLookupSelector;
 
   private final Map<DialerPhoneNumber, Cp2Info> cache = new ArrayMap<>();
@@ -54,10 +54,10 @@
   @Inject
   RealtimeRowProcessor(
       @Ui ListeningExecutorService uiExecutor,
-      Cp2PhoneLookup cp2PhoneLookup,
+      Cp2LocalPhoneLookup cp2LocalPhoneLookup,
       PhoneLookupSelector phoneLookupSelector) {
     this.uiExecutor = uiExecutor;
-    this.cp2PhoneLookup = cp2PhoneLookup;
+    this.cp2LocalPhoneLookup = cp2LocalPhoneLookup;
     this.phoneLookupSelector = phoneLookupSelector;
   }
 
@@ -67,7 +67,7 @@
    */
   @MainThread
   ListenableFuture<Optional<CoalescedRow>> applyRealtimeProcessing(final CoalescedRow row) {
-    // Cp2PhoneLookup can not always efficiently process all rows.
+    // Cp2LocalPhoneLookup can not always efficiently process all rows.
     if (!row.cp2InfoIncomplete()) {
       return Futures.immediateFuture(Optional.absent());
     }
@@ -77,24 +77,24 @@
       if (cachedCp2Info.equals(Cp2Info.getDefaultInstance())) {
         return Futures.immediateFuture(Optional.absent());
       }
-      return Futures.immediateFuture(Optional.of(applyCp2InfoToRow(cachedCp2Info, row)));
+      return Futures.immediateFuture(Optional.of(applyCp2LocalInfoToRow(cachedCp2Info, row)));
     }
 
-    ListenableFuture<Cp2Info> cp2InfoFuture = cp2PhoneLookup.lookupByNumber(row.number());
+    ListenableFuture<Cp2Info> cp2InfoFuture = cp2LocalPhoneLookup.lookupByNumber(row.number());
     return Futures.transform(
         cp2InfoFuture,
         cp2Info -> {
           cache.put(row.number(), cp2Info);
           if (!cp2Info.equals(Cp2Info.getDefaultInstance())) {
-            return Optional.of(applyCp2InfoToRow(cp2Info, row));
+            return Optional.of(applyCp2LocalInfoToRow(cp2Info, row));
           }
           return Optional.absent();
         },
         uiExecutor /* ensures the cache is updated on a single thread */);
   }
 
-  private CoalescedRow applyCp2InfoToRow(Cp2Info cp2Info, CoalescedRow row) {
-    PhoneLookupInfo phoneLookupInfo = PhoneLookupInfo.newBuilder().setCp2Info(cp2Info).build();
+  private CoalescedRow applyCp2LocalInfoToRow(Cp2Info cp2Info, CoalescedRow row) {
+    PhoneLookupInfo phoneLookupInfo = PhoneLookupInfo.newBuilder().setCp2LocalInfo(cp2Info).build();
     // It is safe to overwrite any existing data because CP2 always has highest priority.
     return row.toBuilder()
         .setName(phoneLookupSelector.selectName(phoneLookupInfo))
diff --git a/java/com/android/dialer/phonelookup/PhoneLookupModule.java b/java/com/android/dialer/phonelookup/PhoneLookupModule.java
index b4f3787..5e215ba 100644
--- a/java/com/android/dialer/phonelookup/PhoneLookupModule.java
+++ b/java/com/android/dialer/phonelookup/PhoneLookupModule.java
@@ -18,7 +18,7 @@
 
 import com.android.dialer.phonelookup.blockednumber.DialerBlockedNumberPhoneLookup;
 import com.android.dialer.phonelookup.composite.CompositePhoneLookup;
-import com.android.dialer.phonelookup.cp2.Cp2PhoneLookup;
+import com.android.dialer.phonelookup.cp2.Cp2LocalPhoneLookup;
 import com.google.common.collect.ImmutableList;
 import dagger.Module;
 import dagger.Provides;
@@ -30,9 +30,9 @@
   @Provides
   @SuppressWarnings({"unchecked", "rawtype"})
   static ImmutableList<PhoneLookup> providePhoneLookupList(
-      Cp2PhoneLookup cp2PhoneLookup,
+      Cp2LocalPhoneLookup cp2LocalPhoneLookup,
       DialerBlockedNumberPhoneLookup dialerBlockedNumberPhoneLookup) {
-    return ImmutableList.of(cp2PhoneLookup, dialerBlockedNumberPhoneLookup);
+    return ImmutableList.of(cp2LocalPhoneLookup, dialerBlockedNumberPhoneLookup);
   }
 
   @Provides
diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java b/java/com/android/dialer/phonelookup/cp2/Cp2LocalPhoneLookup.java
similarity index 96%
rename from java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java
rename to java/com/android/dialer/phonelookup/cp2/Cp2LocalPhoneLookup.java
index dd44070..727977f 100644
--- a/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/cp2/Cp2LocalPhoneLookup.java
@@ -63,7 +63,7 @@
 import javax.inject.Inject;
 
 /** PhoneLookup implementation for local contacts. */
-public final class Cp2PhoneLookup implements PhoneLookup<Cp2Info> {
+public final class Cp2LocalPhoneLookup implements PhoneLookup<Cp2Info> {
 
   private static final String PREF_LAST_TIMESTAMP_PROCESSED =
       "cp2PhoneLookupLastTimestampProcessed";
@@ -119,7 +119,7 @@
   @Nullable private Long currentLastTimestampProcessed;
 
   @Inject
-  Cp2PhoneLookup(
+  Cp2LocalPhoneLookup(
       @ApplicationContext Context appContext,
       @Unencrypted SharedPreferences sharedPreferences,
       @BackgroundExecutor ListeningExecutorService backgroundExecutorService,
@@ -149,7 +149,7 @@
             ? queryPhoneTableBasedOnE164(PHONE_PROJECTION, ImmutableSet.of(e164.get()))
             : queryPhoneLookup(PHONE_LOOKUP_PROJECTION, rawNumber)) {
       if (cursor == null) {
-        LogUtil.w("Cp2PhoneLookup.lookupInternal", "null cursor");
+        LogUtil.w("Cp2LocalPhoneLookup.lookupInternal", "null cursor");
         return Cp2Info.getDefaultInstance();
       }
       while (cursor.moveToNext()) {
@@ -176,7 +176,7 @@
           Set<Cp2ContactInfo> cp2ContactInfos = new ArraySet<>();
           try (Cursor cursor = queryPhoneLookup(PHONE_LOOKUP_PROJECTION, rawNumber)) {
             if (cursor == null) {
-              LogUtil.w("Cp2PhoneLookup.lookup", "null cursor");
+              LogUtil.w("Cp2LocalPhoneLookup.lookup", "null cursor");
               return Cp2Info.getDefaultInstance();
             }
             while (cursor.moveToNext()) {
@@ -211,7 +211,8 @@
               anyContactsDeletedFuture,
               anyContactsDeleted -> {
                 if (anyContactsDeleted) {
-                  LogUtil.v("Cp2PhoneLookup.isDirty", "returning true because contacts deleted");
+                  LogUtil.v(
+                      "Cp2LocalPhoneLookup.isDirty", "returning true because contacts deleted");
                   return Futures.immediateFuture(true);
                 }
                 // Hopefully the most common case is there are no contacts updated; we can detect
@@ -223,7 +224,7 @@
                     noContactsModifiedSince -> {
                       if (noContactsModifiedSince) {
                         LogUtil.v(
-                            "Cp2PhoneLookup.isDirty",
+                            "Cp2LocalPhoneLookup.isDirty",
                             "returning false because no contacts modified since last run");
                         return Futures.immediateFuture(false);
                       }
@@ -241,7 +242,7 @@
                           contactsUpdated -> {
                             if (contactsUpdated) {
                               LogUtil.v(
-                                  "Cp2PhoneLookup.isDirty",
+                                  "Cp2LocalPhoneLookup.isDirty",
                                   "returning true because a previously called contact was updated");
                               return Futures.immediateFuture(true);
                             }
@@ -315,7 +316,7 @@
                       null)) {
 
             if (cursor == null) {
-              LogUtil.w("Cp2PhoneLookup.queryPhoneLookupHistoryForContactIds", "null cursor");
+              LogUtil.w("Cp2LocalPhoneLookup.queryPhoneLookupHistoryForContactIds", "null cursor");
               return contactIds;
             }
 
@@ -330,7 +331,8 @@
                 } catch (InvalidProtocolBufferException e) {
                   throw new IllegalStateException(e);
                 }
-                for (Cp2ContactInfo info : phoneLookupInfo.getCp2Info().getCp2ContactInfoList()) {
+                for (Cp2ContactInfo info :
+                    phoneLookupInfo.getCp2LocalInfo().getCp2ContactInfoList()) {
                   contactIds.add(info.getContactId());
                 }
               } while (cursor.moveToNext());
@@ -351,7 +353,8 @@
           try (Cursor cursor =
               queryPhoneTableBasedOnE164(new String[] {Phone.CONTACT_ID}, validE164Numbers)) {
             if (cursor == null) {
-              LogUtil.w("Cp2PhoneLookup.queryPhoneTableForContactIdsBasedOnE164", "null cursor");
+              LogUtil.w(
+                  "Cp2LocalPhoneLookup.queryPhoneTableForContactIdsBasedOnE164", "null cursor");
               return contactIds;
             }
             while (cursor.moveToNext()) {
@@ -374,7 +377,7 @@
               queryPhoneLookup(new String[] {ContactsContract.PhoneLookup.CONTACT_ID}, rawNumber)) {
             if (cursor == null) {
               LogUtil.w(
-                  "Cp2PhoneLookup.queryPhoneLookupTableForContactIdsBasedOnRawNumber",
+                  "Cp2LocalPhoneLookup.queryPhoneLookupTableForContactIdsBasedOnRawNumber",
                   "null cursor");
               return contactIds;
             }
@@ -437,7 +440,7 @@
                       new String[] {Long.toString(lastModified)},
                       Contacts._ID + " limit 1")) {
             if (cursor == null) {
-              LogUtil.w("Cp2PhoneLookup.noContactsModifiedSince", "null cursor");
+              LogUtil.w("Cp2LocalPhoneLookup.noContactsModifiedSince", "null cursor");
               return false;
             }
             return cursor.getCount() == 0;
@@ -459,7 +462,7 @@
                       new String[] {Long.toString(lastModified)},
                       DeletedContacts.CONTACT_DELETED_TIMESTAMP + " limit 1")) {
             if (cursor == null) {
-              LogUtil.w("Cp2PhoneLookup.anyContactsDeletedSince", "null cursor");
+              LogUtil.w("Cp2LocalPhoneLookup.anyContactsDeletedSince", "null cursor");
               return false;
             }
             return cursor.getCount() > 0;
@@ -469,12 +472,12 @@
 
   @Override
   public void setSubMessage(PhoneLookupInfo.Builder destination, Cp2Info subMessage) {
-    destination.setCp2Info(subMessage);
+    destination.setCp2LocalInfo(subMessage);
   }
 
   @Override
   public Cp2Info getSubMessage(PhoneLookupInfo phoneLookupInfo) {
-    return phoneLookupInfo.getCp2Info();
+    return phoneLookupInfo.getCp2LocalInfo();
   }
 
   @Override
@@ -766,7 +769,7 @@
           }
           try (Cursor cursor = queryPhoneTableBasedOnE164(PHONE_PROJECTION, e164Numbers)) {
             if (cursor == null) {
-              LogUtil.w("Cp2PhoneLookup.batchQueryForValidNumbers", "null cursor");
+              LogUtil.w("Cp2LocalPhoneLookup.batchQueryForValidNumbers", "null cursor");
             } else {
               while (cursor.moveToNext()) {
                 String e164Number = cursor.getString(CP2_INFO_NORMALIZED_NUMBER_INDEX);
@@ -793,7 +796,7 @@
           }
           try (Cursor cursor = queryPhoneLookup(PHONE_LOOKUP_PROJECTION, invalidNumber)) {
             if (cursor == null) {
-              LogUtil.w("Cp2PhoneLookup.individualQueryForInvalidNumber", "null cursor");
+              LogUtil.w("Cp2LocalPhoneLookup.individualQueryForInvalidNumber", "null cursor");
             } else {
               while (cursor.moveToNext()) {
                 cp2ContactInfos.add(buildCp2ContactInfoFromPhoneCursor(appContext, cursor));
diff --git a/java/com/android/dialer/phonelookup/phone_lookup_info.proto b/java/com/android/dialer/phonelookup/phone_lookup_info.proto
index 6662646..f1497bd 100644
--- a/java/com/android/dialer/phonelookup/phone_lookup_info.proto
+++ b/java/com/android/dialer/phonelookup/phone_lookup_info.proto
@@ -9,12 +9,12 @@
 
 // Contains information about a phone number, possibly from many sources.
 //
-// This message is organized into sub-messages where each sub-message
-// corresponds to an implementation of PhoneLookup. For example, the Cp2Info
-// corresponds to Cp2PhoneLookup class, and the Cp2PhoneLookup class alone is
-// responsible for populating its fields.
+// This message is organized into sub-message fields where each one corresponds
+// to an implementation of PhoneLookup. For example, field "cp2_local_info"
+// corresponds to class Cp2LocalPhoneLookup, and class Cp2LocalPhoneLookup
+// alone is responsible for populating it.
 message PhoneLookupInfo {
-  // Information about a PhoneNumber retrieved from CP2. Cp2PhoneLookup is
+  // Information about a PhoneNumber retrieved from CP2. Cp2LocalPhoneLookup is
   // responsible for populating the data in this message.
   message Cp2Info {
     // Information about a single local contact.
@@ -50,7 +50,7 @@
     // log needs to query for the CP2 information at render time.
     optional bool is_incomplete = 2;
   }
-  optional Cp2Info cp2_info = 1;
+  optional Cp2Info cp2_local_info = 1;
 
   // Message for APDL, a lookup for the proprietary Google dialer.
   message ApdlInfo {
diff --git a/java/com/android/dialer/phonelookup/selector/PhoneLookupSelector.java b/java/com/android/dialer/phonelookup/selector/PhoneLookupSelector.java
index a960d4e..6b217e9 100644
--- a/java/com/android/dialer/phonelookup/selector/PhoneLookupSelector.java
+++ b/java/com/android/dialer/phonelookup/selector/PhoneLookupSelector.java
@@ -139,7 +139,7 @@
     // matches that of a Cp2 (local) contact, and PeopleApiInfo will not be used to display
     // information like name, photo, etc. We should not allow the user to report the number in this
     // case as the info displayed is not from the People API.
-    if (phoneLookupInfo.getCp2Info().getCp2ContactInfoCount() > 0) {
+    if (phoneLookupInfo.getCp2LocalInfo().getCp2ContactInfoCount() > 0) {
       return false;
     }
 
@@ -155,8 +155,8 @@
    */
   @Nullable
   private Cp2ContactInfo firstLocalContact(PhoneLookupInfo phoneLookupInfo) {
-    if (phoneLookupInfo.getCp2Info().getCp2ContactInfoCount() > 0) {
-      return phoneLookupInfo.getCp2Info().getCp2ContactInfo(0);
+    if (phoneLookupInfo.getCp2LocalInfo().getCp2ContactInfoCount() > 0) {
+      return phoneLookupInfo.getCp2LocalInfo().getCp2ContactInfo(0);
     }
     return null;
   }
