diff --git a/java/src/com/android/inputmethod/dictionarypack/DictionaryProvider.java b/java/src/com/android/inputmethod/dictionarypack/DictionaryProvider.java
index 80def70..c35995b 100644
--- a/java/src/com/android/inputmethod/dictionarypack/DictionaryProvider.java
+++ b/java/src/com/android/inputmethod/dictionarypack/DictionaryProvider.java
@@ -89,10 +89,13 @@
     private static final class WordListInfo {
         public final String mId;
         public final String mLocale;
+        public final String mRawChecksum;
         public final int mMatchLevel;
-        public WordListInfo(final String id, final String locale, final int matchLevel) {
+        public WordListInfo(final String id, final String locale, final String rawChecksum,
+                final int matchLevel) {
             mId = id;
             mLocale = locale;
+            mRawChecksum = rawChecksum;
             mMatchLevel = matchLevel;
         }
     }
@@ -106,7 +109,8 @@
     private static final class ResourcePathCursor extends AbstractCursor {
 
         // Column names for the cursor returned by this content provider.
-        static private final String[] columnNames = { "id", "locale" };
+        static private final String[] columnNames = { MetadataDbHelper.WORDLISTID_COLUMN,
+                MetadataDbHelper.LOCALE_COLUMN, MetadataDbHelper.RAW_CHECKSUM_COLUMN };
 
         // The list of word lists served by this provider that match the client request.
         final WordListInfo[] mWordLists;
@@ -141,6 +145,7 @@
             switch (column) {
                 case 0: return mWordLists[mPos].mId;
                 case 1: return mWordLists[mPos].mLocale;
+                case 2: return mWordLists[mPos].mRawChecksum;
                 default : return null;
             }
         }
@@ -357,6 +362,8 @@
             final int localeIndex = results.getColumnIndex(MetadataDbHelper.LOCALE_COLUMN);
             final int localFileNameIndex =
                     results.getColumnIndex(MetadataDbHelper.LOCAL_FILENAME_COLUMN);
+            final int rawChecksumIndex =
+                    results.getColumnIndex(MetadataDbHelper.RAW_CHECKSUM_COLUMN);
             final int statusIndex = results.getColumnIndex(MetadataDbHelper.STATUS_COLUMN);
             if (results.moveToFirst()) {
                 do {
@@ -379,6 +386,7 @@
                     }
                     final String wordListLocale = results.getString(localeIndex);
                     final String wordListLocalFilename = results.getString(localFileNameIndex);
+                    final String wordListRawChecksum = results.getString(rawChecksumIndex);
                     final int wordListStatus = results.getInt(statusIndex);
                     // Test the requested locale against this wordlist locale. The requested locale
                     // has to either match exactly or be more specific than the dictionary - a
@@ -412,8 +420,8 @@
                     final WordListInfo currentBestMatch = dicts.get(wordListCategory);
                     if (null == currentBestMatch
                             || currentBestMatch.mMatchLevel < matchLevel) {
-                        dicts.put(wordListCategory,
-                                new WordListInfo(wordListId, wordListLocale, matchLevel));
+                        dicts.put(wordListCategory, new WordListInfo(wordListId, wordListLocale,
+                                wordListRawChecksum, matchLevel));
                     }
                 } while (results.moveToNext());
             }
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
index e428b1d..669ad09 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
@@ -167,8 +167,9 @@
             do {
                 final String wordListId = cursor.getString(0);
                 final String wordListLocale = cursor.getString(1);
+                final String wordListRawChecksum = cursor.getString(2);
                 if (TextUtils.isEmpty(wordListId)) continue;
-                list.add(new WordListInfo(wordListId, wordListLocale));
+                list.add(new WordListInfo(wordListId, wordListLocale, wordListRawChecksum));
             } while (cursor.moveToNext());
             return list;
         } catch (RemoteException e) {
diff --git a/java/src/com/android/inputmethod/latin/WordListInfo.java b/java/src/com/android/inputmethod/latin/WordListInfo.java
index 5ac806a..268fe98 100644
--- a/java/src/com/android/inputmethod/latin/WordListInfo.java
+++ b/java/src/com/android/inputmethod/latin/WordListInfo.java
@@ -22,8 +22,10 @@
 public final class WordListInfo {
     public final String mId;
     public final String mLocale;
-    public WordListInfo(final String id, final String locale) {
+    public final String mRawChecksum;
+    public WordListInfo(final String id, final String locale, final String rawChecksum) {
         mId = id;
         mLocale = locale;
+        mRawChecksum = rawChecksum;
     }
 }
