diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index 1010adb..f54084b 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -865,6 +865,11 @@
         requestLayout();
     }
 
+    @Override
+    public boolean dismissPopupPanel() {
+        return false;
+    }
+
     public void purgeKeyboardAndClosing() {
         mKeyboard = null;
         closing();
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardBaseView.java
index 0ad91db..22752d0 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardBaseView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardBaseView.java
@@ -400,11 +400,10 @@
         mPopupPanel = popupPanel;
         mPopupPanelPointerTrackerId = tracker.mPointerId;
 
-        tracker.onLongPressed();
-        popupPanel.showPanel(this, parentKey, tracker, mPopupWindow);
+        popupPanel.showPopupPanel(this, parentKey, tracker, mPopupWindow);
         final int translatedX = popupPanel.translateX(tracker.getLastX());
         final int translatedY = popupPanel.translateY(tracker.getLastY());
-        tracker.onDownEvent(translatedX, translatedY, SystemClock.uptimeMillis(), popupPanel);
+        tracker.onShowPopupPanel(translatedX, translatedY, SystemClock.uptimeMillis(), popupPanel);
 
         invalidateAllKeys();
         return true;
@@ -546,11 +545,12 @@
     @Override
     public void closing() {
         super.closing();
-        dismissMiniKeyboard();
+        dismissPopupPanel();
         mPopupPanelCache.clear();
     }
 
-    public boolean dismissMiniKeyboard() {
+    @Override
+    public boolean dismissPopupPanel() {
         if (mPopupWindow != null && mPopupWindow.isShowing()) {
             mPopupWindow.dismiss();
             mPopupPanel = null;
@@ -562,7 +562,7 @@
     }
 
     public boolean handleBack() {
-        return dismissMiniKeyboard();
+        return dismissPopupPanel();
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index e66ea7b..f27f74c 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -67,6 +67,7 @@
         public void showKeyPreview(int keyIndex, PointerTracker tracker);
         public void cancelShowKeyPreview(PointerTracker tracker);
         public void dismissKeyPreview(PointerTracker tracker);
+        public boolean dismissPopupPanel();
     }
 
     public interface TimerProxy {
@@ -117,9 +118,12 @@
     // true if keyboard layout has been changed.
     private boolean mKeyboardLayoutHasBeenChanged;
 
-    // true if event is already translated to a key action (long press or mini-keyboard)
+    // true if event is already translated to a key action.
     private boolean mKeyAlreadyProcessed;
 
+    // true if this pointer has been long-pressed and is showing a popup panel.
+    private boolean mIsShowingPopupPanel;
+
     // true if this pointer is repeatable key
     private boolean mIsRepeatableKey;
 
@@ -579,6 +583,10 @@
         }
         final int keyIndex = onUpKey(keyX, keyY, eventTime);
         setReleasedKeyGraphics(keyIndex);
+        if (mIsShowingPopupPanel) {
+            mDrawingProxy.dismissPopupPanel();
+            mIsShowingPopupPanel = false;
+        }
         if (mKeyAlreadyProcessed)
             return;
         if (!mIsRepeatableKey) {
@@ -586,6 +594,12 @@
         }
     }
 
+    public void onShowPopupPanel(int x, int y, long eventTime, KeyEventHandler handler) {
+        onLongPressed();
+        onDownEvent(x, y, eventTime, handler);
+        mIsShowingPopupPanel = true;
+    }
+
     public void onLongPressed() {
         mKeyAlreadyProcessed = true;
         setReleasedKeyGraphics(mKeyIndex);
@@ -612,6 +626,10 @@
         mDrawingProxy.cancelShowKeyPreview(this);
         setReleasedKeyGraphics(mKeyIndex);
         mIsInSlidingKeyInput = false;
+        if (mIsShowingPopupPanel) {
+            mDrawingProxy.dismissPopupPanel();
+            mIsShowingPopupPanel = false;
+        }
     }
 
     private void startRepeatKey(int keyIndex) {
diff --git a/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java b/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java
index a90f57c..2741ee8 100644
--- a/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java
@@ -59,19 +59,16 @@
         public void onCodeInput(int primaryCode, int[] keyCodes, int x, int y) {
             mParentKeyboardView.getKeyboardActionListener()
                     .onCodeInput(primaryCode, keyCodes, x, y);
-            mParentKeyboardView.dismissMiniKeyboard();
         }
 
         @Override
         public void onTextInput(CharSequence text) {
             mParentKeyboardView.getKeyboardActionListener().onTextInput(text);
-            mParentKeyboardView.dismissMiniKeyboard();
         }
 
         @Override
         public void onCancelInput() {
             mParentKeyboardView.getKeyboardActionListener().onCancelInput();
-            mParentKeyboardView.dismissMiniKeyboard();
         }
 
         @Override
@@ -159,7 +156,7 @@
     }
 
     @Override
-    public void showPanel(LatinKeyboardBaseView parentKeyboardView, Key parentKey,
+    public void showPopupPanel(LatinKeyboardBaseView parentKeyboardView, Key parentKey,
             PointerTracker tracker, PopupWindow window) {
         mParentKeyboardView = parentKeyboardView;
         final View container = (View)getParent();
@@ -192,6 +189,11 @@
     }
 
     @Override
+    public boolean dismissPopupPanel() {
+        return mParentKeyboardView.dismissPopupPanel();
+    }
+
+    @Override
     public int translateX(int x) {
         return x - mOriginX;
     }
diff --git a/java/src/com/android/inputmethod/keyboard/PopupPanel.java b/java/src/com/android/inputmethod/keyboard/PopupPanel.java
index f94d1c5..dc526e7 100644
--- a/java/src/com/android/inputmethod/keyboard/PopupPanel.java
+++ b/java/src/com/android/inputmethod/keyboard/PopupPanel.java
@@ -26,7 +26,7 @@
      * @param tracker the pointer tracker that pressesd the parent key
      * @param window PopupWindow to be used to show this popup panel
      */
-    public void showPanel(LatinKeyboardBaseView parentKeyboardView, Key parentKey,
+    public void showPopupPanel(LatinKeyboardBaseView parentKeyboardView, Key parentKey,
             PointerTracker tracker, PopupWindow window);
 
     /**
