diff --git a/res/values/config.xml b/res/values/config.xml
index e4be55f..efe772f 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -15,9 +15,10 @@
          conf xml file.  -->
     <string name="apn_source_service" translatable="false"></string>
 
-    <!-- Countries, in iso country code format, where wfc entitlement is
-         required-->
-    <string-array name="wfc_entitlement_required_countries">
+    <!-- Countries, in iso country code format, where WFC entitlement or
+         other user action is required before user can turn on WFC setting,
+         hence WFC setting should not be restored automatically. -->
+    <string-array name="wfc_restore_blocked_countries" translatable="false">
         <item>us</item>
         <item>ca</item>
     </string-array>
diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java
index 6ac78e0..31c2cfd 100644
--- a/src/com/android/providers/telephony/TelephonyProvider.java
+++ b/src/com/android/providers/telephony/TelephonyProvider.java
@@ -3267,8 +3267,8 @@
                 .getInt(KEY_BACKUP_DATA_FORMAT_VERSION, -1);
 
         Resources r = getContext().getResources();
-        List<String> wfcEntitlementRequiredCountries = Arrays.asList(r.getStringArray(
-                    R.array.wfc_entitlement_required_countries));
+        List<String> wfcRestoreBlockedCountries = Arrays.asList(r.getStringArray(
+                    R.array.wfc_restore_blocked_countries));
 
         while (cursor != null && cursor.moveToNext()) {
             // Get all the possible matching criteria.
@@ -3306,7 +3306,7 @@
 
                 SimRestoreMatch currSimRestoreMatch = new SimRestoreMatch(
                         currIccIdFromDb, currCarrierIdFromDb, currPhoneNumberFromDb,
-                        isoCountryCodeFromDb, wfcEntitlementRequiredCountries, currRow,
+                        isoCountryCodeFromDb, wfcRestoreBlockedCountries, currRow,
                         backupDataFormatVersion);
 
                 if (currSimRestoreMatch == null) {
@@ -3394,7 +3394,7 @@
 
         public SimRestoreMatch(String iccIdFromDb, int carrierIdFromDb,
                 String phoneNumberFromDb, String isoCountryCodeFromDb,
-                List<String> wfcEntitlementRequiredCountries,
+                List<String> wfcRestoreBlockedCountries,
                 PersistableBundle backedUpSimInfoEntry, int backupDataFormatVersion) {
             subId = backedUpSimInfoEntry.getInt(
                 Telephony.SimInfo.COLUMN_UNIQUE_KEY_SUBSCRIPTION_ID,
@@ -3424,7 +3424,7 @@
 
             contentValues = convertBackedUpDataToContentValues(
                     backedUpSimInfoEntry, backupDataFormatVersion, isoCountryCodeFromDb,
-                    wfcEntitlementRequiredCountries);
+                    wfcRestoreBlockedCountries);
             matchScore = calculateMatchScore();
             matchingCriteria = calculateMatchingCriteria();
         }
@@ -3480,7 +3480,7 @@
         private ContentValues convertBackedUpDataToContentValues(
                 PersistableBundle backedUpSimInfoEntry, int backupDataFormatVersion,
                 String isoCountryCodeFromDb,
-                List<String> wfcEntitlementRequiredCountries) {
+                List<String> wfcRestoreBlockedCountries) {
             if (DATABASE_VERSION != 51 << 16) {
                 throw new AssertionError("The database schema has been updated which might make "
                     + "the format of #BACKED_UP_SIM_SPECIFIC_SETTINGS_FILE outdated. Make sure to "
@@ -3548,7 +3548,7 @@
                             Telephony.SimInfo.COLUMN_VT_IMS_ENABLED,
                             DEFAULT_INT_COLUMN_VALUE));
             if (isoCountryCodeFromDb != null
-                    && !wfcEntitlementRequiredCountries
+                    && !wfcRestoreBlockedCountries
                             .contains(isoCountryCodeFromDb.toLowerCase())) {
                 // Don't restore COLUMN_WFC_IMS_ENABLED if the sim is from one of the countries that
                 // requires WFC entitlement.
