diff --git a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
index 66d29a7..72e9e0f 100644
--- a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
@@ -32,7 +32,7 @@
 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.calllogutils.NumberAttributesBuilder;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
@@ -598,6 +598,6 @@
   private void updateContentValues(ContentValues contentValues, PhoneLookupInfo phoneLookupInfo) {
     contentValues.put(
         AnnotatedCallLog.NUMBER_ATTRIBUTES,
-        NumberAttributesConverter.fromPhoneLookupInfo(phoneLookupInfo).build().toByteArray());
+        NumberAttributesBuilder.fromPhoneLookupInfo(phoneLookupInfo).build().toByteArray());
   }
 }
diff --git a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java
index fccd8b9..357c623 100644
--- a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java
+++ b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java
@@ -21,7 +21,6 @@
 import android.provider.CallLog.Calls;
 import android.support.annotation.ColorInt;
 import android.support.annotation.DrawableRes;
-import android.support.v4.os.BuildCompat;
 import android.support.v7.widget.RecyclerView;
 import android.telecom.PhoneAccount;
 import android.telecom.PhoneAccountHandle;
@@ -35,8 +34,8 @@
 import com.android.dialer.calllog.ui.menu.NewCallLogMenu;
 import com.android.dialer.calllogutils.CallLogEntryText;
 import com.android.dialer.calllogutils.CallLogRowActions;
-import com.android.dialer.calllogutils.NumberAttributesConverter;
 import com.android.dialer.calllogutils.PhoneAccountUtils;
+import com.android.dialer.calllogutils.PhotoInfoBuilder;
 import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.compat.AppCompatConstants;
 import com.android.dialer.compat.telephony.TelephonyManagerCompat;
@@ -162,15 +161,7 @@
   }
 
   private void setPhoto(CoalescedRow row) {
-    contactPhotoView.setPhoto(
-        NumberAttributesConverter.toPhotoInfoBuilder(row.getNumberAttributes())
-            .setFormattedNumber(row.getFormattedNumber())
-            .setIsVideo((row.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO)
-            .setIsRtt(
-                BuildCompat.isAtLeastP()
-                    && (row.getFeatures() & Calls.FEATURES_RTT) == Calls.FEATURES_RTT)
-            .setIsVoicemail(row.getIsVoicemailCall())
-            .build());
+    contactPhotoView.setPhoto(PhotoInfoBuilder.fromCoalescedRow(row).build());
   }
 
   private void setFeatureIcons(CoalescedRow row) {
diff --git a/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java b/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java
index c5148d9..df5270d 100644
--- a/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java
+++ b/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java
@@ -24,7 +24,7 @@
 import android.util.ArrayMap;
 import com.android.dialer.DialerPhoneNumber;
 import com.android.dialer.calllog.model.CoalescedRow;
-import com.android.dialer.calllogutils.NumberAttributesConverter;
+import com.android.dialer.calllogutils.NumberAttributesBuilder;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
@@ -203,7 +203,7 @@
     // TODO(linyuh): Improve the comparison instead.
     return row.toBuilder()
         .setNumberAttributes(
-            NumberAttributesConverter.fromPhoneLookupInfo(phoneLookupInfo)
+            NumberAttributesBuilder.fromPhoneLookupInfo(phoneLookupInfo)
                 .setIsCp2InfoIncomplete(row.getNumberAttributes().getIsCp2InfoIncomplete())
                 .build())
         .build();
diff --git a/java/com/android/dialer/calllog/ui/menu/BottomSheetHeader.java b/java/com/android/dialer/calllog/ui/menu/BottomSheetHeader.java
index 4e25ced..25ae476 100644
--- a/java/com/android/dialer/calllog/ui/menu/BottomSheetHeader.java
+++ b/java/com/android/dialer/calllog/ui/menu/BottomSheetHeader.java
@@ -17,11 +17,9 @@
 package com.android.dialer.calllog.ui.menu;
 
 import android.content.Context;
-import android.provider.CallLog.Calls;
-import android.support.v4.os.BuildCompat;
 import com.android.dialer.calllog.model.CoalescedRow;
 import com.android.dialer.calllogutils.CallLogEntryText;
-import com.android.dialer.calllogutils.NumberAttributesConverter;
+import com.android.dialer.calllogutils.PhotoInfoBuilder;
 import com.android.dialer.historyitemactions.HistoryItemBottomSheetHeaderInfo;
 
 /** Configures the top row in the bottom sheet. */
@@ -30,15 +28,7 @@
   static HistoryItemBottomSheetHeaderInfo fromRow(Context context, CoalescedRow row) {
     return HistoryItemBottomSheetHeaderInfo.newBuilder()
         .setNumber(row.getNumber())
-        .setPhotoInfo(
-            NumberAttributesConverter.toPhotoInfoBuilder(row.getNumberAttributes())
-                .setFormattedNumber(row.getFormattedNumber())
-                .setIsVideo((row.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO)
-                .setIsVoicemail(row.getIsVoicemailCall())
-                .setIsRtt(
-                    BuildCompat.isAtLeastP()
-                        && (row.getFeatures() & Calls.FEATURES_RTT) == Calls.FEATURES_RTT)
-                .build())
+        .setPhotoInfo(PhotoInfoBuilder.fromCoalescedRow(row))
         .setPrimaryText(CallLogEntryText.buildPrimaryText(context, row).toString())
         .setSecondaryText(
             CallLogEntryText.buildSecondaryTextForBottomSheet(context, row).toString())
diff --git a/java/com/android/dialer/calllog/ui/menu/Modules.java b/java/com/android/dialer/calllog/ui/menu/Modules.java
index cfeca10..ded4958 100644
--- a/java/com/android/dialer/calllog/ui/menu/Modules.java
+++ b/java/com/android/dialer/calllog/ui/menu/Modules.java
@@ -17,15 +17,12 @@
 package com.android.dialer.calllog.ui.menu;
 
 import android.content.Context;
-import android.provider.CallLog.Calls;
-import android.support.v4.os.BuildCompat;
 import android.text.TextUtils;
 import com.android.dialer.calldetails.CallDetailsActivity;
 import com.android.dialer.calldetails.CallDetailsHeaderInfo;
 import com.android.dialer.calllog.model.CoalescedRow;
 import com.android.dialer.calllogutils.CallLogEntryText;
-import com.android.dialer.calllogutils.NumberAttributesConverter;
-import com.android.dialer.glidephotomanager.PhotoInfo;
+import com.android.dialer.calllogutils.PhotoInfoBuilder;
 import com.android.dialer.historyitemactions.HistoryItemActionModule;
 import com.android.dialer.historyitemactions.HistoryItemActionModuleInfo;
 import com.android.dialer.historyitemactions.HistoryItemActionModulesBuilder;
@@ -91,24 +88,13 @@
       Context context, CoalescedRow row) {
     return CallDetailsHeaderInfo.newBuilder()
         .setDialerPhoneNumber(row.getNumber())
-        .setPhotoInfo(createPhotoInfoFromRow(row))
+        .setPhotoInfo(PhotoInfoBuilder.fromCoalescedRow(row))
         .setPrimaryText(CallLogEntryText.buildPrimaryText(context, row).toString())
         .setSecondaryText(
             CallLogEntryText.buildSecondaryTextForBottomSheet(context, row).toString())
         .build();
   }
 
-  private static PhotoInfo createPhotoInfoFromRow(CoalescedRow row) {
-    return NumberAttributesConverter.toPhotoInfoBuilder(row.getNumberAttributes())
-        .setFormattedNumber(row.getFormattedNumber())
-        .setIsVideo((row.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO)
-        .setIsRtt(
-            BuildCompat.isAtLeastP()
-                && (row.getFeatures() & Calls.FEATURES_RTT) == Calls.FEATURES_RTT)
-        .setIsVoicemail(row.getIsVoicemailCall())
-        .build();
-  }
-
   private static boolean canSupportAssistedDialing(CoalescedRow row) {
     return !TextUtils.isEmpty(row.getNumberAttributes().getLookupUri());
   }
diff --git a/java/com/android/dialer/calllogutils/NumberAttributesConverter.java b/java/com/android/dialer/calllogutils/NumberAttributesBuilder.java
similarity index 74%
rename from java/com/android/dialer/calllogutils/NumberAttributesConverter.java
rename to java/com/android/dialer/calllogutils/NumberAttributesBuilder.java
index 8081c4b..015d59f 100644
--- a/java/com/android/dialer/calllogutils/NumberAttributesConverter.java
+++ b/java/com/android/dialer/calllogutils/NumberAttributesBuilder.java
@@ -18,26 +18,13 @@
 
 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 {
+/** Builds {@link NumberAttributes} from other data types. */
+public final class NumberAttributesBuilder {
 
-  /** Converts {@link NumberAttributes} to {@link PhotoInfo.Builder} */
-  public static PhotoInfo.Builder toPhotoInfoBuilder(NumberAttributes numberAttributes) {
-    return PhotoInfo.newBuilder()
-        .setName(numberAttributes.getName())
-        .setPhotoUri(numberAttributes.getPhotoUri())
-        .setPhotoId(numberAttributes.getPhotoId())
-        .setLookupUri(numberAttributes.getLookupUri())
-        .setIsBusiness(numberAttributes.getIsBusiness())
-        .setIsSpam(numberAttributes.getIsSpam())
-        .setIsBlocked(numberAttributes.getIsBlocked());
-  }
-
-  /** Converts {@link PhoneLookupInfo} to {@link NumberAttributes.Builder} */
+  /** Returns a {@link NumberAttributes.Builder} with info from {@link PhoneLookupInfo}. */
   public static NumberAttributes.Builder fromPhoneLookupInfo(PhoneLookupInfo phoneLookupInfo) {
     PhoneLookupInfoConsolidator phoneLookupInfoConsolidator =
         new PhoneLookupInfoConsolidator(phoneLookupInfo);
diff --git a/java/com/android/dialer/calllogutils/PhotoInfoBuilder.java b/java/com/android/dialer/calllogutils/PhotoInfoBuilder.java
new file mode 100644
index 0000000..8d193bf
--- /dev/null
+++ b/java/com/android/dialer/calllogutils/PhotoInfoBuilder.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.dialer.calllogutils;
+
+import android.provider.CallLog.Calls;
+import android.support.v4.os.BuildCompat;
+import com.android.dialer.NumberAttributes;
+import com.android.dialer.calllog.model.CoalescedRow;
+import com.android.dialer.glidephotomanager.PhotoInfo;
+import com.android.dialer.voicemail.model.VoicemailEntry;
+
+/** Builds {@link PhotoInfo} from other data types. */
+public final class PhotoInfoBuilder {
+
+  /** Returns a {@link PhotoInfo.Builder} with info from {@link CoalescedRow}. */
+  public static PhotoInfo.Builder fromCoalescedRow(CoalescedRow coalescedRow) {
+    return fromNumberAttributes(coalescedRow.getNumberAttributes())
+        .setFormattedNumber(coalescedRow.getFormattedNumber())
+        .setIsVoicemail(coalescedRow.getIsVoicemailCall())
+        .setIsVideo((coalescedRow.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO)
+        .setIsRtt(
+            BuildCompat.isAtLeastP()
+                && (coalescedRow.getFeatures() & Calls.FEATURES_RTT) == Calls.FEATURES_RTT);
+  }
+
+  /** Returns a {@link PhotoInfo.Builder} with info from {@link VoicemailEntry}. */
+  public static PhotoInfo.Builder fromVoicemailEntry(VoicemailEntry voicemailEntry) {
+    return fromNumberAttributes(voicemailEntry.getNumberAttributes())
+        .setFormattedNumber(voicemailEntry.getFormattedNumber());
+  }
+
+  /** Returns a {@link PhotoInfo.Builder} with info from {@link NumberAttributes}. */
+  private static PhotoInfo.Builder fromNumberAttributes(NumberAttributes numberAttributes) {
+    return PhotoInfo.newBuilder()
+        .setName(numberAttributes.getName())
+        .setPhotoUri(numberAttributes.getPhotoUri())
+        .setPhotoId(numberAttributes.getPhotoId())
+        .setLookupUri(numberAttributes.getLookupUri())
+        .setIsBusiness(numberAttributes.getIsBusiness())
+        .setIsBlocked(numberAttributes.getIsBlocked())
+        .setIsSpam(numberAttributes.getIsSpam());
+  }
+}
diff --git a/java/com/android/dialer/voicemail/listui/NewVoicemailViewHolder.java b/java/com/android/dialer/voicemail/listui/NewVoicemailViewHolder.java
index c001c00..ba851eb 100644
--- a/java/com/android/dialer/voicemail/listui/NewVoicemailViewHolder.java
+++ b/java/com/android/dialer/voicemail/listui/NewVoicemailViewHolder.java
@@ -36,7 +36,7 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.AnnotatedCallLog;
-import com.android.dialer.calllogutils.NumberAttributesConverter;
+import com.android.dialer.calllogutils.PhotoInfoBuilder;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutor.SuccessListener;
@@ -147,7 +147,8 @@
     menuButton.setOnClickListener(
         NewVoicemailMenu.createOnClickListener(context, voicemailEntryOfViewHolder));
 
-    setPhoto(voicemailEntryOfViewHolder);
+    contactPhotoView.setPhoto(
+        PhotoInfoBuilder.fromVoicemailEntry(voicemailEntryOfViewHolder).build());
 
     // Update the expanded/collapsed state of this view holder
     // Only update the binding of the mediaPlayerView of the expanded view holder
@@ -206,13 +207,6 @@
     }
   }
 
-  private void setPhoto(VoicemailEntry voicemailEntry) {
-    contactPhotoView.setPhoto(
-        NumberAttributesConverter.toPhotoInfoBuilder(voicemailEntry.getNumberAttributes())
-            .setFormattedNumber(voicemailEntry.getFormattedNumber())
-            .build());
-  }
-
   void collapseViewHolder() {
     LogUtil.i(
         "NewVoicemailViewHolder.collapseViewHolder",
diff --git a/java/com/android/dialer/voicemail/listui/menu/BottomSheetHeader.java b/java/com/android/dialer/voicemail/listui/menu/BottomSheetHeader.java
index bf86278..deca7bd 100644
--- a/java/com/android/dialer/voicemail/listui/menu/BottomSheetHeader.java
+++ b/java/com/android/dialer/voicemail/listui/menu/BottomSheetHeader.java
@@ -17,7 +17,7 @@
 package com.android.dialer.voicemail.listui.menu;
 
 import android.text.TextUtils;
-import com.android.dialer.calllogutils.NumberAttributesConverter;
+import com.android.dialer.calllogutils.PhotoInfoBuilder;
 import com.android.dialer.historyitemactions.HistoryItemBottomSheetHeaderInfo;
 import com.android.dialer.voicemail.model.VoicemailEntry;
 
@@ -27,10 +27,7 @@
   static HistoryItemBottomSheetHeaderInfo fromVoicemailEntry(VoicemailEntry voicemailEntry) {
     return HistoryItemBottomSheetHeaderInfo.newBuilder()
         .setNumber(voicemailEntry.getNumber())
-        .setPhotoInfo(
-            NumberAttributesConverter.toPhotoInfoBuilder(voicemailEntry.getNumberAttributes())
-                .setFormattedNumber(voicemailEntry.getFormattedNumber())
-                .build())
+        .setPhotoInfo(PhotoInfoBuilder.fromVoicemailEntry(voicemailEntry))
         .setPrimaryText(buildPrimaryVoicemailText(voicemailEntry))
         .setSecondaryText(buildSecondaryVoicemailText(voicemailEntry))
         .build();
