diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index 7a50388..da8cce1 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -974,9 +974,7 @@
         // {@link KeyboardView#showKeyPreview(PointerTracker)}.
         final int pointY = key.mY + mKeyPreviewDrawParams.mPreviewVisibleOffset;
         moreKeysPanel.showMoreKeysPanel(this, this, pointX, pointY, mKeyboardActionListener);
-        final int translatedX = moreKeysPanel.translateX(CoordinateUtils.x(lastCoords));
-        final int translatedY = moreKeysPanel.translateY(CoordinateUtils.y(lastCoords));
-        tracker.onShowMoreKeysPanel(translatedX, translatedY, moreKeysPanel);
+        tracker.onShowMoreKeysPanel(moreKeysPanel);
     }
 
     public boolean isInSlidingKeyInput() {
diff --git a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java
index 94f6a3c..f00f5a9 100644
--- a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java
@@ -198,12 +198,6 @@
         final int x = (int)me.getX(index);
         final int y = (int)me.getY(index);
         final int pointerId = me.getPointerId(index);
-        processMotionEvent(action, x, y, pointerId, eventTime);
-        return true;
-    }
-
-    public void processMotionEvent(final int action, final int x, final int y,
-            final int pointerId, final long eventTime) {
         switch (action) {
         case MotionEvent.ACTION_DOWN:
         case MotionEvent.ACTION_POINTER_DOWN:
@@ -217,6 +211,7 @@
             onMoveEvent(x, y, pointerId, eventTime);
             break;
         }
+        return true;
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index ab5fee9..b66ee2a 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -1282,12 +1282,12 @@
         }
     }
 
-    public void onShowMoreKeysPanel(final int translatedX, final int translatedY,
-                final MoreKeysPanel panel) {
+    public void onShowMoreKeysPanel(final MoreKeysPanel panel) {
         setReleasedKeyGraphics(mCurrentKey);
-        final long eventTime = SystemClock.uptimeMillis();
+        final int translatedX = panel.translateX(mLastX);
+        final int translatedY = panel.translateY(mLastY);
+        panel.onDownEvent(translatedX, translatedY, mPointerId, SystemClock.uptimeMillis());
         mMoreKeysPanel = panel;
-        mMoreKeysPanel.onDownEvent(translatedX, translatedY, mPointerId, eventTime);
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
index 497a791..a8a14a8 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
@@ -270,15 +270,10 @@
             return super.dispatchTouchEvent(me);
         }
 
-        final MoreKeysPanel moreKeysPanel = mMoreSuggestionsView;
         final int action = me.getAction();
-        final long eventTime = me.getEventTime();
         final int index = me.getActionIndex();
-        final int id = me.getPointerId(index);
         final int x = (int)me.getX(index);
         final int y = (int)me.getY(index);
-        final int translatedX = moreKeysPanel.translateX(x);
-        final int translatedY = moreKeysPanel.translateY(y);
 
         if (mMoreSuggestionsMode == MORE_SUGGESTIONS_CHECKING_MODAL_OR_SLIDING) {
             if (Math.abs(x - mOriginX) >= mMoreSuggestionsModalTolerance
@@ -295,7 +290,8 @@
         }
 
         // MORE_SUGGESTIONS_IN_SLIDING_MODE
-        mMoreSuggestionsView.processMotionEvent(action, translatedX, translatedY, id, eventTime);
+        me.setLocation(mMoreSuggestionsView.translateX(x), mMoreSuggestionsView.translateY(y));
+        mMoreSuggestionsView.onTouchEvent(me);
         return true;
     }
 
