diff --git a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
index 5c651da..daa4b4e 100644
--- a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
@@ -1057,8 +1057,8 @@
                 + ", lastNetworkType=" + accessNetworkTypeToString(mLastNetworkType));
 
         if (mLastRegResult != null
-                && !SubscriptionManager.isValidSubscriptionId(getSubId())
-                && sPreferGeranWhenSimAbsent.contains(mLastRegResult.getCountryIso())) {
+                && sPreferGeranWhenSimAbsent.contains(mLastRegResult.getCountryIso())
+                && !isSimReady()) {
             logi("getNextPreferredNetworks preferGeran");
             preferredNetworks.add(GERAN);
             preferredNetworks.add(UTRAN);
diff --git a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
index 5062b32..f783a12 100644
--- a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
@@ -3971,7 +3971,7 @@
     }
 
     @Test
-    public void testAdjustCsRatPreference() throws Exception {
+    public void testInvalidSubscriptionAdjustCsRatPreference() throws Exception {
         doReturn(new String[] {"us"}).when(mResources).getStringArray(
                 eq(R.array.config_countries_prefer_geran_when_sim_absent));
 
@@ -3998,6 +3998,34 @@
     }
 
     @Test
+    public void testSimNotReadyAdjustCsRatPreference() throws Exception {
+        doReturn(new String[] {"us"}).when(mResources).getStringArray(
+                eq(R.array.config_countries_prefer_geran_when_sim_absent));
+
+        createSelector(SLOT_0_SUB_ID);
+        unsolBarringInfoChanged(false);
+        // SIM state is not ready.
+        doReturn(TelephonyManager.SIM_STATE_PIN_REQUIRED)
+                .when(mTelephonyManager).getSimState(anyInt());
+
+        EmergencyRegistrationResult regResult = getEmergencyRegResult(EUTRAN,
+                REGISTRATION_STATE_UNKNOWN, 0, false, true, 0, 0, "", "", "us");
+        SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+        mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+        processAllMessages();
+
+        bindImsServiceUnregistered();
+
+        verifyPsDialed();
+
+        mDomainSelector.reselectDomain(attr);
+        processAllMessages();
+
+        // Verify adjusted RAT preference
+        verifyScanPreferred(DomainSelectionService.SCAN_TYPE_NO_PREFERENCE, GERAN);
+    }
+
+    @Test
     public void testNotAdjustCsRatPreferenceCountryNotIdentified() throws Exception {
         doReturn(new String[] {"us"}).when(mResources).getStringArray(
                 eq(R.array.config_countries_prefer_geran_when_sim_absent));
