diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
index 3da670e..ed5f83b 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
@@ -98,23 +98,32 @@
      * @throw IOException if the provider-returned data could not be read.
      */
     public static List<AssetFileAddress> cacheDictionariesFromContentProvider(final Locale locale,
-            final Context context) throws FileNotFoundException, IOException {
+            final Context context) {
         final ContentResolver resolver = context.getContentResolver();
         final List<String> idList = getDictIdList(locale, context);
         final List<AssetFileAddress> fileAddressList = new ArrayList<AssetFileAddress>();
         for (String id : idList) {
             final Uri wordListUri = getProviderUri(id);
-            final AssetFileDescriptor afd =
-                    resolver.openAssetFileDescriptor(wordListUri, "r");
-            if (null == afd) continue;
-            final String fileName = copyFileTo(afd.createInputStream(),
-                    BinaryDictionaryGetter.getCacheFileName(id, locale, context));
-            afd.close();
-            if (0 >= resolver.delete(wordListUri, null, null)) {
-                // I'd rather not print the word list ID to the log here out of security concerns
-                Log.e(TAG, "Could not have the dictionary pack delete a word list");
+            AssetFileDescriptor afd = null;
+            try {
+                afd = resolver.openAssetFileDescriptor(wordListUri, "r");
+            } catch (FileNotFoundException e) {
+                // leave null inside afd and continue
             }
-            fileAddressList.add(AssetFileAddress.makeFromFileName(fileName));
+            if (null == afd) continue;
+            try {
+                final String fileName = copyFileTo(afd.createInputStream(),
+                        BinaryDictionaryGetter.getCacheFileName(id, locale, context));
+                afd.close();
+                if (0 >= resolver.delete(wordListUri, null, null)) {
+                    // I'd rather not print the word list ID to the log out of security concerns
+                    Log.e(TAG, "Could not have the dictionary pack delete a word list");
+                }
+                fileAddressList.add(AssetFileAddress.makeFromFileName(fileName));
+            } catch (IOException e) {
+                // Can't read the file for some reason. Continue onto the next file.
+                Log.e(TAG, "Cannot read a word list from the dictionary pack : " + e);
+            }
         }
         return fileAddressList;
     }
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
index 360cf21..9b89b9a 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
@@ -214,23 +214,16 @@
      */
     public static List<AssetFileAddress> getDictionaryFiles(final Locale locale,
             final Context context, final int fallbackResId) {
-        try {
-            // cacheDictionariesFromContentProvider returns the list of files it copied to local
-            // storage, but we don't really care about what was copied NOW: what we want is the
-            // list of everything we ever cached, so we ignore the return value.
-            BinaryDictionaryFileDumper.cacheDictionariesFromContentProvider(locale, context);
-            List<AssetFileAddress> cachedDictionaryList = getCachedDictionaryList(locale, context);
-            if (null != cachedDictionaryList) {
-                return cachedDictionaryList;
-            }
-            // If the list is null, fall through and return the fallback
-        } catch (FileNotFoundException e) {
-            Log.e(TAG, "Unable to create dictionary file from provider for locale "
-                    + locale.toString() + ": falling back to internal dictionary");
-        } catch (IOException e) {
-            Log.e(TAG, "Unable to read source data for locale "
-                    + locale.toString() + ": falling back to internal dictionary");
+
+        // cacheDictionariesFromContentProvider returns the list of files it copied to local
+        // storage, but we don't really care about what was copied NOW: what we want is the
+        // list of everything we ever cached, so we ignore the return value.
+        BinaryDictionaryFileDumper.cacheDictionariesFromContentProvider(locale, context);
+        List<AssetFileAddress> cachedDictionaryList = getCachedDictionaryList(locale, context);
+        if (null != cachedDictionaryList) {
+            return cachedDictionaryList;
         }
+
         final AssetFileAddress fallbackAsset = loadFallbackResource(context, fallbackResId,
                 locale);
         if (null == fallbackAsset) return null;
