diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java b/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java
index 1f3ee76..b1621a5 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java
@@ -17,7 +17,6 @@
 package com.android.inputmethod.keyboard;
 
 import com.android.inputmethod.latin.InputPointers;
-import com.android.inputmethod.latin.SuggestedWords;
 
 public interface KeyboardActionListener {
 
@@ -73,18 +72,17 @@
     public void onStartBatchInput();
 
     /**
-     * Sends the batch input points data to get updated suggestions
+     * Sends the ongoing batch input points data.
      * @param batchPointers the batch input points representing the user input
-     * @return updated suggestions that reflects the user input
      */
-    public SuggestedWords onUpdateBatchInput(InputPointers batchPointers);
+    public void onUpdateBatchInput(InputPointers batchPointers);
 
     /**
-     * Sends a sequence of characters to the listener as batch input.
+     * Sends the final batch input points data.
      *
-     * @param text the sequence of characters to be displayed as composing text.
+     * @param batchPointers the batch input points representing the user input
      */
-    public void onEndBatchInput(CharSequence text);
+    public void onEndBatchInput(InputPointers batchPointers);
 
     /**
      * Called when user released a finger outside any key.
@@ -109,9 +107,9 @@
         @Override
         public void onStartBatchInput() {}
         @Override
-        public SuggestedWords onUpdateBatchInput(InputPointers batchPointers) { return null; }
+        public void onUpdateBatchInput(InputPointers batchPointers) {}
         @Override
-        public void onEndBatchInput(CharSequence text) {}
+        public void onEndBatchInput(InputPointers batchPointers) {}
         @Override
         public void onCancelInput() {}
         @Override
diff --git a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java
index 9c80691..870eff2 100644
--- a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java
@@ -25,6 +25,7 @@
 
 import com.android.inputmethod.keyboard.PointerTracker.DrawingProxy;
 import com.android.inputmethod.keyboard.PointerTracker.TimerProxy;
+import com.android.inputmethod.latin.InputPointers;
 import com.android.inputmethod.latin.R;
 
 /**
@@ -63,8 +64,13 @@
         }
 
         @Override
-        public void onEndBatchInput(CharSequence text) {
-            mListener.onEndBatchInput(text);
+        public void onUpdateBatchInput(InputPointers batchPointers) {
+            mListener.onUpdateBatchInput(batchPointers);
+        }
+
+        @Override
+        public void onEndBatchInput(InputPointers batchPointers) {
+            mListener.onEndBatchInput(batchPointers);
         }
 
         @Override
diff --git a/java/src/com/android/inputmethod/keyboard/internal/GestureTracker.java b/java/src/com/android/inputmethod/keyboard/internal/GestureTracker.java
index 0f14dce..fbfa663 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/GestureTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/GestureTracker.java
@@ -21,7 +21,6 @@
 import com.android.inputmethod.keyboard.KeyboardActionListener;
 import com.android.inputmethod.keyboard.PointerTracker;
 import com.android.inputmethod.latin.InputPointers;
-import com.android.inputmethod.latin.SuggestedWords;
 
 // TODO: Remove this class by consolidating with PointerTracker
 public class GestureTracker {
@@ -40,7 +39,6 @@
     private boolean mInGesture = false;
 
     private KeyboardActionListener mListener;
-    private SuggestedWords mSuggestions;
 
     private int mLastRecognitionPointSize = 0;
     private long mLastRecognitionTime = 0;
@@ -66,17 +64,16 @@
         }
         mInGesture = true;
         mListener.onStartBatchInput();
-        mSuggestions = null;
     }
 
     // TODO: The corresponding startBatchInput() is a private method. Reorganize the code.
     public void endBatchInput() {
-        if (isInGesture() && mSuggestions != null && mSuggestions.size() > 0) {
-            final CharSequence text = mSuggestions.getWord(0);
+        if (isInGesture()) {
+            final InputPointers batchPoints = PointerTracker.getAllBatchPoints();
             if (DEBUG_LISTENER) {
-                Log.d(TAG, "onEndBatchInput: text=" + text);
+                Log.d(TAG, "onEndBatchInput: batchPoints=" + batchPoints.getPointerSize());
             }
-            mListener.onEndBatchInput(text);
+            mListener.onEndBatchInput(batchPoints);
         }
         mInGesture = false;
         clearBatchInputPoints();
@@ -117,7 +114,7 @@
                 if (DEBUG_LISTENER) {
                     Log.d(TAG, "onUpdateBatchInput: batchPoints=" + batchPoints.getPointerSize());
                 }
-                mSuggestions = mListener.onUpdateBatchInput(batchPoints);
+                mListener.onUpdateBatchInput(batchPoints);
             }
         }
     }
@@ -128,7 +125,7 @@
             if (DEBUG_LISTENER) {
                 Log.d(TAG, "onUpdateBatchInput: batchPoints=" + batchPoints.getPointerSize());
             }
-            mSuggestions = mListener.onUpdateBatchInput(batchPoints);
+            mListener.onUpdateBatchInput(batchPoints);
         }
     }
 
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 518bcd5..0f8b6c4 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1329,13 +1329,22 @@
     }
 
     @Override
-    public SuggestedWords onUpdateBatchInput(InputPointers batchPointers) {
+    public void onUpdateBatchInput(InputPointers batchPointers) {
         mWordComposer.setBatchInputPointers(batchPointers);
-        return updateSuggestionsOrPredictions();
+        updateSuggestionsOrPredictions();
     }
 
     @Override
-    public void onEndBatchInput(CharSequence text) {
+    public void onEndBatchInput(InputPointers batchPointers) {
+        mWordComposer.setBatchInputPointers(batchPointers);
+        final SuggestedWords suggestedWords = updateSuggestionsOrPredictions();
+        if (suggestedWords == null || suggestedWords.size() == 0) {
+            return;
+        }
+        final CharSequence text = suggestedWords.getWord(0);
+        if (TextUtils.isEmpty(text)) {
+            return;
+        }
         mWordComposer.setBatchInputWord(text);
         mConnection.beginBatchEdit();
         if (SPACE_STATE_PHANTOM == mSpaceState) {
