diff --git a/src/com/android/providers/telephony/CarrierIdProvider.java b/src/com/android/providers/telephony/CarrierIdProvider.java
index a14923e..91fdf21 100644
--- a/src/com/android/providers/telephony/CarrierIdProvider.java
+++ b/src/com/android/providers/telephony/CarrierIdProvider.java
@@ -70,7 +70,7 @@
     private static final String TAG = CarrierIdProvider.class.getSimpleName();
 
     private static final String DATABASE_NAME = "carrierIdentification.db";
-    private static final int DATABASE_VERSION = 2;
+    private static final int DATABASE_VERSION = 3;
 
     private static final String ASSETS_PB_FILE = "carrier_list.pb";
     private static final String ASSETS_FILE_CHECKSUM_PREF_KEY = "assets_checksum";
@@ -105,6 +105,10 @@
      */
     private static final int APN_INDEX                   = 6;
     /**
+    * index 7: {@link CarrierIdentification#ICCID_PREFIX}
+    */
+    private static final int ICCID_PREFIX_INDEX          = 7;
+    /**
      * ending index of carrier attribute list.
      */
     private static final int CARRIER_ATTR_END_IDX        = APN_INDEX;
@@ -123,7 +127,8 @@
             CarrierIdentification.PLMN,
             CarrierIdentification.IMSI_PREFIX_XPATTERN,
             CarrierIdentification.SPN,
-            CarrierIdentification.APN));
+            CarrierIdentification.APN,
+            CarrierIdentification.ICCID_PREFIX));
 
     private CarrierIdDatabaseHelper mDbHelper;
 
@@ -138,6 +143,7 @@
                 + CarrierIdentification.IMSI_PREFIX_XPATTERN + " TEXT,"
                 + CarrierIdentification.SPN + " TEXT,"
                 + CarrierIdentification.APN + " TEXT,"
+                + CarrierIdentification.ICCID_PREFIX + " TEXT,"
                 + CarrierIdentification.NAME + " TEXT,"
                 + CarrierIdentification.CID + " INTEGER DEFAULT -1,"
                 + "UNIQUE (" + TextUtils.join(", ", CARRIERS_ID_UNIQUE_FIELDS) + "));";
@@ -409,6 +415,14 @@
                     found = true;
                 }
                 break;
+            case ICCID_PREFIX_INDEX:
+                for (String str : attr.iccidPrefix) {
+                     cv.put(CarrierIdentification.ICCID_PREFIX, str);
+                     convertCarrierAttrToContentValues(cv, cvs, attr, index + 1);
+                     cv.remove(CarrierIdentification.ICCID_PREFIX);
+                     found = true;
+                }
+                break;
             default:
                 Log.e(TAG, "unsupported index: " + index);
                 break;
diff --git a/tests/src/com/android/providers/telephony/CarrierIdProviderTest.java b/tests/src/com/android/providers/telephony/CarrierIdProviderTest.java
index 443247a..2bf069b 100644
--- a/tests/src/com/android/providers/telephony/CarrierIdProviderTest.java
+++ b/tests/src/com/android/providers/telephony/CarrierIdProviderTest.java
@@ -56,7 +56,8 @@
     private static final String dummy_imsi_prefix = "IMSI_PREFIX_DUMMY";
     private static final String dummy_spn = "SPN_DUMMY";
     private static final String dummy_apn = "APN_DUMMY";
-    private static final String  dummy_name = "NAME_DUMMY";
+    private static final String dummy_iccid_prefix = "ICCID_PREFIX_DUMMY";
+    private static final String dummy_name = "NAME_DUMMY";
     private static final int dummy_cid = 0;
 
     private MockContextWithProvider mContext;
@@ -271,7 +272,7 @@
         }
 
         Cursor findEntry = null;
-        String[] columns = {CarrierIdentification.CID};
+        String[] columns = {CarrierIdentification.CID, CarrierIdentification.ICCID_PREFIX};
         try {
             findEntry = mContentResolver.query(CarrierIdentification.CONTENT_URI, columns,
                     CarrierIdentification.MCCMNC + "=?", new String[] { dummy_mccmnc },
@@ -282,16 +283,18 @@
         assertEquals(2, findEntry.getCount());
 
         try {
-            // query based on mccmnc & gid1
+            // query based on mccmnc & gid1 & iccid_prefix
             findEntry = mContentResolver.query(CarrierIdentification.CONTENT_URI, columns,
-                    CarrierIdentification.MCCMNC + "=? and " + CarrierIdentification.GID1 + "=?",
-                    new String[] { dummy_mccmnc, dummy_gid1 }, null);
+                    CarrierIdentification.MCCMNC + "=? and " + CarrierIdentification.GID1 + "=? and "
+                    + CarrierIdentification.ICCID_PREFIX + "=?",
+                    new String[] { dummy_mccmnc, dummy_gid1, dummy_iccid_prefix }, null);
         } catch (Exception e) {
             Log.d(TAG, "Query failed:" + e);
         }
         assertEquals(1, findEntry.getCount());
         findEntry.moveToFirst();
         assertEquals(dummy_cid, findEntry.getInt(0));
+        assertEquals(dummy_iccid_prefix, findEntry.getString(1));
     }
 
     private static ContentValues createCarrierInfoInternal() {
@@ -303,6 +306,7 @@
         contentValues.put(CarrierIdentification.IMSI_PREFIX_XPATTERN, dummy_imsi_prefix);
         contentValues.put(CarrierIdentification.SPN, dummy_spn);
         contentValues.put(CarrierIdentification.APN, dummy_apn);
+        contentValues.put(CarrierIdentification.ICCID_PREFIX, dummy_iccid_prefix);
         contentValues.put(CarrierIdentification.NAME, dummy_name);
         contentValues.put(CarrierIdentification.CID, dummy_cid);
         return contentValues;
