diff --git a/java/src/com/android/inputmethod/latin/LastComposedWord.java b/java/src/com/android/inputmethod/latin/LastComposedWord.java
index 69963d2..a3b0306 100644
--- a/java/src/com/android/inputmethod/latin/LastComposedWord.java
+++ b/java/src/com/android/inputmethod/latin/LastComposedWord.java
@@ -38,25 +38,38 @@
     // or it may be exactly what the user typed if it's in the dictionary or the IME does not have
     // enough confidence in any suggestion to auto-correct (auto-correct to typed word).
     public static final int COMMIT_TYPE_DECIDED_WORD = 2;
+    // COMMIT_TYPE_CANCEL_AUTO_CORRECT is used upon committing back the old word upon cancelling
+    // an auto-correction.
+    public static final int COMMIT_TYPE_CANCEL_AUTO_CORRECT = 3;
 
     public static final String NOT_A_SEPARATOR = "";
 
+    public final ArrayList<Event> mEvents;
     public final String mTypedWord;
     public final CharSequence mCommittedWord;
     public final String mSeparatorString;
     public final String mPrevWord;
     public final int mCapitalizedMode;
+    public final InputPointers mInputPointers =
+            new InputPointers(Constants.DICTIONARY_MAX_WORD_LENGTH);
 
     private boolean mActive;
 
     public static final LastComposedWord NOT_A_COMPOSED_WORD =
-            new LastComposedWord("", "", NOT_A_SEPARATOR, null, WordComposer.CAPS_MODE_OFF);
+            new LastComposedWord(new ArrayList<Event>(), null, "", "",
+                    NOT_A_SEPARATOR, null, WordComposer.CAPS_MODE_OFF);
 
     // Warning: this is using the passed objects as is and fully expects them to be
     // immutable. Do not fiddle with their contents after you passed them to this constructor.
-    public LastComposedWord(final String typedWord, final CharSequence committedWord,
-            final String separatorString, final String prevWord, final int capitalizedMode) {
+    public LastComposedWord(final ArrayList<Event> events,
+            final InputPointers inputPointers, final String typedWord,
+            final CharSequence committedWord, final String separatorString,
+            final String prevWord, final int capitalizedMode) {
+        if (inputPointers != null) {
+            mInputPointers.copy(inputPointers);
+        }
         mTypedWord = typedWord;
+        mEvents = new ArrayList<Event>(events);
         mCommittedWord = committedWord;
         mSeparatorString = separatorString;
         mActive = true;
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index 52d1377..4638c8a 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -426,8 +426,9 @@
         // Note: currently, we come here whenever we commit a word. If it's a MANUAL_PICK
         // or a DECIDED_WORD we may cancel the commit later; otherwise, we should deactivate
         // the last composed word to ensure this does not happen.
-        final LastComposedWord lastComposedWord = new LastComposedWord(
-                mTypedWord.toString(), committedWord, separatorString, prevWord, mCapitalizedMode);
+        final LastComposedWord lastComposedWord = new LastComposedWord(mEvents,
+                mInputPointers, mTypedWord.toString(), committedWord, separatorString,
+                prevWord, mCapitalizedMode);
         mInputPointers.reset();
         if (type != LastComposedWord.COMMIT_TYPE_DECIDED_WORD
                 && type != LastComposedWord.COMMIT_TYPE_MANUAL_PICK) {
@@ -458,6 +459,24 @@
     public void discardPreviousWordForSuggestion() {
         mPreviousWordForSuggestion = null;
     }
+
+    public void resumeSuggestionOnLastComposedWord(final LastComposedWord lastComposedWord,
+            final String previousWord) {
+        mEvents.clear();
+        Collections.copy(mEvents, lastComposedWord.mEvents);
+        mInputPointers.set(lastComposedWord.mInputPointers);
+        mTypedWord.setLength(0);
+        mCombinerChain.reset();
+        mTypedWord.append(lastComposedWord.mTypedWord);
+        refreshSize();
+        mCapitalizedMode = lastComposedWord.mCapitalizedMode;
+        mAutoCorrection = null; // This will be filled by the next call to updateSuggestion.
+        mCursorPositionWithinWord = mCodePointSize;
+        mRejectedBatchModeSuggestion = null;
+        mIsResumed = true;
+        mPreviousWordForSuggestion = previousWord;
+    }
+
     public boolean isBatchMode() {
         return mIsBatchMode;
     }
