diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 53e6232..b4807b0 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -156,7 +156,7 @@
         private static final int MSG_SHOW_GESTURE_PREVIEW_AND_SUGGESTION_STRIP = 3;
         private static final int MSG_RESUME_SUGGESTIONS = 4;
         private static final int MSG_REOPEN_DICTIONARIES = 5;
-        private static final int MSG_ON_END_BATCH_INPUT = 6;
+        private static final int MSG_UPDATE_TAIL_BATCH_INPUT_COMPLETED = 6;
         private static final int MSG_RESET_CACHES = 7;
         // Update this when adding new messages
         private static final int MSG_LAST = MSG_RESET_CACHES;
@@ -220,8 +220,9 @@
                 // get any suggestions. Wait one frame.
                 postUpdateSuggestionStrip();
                 break;
-            case MSG_ON_END_BATCH_INPUT:
-                latinIme.mInputLogic.endBatchInputInternal(latinIme.mSettings.getCurrent(),
+            case MSG_UPDATE_TAIL_BATCH_INPUT_COMPLETED:
+                latinIme.mInputLogic.onUpdateTailBatchInputCompleted(
+                        latinIme.mSettings.getCurrent(),
                         (SuggestedWords) msg.obj, latinIme.mKeyboardSwitcher);
                 break;
             case MSG_RESET_CACHES:
@@ -304,8 +305,8 @@
                     ARG1_NOT_GESTURE_INPUT, ARG2_UNUSED, suggestedWords).sendToTarget();
         }
 
-        public void onEndBatchInput(final SuggestedWords suggestedWords) {
-            obtainMessage(MSG_ON_END_BATCH_INPUT, suggestedWords).sendToTarget();
+        public void showTailBatchInputResult(final SuggestedWords suggestedWords) {
+            obtainMessage(MSG_UPDATE_TAIL_BATCH_INPUT_COMPLETED, suggestedWords).sendToTarget();
         }
 
         // Working variables for the following methods.
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index ec6bd28..8a07f2d 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -601,7 +601,7 @@
     }
 
     public void onEndBatchInput(final InputPointers batchPointers) {
-        mInputLogicHandler.onEndBatchInput(batchPointers, mAutoCommitSequenceNumber);
+        mInputLogicHandler.updateTailBatchInput(batchPointers, mAutoCommitSequenceNumber);
         ++mAutoCommitSequenceNumber;
     }
 
@@ -1794,7 +1794,7 @@
      * @param settingsValues the current values of the settings.
      * @param suggestedWords suggestedWords to use.
      */
-    public void endBatchInputInternal(final SettingsValues settingsValues,
+    public void onUpdateTailBatchInputCompleted(final SettingsValues settingsValues,
             final SuggestedWords suggestedWords,
             // TODO: remove this argument
             final KeyboardSwitcher keyboardSwitcher) {
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogicHandler.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogicHandler.java
index 42f0d7c..e3b8ab4 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogicHandler.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogicHandler.java
@@ -54,7 +54,8 @@
         @Override
         public void onCancelBatchInput() {}
         @Override
-        public void onEndBatchInput(final InputPointers batchPointers, final int sequenceNumber) {}
+        public void updateTailBatchInput(final InputPointers batchPointers,
+                final int sequenceNumber) {}
         @Override
         public void getSuggestedWords(final int sessionId, final int sequenceNumber,
                 final OnGetSuggestedWordsCallback callback) {}
@@ -106,7 +107,7 @@
      * Fetch suggestions corresponding to an update of a batch input.
      * @param batchPointers the updated pointers, including the part that was passed last time.
      * @param sequenceNumber the sequence number associated with this batch input.
-     * @param forEnd true if this is the end of a batch input, false if it's an update.
+     * @param isTailBatchInput true if this is the end of a batch input, false if it's an update.
      */
     // This method can be called from any thread and will see to it that the correct threads
     // are used for parts that require it. This method will send a message to the Non-UI handler
@@ -115,7 +116,7 @@
     // send a message to the UI handler in LatinIME so that showing suggestions can be done on
     // the UI thread.
     private void updateBatchInput(final InputPointers batchPointers,
-            final int sequenceNumber, final boolean forEnd) {
+            final int sequenceNumber, final boolean isTailBatchInput) {
         synchronized (mLock) {
             if (!mInBatchInput) {
                 // Batch input has ended or canceled while the message was being delivered.
@@ -136,12 +137,12 @@
                                 suggestedWords = mInputLogic.mSuggestedWords;
                             }
                             mLatinIME.mHandler.showGesturePreviewAndSuggestionStrip(suggestedWords,
-                                    forEnd /* dismissGestureFloatingPreviewText */);
-                            if (forEnd) {
+                                    isTailBatchInput /* dismissGestureFloatingPreviewText */);
+                            if (isTailBatchInput) {
                                 mInBatchInput = false;
                                 // The following call schedules onEndBatchInputInternal
                                 // to be called on the UI thread.
-                                mLatinIME.mHandler.onEndBatchInput(suggestedWords);
+                                mLatinIME.mHandler.showTailBatchInputResult(suggestedWords);
                             }
                         }
                     });
@@ -159,13 +160,13 @@
     // Called on the UI thread by InputLogic.
     public void onUpdateBatchInput(final InputPointers batchPointers,
             final int sequenceNumber) {
-        updateBatchInput(batchPointers, sequenceNumber, false /* forEnd */);
+        updateBatchInput(batchPointers, sequenceNumber, false /* isTailBatchInput */);
     }
 
     /**
      * Cancel a batch input.
      *
-     * Note that as opposed to onEndBatchInput, we do the UI side of this immediately on the
+     * Note that as opposed to updateTailBatchInput, we do the UI side of this immediately on the
      * same thread, rather than get this to call a method in LatinIME. This is because
      * canceling a batch input does not necessitate the long operation of pulling suggestions.
      */
@@ -177,17 +178,20 @@
     }
 
     /**
-     * Finish a batch input.
+     * Trigger an update for a tail batch input.
      *
-     * This fetches suggestions, updates the suggestion strip and commits the first suggestion.
-     * It also dismisses the floating text preview.
+     * A tail batch input is the last update for a gesture, the one that is triggered after the
+     * user lifts their finger. This method schedules fetching suggestions on the non-UI thread,
+     * then when the suggestions are computed it comes back on the UI thread to update the
+     * suggestion strip, commit the first suggestion, and dismiss the floating text preview.
      *
      * @param batchPointers the updated batch pointers.
      * @param sequenceNumber the sequence number associated with this batch input.
      */
     // Called on the UI thread by InputLogic.
-    public void onEndBatchInput(final InputPointers batchPointers, final int sequenceNumber) {
-        updateBatchInput(batchPointers, sequenceNumber, true /* forEnd */);
+    public void updateTailBatchInput(final InputPointers batchPointers,
+            final int sequenceNumber) {
+        updateBatchInput(batchPointers, sequenceNumber, true /* isTailBatchInput */);
     }
 
     public void getSuggestedWords(final int sessionId, final int sequenceNumber,
