diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
index 95794f7..d9fa9f2 100644
--- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
+++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
@@ -212,8 +212,6 @@
 
     private final ProximityKeyDetector mProximityKeyDetector = new ProximityKeyDetector();
 
-    private boolean mAbortKey;
-
     // For multi-tap
     private int mLastSentIndex;
     private int mTapCount;
@@ -628,10 +626,6 @@
         invalidateAllKeys();
         computeProximityThreshold(keyboard);
         mMiniKeyboardCache.clear();
-        // Not really necessary to do every time, but will free up views
-        // Switching to a different keyboard should abort any pending keys so that the key up
-        // doesn't get delivered to the old or new keyboard
-        mAbortKey = true; // Until the next ACTION_DOWN
     }
 
     /**
@@ -1124,7 +1118,6 @@
         Key popupKey = mKeys[keyIndex];
         boolean result = onLongPress(popupKey);
         if (result) {
-            mAbortKey = true;
             showPreview(NOT_A_KEY);
         }
         return result;
@@ -1239,13 +1232,8 @@
         // Track the last few movements to look for spurious swipes.
         mSwipeTracker.addMovement(me);
 
-        // Ignore all motion events until a DOWN.
-        if (mAbortKey
-                && action != MotionEvent.ACTION_DOWN && action != MotionEvent.ACTION_CANCEL) {
-            return true;
-        }
-
-        if (mGestureDetector.onTouchEvent(me)) {
+        // We must disable gesture detector while mini-keyboard is on the screen.
+        if (!mMiniKeyboardOnScreen && mGestureDetector.onTouchEvent(me)) {
             showPreview(NOT_A_KEY);
             mHandler.cancelKeyTimers();
             return true;
@@ -1315,7 +1303,6 @@
 
     private void onDownEvent(int touchX, int touchY, long eventTime) {
         int keyIndex = mProximityKeyDetector.getKeyIndexAndNearbyCodes(touchX, touchY, null);
-        mAbortKey = false;
         mCurrentKey = keyIndex;
         mStartX = touchX;
         mStartY = touchY;
@@ -1326,11 +1313,6 @@
         if (keyIndex >= 0 && mKeys[keyIndex].repeatable) {
             repeatKey(keyIndex);
             mHandler.startKeyRepeatTimer(REPEAT_START_DELAY, keyIndex);
-            // Delivering the key could have caused an abort
-            if (mAbortKey) {
-                mHandler.cancelKeyRepeatTimer();
-                return;
-            }
         }
         if (keyIndex != NOT_A_KEY) {
             mHandler.startLongPressTimer(keyIndex, LONGPRESS_TIMEOUT);
@@ -1387,7 +1369,7 @@
         }
         showPreview(NOT_A_KEY);
         // If we're not on a repeating key (which sends on a DOWN event)
-        if (!wasInKeyRepeat && !mMiniKeyboardOnScreen && !mAbortKey) {
+        if (!wasInKeyRepeat && !mMiniKeyboardOnScreen) {
             detectAndSendKey(mCurrentKey, touchX, touchY, eventTime);
         }
         invalidateKey(keyIndex);
@@ -1397,7 +1379,6 @@
         mHandler.cancelKeyTimers();
         mHandler.cancelPopupPreview();
         dismissPopupKeyboard();
-        mAbortKey = true;
         showPreview(NOT_A_KEY);
         invalidateKey(mCurrentKey);
     }
