diff --git a/java/com/android/dialer/assisteddialing/Constraints.java b/java/com/android/dialer/assisteddialing/Constraints.java
index 788b875..cae3734 100644
--- a/java/com/android/dialer/assisteddialing/Constraints.java
+++ b/java/com/android/dialer/assisteddialing/Constraints.java
@@ -25,6 +25,7 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.Logger;
+import com.android.dialer.phonenumberutil.PhoneNumberHelper;
 import com.android.dialer.strictmode.StrictModeUtils;
 import com.google.i18n.phonenumbers.NumberParseException;
 import com.google.i18n.phonenumbers.PhoneNumberUtil;
@@ -209,7 +210,7 @@
     // roaming and out of service.
     boolean result =
         !PhoneNumberUtils.isEmergencyNumber(numberToCheck)
-            && !PhoneNumberUtils.isLocalEmergencyNumber(context, numberToCheck);
+            && !PhoneNumberHelper.isLocalEmergencyNumber(context, numberToCheck);
     LogUtil.i("Constraints.isNotEmergencyNumber", String.valueOf(result));
     return result;
   }
diff --git a/java/com/android/dialer/oem/PhoneNumberUtilsAccessor.java b/java/com/android/dialer/oem/PhoneNumberUtilsAccessor.java
new file mode 100644
index 0000000..178a7b2
--- /dev/null
+++ b/java/com/android/dialer/oem/PhoneNumberUtilsAccessor.java
@@ -0,0 +1,47 @@
+/*
+ * 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.oem;
+
+import android.content.Context;
+import android.telephony.PhoneNumberUtils;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/** Provides access to hidden APIs in {@link android.telephony.PhoneNumberUtils}. */
+public final class PhoneNumberUtilsAccessor {
+
+  /**
+   * Checks if a given number is an emergency number for the country that the user is in.
+   *
+   * @param subId the subscription ID of the SIM
+   * @param number the number to check
+   * @param context the specific context which the number should be checked against
+   * @return true if the specified number is an emergency number for the country the user is
+   *     currently in.
+   */
+  public static boolean isLocalEmergencyNumber(Context context, int subId, String number) {
+    try {
+      Method method =
+          PhoneNumberUtils.class.getMethod(
+              "isLocalEmergencyNumber", Context.class, int.class, String.class);
+      return (boolean) method.invoke(null, context, subId, number);
+
+    } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
+      throw new RuntimeException(e);
+    }
+  }
+}
diff --git a/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java b/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java
index e105195..33a94ea 100644
--- a/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java
+++ b/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java
@@ -25,6 +25,7 @@
 import android.support.annotation.Nullable;
 import android.telecom.PhoneAccountHandle;
 import android.telephony.PhoneNumberUtils;
+import android.telephony.SubscriptionInfo;
 import android.telephony.TelephonyManager;
 import android.text.BidiFormatter;
 import android.text.TextDirectionHeuristics;
@@ -34,10 +35,13 @@
 import com.android.dialer.compat.CompatUtils;
 import com.android.dialer.compat.telephony.TelephonyManagerCompat;
 import com.android.dialer.oem.MotorolaUtils;
+import com.android.dialer.oem.PhoneNumberUtilsAccessor;
 import com.android.dialer.phonenumbergeoutil.PhoneNumberGeoUtilComponent;
 import com.android.dialer.telecom.TelecomUtil;
+import com.google.common.base.Optional;
 import java.util.Arrays;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 public class PhoneNumberHelper {
@@ -138,6 +142,39 @@
   }
 
   /**
+   * An enhanced version of {@link PhoneNumberUtils#isLocalEmergencyNumber(Context, String)}.
+   *
+   * <p>This methods supports checking the number for all SIMs.
+   *
+   * @param context the context which the number should be checked against
+   * @param number the number to tbe checked
+   * @return true if the specified number is an emergency number for any SIM in the device.
+   */
+  @SuppressWarnings("Guava")
+  public static boolean isLocalEmergencyNumber(Context context, String number) {
+    List<PhoneAccountHandle> phoneAccountHandles =
+        TelecomUtil.getSubscriptionPhoneAccounts(context);
+
+    // If the number of phone accounts with a subscription is no greater than 1, only one SIM is
+    // installed in the device. We hand over the job to PhoneNumberUtils#isLocalEmergencyNumber.
+    if (phoneAccountHandles.size() <= 1) {
+      return PhoneNumberUtils.isLocalEmergencyNumber(context, number);
+    }
+
+    for (PhoneAccountHandle phoneAccountHandle : phoneAccountHandles) {
+      Optional<SubscriptionInfo> subscriptionInfo =
+          TelecomUtil.getSubscriptionInfo(context, phoneAccountHandle);
+      if (subscriptionInfo.isPresent()
+          && PhoneNumberUtilsAccessor.isLocalEmergencyNumber(
+              context, subscriptionInfo.get().getSubscriptionId(), number)) {
+        return true;
+      }
+    }
+
+    return false;
+  }
+
+  /**
    * Returns true if the given number is the number of the configured voicemail. To be able to
    * mock-out this, it is not a static method.
    */
diff --git a/java/com/android/incallui/CallerInfoAsyncQuery.java b/java/com/android/incallui/CallerInfoAsyncQuery.java
index 3358952..87dcc4f 100644
--- a/java/com/android/incallui/CallerInfoAsyncQuery.java
+++ b/java/com/android/incallui/CallerInfoAsyncQuery.java
@@ -35,13 +35,13 @@
 import android.support.annotation.MainThread;
 import android.support.annotation.RequiresPermission;
 import android.support.annotation.WorkerThread;
-import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 import com.android.dialer.common.cp2.DirectoryCompat;
 import com.android.dialer.phonenumbercache.CachedNumberLookupService;
 import com.android.dialer.phonenumbercache.CachedNumberLookupService.CachedContactInfo;
 import com.android.dialer.phonenumbercache.ContactInfoHelper;
 import com.android.dialer.phonenumbercache.PhoneNumberCache;
+import com.android.dialer.phonenumberutil.PhoneNumberHelper;
 import com.android.dialer.strictmode.StrictModeUtils;
 import java.io.IOException;
 import java.io.InputStream;
@@ -166,7 +166,7 @@
     cw.countryIso = info.countryIso;
 
     // check to see if these are recognized numbers, and use shortcuts if we can.
-    if (PhoneNumberUtils.isLocalEmergencyNumber(context, info.phoneNumber)) {
+    if (PhoneNumberHelper.isLocalEmergencyNumber(context, info.phoneNumber)) {
       cw.event = EVENT_EMERGENCY_NUMBER;
     } else if (info.isVoiceMailNumber()) {
       cw.event = EVENT_VOICEMAIL_NUMBER;
