diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index cdb3ff9..8f77b08 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -2045,6 +2045,11 @@
                         typedWord, autoCorrection.toString(), separatorString, mWordComposer);
             }
             mExpectingUpdateSelection = true;
+            if (ProductionFlag.IS_EXPERIMENTAL) {
+                ResearchLogger.latinIme_commitCurrentAutoCorrection(typedWord,
+                        autoCorrection.toString(), separatorString);
+            }
+
             commitChosenWord(autoCorrection, LastComposedWord.COMMIT_TYPE_DECIDED_WORD,
                     separatorString);
             if (!typedWord.equals(autoCorrection)) {
diff --git a/java/src/com/android/inputmethod/research/ResearchLogger.java b/java/src/com/android/inputmethod/research/ResearchLogger.java
index 316539a..b02278d 100644
--- a/java/src/com/android/inputmethod/research/ResearchLogger.java
+++ b/java/src/com/android/inputmethod/research/ResearchLogger.java
@@ -1224,6 +1224,26 @@
                 completionInfo);
     }
 
+    /**
+     * Log a call to LatinIME.commitCurrentAutoCorrection().
+     *
+     * SystemResponse: The IME has committed an auto-correction.  An auto-correction changes the raw
+     * text input to another word that the user more likely desired to type.
+     */
+    private static final LogStatement LOGSTATEMENT_LATINIME_COMMITCURRENTAUTOCORRECTION =
+            new LogStatement("LatinIMECommitCurrentAutoCorrection", true, false, "typedWord",
+                    "autoCorrection", "separatorString");
+    public static void latinIme_commitCurrentAutoCorrection(final String typedWord,
+            final String autoCorrection, final String separatorString) {
+        final String scrubbedTypedWord = scrubDigitsFromString(typedWord);
+        final String scrubbedAutoCorrection = scrubDigitsFromString(autoCorrection);
+        final ResearchLogger researchLogger = getInstance();
+        researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_COMMITCURRENTAUTOCORRECTION,
+                scrubbedTypedWord, scrubbedAutoCorrection, separatorString);
+        researchLogger.onWordComplete(scrubbedAutoCorrection, Long.MAX_VALUE,
+                false /* isPartial */);
+    }
+
     private boolean isExpectingCommitText = false;
     public static void latinIME_commitPartialText(final CharSequence committedWord,
             final long lastTimestampOfWordData) {
@@ -1246,9 +1266,9 @@
         final ResearchLogger researchLogger = getInstance();
         final String scrubbedWord = scrubDigitsFromString(committedWord.toString());
         if (!researchLogger.isExpectingCommitText) {
-            researchLogger.onWordComplete(scrubbedWord, Long.MAX_VALUE, false /* isPartial */);
             researchLogger.enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTIONCOMMITTEXT,
                     newCursorPosition);
+            researchLogger.onWordComplete(scrubbedWord, Long.MAX_VALUE, false /* isPartial */);
         }
         researchLogger.isExpectingCommitText = false;
     }
