diff --git a/src/com/android/providers/contacts/ContactsDatabaseHelper.java b/src/com/android/providers/contacts/ContactsDatabaseHelper.java
index 30b66a6..f522e41 100644
--- a/src/com/android/providers/contacts/ContactsDatabaseHelper.java
+++ b/src/com/android/providers/contacts/ContactsDatabaseHelper.java
@@ -42,6 +42,7 @@
 import android.database.sqlite.SQLiteOpenHelper;
 import android.database.sqlite.SQLiteQueryBuilder;
 import android.database.sqlite.SQLiteStatement;
+import android.icu.util.VersionInfo;
 import android.net.Uri;
 import android.os.Binder;
 import android.os.Bundle;
@@ -103,8 +104,6 @@
 import com.android.providers.contacts.database.MoreDatabaseUtils;
 import com.android.providers.contacts.util.NeededForTesting;
 
-import libcore.icu.ICU;
-
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
@@ -2652,7 +2651,7 @@
         if (!dbLocale.equals(locales.toString())) {
             return true;
         }
-        final String curICUVersion = ICU.getIcuVersion();
+        final String curICUVersion = getDeviceIcuVersion();
         final String dbICUVersion = getProperty(DbProperties.ICU_VERSION,
                 "(unknown)");
         if (!curICUVersion.equals(dbICUVersion)) {
@@ -2663,10 +2662,14 @@
         return false;
     }
 
+    private static String getDeviceIcuVersion() {
+        return VersionInfo.ICU_VERSION.toString();
+    }
+
     private void upgradeLocaleData(SQLiteDatabase db, boolean rebuildSqliteStats) {
         final LocaleSet locales = LocaleSet.newDefault();
         Log.i(TAG, "Upgrading locale data for " + locales
-                + " (ICU v" + ICU.getIcuVersion() + ")");
+                + " (ICU v" + getDeviceIcuVersion() + ")");
         final long start = SystemClock.elapsedRealtime();
         rebuildLocaleData(db, locales, rebuildSqliteStats);
         Log.i(TAG, "Locale update completed in " + (SystemClock.elapsedRealtime() - start) + "ms");
@@ -2685,7 +2688,7 @@
         FastScrollingIndexCache.getInstance(mContext).invalidate();
         // Update the ICU version used to generate the locale derived data
         // so we can tell when we need to rebuild with new ICU versions.
-        PropertyUtils.setProperty(db, DbProperties.ICU_VERSION, ICU.getIcuVersion());
+        PropertyUtils.setProperty(db, DbProperties.ICU_VERSION, getDeviceIcuVersion());
         PropertyUtils.setProperty(db, DbProperties.LOCALE, locales.toString());
     }
 
@@ -2699,7 +2702,7 @@
             return;
         }
         Log.i(TAG, "Switching to locale " + locales
-                + " (ICU v" + ICU.getIcuVersion() + ")");
+                + " (ICU v" + getDeviceIcuVersion() + ")");
 
         final long start = SystemClock.elapsedRealtime();
         SQLiteDatabase db = getWritableDatabase();
diff --git a/src/com/android/providers/contacts/ContactsUpgradeReceiver.java b/src/com/android/providers/contacts/ContactsUpgradeReceiver.java
index 6f50a14..c8816ac 100644
--- a/src/com/android/providers/contacts/ContactsUpgradeReceiver.java
+++ b/src/com/android/providers/contacts/ContactsUpgradeReceiver.java
@@ -16,6 +16,7 @@
 
 package com.android.providers.contacts;
 
+import android.icu.util.VersionInfo;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
@@ -26,8 +27,6 @@
 import android.os.RemoteException;
 import android.util.Log;
 
-import libcore.icu.ICU;
-
 /**
  * This will be launched during system boot, after the core system has
  * been brought up but before any non-persistent processes have been
@@ -56,7 +55,7 @@
             final SharedPreferences prefs = context.getSharedPreferences(TAG, Context.MODE_PRIVATE);
             final int prefDbVersion = prefs.getInt(PREF_DB_VERSION, 0);
 
-            final String curIcuVersion = ICU.getIcuVersion();
+            final String curIcuVersion = VersionInfo.ICU_VERSION.toString();
             final String curOsVersion = getOsVersionString();
 
             final String prefIcuVersion = prefs.getString(PREF_ICU_VERSION, "");
