diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index 201fc70..f5e2441 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -422,11 +422,11 @@
 
     <!-- Title of an option for usability study mode -->
     <string name="prefs_usability_study_mode">Usability study mode</string>
-    <!-- Title of the settings for key long press delay [CHAR LIMIT=30] -->
+    <!-- Title of the settings for key long press delay [CHAR LIMIT=35] -->
     <string name="prefs_key_longpress_timeout_settings">Key long press delay</string>
-    <!-- Title of the settings for keypress vibration duration [CHAR LIMIT=30] -->
+    <!-- Title of the settings for keypress vibration duration [CHAR LIMIT=35] -->
     <string name="prefs_keypress_vibration_duration_settings">Keypress vibration duration</string>
-    <!-- Title of the settings for keypress sound volume [CHAR LIMIT=30] -->
+    <!-- Title of the settings for keypress sound volume [CHAR LIMIT=35] -->
     <string name="prefs_keypress_sound_volume_settings">Keypress sound volume</string>
     <!-- Title of the settings for reading an external dictionary file -->
     <string name="prefs_read_external_dictionary">Read external dictionary file</string>
diff --git a/java/src/com/android/inputmethod/latin/StringUtils.java b/java/src/com/android/inputmethod/latin/StringUtils.java
index 3ca209d..7f1e7c6 100644
--- a/java/src/com/android/inputmethod/latin/StringUtils.java
+++ b/java/src/com/android/inputmethod/latin/StringUtils.java
@@ -282,15 +282,4 @@
         }
         return builder.toString();
     }
-
-    public static boolean containsAny(final String string, final String separators) {
-        final int len = separators.length();
-        for (int i = 0; i < len; i = separators.offsetByCodePoints(i, 1)) {
-            final int separator = separators.codePointAt(i);
-            if (-1 != string.indexOf(separator)) {
-                return true;
-            }
-        }
-        return false;
-    }
 }
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 5abadf3..671d714 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -47,6 +47,9 @@
     // TODO: rename this to CORRECTION_ON
     public static final int CORRECTION_FULL = 1;
 
+    // Close to -2**31
+    private static final int SUPPRESS_SUGGEST_THRESHOLD = -2000000000;
+
     public interface SuggestInitializationListener {
         public void onUpdateMainDictionaryAvailability(boolean isMainDictionaryAvailable);
     }
@@ -340,6 +343,15 @@
             suggestionsContainer.add(1, rejected);
         }
         SuggestedWordInfo.removeDups(suggestionsContainer);
+
+        // For some reason some suggestions with MIN_VALUE are making their way here.
+        // TODO: Find a more robust way to detect distractors.
+        for (int i = suggestionsContainer.size() - 1; i >= 0; --i) {
+            if (suggestionsContainer.get(i).mScore < SUPPRESS_SUGGEST_THRESHOLD) {
+                suggestionsContainer.remove(i);
+            }
+        }
+
         // In the batch input mode, the most relevant suggested word should act as a "typed word"
         // (typedWordValid=true), not as an "auto correct word" (willAutoCorrect=false).
         return new SuggestedWords(suggestionsContainer,
diff --git a/tests/src/com/android/inputmethod/latin/StringUtilsTests.java b/tests/src/com/android/inputmethod/latin/StringUtilsTests.java
index 136faff..98a50b7 100644
--- a/tests/src/com/android/inputmethod/latin/StringUtilsTests.java
+++ b/tests/src/com/android/inputmethod/latin/StringUtilsTests.java
@@ -215,22 +215,4 @@
         checkCapitalize("Lorem!Ipsum (dolor) Sit * Amet", "Lorem!Ipsum (Dolor) Sit * Amet",
                 " \n,.;!?*()&", Locale.ENGLISH);
     }
-
-    public void testContainsAny() {
-        assertFalse(StringUtils.containsAny("", " "));
-        assertFalse(StringUtils.containsAny("test and retest", ""));
-        assertTrue(StringUtils.containsAny("test and retest", "x3iq o"));
-        assertTrue(StringUtils.containsAny("test and retest", "x3iqo "));
-        assertTrue(StringUtils.containsAny("test and retest", " x3iqo"));
-        assertFalse(StringUtils.containsAny("test and retest", "x3iqo"));
-        assertTrue(StringUtils.containsAny("test and retest", "tse "));
-        assertTrue(StringUtils.containsAny("test and retest.", ".?()"));
-        assertFalse(StringUtils.containsAny("test and retest", ".?()"));
-        // Surrogate pair
-        assertTrue(StringUtils.containsAny("test and \uD861\uDED7 retest.", "\uD861\uDED7"));
-        // Ill-formed string
-        assertFalse(StringUtils.containsAny("test and \uD861 retest.", "\uD861\uDED7"));
-        // Ill-formed string
-        assertFalse(StringUtils.containsAny("test and \uDED7 retest.", "\uD861\uDED7"));
-    }
 }
