diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
index 3761dab14602cda26e9d1af86fbcace7178f81cd..75ef691c8c3c0defa4e3dc895ceb2b1208d004da 100644
--- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
+++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
@@ -205,6 +205,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
     private long mMiniKeyboardPopupTime;
     private int[] mWindowOffset;
     private final float mMiniKeyboardSlideAllowance;
+    private int mMiniKeyboardTrackerId;
 
     /** Listener for {@link OnKeyboardActionListener}. */
     private OnKeyboardActionListener mKeyboardActionListener;
@@ -1023,6 +1024,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
         if (result) {
             dismissKeyPreview();
             tracker.setAlreadyProcessed();
+            mMiniKeyboardTrackerId = tracker.mPointerId;
         }
         return result;
     }
@@ -1258,9 +1260,15 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
         // Needs to be called after the gesture detector gets a turn, as it may have
         // displayed the mini keyboard
         if (mMiniKeyboard != null) {
-            MotionEvent translated = generateMiniKeyboardMotionEvent(action, x, y, eventTime);
-            mMiniKeyboard.onTouchEvent(translated);
-            translated.recycle();
+            final int miniKeyboardPointerIndex = me.findPointerIndex(mMiniKeyboardTrackerId);
+            if (miniKeyboardPointerIndex >= 0 && miniKeyboardPointerIndex < pointerCount) {
+                final int miniKeyboardX = (int)me.getX(miniKeyboardPointerIndex);
+                final int miniKeyboardY = (int)me.getY(miniKeyboardPointerIndex);
+                MotionEvent translated = generateMiniKeyboardMotionEvent(action,
+                        miniKeyboardX, miniKeyboardY, eventTime);
+                mMiniKeyboard.onTouchEvent(translated);
+                translated.recycle();
+            }
             return true;
         }
 
diff --git a/java/src/com/android/inputmethod/latin/PointerTracker.java b/java/src/com/android/inputmethod/latin/PointerTracker.java
index b56974ccf807e91b1335aad893f1ca81800a5833..b416a984cfd103bc5bbd834681d78e73a9c89dda 100644
--- a/java/src/com/android/inputmethod/latin/PointerTracker.java
+++ b/java/src/com/android/inputmethod/latin/PointerTracker.java
@@ -515,7 +515,8 @@ public class PointerTracker {
             int primaryCode = key.codes[0];
             code = String.format((primaryCode < 0) ? "%4d" : "0x%02x", primaryCode);
         }
-        Log.d(TAG, String.format("%s [%d] %3d,%3d %3d(%s) %s", title, mPointerId, x, y, keyIndex,
-                code, isModifier() ? "modifier" : ""));
+        Log.d(TAG, String.format("%s%s[%d] %3d,%3d %3d(%s) %s", title,
+                (mKeyAlreadyProcessed ? "-" : " "), mPointerId, x, y, keyIndex, code,
+                (isModifier() ? "modifier" : "")));
     }
 }