diff --git a/quickstep/src/com/android/quickstep/OverviewTouchConsumer.java b/quickstep/src/com/android/quickstep/OverviewTouchConsumer.java
index f9961d9..4da52e1 100644
--- a/quickstep/src/com/android/quickstep/OverviewTouchConsumer.java
+++ b/quickstep/src/com/android/quickstep/OverviewTouchConsumer.java
@@ -18,8 +18,6 @@
 import static android.view.MotionEvent.ACTION_CANCEL;
 import static android.view.MotionEvent.ACTION_DOWN;
 import static android.view.MotionEvent.ACTION_MOVE;
-import static android.view.MotionEvent.ACTION_POINTER_DOWN;
-import static android.view.MotionEvent.ACTION_POINTER_INDEX_SHIFT;
 import static android.view.MotionEvent.ACTION_UP;
 
 import static com.android.quickstep.TouchInteractionService.TOUCH_INTERACTION_LOG;
@@ -31,6 +29,7 @@
 
 import com.android.launcher3.BaseDraggingActivity;
 import com.android.launcher3.views.BaseDragLayer;
+import com.android.quickstep.util.CachedEventDispatcher;
 import com.android.systemui.shared.system.ActivityManagerWrapper;
 
 /**
@@ -39,6 +38,7 @@
 public class OverviewTouchConsumer<T extends BaseDraggingActivity>
         implements TouchConsumer {
 
+    private final CachedEventDispatcher mCachedEventDispatcher = new CachedEventDispatcher();
     private final T mActivity;
     private final BaseDragLayer mTarget;
     private final int[] mLocationOnScreen = new int[2];
@@ -62,6 +62,7 @@
         if (mInvalidated) {
             return;
         }
+        mCachedEventDispatcher.dispatchEvent(ev);
         int action = ev.getActionMasked();
         if (action == ACTION_DOWN) {
             if (mStartingInActivityBounds) {
@@ -90,12 +91,13 @@
             }
         }
 
-        if (mTrackingStarted) {
-            sendEvent(ev);
-        }
-
         if (action == ACTION_UP || action == ACTION_CANCEL) {
             mInvalidated = true;
+
+            // Set an empty consumer to that all the cached events are cleared
+            if (!mCachedEventDispatcher.hasConsumer()) {
+                mCachedEventDispatcher.setConsumer(NO_OP);
+            }
         }
     }
 
@@ -105,38 +107,27 @@
             mTarget.getLocationOnScreen(mLocationOnScreen);
         }
 
-        // Send down touch event
-        MotionEvent down = MotionEvent.obtainNoHistory(ev);
-        down.setAction(ACTION_DOWN);
-        sendEvent(down);
-
-        mTrackingStarted = true;
-        // Send pointer down for remaining pointers.
-        int pointerCount = ev.getPointerCount();
-        for (int i = 1; i < pointerCount; i++) {
-            down.setAction(ACTION_POINTER_DOWN | (i << ACTION_POINTER_INDEX_SHIFT));
-            sendEvent(down);
-        }
-
-        down.recycle();
-
         if (closeActiveWindows) {
             OverviewCallbacks.get(mActivity).closeAllWindows();
             ActivityManagerWrapper.getInstance()
                     .closeSystemWindows(CLOSE_SYSTEM_WINDOWS_REASON_RECENTS);
             TOUCH_INTERACTION_LOG.startQuickStep();
         }
+
+        mTrackingStarted = true;
+        mCachedEventDispatcher.setConsumer(this::sendEvent);
+
     }
 
     private void sendEvent(MotionEvent ev) {
-        if (!mTarget.verifyTouchDispatch(this, ev)) {
+        if (mInvalidated || !mTarget.verifyTouchDispatch(this, ev)) {
             mInvalidated = true;
             return;
         }
         int flags = ev.getEdgeFlags();
         ev.setEdgeFlags(flags | TouchInteractionService.EDGE_NAV_BAR);
         ev.offsetLocation(-mLocationOnScreen[0], -mLocationOnScreen[1]);
-        if (!mTrackingStarted) {
+        if (ev.getAction() == ACTION_DOWN) {
             mTarget.onInterceptTouchEvent(ev);
         }
         mTarget.onTouchEvent(ev);
