diff --git a/java/src/com/android/inputmethod/latin/RichInputConnection.java b/java/src/com/android/inputmethod/latin/RichInputConnection.java
index 4d174dd..7cf64a3 100644
--- a/java/src/com/android/inputmethod/latin/RichInputConnection.java
+++ b/java/src/com/android/inputmethod/latin/RichInputConnection.java
@@ -685,6 +685,10 @@
                 && !settingsValues.isWordConnector(codePointBeforeCursor)) {
             return true;
         }
+        return isCursorFollowedByWordCharacter(settingsValues);
+    }
+
+    public boolean isCursorFollowedByWordCharacter(final SettingsValues settingsValues) {
         final CharSequence after = getTextAfterCursor(1, 0);
         if (!TextUtils.isEmpty(after) && !settingsValues.isWordSeparator(after.charAt(0))
                 && !settingsValues.isWordConnector(after.charAt(0))) {
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index c867ab3..20ba48d 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -813,7 +813,8 @@
                 }
             }
             if (settingsValues.isSuggestionStripVisible()
-                    && settingsValues.mCurrentLanguageHasSpaces) {
+                    && settingsValues.mCurrentLanguageHasSpaces
+                    && !mConnection.isCursorFollowedByWordCharacter(settingsValues)) {
                 restartSuggestionsOnWordTouchedByCursor(settingsValues,
                         deleteCountAtStart - mDeleteCount /* offset */,
                         true /* includeResumedWordInSuggestions */, keyboardSwitcher);
@@ -1113,11 +1114,19 @@
                 keyboardSwitcher.getKeyboard());
         mWordComposer.setCursorPositionWithinWord(
                 typedWord.codePointCount(0, numberOfCharsInWordBeforeCursor));
-        // TODO: Change these two lines to setComposingRegion(cursorPosition,
+        // TODO: Change these lines to setComposingRegion(cursorPosition,
         //         cursorPosition + range.getNumberOfCharsInWordAfterCursor());
-        mConnection.deleteSurroundingText(numberOfCharsInWordBeforeCursor,
-              typedWord.length() - numberOfCharsInWordBeforeCursor);
-        mConnection.setComposingText(typedWord, 1);
+        if (0 != offset) {
+            // Backspace was pressed. We are at the end of a word, and we don't know the cursor
+            // position for sure, so use relative methods.
+            mConnection.deleteSurroundingText(numberOfCharsInWordBeforeCursor, 0);
+            mConnection.setComposingText(typedWord, 1);
+        } else {
+            // This is recorrection. The cursor position is reasonably reliable, and the cursor
+            // may be in the middle of a word so use setComposingRegion.
+            mConnection.setComposingRegion(expectedCursorPosition - numberOfCharsInWordBeforeCursor,
+                expectedCursorPosition + range.getNumberOfCharsInWordAfterCursor());
+        }
         if (suggestions.isEmpty()) {
             // We come here if there weren't any suggestion spans on this word. We will try to
             // compute suggestions for it instead.
