diff --git a/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java b/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java
index 5a2eb16..51f6c04 100644
--- a/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java
+++ b/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java
@@ -163,8 +163,6 @@
                 - (container.getMeasuredHeight() - container.getPaddingBottom())
                 + parentView.getPaddingTop() + mCoordinates[1];
 
-        window.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
-        window.setOutsideTouchable(true);
         window.setContentView(container);
         window.setWidth(container.getMeasuredWidth());
         window.setHeight(container.getMeasuredHeight());
@@ -221,22 +219,6 @@
     };
 
     @Override
-    public boolean dispatchTouchEvent(MotionEvent me) {
-        final int index = me.getActionIndex();
-        final int id = me.getPointerId(index);
-        final PointerTracker tracker = PointerTracker.getPointerTracker(id, this);
-        final int x = (int)me.getX(index);
-        final int y = (int)me.getY(index);
-        final boolean inside = (x >= 0 && x < getWidth() && y >= 0 && y < getHeight());
-        if (inside || tracker.isInSlidingKeyInput()) {
-            return super.dispatchTouchEvent(me);
-        } else {
-            dismissMoreKeysPanel();
-            return true;
-        }
-    }
-
-    @Override
     public boolean onTouchEvent(MotionEvent me) {
         final int action = me.getAction();
         final long eventTime = me.getEventTime();
diff --git a/java/src/com/android/inputmethod/latin/SuggestionsView.java b/java/src/com/android/inputmethod/latin/SuggestionsView.java
index 9d0e42a..fe54f4a 100644
--- a/java/src/com/android/inputmethod/latin/SuggestionsView.java
+++ b/java/src/com/android/inputmethod/latin/SuggestionsView.java
@@ -27,6 +27,7 @@
 import android.graphics.Rect;
 import android.graphics.Typeface;
 import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.Message;
 import android.os.SystemClock;
@@ -506,10 +507,22 @@
         mMoreSuggestionsView = (MoreSuggestionsView)mMoreSuggestionsContainer
                 .findViewById(R.id.more_suggestions_view);
         mMoreSuggestionsBuilder = new MoreSuggestions.Builder(mMoreSuggestionsView);
-        mMoreSuggestionsWindow = new PopupWindow(context);
-        mMoreSuggestionsWindow.setWindowLayoutMode(
+
+        final PopupWindow moreWindow = new PopupWindow(context);
+        moreWindow.setWindowLayoutMode(
                 ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
-        mMoreSuggestionsWindow.setBackgroundDrawable(null);
+        moreWindow.setBackgroundDrawable(new ColorDrawable(android.R.color.transparent));
+        moreWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
+        moreWindow.setFocusable(true);
+        moreWindow.setOutsideTouchable(true);
+        moreWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
+            @Override
+            public void onDismiss() {
+                mKeyboardView.dimEntireKeyboard(false);
+            }
+        });
+        mMoreSuggestionsWindow = moreWindow;
+
         final Resources res = context.getResources();
         mMoreSuggestionsModalTolerance = res.getDimensionPixelOffset(
                 R.dimen.more_suggestions_modal_tolerance);
@@ -517,21 +530,6 @@
                 context, mMoreSuggestionsSlidingListener);
     }
 
-    private final View.OnTouchListener mMoreSuggestionsCanceller = new View.OnTouchListener() {
-        @Override
-        public boolean onTouch(View view, MotionEvent me) {
-            if (!mMoreSuggestionsWindow.isShowing()) return false;
-
-            switch (me.getAction()) {
-            case MotionEvent.ACTION_UP:
-            case MotionEvent.ACTION_POINTER_UP:
-                return mMoreSuggestionsView.dismissMoreKeysPanel();
-            default:
-                return true;
-            }
-        }
-    };
-
     /**
      * A connection back to the input method.
      * @param listener
@@ -726,8 +724,6 @@
     private boolean dismissMoreSuggestions() {
         if (mMoreSuggestionsWindow.isShowing()) {
             mMoreSuggestionsWindow.dismiss();
-            mKeyboardView.dimEntireKeyboard(false);
-            mKeyboardView.setOnTouchListener(null);
             return true;
         }
         return false;
@@ -767,7 +763,6 @@
             mOriginX = mLastX;
             mOriginY = mLastY;
             mKeyboardView.dimEntireKeyboard(true);
-            mKeyboardView.setOnTouchListener(mMoreSuggestionsCanceller);
             for (int i = 0; i < params.mSuggestionsCountInStrip; i++) {
                 mWords.get(i).setPressed(false);
             }
