diff --git a/java/src/com/android/inputmethod/compat/InputMethodServiceCompatUtils.java b/java/src/com/android/inputmethod/compat/InputMethodServiceCompatUtils.java
index 14ee654..81df171 100644
--- a/java/src/com/android/inputmethod/compat/InputMethodServiceCompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/InputMethodServiceCompatUtils.java
@@ -17,11 +17,12 @@
 package com.android.inputmethod.compat;
 
 import android.inputmethodservice.InputMethodService;
+import com.android.inputmethod.latin.define.ProductionFlag;
 
 import java.lang.reflect.Method;
 
 public final class InputMethodServiceCompatUtils {
-    // Note that InputMethodService.enableHardwareAcceleration() has been introduced
+    // Note that {@link InputMethodService#enableHardwareAcceleration} has been introduced
     // in API level 17 (Build.VERSION_CODES.JELLY_BEAN_MR1).
     private static final Method METHOD_enableHardwareAcceleration =
             CompatUtils.getMethod(InputMethodService.class, "enableHardwareAcceleration");
@@ -34,4 +35,30 @@
         return (Boolean)CompatUtils.invoke(ims, false /* defaultValue */,
                 METHOD_enableHardwareAcceleration);
     }
+
+    public static void setCursorAnchorMonitorMode(final InputMethodService ims, final int mode) {
+        if (ProductionFlag.USES_CURSOR_ANCHOR_MONITOR) {
+            ExperimentalAPIUtils.setCursorAnchorMonitorMode(ims, mode);
+        }
+    }
+
+    /*
+     * For unreleased APIs. ProGuard will strip this class entirely, unless used explicitly.
+     */
+    private static final class ExperimentalAPIUtils {
+        // Note that {@link InputMethodManager#setCursorAnchorMonitorMode} is not yet available as
+        // an official API as of API level 19 (Build.VERSION_CODES.KITKAT).
+        private static final Method METHOD_setCursorAnchorMonitorMode = CompatUtils.getMethod(
+                InputMethodService.class, "setCursorAnchorMonitorMode", int.class);
+
+        private ExperimentalAPIUtils() {
+            // This utility class is not publicly instantiable.
+        }
+
+        public static void setCursorAnchorMonitorMode(final InputMethodService ims,
+                final int mode) {
+            CompatUtils.invoke(ims, null /* defaultValue */,
+                    METHOD_setCursorAnchorMonitorMode, mode);
+        }
+    }
 }
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 6d36af7..2cfecd7 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -366,6 +366,12 @@
                 if (latinIme != null) {
                     executePendingImsCallback(latinIme, editorInfo, restarting);
                     latinIme.onStartInputInternal(editorInfo, restarting);
+                    if (ProductionFlag.USES_CURSOR_ANCHOR_MONITOR) {
+                        // Currently we need to call this every time when the IME is attached to
+                        // new application.
+                        // TODO: Consider if we can do this automatically in the framework.
+                        InputMethodServiceCompatUtils.setCursorAnchorMonitorMode(latinIme, 1);
+                    }
                 }
             }
         }
@@ -923,6 +929,14 @@
         mSubtypeState.currentSubtypeUsed();
     }
 
+    @Override
+    public void onUpdateCursor(Rect rect) {
+        if (DEBUG) {
+            Log.i(TAG, "onUpdateCursor:" + rect.toShortString());
+        }
+        super.onUpdateCursor(rect);
+    }
+
     /**
      * This is called when the user has clicked on the extracted text view,
      * when running in fullscreen mode.  The default implementation hides
