diff --git a/src/com/android/providers/blockednumber/BlockedNumberProvider.java b/src/com/android/providers/blockednumber/BlockedNumberProvider.java
index d4fcaa8..69337cd 100644
--- a/src/com/android/providers/blockednumber/BlockedNumberProvider.java
+++ b/src/com/android/providers/blockednumber/BlockedNumberProvider.java
@@ -40,6 +40,7 @@
 import android.provider.BlockedNumberContract.SystemContract;
 import android.telecom.TelecomManager;
 import android.telephony.CarrierConfigManager;
+import android.telephony.PhoneNumberUtils;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.util.Log;
@@ -326,6 +327,16 @@
         return res;
     }
 
+    private boolean isEmergencyNumber(String phoneNumber) {
+        if (TextUtils.isEmpty(phoneNumber)) {
+            return false;
+        }
+
+        final String e164Number = Utils.getE164Number(getContext(), phoneNumber, null);
+        return PhoneNumberUtils.isEmergencyNumber(phoneNumber)
+                || PhoneNumberUtils.isEmergencyNumber(e164Number);
+    }
+
     private boolean isBlocked(String phoneNumber) {
         if (TextUtils.isEmpty(phoneNumber)) {
             return false;
@@ -394,6 +405,9 @@
         if (getBlockSuppressionStatus().isSuppressed) {
             return false;
         }
+        if (isEmergencyNumber(phoneNumber)) {
+            return false;
+        }
         return isBlocked(phoneNumber);
     }
 
diff --git a/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java b/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java
index 8d58222..6839925 100644
--- a/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java
+++ b/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java
@@ -37,6 +37,7 @@
 import android.location.Country;
 import android.net.Uri;
 import android.os.PersistableBundle;
+import android.os.SystemProperties;
 import android.provider.BlockedNumberContract;
 import android.provider.BlockedNumberContract.BlockedNumbers;
 import android.provider.BlockedNumberContract.SystemContract;
@@ -45,7 +46,6 @@
 import android.test.AndroidTestCase;
 import android.test.MoreAsserts;
 import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.SmallTest;
 
 import junit.framework.Assert;
 
@@ -55,7 +55,7 @@
 /**
  * runtest --path packages/providers/BlockedNumberProvider/tests
  */
-@SmallTest
+@MediumTest
 public class BlockedNumberProviderTest extends AndroidTestCase {
     private MyMockContext mMockContext;
     private ContentResolver mResolver;
@@ -256,7 +256,6 @@
         }
     }
 
-    @MediumTest
     public void testBlockSuppressionAfterEmergencyContact() {
         int blockSuppressionSeconds = 1000;
         when(mMockContext.mCarrierConfigManager.getConfig())
@@ -303,7 +302,6 @@
                 mMockContext.mIntentsBroadcasted.get(0));
     }
 
-    @MediumTest
     public void testBlockSuppressionAfterEmergencyContact_invalidCarrierConfigDefaultValueUsed() {
         int invalidBlockSuppressionSeconds = 700000; // > 1 week
         when(mMockContext.mCarrierConfigManager.getConfig())
@@ -481,6 +479,14 @@
         assertIsBlocked(false, "abcdef@gmail.com");
     }
 
+    public void testEmergencyNumbersAreNotBlockedBySystem() {
+        String emergencyNumber = getEmergencyNumberFromSystemPropertiesOrDefault();
+        insert(cv(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, emergencyNumber));
+
+        assertIsBlocked(true, emergencyNumber);
+        assertFalse(SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber));
+    }
+
     private void assertIsBlocked(boolean expected, String phoneNumber) {
         assertEquals(expected, BlockedNumberContract.isBlocked(mMockContext, phoneNumber));
     }
@@ -525,4 +531,13 @@
                     c.getString(c.getColumnIndex(BlockedNumbers.COLUMN_E164_NUMBER)));
         }
     }
+
+    private String getEmergencyNumberFromSystemPropertiesOrDefault() {
+        String systemEmergencyNumbers = SystemProperties.get("ril.ecclist");
+        if (systemEmergencyNumbers == null) {
+            return "911";
+        } else {
+            return systemEmergencyNumbers.split(",")[0];
+        }
+    }
 }
