diff --git a/java/src/com/android/inputmethod/latin/LastComposedWord.java b/java/src/com/android/inputmethod/latin/LastComposedWord.java
index a3b0306..69963d2 100644
--- a/java/src/com/android/inputmethod/latin/LastComposedWord.java
+++ b/java/src/com/android/inputmethod/latin/LastComposedWord.java
@@ -38,38 +38,25 @@
     // 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(new ArrayList<Event>(), null, "", "",
-                    NOT_A_SEPARATOR, null, WordComposer.CAPS_MODE_OFF);
+            new LastComposedWord("", "", 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 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);
-        }
+    public LastComposedWord(final String typedWord, final CharSequence committedWord,
+            final String separatorString, final String prevWord, final int capitalizedMode) {
         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 4638c8a..52d1377 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -426,9 +426,8 @@
         // 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(mEvents,
-                mInputPointers, mTypedWord.toString(), committedWord, separatorString,
-                prevWord, mCapitalizedMode);
+        final LastComposedWord lastComposedWord = new LastComposedWord(
+                mTypedWord.toString(), committedWord, separatorString, prevWord, mCapitalizedMode);
         mInputPointers.reset();
         if (type != LastComposedWord.COMMIT_TYPE_DECIDED_WORD
                 && type != LastComposedWord.COMMIT_TYPE_MANUAL_PICK) {
@@ -459,24 +458,6 @@
     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;
     }
