diff --git a/java/src/com/android/inputmethod/latin/EditingUtils.java b/java/src/com/android/inputmethod/latin/EditingUtils.java
index e56aa695d1c7942802421a2824b2d67fdace4046..634dbbdfccbe3103d1587d62035b8c3987fac67a 100644
--- a/java/src/com/android/inputmethod/latin/EditingUtils.java
+++ b/java/src/com/android/inputmethod/latin/EditingUtils.java
@@ -33,6 +33,7 @@ public class EditingUtils {
      * Number of characters we want to look back in order to identify the previous word
      */
     private static final int LOOKBACK_CHARACTER_NUM = 15;
+    private static final int INVALID_CURSOR_POSITION = -1;
 
     private EditingUtils() {
         // Unintentional empty constructor for singleton.
@@ -63,10 +64,11 @@ public class EditingUtils {
     }
 
     private static int getCursorPosition(InputConnection connection) {
+        if (null == connection) return INVALID_CURSOR_POSITION;
         ExtractedText extracted = connection.getExtractedText(
             new ExtractedTextRequest(), 0);
         if (extracted == null) {
-          return -1;
+            return INVALID_CURSOR_POSITION;
         }
         return extracted.startOffset + extracted.selectionStart;
     }
@@ -79,6 +81,7 @@ public class EditingUtils {
      *   represents the cursor, then "hello " will be returned.
      */
     public static String getWordAtCursor(InputConnection connection, String separators) {
+        // getWordRangeAtCursor returns null if the connection is null
         Range r = getWordRangeAtCursor(connection, separators);
         return (r == null) ? null : r.mWord;
     }
@@ -88,6 +91,7 @@ public class EditingUtils {
      * getWordAtCursor.
      */
     public static void deleteWordAtCursor(InputConnection connection, String separators) {
+        // getWordRangeAtCursor returns null if the connection is null
         Range range = getWordRangeAtCursor(connection, separators);
         if (range == null) return;
 
@@ -165,6 +169,7 @@ public class EditingUtils {
     public static CharSequence getPreviousWord(InputConnection connection,
             String sentenceSeperators) {
         //TODO: Should fix this. This could be slow!
+        if (null == connection) return null;
         CharSequence prev = connection.getTextBeforeCursor(LOOKBACK_CHARACTER_NUM, 0);
         return getPreviousWord(prev, sentenceSeperators);
     }
@@ -194,6 +199,7 @@ public class EditingUtils {
     }
 
     public static CharSequence getThisWord(InputConnection connection, String sentenceSeperators) {
+        if (null == connection) return null;
         final CharSequence prev = connection.getTextBeforeCursor(LOOKBACK_CHARACTER_NUM, 0);
         return getThisWord(prev, sentenceSeperators);
     }
@@ -256,12 +262,14 @@ public class EditingUtils {
             int selStart, int selEnd, String wordSeparators) {
         if (selStart == selEnd) {
             // There is just a cursor, so get the word at the cursor
+            // getWordRangeAtCursor returns null if the connection is null
             EditingUtils.Range range = getWordRangeAtCursor(ic, wordSeparators);
             if (range != null && !TextUtils.isEmpty(range.mWord)) {
                 return new SelectedWord(selStart - range.mCharsBefore, selEnd + range.mCharsAfter,
                         range.mWord);
             }
         } else {
+            if (null == ic) return null;
             // Is the previous character empty or a word separator? If not, return null.
             CharSequence charsBefore = ic.getTextBeforeCursor(1, 0);
             if (!isWordBoundary(charsBefore, wordSeparators)) {
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index b7a795221eae60b7a5e06f5fd066fea6ca5bdd42..95cae6ed58f450b8c68ab245973fc1c6c9abeceb 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1514,9 +1514,15 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
 
         final WordComposer wordComposer = mWordComposer;
         // TODO: May need a better way of retrieving previous word
-        CharSequence prevWord = EditingUtils.getPreviousWord(getCurrentInputConnection(),
-                mSettingsValues.mWordSeparators);
-        SuggestedWords.Builder builder = mSuggest.getSuggestedWordBuilder(
+        final InputConnection ic = getCurrentInputConnection();
+        final CharSequence prevWord;
+        if (null == ic) {
+            prevWord = null;
+        } else {
+            prevWord = EditingUtils.getPreviousWord(ic, mSettingsValues.mWordSeparators);
+        }
+        // getSuggestedWordBuilder handles gracefully a null value of prevWord
+        final SuggestedWords.Builder builder = mSuggest.getSuggestedWordBuilder(
                 mKeyboardSwitcher.getKeyboardView(), wordComposer, prevWord);
 
         boolean autoCorrectionAvailable = !mInputTypeNoAutoCorrect && mSuggest.hasAutoCorrection();
@@ -1788,10 +1794,13 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
             // We don't want to register as bigrams words separated by a separator.
             // For example "I will, and you too" : we don't want the pair ("will" "and") to be
             // a bigram.
-            CharSequence prevWord = EditingUtils.getPreviousWord(getCurrentInputConnection(),
-                    mSettingsValues.mWordSeparators);
-            if (!TextUtils.isEmpty(prevWord)) {
-                mUserBigramDictionary.addBigrams(prevWord.toString(), suggestion.toString());
+            final InputConnection ic = getCurrentInputConnection();
+            if (null != ic) {
+                final CharSequence prevWord =
+                        EditingUtils.getPreviousWord(ic, mSettingsValues.mWordSeparators);
+                if (!TextUtils.isEmpty(prevWord)) {
+                    mUserBigramDictionary.addBigrams(prevWord.toString(), suggestion.toString());
+                }
             }
         }
     }