diff --git a/java/src/com/android/inputmethod/latin/LastComposedWord.java b/java/src/com/android/inputmethod/latin/LastComposedWord.java
index 0c8c88f..f34cb5f 100644
--- a/java/src/com/android/inputmethod/latin/LastComposedWord.java
+++ b/java/src/com/android/inputmethod/latin/LastComposedWord.java
@@ -51,6 +51,8 @@
     public static final LastComposedWord NOT_A_COMPOSED_WORD =
             new LastComposedWord(null, null, null, "", "");
 
+    // 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<int[]> codes, final int[] xCoordinates,
             final int[] yCoordinates, final String typedWord, final String autoCorrection) {
         mCodes = codes;
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 24007f9..e433931 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -2201,9 +2201,7 @@
         // new composing text.
         final int restartLength = mWordComposer.size();
         if (DEBUG) {
-            final String wordBeforeCursor =
-                ic.getTextBeforeCursor(restartLength + 1, 0).subSequence(0, restartLength)
-                .toString();
+            final String wordBeforeCursor = ic.getTextBeforeCursor(restartLength, 0).toString();
             if (!TextUtils.equals(mWordComposer.getTypedWord(), wordBeforeCursor)) {
                 throw new RuntimeException("restartSuggestionsOnManuallyPickedTypedWord "
                         + "check failed: we thought we were reverting \""
@@ -2212,8 +2210,7 @@
                         + wordBeforeCursor + "\"");
             }
         }
-        // Warning: this +1 takes into account the extra space added by the manual pick process.
-        ic.deleteSurroundingText(restartLength + 1, 0);
+        ic.deleteSurroundingText(restartLength, 0);
         ic.setComposingText(mWordComposer.getTypedWord(), 1);
         mHandler.cancelUpdateBigramPredictions();
         mHandler.postUpdateSuggestions();
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index dd24432..f418968 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -310,13 +310,18 @@
         // LastComposedWord#didAutoCorrectToAnotherWord with #equals(). It would be marginally
         // cleaner to do it here, but it would be slower (since we would #equals() for each commit,
         // instead of only on cancel), and ultimately we want to figure it out even earlier anyway.
-        final LastComposedWord lastComposedWord = new LastComposedWord(mCodes,
-                mXCoordinates, mYCoordinates, mTypedWord.toString(),
+        final ArrayList<int[]> codes = mCodes;
+        final int[] xCoordinates = mXCoordinates;
+        final int[] yCoordinates = mYCoordinates;
+        mCodes = new ArrayList<int[]>(N);
+        mXCoordinates = new int[N];
+        mYCoordinates = new int[N];
+        final LastComposedWord lastComposedWord = new LastComposedWord(codes,
+                xCoordinates, yCoordinates, mTypedWord.toString(),
                 null == mAutoCorrection ? null : mAutoCorrection.toString());
         if (type != LastComposedWord.COMMIT_TYPE_DECIDED_WORD) {
             lastComposedWord.deactivate();
         }
-        mCodes.clear();
         mTypedWord.setLength(0);
         mAutoCorrection = null;
         return lastComposedWord;
