diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index 0c0ce18..91110d8 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -87,8 +87,9 @@
             final CompletionInfo[] infos) {
         final ArrayList<SuggestedWordInfo> result = new ArrayList<SuggestedWordInfo>();
         for (CompletionInfo info : infos) {
-            if (null != info) result.add(new SuggestedWordInfo(info.getText(),
-                    SuggestedWordInfo.MAX_SCORE));
+            if (null != info && info.getText() != null) {
+                result.add(new SuggestedWordInfo(info.getText(), SuggestedWordInfo.MAX_SCORE));
+            }
         }
         return result;
     }
diff --git a/tests/src/com/android/inputmethod/latin/InputLogicFrenchTests.java b/tests/src/com/android/inputmethod/latin/InputLogicFrenchTests.java
index 5db120d..60a7b05 100644
--- a/tests/src/com/android/inputmethod/latin/InputLogicFrenchTests.java
+++ b/tests/src/com/android/inputmethod/latin/InputLogicFrenchTests.java
@@ -16,8 +16,6 @@
 
 package com.android.inputmethod.latin;
 
-import com.android.inputmethod.keyboard.Keyboard;
-
 public class InputLogicFrenchTests extends InputTestsBase {
 
     public void testAutoCorrectForFrench() {
diff --git a/tests/src/com/android/inputmethod/latin/InputTestsBase.java b/tests/src/com/android/inputmethod/latin/InputTestsBase.java
index 5f6b229..4dfe228 100644
--- a/tests/src/com/android/inputmethod/latin/InputTestsBase.java
+++ b/tests/src/com/android/inputmethod/latin/InputTestsBase.java
@@ -95,7 +95,7 @@
         final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mLatinIME);
         final boolean previousDebugSetting = prefs.getBoolean(PREF_DEBUG_MODE, false);
         final SharedPreferences.Editor editor = prefs.edit();
-        editor.putBoolean(PREF_DEBUG_MODE, true);
+        editor.putBoolean(PREF_DEBUG_MODE, mode);
         editor.commit();
         return previousDebugSetting;
     }
@@ -138,17 +138,20 @@
         final InputMethodManager imm = (InputMethodManager)mLatinIME.getSystemService(
                 Context.INPUT_METHOD_SERVICE);
         final String packageName = mLatinIME.getPackageName();
-        for (final InputMethodInfo imi : imm.getEnabledInputMethodList()) {
+        // The IMEs and subtypes don't need to be enabled to run this test because IMF isn't
+        // involved here.
+        for (final InputMethodInfo imi : imm.getInputMethodList()) {
             if (imi.getPackageName().equals(packageName)) {
-                for (final InputMethodSubtype ims :
-                    imm.getEnabledInputMethodSubtypeList(imi, true)) {
+                final int subtypeCount = imi.getSubtypeCount();
+                for (int i = 0; i < subtypeCount; i++) {
+                    final InputMethodSubtype ims = imi.getSubtypeAt(i);
                     final String locale = ims.getLocale();
                     mSubtypeMap.put(locale, ims);
                 }
                 return;
             }
         }
-        fail("LatinIME is disabled");
+        fail("LatinIME is not found");
     }
 
     // We need to run the messages added to the handler from LatinIME. The only way to do
@@ -176,7 +179,7 @@
         // The only way to get out of Looper#loop() is to call #quit() on it (or on its queue).
         // Once #quit() is called remaining messages are not processed, which is why we post
         // a message that calls it instead of calling it directly.
-        looper.loop();
+        Looper.loop();
 
         // Once #quit() has been called, the message queue has an "mQuiting" field that prevents
         // any subsequent post in this queue. However the queue itself is still fully functional!
