diff --git a/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java b/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
index 99cc5b924bb2e1fce18a41d2f1c7feab49c525a0..ff5aba6d891fef7969611823a256f4bb488af37b 100644
--- a/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
+++ b/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
@@ -199,6 +199,7 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
             final ContentValues defaultMetadataValues = new ContentValues();
             defaultMetadataValues.put(CLIENT_CLIENT_ID_COLUMN, "");
             defaultMetadataValues.put(CLIENT_METADATA_URI_COLUMN, defaultMetadataUri);
+            defaultMetadataValues.put(CLIENT_PENDINGID_COLUMN, UpdateHandler.NOT_AN_ID);
             db.insert(CLIENT_TABLE_NAME, null, defaultMetadataValues);
         }
     }
@@ -358,21 +359,21 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
     }
 
     /**
-     * Get the metadata download ID for a client ID.
+     * Get the metadata download ID for a metadata URI.
      *
-     * This will retrieve the download ID for the metadata file associated with a client ID.
-     * If there is no metadata download in progress for this client, it will return NOT_AN_ID.
+     * This will retrieve the download ID for the metadata file that has the passed URI.
+     * If this URI is not being downloaded right now, it will return NOT_AN_ID.
      *
      * @param context a context instance to open the database on
-     * @param clientId the client ID to retrieve the metadata download ID of
+     * @param uri the URI to retrieve the metadata download ID of
      * @return the metadata download ID, or NOT_AN_ID if no download is in progress
      */
-    public static long getMetadataDownloadIdForClient(final Context context,
-            final String clientId) {
+    public static long getMetadataDownloadIdForURI(final Context context,
+            final String uri) {
         SQLiteDatabase defaultDb = getDb(context, null);
         final Cursor cursor = defaultDb.query(CLIENT_TABLE_NAME,
                 new String[] { CLIENT_PENDINGID_COLUMN },
-                CLIENT_CLIENT_ID_COLUMN + " = ?", new String[] { clientId },
+                CLIENT_METADATA_URI_COLUMN + " = ?", new String[] { uri },
                 null, null, null, null);
         try {
             if (!cursor.moveToFirst()) return UpdateHandler.NOT_AN_ID;
@@ -782,6 +783,8 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
                     " but the values " + "contain a different ID : ", valuesClientId);
             return;
         }
+        // Default value for a pending ID is NOT_AN_ID
+        values.put(CLIENT_PENDINGID_COLUMN, UpdateHandler.NOT_AN_ID);
         final SQLiteDatabase defaultDb = getDb(context, "");
         if (-1 == defaultDb.insert(CLIENT_TABLE_NAME, null, values)) {
             defaultDb.update(CLIENT_TABLE_NAME, values,
diff --git a/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java b/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java
index f66ef87332d611e722fdb9572f6e7e08a5057551..0e7c3bb7e0d3e083b14aafa4538005a51d860e81 100644
--- a/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java
+++ b/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java
@@ -272,23 +272,22 @@ public final class UpdateHandler {
     }
 
     /**
-     * Cancels a pending update, if there is one.
+     * Cancels downloading a file, if there is one for this URI.
      *
-     * If none, this is a no-op.
+     * If we are not currently downloading the file at this URI, this is a no-op.
      *
      * @param context the context to open the database on
-     * @param clientId the id of the client
+     * @param metadataUri the URI to cancel
      * @param manager an instance of DownloadManager
      */
     private static void cancelUpdateWithDownloadManager(final Context context,
-            final String clientId, final DownloadManager manager) {
+            final String metadataUri, final DownloadManager manager) {
         synchronized (sSharedIdProtector) {
             final long metadataDownloadId =
-                    MetadataDbHelper.getMetadataDownloadIdForClient(context, clientId);
+                    MetadataDbHelper.getMetadataDownloadIdForURI(context, metadataUri);
             if (NOT_AN_ID == metadataDownloadId) return;
             manager.remove(metadataDownloadId);
-            writeMetadataDownloadId(context,
-                    MetadataDbHelper.getMetadataUriAsString(context, clientId), NOT_AN_ID);
+            writeMetadataDownloadId(context, metadataUri, NOT_AN_ID);
         }
         // Consider a cancellation as a failure. As such, inform listeners that the download
         // has failed.
@@ -298,10 +297,10 @@ public final class UpdateHandler {
     }
 
     /**
-     * Cancels a pending update, if there is one.
+     * Cancels a pending update for this client, if there is one.
      *
-     * If there is none, this is a no-op. This is a helper method that gets the
-     * download manager service.
+     * If we are not currently updating metadata for this client, this is a no-op. This is a helper
+     * method that gets the download manager service and the metadata URI for this client.
      *
      * @param context the context, to get an instance of DownloadManager
      * @param clientId the ID of the client we want to cancel the update of
@@ -309,7 +308,8 @@ public final class UpdateHandler {
     public static void cancelUpdate(final Context context, final String clientId) {
         final DownloadManager manager =
                     (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
-        if (null != manager) cancelUpdateWithDownloadManager(context, clientId, manager);
+        final String metadataUri = MetadataDbHelper.getMetadataUriAsString(context, clientId);
+        if (null != manager) cancelUpdateWithDownloadManager(context, metadataUri, manager);
     }
 
     /**
@@ -773,7 +773,7 @@ public final class UpdateHandler {
                     // We may come here if there is a new word list that we can't handle.
                     Log.i(TAG, "Can't handle word list with id '" + id + "' because it has format"
                             + " version " + metadataInfo.mFormatVersion + " and the maximum version"
-                            + "we can handle is " + MAXIMUM_SUPPORTED_FORMAT_VERSION);
+                            + " we can handle is " + MAXIMUM_SUPPORTED_FORMAT_VERSION);
                 }
                 continue;
             } else if (null == currentInfo) {