diff --git a/java/com/android/dialer/calllog/database/contract/number_attributes.proto b/java/com/android/dialer/calllog/database/contract/number_attributes.proto
index f42974d..2c46d1b 100644
--- a/java/com/android/dialer/calllog/database/contract/number_attributes.proto
+++ b/java/com/android/dialer/calllog/database/contract/number_attributes.proto
@@ -24,7 +24,7 @@
 import "java/com/android/dialer/logging/contact_source.proto";
 
 // Information related to the phone number of the call.
-// Next ID: 14
+// Next ID: 15
 message NumberAttributes {
   // The name (which may be a person's name or business name, but not a number)
   // formatted exactly as it should appear to the user. If the user's locale or
@@ -74,4 +74,7 @@
   // Description of the number's geolocation (e.g., "Mountain View, CA").
   // This string is for display purpose only.
   optional string geolocation = 13;
+
+  // Whether the number is an emergency number.
+  optional bool is_emergency_number = 14;
 }
\ No newline at end of file
diff --git a/java/com/android/dialer/calllogutils/NumberAttributesConverter.java b/java/com/android/dialer/calllogutils/NumberAttributesConverter.java
index 9f07fda..8081c4b 100644
--- a/java/com/android/dialer/calllogutils/NumberAttributesConverter.java
+++ b/java/com/android/dialer/calllogutils/NumberAttributesConverter.java
@@ -57,6 +57,7 @@
         .setIsCp2InfoIncomplete(phoneLookupInfoConsolidator.isDefaultCp2InfoIncomplete())
         .setContactSource(phoneLookupInfoConsolidator.getContactSource())
         .setCanSupportCarrierVideoCall(phoneLookupInfoConsolidator.canSupportCarrierVideoCall())
-        .setGeolocation(phoneLookupInfoConsolidator.getGeolocation());
+        .setGeolocation(phoneLookupInfoConsolidator.getGeolocation())
+        .setIsEmergencyNumber(phoneLookupInfoConsolidator.isEmergencyNumber());
   }
 }
diff --git a/java/com/android/dialer/phonelookup/PhoneLookupModule.java b/java/com/android/dialer/phonelookup/PhoneLookupModule.java
index c6e91c4..16aa8e5 100644
--- a/java/com/android/dialer/phonelookup/PhoneLookupModule.java
+++ b/java/com/android/dialer/phonelookup/PhoneLookupModule.java
@@ -21,6 +21,7 @@
 import com.android.dialer.phonelookup.cnap.CnapPhoneLookup;
 import com.android.dialer.phonelookup.cp2.Cp2DefaultDirectoryPhoneLookup;
 import com.android.dialer.phonelookup.cp2.Cp2ExtendedDirectoryPhoneLookup;
+import com.android.dialer.phonelookup.emergency.EmergencyPhoneLookup;
 import com.android.dialer.phonelookup.spam.SpamPhoneLookup;
 import com.google.common.collect.ImmutableList;
 import dagger.Module;
@@ -37,6 +38,7 @@
       CnapPhoneLookup cnapPhoneLookup,
       Cp2DefaultDirectoryPhoneLookup cp2DefaultDirectoryPhoneLookup,
       Cp2ExtendedDirectoryPhoneLookup cp2ExtendedDirectoryPhoneLookup,
+      EmergencyPhoneLookup emergencyPhoneLookup,
       SystemBlockedNumberPhoneLookup systemBlockedNumberPhoneLookup,
       SpamPhoneLookup spamPhoneLookup) {
     return ImmutableList.of(
@@ -44,6 +46,7 @@
         cnapPhoneLookup,
         cp2DefaultDirectoryPhoneLookup,
         cp2ExtendedDirectoryPhoneLookup,
+        emergencyPhoneLookup,
         systemBlockedNumberPhoneLookup,
         spamPhoneLookup);
   }
diff --git a/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java b/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java
index 23ecc83..29a0de5 100644
--- a/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java
+++ b/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java
@@ -347,6 +347,14 @@
 
   /**
    * The {@link PhoneLookupInfo} passed to the constructor is associated with a number. This method
+   * returns whether the number is an emergency number (e.g., 911 in the U.S.).
+   */
+  public boolean isEmergencyNumber() {
+    return phoneLookupInfo.getEmergencyInfo().getIsEmergencyNumber();
+  }
+
+  /**
+   * The {@link PhoneLookupInfo} passed to the constructor is associated with a number. This method
    * returns whether the number can be reported as invalid.
    *
    * <p>As we currently report invalid numbers via the People API, only numbers from the People API
diff --git a/java/com/android/dialer/phonelookup/emergency/EmergencyPhoneLookup.java b/java/com/android/dialer/phonelookup/emergency/EmergencyPhoneLookup.java
new file mode 100644
index 0000000..3f675d3
--- /dev/null
+++ b/java/com/android/dialer/phonelookup/emergency/EmergencyPhoneLookup.java
@@ -0,0 +1,117 @@
+/*
+ * 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.phonelookup.emergency;
+
+import android.content.Context;
+import com.android.dialer.DialerPhoneNumber;
+import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
+import com.android.dialer.inject.ApplicationContext;
+import com.android.dialer.phonelookup.PhoneLookup;
+import com.android.dialer.phonelookup.PhoneLookupInfo;
+import com.android.dialer.phonelookup.PhoneLookupInfo.EmergencyInfo;
+import com.android.dialer.phonenumberutil.PhoneNumberHelper;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import javax.inject.Inject;
+
+/**
+ * PhoneLookup implementation for checking if a number is an emergency number.
+ *
+ * <p>The check has to be done in a PhoneLookup as it involves detecting the user's location and
+ * obtaining SIM info, which are expensive operations. Doing it in the main thread will make the UI
+ * super janky.
+ */
+public class EmergencyPhoneLookup implements PhoneLookup<EmergencyInfo> {
+
+  private final Context appContext;
+  private final ListeningExecutorService backgroundExecutorService;
+
+  @Inject
+  EmergencyPhoneLookup(
+      @ApplicationContext Context appContext,
+      @BackgroundExecutor ListeningExecutorService backgroundExecutorService) {
+    this.appContext = appContext;
+    this.backgroundExecutorService = backgroundExecutorService;
+  }
+
+  @Override
+  public ListenableFuture<EmergencyInfo> lookup(DialerPhoneNumber dialerPhoneNumber) {
+    return backgroundExecutorService.submit(
+        () ->
+            EmergencyInfo.newBuilder()
+                .setIsEmergencyNumber(
+                    PhoneNumberHelper.isLocalEmergencyNumber(
+                        appContext, dialerPhoneNumber.getNormalizedNumber()))
+                .build());
+  }
+
+  @Override
+  public ListenableFuture<Boolean> isDirty(ImmutableSet<DialerPhoneNumber> phoneNumbers) {
+    return Futures.immediateFuture(false);
+  }
+
+  @Override
+  public ListenableFuture<ImmutableMap<DialerPhoneNumber, EmergencyInfo>> getMostRecentInfo(
+      ImmutableMap<DialerPhoneNumber, EmergencyInfo> existingInfoMap) {
+    // We can update EmergencyInfo for all numbers in the provided map, but the negative impact on
+    // performance is intolerable as checking a single number involves detecting the user's location
+    // and obtaining SIM info, which will take more than 100ms (see
+    // android.telephony.PhoneNumberUtils#isLocalEmergencyNumber(Context, int, String) for details).
+    //
+    // As emergency numbers won't change in a country, the only case we will miss is that
+    //   (1) a number is an emergency number in country A but not in country B,
+    //   (2) a user has an emergency call entry when they are in country A, and
+    //   (3) they travel from A to B,
+    // which is a rare event.
+    //
+    // We can update the implementation if telecom supports batch check in the future.
+    return Futures.immediateFuture(existingInfoMap);
+  }
+
+  @Override
+  public void setSubMessage(PhoneLookupInfo.Builder destination, EmergencyInfo subMessage) {
+    destination.setEmergencyInfo(subMessage);
+  }
+
+  @Override
+  public EmergencyInfo getSubMessage(PhoneLookupInfo phoneLookupInfo) {
+    return phoneLookupInfo.getEmergencyInfo();
+  }
+
+  @Override
+  public ListenableFuture<Void> onSuccessfulBulkUpdate() {
+    return Futures.immediateFuture(null);
+  }
+
+  @Override
+  public void registerContentObservers() {
+    // No content observer to register.
+  }
+
+  @Override
+  public void unregisterContentObservers() {
+    // Nothing to be done as no content observer is registered.
+  }
+
+  @Override
+  public ListenableFuture<Void> clearData() {
+    return Futures.immediateFuture(null);
+  }
+}
diff --git a/java/com/android/dialer/phonelookup/phone_lookup_info.proto b/java/com/android/dialer/phonelookup/phone_lookup_info.proto
index 50817c4..9e9dfa9 100644
--- a/java/com/android/dialer/phonelookup/phone_lookup_info.proto
+++ b/java/com/android/dialer/phonelookup/phone_lookup_info.proto
@@ -14,7 +14,7 @@
 // "cp2_info_in_default_directory" corresponds to class
 // Cp2DefaultDirectoryPhoneLookup, and class Cp2DefaultDirectoryPhoneLookup
 // alone is responsible for populating it.
-// Next ID: 9
+// Next ID: 10
 message PhoneLookupInfo {
   // Information about a PhoneNumber retrieved from CP2.
   message Cp2Info {
@@ -175,4 +175,11 @@
     optional string photo_uri = 3;
   }
   optional CequintInfo cequint_info = 8;
+
+  // Message indicating whether a number is an emergency number.
+  // Next ID: 2
+  message EmergencyInfo {
+    optional bool is_emergency_number = 1;
+  }
+  optional EmergencyInfo emergency_info = 9;
 }
\ No newline at end of file
