diff --git a/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java b/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
index a2789cc..fbc8991 100644
--- a/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
+++ b/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
@@ -34,6 +34,8 @@
 import java.util.List;
 import java.util.TreeMap;
 
+import javax.annotation.Nullable;
+
 /**
  * Various helper functions for the state database
  */
@@ -705,6 +707,7 @@
      * @param version the word list version.
      * @return the metadata about this word list.
      */
+    @Nullable
     public static ContentValues getContentValuesByWordListId(final SQLiteDatabase db,
             final String id, final int version) {
         final Cursor cursor = db.query(METADATA_TABLE_NAME,
diff --git a/java/src/com/android/inputmethod/dictionarypack/MetadataHandler.java b/java/src/com/android/inputmethod/dictionarypack/MetadataHandler.java
index 329b9f6..e5d632f 100644
--- a/java/src/com/android/inputmethod/dictionarypack/MetadataHandler.java
+++ b/java/src/com/android/inputmethod/dictionarypack/MetadataHandler.java
@@ -19,6 +19,7 @@
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
+import android.util.Log;
 
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -30,10 +31,13 @@
  * Helper class to easy up manipulation of dictionary pack metadata.
  */
 public class MetadataHandler {
+
+    public static final String TAG = MetadataHandler.class.getSimpleName();
+
     // The canonical file name for metadata. This is not the name of a real file on the
     // device, but a symbolic name used in the database and in metadata handling. It is never
     // tested against, only used for human-readability as the file name for the metadata.
-    public final static String METADATA_FILENAME = "metadata.json";
+    public static final String METADATA_FILENAME = "metadata.json";
 
     /**
      * Reads the data from the cursor and store it in metadata objects.
@@ -114,6 +118,14 @@
             final String clientId, final String wordListId, final int version) {
         final ContentValues contentValues = MetadataDbHelper.getContentValuesByWordListId(
                 MetadataDbHelper.getDb(context, clientId), wordListId, version);
+        if (contentValues == null) {
+            // TODO: Figure out why this would happen.
+            // Check if this happens when the metadata gets updated in the background.
+            Log.e(TAG, String.format( "Unable to find the current metadata for wordlist "
+                            + "(clientId=%s, wordListId=%s, version=%d) on the database",
+                    clientId, wordListId, version));
+            return null;
+        }
         return WordListMetadata.createFromContentValues(contentValues);
     }
 
diff --git a/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java b/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java
index 30ff0b8..e720f3c 100644
--- a/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java
+++ b/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java
@@ -1143,6 +1143,9 @@
             }
             final WordListMetadata wordListMetaData = MetadataHandler.getCurrentMetadataForWordList(
                     context, clientId, wordlistId, version);
+            if (wordListMetaData == null) {
+                return;
+            }
 
             final ActionBatch actions = new ActionBatch();
             actions.add(new ActionBatch.StartDownloadAction(
diff --git a/java/src/com/android/inputmethod/dictionarypack/WordListMetadata.java b/java/src/com/android/inputmethod/dictionarypack/WordListMetadata.java
index 59f75e4..99cffb8 100644
--- a/java/src/com/android/inputmethod/dictionarypack/WordListMetadata.java
+++ b/java/src/com/android/inputmethod/dictionarypack/WordListMetadata.java
@@ -18,6 +18,8 @@
 
 import android.content.ContentValues;
 
+import javax.annotation.Nonnull;
+
 /**
  * The metadata for a single word list.
  *
@@ -77,7 +79,7 @@
      *
      * If this lacks any required field, IllegalArgumentException is thrown.
      */
-    public static WordListMetadata createFromContentValues(final ContentValues values) {
+    public static WordListMetadata createFromContentValues(@Nonnull final ContentValues values) {
         final String id = values.getAsString(MetadataDbHelper.WORDLISTID_COLUMN);
         final Integer type = values.getAsInteger(MetadataDbHelper.TYPE_COLUMN);
         final String description = values.getAsString(MetadataDbHelper.DESCRIPTION_COLUMN);
