diff --git a/java/com/android/dialer/calllog/ui/menu/Modules.java b/java/com/android/dialer/calllog/ui/menu/Modules.java
index b06e0fb..cfeca10 100644
--- a/java/com/android/dialer/calllog/ui/menu/Modules.java
+++ b/java/com/android/dialer/calllog/ui/menu/Modules.java
@@ -126,6 +126,7 @@
         .setCanSupportAssistedDialing(canSupportAssistedDialing(row))
         .setCanSupportCarrierVideoCall(row.getNumberAttributes().getCanSupportCarrierVideoCall())
         .setIsBlocked(row.getNumberAttributes().getIsBlocked())
+        .setIsEmergencyNumber(row.getNumberAttributes().getIsEmergencyNumber())
         .setIsSpam(row.getNumberAttributes().getIsSpam())
         .setIsVoicemailCall(row.getIsVoicemailCall())
         .setContactSource(row.getNumberAttributes().getContactSource())
diff --git a/java/com/android/dialer/calllogutils/CallLogEntryText.java b/java/com/android/dialer/calllogutils/CallLogEntryText.java
index cd8fb44..54b1e19 100644
--- a/java/com/android/dialer/calllogutils/CallLogEntryText.java
+++ b/java/com/android/dialer/calllogutils/CallLogEntryText.java
@@ -21,7 +21,6 @@
 import android.text.TextUtils;
 import com.android.dialer.calllog.model.CoalescedRow;
 import com.android.dialer.duo.DuoComponent;
-import com.android.dialer.phonenumberutil.PhoneNumberHelper;
 import com.android.dialer.time.Clock;
 import com.google.common.base.Optional;
 import com.google.common.collect.Collections2;
@@ -44,7 +43,7 @@
    */
   public static CharSequence buildPrimaryText(Context context, CoalescedRow row) {
     // Calls to emergency services should be shown as "Emergency number".
-    if (PhoneNumberHelper.isLocalEmergencyNumber(context, row.getNumber().getNormalizedNumber())) {
+    if (row.getNumberAttributes().getIsEmergencyNumber()) {
       return context.getText(R.string.emergency_number);
     }
 
@@ -110,7 +109,7 @@
   public static CharSequence buildSecondaryTextForEntries(
       Context context, Clock clock, CoalescedRow row) {
     // For emergency numbers, the secondary text should contain only the timestamp.
-    if (PhoneNumberHelper.isLocalEmergencyNumber(context, row.getNumber().getNormalizedNumber())) {
+    if (row.getNumberAttributes().getIsEmergencyNumber()) {
       return CallLogDates.newCallLogTimestampLabel(
           context, clock.currentTimeMillis(), row.getTimestamp());
     }
@@ -168,7 +167,7 @@
      */
 
     // For emergency numbers, the secondary text should contain only the number.
-    if (PhoneNumberHelper.isLocalEmergencyNumber(context, row.getNumber().getNormalizedNumber())) {
+    if (row.getNumberAttributes().getIsEmergencyNumber()) {
       return !row.getFormattedNumber().isEmpty()
           ? row.getFormattedNumber()
           : row.getNumber().getNormalizedNumber();
diff --git a/java/com/android/dialer/historyitemactions/HistoryItemActionModulesBuilder.java b/java/com/android/dialer/historyitemactions/HistoryItemActionModulesBuilder.java
index 86bb79d..5da56a1 100644
--- a/java/com/android/dialer/historyitemactions/HistoryItemActionModulesBuilder.java
+++ b/java/com/android/dialer/historyitemactions/HistoryItemActionModulesBuilder.java
@@ -30,7 +30,6 @@
 import com.android.dialer.duo.Duo;
 import com.android.dialer.duo.DuoComponent;
 import com.android.dialer.logging.ReportingLocation;
-import com.android.dialer.phonenumberutil.PhoneNumberHelper;
 import com.android.dialer.util.CallUtil;
 import com.android.dialer.util.UriUtils;
 import java.util.ArrayList;
@@ -140,7 +139,7 @@
    * capability, and Duo is available, add a Duo video call module.
    */
   public HistoryItemActionModulesBuilder addModuleForVideoCall() {
-    if (isEmergencyNumber()
+    if (moduleInfo.getIsEmergencyNumber()
         || moduleInfo.getIsVoicemailCall()
         || moduleInfo.getIsBlocked()
         || moduleInfo.getIsSpam()) {
@@ -192,7 +191,7 @@
   public HistoryItemActionModulesBuilder addModuleForSendingTextMessage() {
     // TODO(zachh): There are other conditions where this module should not be shown
     // (e.g., business numbers).
-    if (isEmergencyNumber()
+    if (moduleInfo.getIsEmergencyNumber()
         || moduleInfo.getIsVoicemailCall()
         || moduleInfo.getIsBlocked()
         || TextUtils.isEmpty(moduleInfo.getNormalizedNumber())) {
@@ -233,7 +232,7 @@
    * </ul>
    */
   public HistoryItemActionModulesBuilder addModuleForAddingToContacts() {
-    if (isEmergencyNumber()
+    if (moduleInfo.getIsEmergencyNumber()
         || moduleInfo.getIsVoicemailCall()
         || moduleInfo.getIsBlocked()
         || moduleInfo.getIsSpam()
@@ -281,7 +280,7 @@
    * <p>If a number is not blocked or marked as spam, add the "Block/Report spam" module.
    */
   public HistoryItemActionModulesBuilder addModuleForBlockedOrSpamNumber() {
-    if (isEmergencyNumber() || moduleInfo.getIsVoicemailCall()) {
+    if (moduleInfo.getIsEmergencyNumber() || moduleInfo.getIsVoicemailCall()) {
       return this;
     }
 
@@ -401,10 +400,6 @@
         && !UriUtils.isEncodedContactUri(Uri.parse(moduleInfo.getLookupUri()));
   }
 
-  private boolean isEmergencyNumber() {
-    return PhoneNumberHelper.isLocalEmergencyNumber(context, moduleInfo.getNormalizedNumber());
-  }
-
   /**
    * Maps the value of {@link HistoryItemActionModuleInfo#getHost()} to {@link
    * CallInitiationType.Type}, which is required by {@link CallIntentBuilder} to build a call
diff --git a/java/com/android/dialer/historyitemactions/history_item_action_module_info.proto b/java/com/android/dialer/historyitemactions/history_item_action_module_info.proto
index 99071a7..f7022c2 100644
--- a/java/com/android/dialer/historyitemactions/history_item_action_module_info.proto
+++ b/java/com/android/dialer/historyitemactions/history_item_action_module_info.proto
@@ -10,7 +10,7 @@
 import "java/com/android/dialer/logging/contact_source.proto";
 
 // Contains information needed to construct items (modules) in a bottom sheet.
-// Next ID: 16
+// Next ID: 17
 message HistoryItemActionModuleInfo {
   // The dialer-normalized version of a phone number.
   // See DialerPhoneNumber.normalized_number.
@@ -66,4 +66,7 @@
     VOICEMAIL = 2;
   }
   optional Host host = 15;
+
+  // Whether the number is an emergency number.
+  optional bool is_emergency_number = 16;
 }
diff --git a/java/com/android/dialer/voicemail/listui/menu/Modules.java b/java/com/android/dialer/voicemail/listui/menu/Modules.java
index dcd9116..5a9a711 100644
--- a/java/com/android/dialer/voicemail/listui/menu/Modules.java
+++ b/java/com/android/dialer/voicemail/listui/menu/Modules.java
@@ -58,6 +58,7 @@
         .setCanSupportCarrierVideoCall(
             voicemailEntry.getNumberAttributes().getCanSupportCarrierVideoCall())
         .setIsBlocked(voicemailEntry.getNumberAttributes().getIsBlocked())
+        .setIsEmergencyNumber(voicemailEntry.getNumberAttributes().getIsEmergencyNumber())
         .setIsSpam(voicemailEntry.getNumberAttributes().getIsSpam())
         // A voicemail call is an outgoing call to the voicemail box.
         // Voicemail entries are not voicemail calls.
