diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 6fcac9a6573052ad1021be03b89dd92140134f65..9ef273918402bc3a15c110638caa9bb645da88a0 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -968,6 +968,13 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
                 // text, but that is probably too expensive to do, so we decided to leave things
                 // as is.
                 resetEntireInputState(newSelStart);
+            } else {
+                // resetEntireInputState calls resetCachesUponCursorMove, but with the second
+                // argument as true. But in all cases where we don't reset the entire input state,
+                // we still want to tell the rich input connection about the new cursor position so
+                // that it can update its caches.
+                mConnection.resetCachesUponCursorMove(newSelStart,
+                        false /* shouldFinishComposition */);
             }
 
             // We moved the cursor. If we are touching a word, we need to resume suggestion,
@@ -975,7 +982,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
             if (isSuggestionsStripVisible()) {
                 mHandler.postResumeSuggestions();
             }
-            mConnection.userMovedCursor(newSelEnd);
             // Reset the last recapitalization.
             mRecapitalizeStatus.deactivate();
             mKeyboardSwitcher.updateShiftState();
diff --git a/java/src/com/android/inputmethod/latin/RichInputConnection.java b/java/src/com/android/inputmethod/latin/RichInputConnection.java
index 6e3e7b218f35675f3f97b74f83a762049fe17ee0..5391b1303d8c80210cef6325ecc9b9447d17e885 100644
--- a/java/src/com/android/inputmethod/latin/RichInputConnection.java
+++ b/java/src/com/android/inputmethod/latin/RichInputConnection.java
@@ -729,14 +729,6 @@ public final class RichInputConnection {
         return (newSelStart - oldSelStart) * (mCurrentCursorPosition - newSelStart) >= 0;
     }
 
-    /**
-     * The user moved the cursor by hand. Take a note of it.
-     * @param newCursorPosition The new cursor position.
-     */
-    public void userMovedCursor(final int newCursorPosition) {
-        mCurrentCursorPosition = newCursorPosition;
-    }
-
     /**
      * Looks at the text just before the cursor to find out if it looks like a URL.
      *