diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
index be04b5a..b7aa82b 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
@@ -81,6 +81,7 @@
     private int mOldPointerCount = 1;
     private int mOldKeyIndex;
 
+    private final boolean mConfigShowMiniKeyboardAtTouchedPoint;
     protected KeyDetector mKeyDetector;
 
     // To detect double tap.
@@ -225,6 +226,8 @@
         a.recycle();
 
         final Resources res = getResources();
+        mConfigShowMiniKeyboardAtTouchedPoint = res.getBoolean(
+                R.bool.config_show_mini_keyboard_at_touched_point);
         final float keyHysteresisDistance = res.getDimension(R.dimen.key_hysteresis_distance);
         mKeyDetector = new KeyDetector(keyHysteresisDistance);
 
@@ -459,7 +462,13 @@
         mPopupPanel = popupPanel;
         mPopupPanelPointerTrackerId = tracker.mPointerId;
 
-        popupPanel.showPopupPanel(this, parentKey, tracker, mPopupWindow);
+        final Keyboard keyboard = getKeyboard();
+        mPopupPanel.setShifted(keyboard.isShiftedOrShiftLocked());
+        final int pointX = (mConfigShowMiniKeyboardAtTouchedPoint) ? tracker.getLastX()
+                : parentKey.mX + parentKey.mWidth / 2;
+        final int pointY = parentKey.mY - keyboard.mVerticalGap;
+        popupPanel.showPopupPanel(
+                this, this, pointX, pointY, mPopupWindow, getKeyboardActionListener());
         final int translatedX = popupPanel.translateX(tracker.getLastX());
         final int translatedY = popupPanel.translateY(tracker.getLastY());
         tracker.onShowPopupPanel(translatedX, translatedY, SystemClock.uptimeMillis(), popupPanel);
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index d33cb44..83bab67 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -63,13 +63,12 @@
         public TimerProxy getTimerProxy();
     }
 
-    public interface DrawingProxy {
+    public interface DrawingProxy extends PopupPanel.Controller {
         public void invalidateKey(Key key);
         public TextView inflateKeyPreviewText();
         public void showKeyPreview(int keyIndex, PointerTracker tracker);
         public void cancelShowKeyPreview(PointerTracker tracker);
         public void dismissKeyPreview(PointerTracker tracker);
-        public boolean dismissPopupPanel();
     }
 
     public interface TimerProxy {
diff --git a/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java b/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java
index c3b5825..8b8b27b 100644
--- a/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java
@@ -36,12 +36,12 @@
  */
 public class PopupMiniKeyboardView extends KeyboardView implements PopupPanel {
     private final int[] mCoordinates = new int[2];
-    private final boolean mConfigShowMiniKeyboardAtTouchedPoint;
 
     private final KeyDetector mKeyDetector;
     private final int mVerticalCorrection;
 
-    private LatinKeyboardView mParentKeyboardView;
+    private Controller mController;
+    private KeyboardActionListener mListener;
     private int mOriginX;
     private int mOriginY;
 
@@ -101,30 +101,29 @@
         public void cancelKeyTimers() {}
     };
 
-    private final KeyboardActionListener mListner = new KeyboardActionListener() {
+    private final KeyboardActionListener mMiniKeyboardListener = new KeyboardActionListener() {
         @Override
         public void onCodeInput(int primaryCode, int[] keyCodes, int x, int y) {
-            mParentKeyboardView.getKeyboardActionListener()
-                    .onCodeInput(primaryCode, keyCodes, x, y);
+            mListener.onCodeInput(primaryCode, keyCodes, x, y);
         }
 
         @Override
         public void onTextInput(CharSequence text) {
-            mParentKeyboardView.getKeyboardActionListener().onTextInput(text);
+            mListener.onTextInput(text);
         }
 
         @Override
         public void onCancelInput() {
-            mParentKeyboardView.getKeyboardActionListener().onCancelInput();
+            mListener.onCancelInput();
         }
 
         @Override
         public void onPress(int primaryCode, boolean withSliding) {
-            mParentKeyboardView.getKeyboardActionListener().onPress(primaryCode, withSliding);
+            mListener.onPress(primaryCode, withSliding);
         }
         @Override
         public void onRelease(int primaryCode, boolean withSliding) {
-            mParentKeyboardView.getKeyboardActionListener().onRelease(primaryCode, withSliding);
+            mListener.onRelease(primaryCode, withSliding);
         }
         @Override
         public boolean onCustomRequest(int requestCode) { return false; }
@@ -144,8 +143,6 @@
         a.recycle();
 
         final Resources res = context.getResources();
-        mConfigShowMiniKeyboardAtTouchedPoint = res.getBoolean(
-                R.bool.config_show_mini_keyboard_at_touched_point);
         // Override default ProximityKeyDetector.
         mKeyDetector = new MiniKeyboardKeyDetector(res.getDimension(
                 R.dimen.mini_keyboard_slide_allowance));
@@ -179,7 +176,7 @@
 
     @Override
     public KeyboardActionListener getKeyboardActionListener() {
-        return mListner;
+        return mMiniKeyboardListener;
     }
 
     @Override
@@ -200,34 +197,36 @@
     }
 
     @Override
-    public void showPopupPanel(LatinKeyboardView parentKeyboardView, Key parentKey,
-            PointerTracker tracker, PopupWindow window) {
-        mParentKeyboardView = parentKeyboardView;
-        final View container = (View)getParent();
+    public void setShifted(boolean shifted) {
         final MiniKeyboard miniKeyboard = (MiniKeyboard)getKeyboard();
-        final Keyboard parentKeyboard = parentKeyboardView.getKeyboard();
-
-        parentKeyboardView.getLocationInWindow(mCoordinates);
-        final int pointX = (mConfigShowMiniKeyboardAtTouchedPoint) ? tracker.getLastX()
-                : parentKey.mX + parentKey.mWidth / 2;
-        final int pointY = parentKey.mY;
-        final int miniKeyboardLeft = pointX - miniKeyboard.getDefaultCoordX()
-                + parentKeyboardView.getPaddingLeft();
-        final int x = wrapUp(Math.max(0, Math.min(miniKeyboardLeft,
-                parentKeyboardView.getWidth() - miniKeyboard.mOccupiedWidth))
-                - container.getPaddingLeft() + mCoordinates[0],
-                container.getMeasuredWidth(), 0, parentKeyboardView.getWidth());
-        final int y = pointY - parentKeyboard.mVerticalGap
-                - (container.getMeasuredHeight() - container.getPaddingBottom())
-                + parentKeyboardView.getPaddingTop() + mCoordinates[1];
-
-        if (miniKeyboard.setShifted(parentKeyboard.isShiftedOrShiftLocked())) {
+        if (miniKeyboard.setShifted(shifted)) {
             invalidateAllKeys();
         }
+    }
+
+    @Override
+    public void showPopupPanel(View parentView, Controller controller, int pointX, int pointY,
+            PopupWindow window, KeyboardActionListener listener) {
+        mController = controller;
+        mListener = listener;
+        final View container = (View)getParent();
+        final MiniKeyboard miniKeyboard = (MiniKeyboard)getKeyboard();
+
+        parentView.getLocationInWindow(mCoordinates);
+        final int miniKeyboardLeft = pointX - miniKeyboard.getDefaultCoordX()
+                + parentView.getPaddingLeft();
+        final int x = wrapUp(Math.max(0, Math.min(miniKeyboardLeft,
+                parentView.getWidth() - miniKeyboard.mOccupiedWidth))
+                - container.getPaddingLeft() + mCoordinates[0],
+                container.getMeasuredWidth(), 0, parentView.getWidth());
+        final int y = pointY
+                - (container.getMeasuredHeight() - container.getPaddingBottom())
+                + parentView.getPaddingTop() + mCoordinates[1];
+
         window.setContentView(container);
         window.setWidth(container.getMeasuredWidth());
         window.setHeight(container.getMeasuredHeight());
-        window.showAtLocation(parentKeyboardView, Gravity.NO_GRAVITY, x, y);
+        window.showAtLocation(parentView, Gravity.NO_GRAVITY, x, y);
 
         mOriginX = x + container.getPaddingLeft() - mCoordinates[0];
         mOriginY = y + container.getPaddingTop() - mCoordinates[1];
@@ -243,7 +242,7 @@
 
     @Override
     public boolean dismissPopupPanel() {
-        return mParentKeyboardView.dismissPopupPanel();
+        return mController.dismissPopupPanel();
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/keyboard/PopupPanel.java b/java/src/com/android/inputmethod/keyboard/PopupPanel.java
index db637c5..5e51fd5 100644
--- a/java/src/com/android/inputmethod/keyboard/PopupPanel.java
+++ b/java/src/com/android/inputmethod/keyboard/PopupPanel.java
@@ -16,18 +16,27 @@
 
 package com.android.inputmethod.keyboard;
 
+import android.view.View;
 import android.widget.PopupWindow;
 
 public interface PopupPanel extends PointerTracker.KeyEventHandler {
+    public interface Controller {
+        public boolean dismissPopupPanel();
+    }
+
+    public void setShifted(boolean shifted);
+
     /**
      * Show popup panel.
-     * @param parentKeyboardView the parent KeyboardView that has the parent key.
-     * @param parentKey the parent key that is the source of this popup panel
-     * @param tracker the pointer tracker that pressesd the parent key
+     * @param parentView the parent view of this popup panel
+     * @param controller the controller that can dismiss this popup panel
+     * @param pointX x coordinate of this popup panel
+     * @param pointY y coordinate of this popup panel
      * @param window PopupWindow to be used to show this popup panel
+     * @param listener the listener that will receive keyboard action from this popup panel.
      */
-    public void showPopupPanel(LatinKeyboardView parentKeyboardView, Key parentKey,
-            PointerTracker tracker, PopupWindow window);
+    public void showPopupPanel(View parentView, Controller controller, int pointX, int pointY,
+            PopupWindow window, KeyboardActionListener listener);
 
     /**
      * Translate X-coordinate of touch event to the local X-coordinate of this PopupPanel.
