diff --git a/res/layout/widgets_view.xml b/res/layout/widgets_view.xml
index 0800f59..5cdf560 100644
--- a/res/layout/widgets_view.xml
+++ b/res/layout/widgets_view.xml
@@ -40,7 +40,7 @@
         android:clipChildren="false"
         android:orientation="vertical">
 
-        <android.support.v7.widget.RecyclerView
+        <com.android.launcher3.widget.WidgetsContainerRecyclerView
                 android:id="@+id/widgets_list_view"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
diff --git a/src/com/android/launcher3/AppsContainerRecyclerView.java b/src/com/android/launcher3/AppsContainerRecyclerView.java
index f889712..da81f58 100644
--- a/src/com/android/launcher3/AppsContainerRecyclerView.java
+++ b/src/com/android/launcher3/AppsContainerRecyclerView.java
@@ -40,6 +40,11 @@
         implements RecyclerView.OnItemTouchListener {
 
     private static final float FAST_SCROLL_OVERLAY_Y_OFFSET_FACTOR = 1.5f;
+    private static final int SCROLL_DELTA_THRESHOLD = 6;
+
+    /** Keeps the last known scrolling delta/velocity along y-axis. */
+    private int mDy = 0;
+    private float mDeltaThreshold;
 
     private AlphabeticalAppsList mApps;
     private int mNumAppsPerRow;
@@ -92,6 +97,7 @@
         mScrollbarInset =
                 res.getDimensionPixelSize(R.dimen.apps_view_fast_scroll_scrubber_touch_inset);
         setFastScrollerAlpha(getFastScrollerAlpha());
+        mDeltaThreshold = getResources().getDisplayMetrics().density * SCROLL_DELTA_THRESHOLD;
     }
 
     /**
@@ -132,6 +138,7 @@
 
     @Override
     protected void onFinishInflate() {
+        super.onFinishInflate();
         addOnItemTouchListener(this);
     }
 
@@ -142,6 +149,11 @@
         drawFastScrollerPopup(canvas);
     }
 
+    @Override
+    public void onScrolled(int dx, int dy) {
+        mDy = dy;
+    }
+
     /**
      * We intercept the touch handling only to support fast scrolling when initiated from the
      * scroll bar.  Otherwise, we fall back to the default RecyclerView touch handling.
@@ -175,7 +187,10 @@
                 // Keep track of the down positions
                 mDownX = mLastX = x;
                 mDownY = mLastY = y;
-                stopScroll();
+                if ((Math.abs(mDy) < mDeltaThreshold &&
+                        getScrollState() != RecyclerView.SCROLL_STATE_IDLE)) {
+                    stopScroll();
+                }
                 break;
             case MotionEvent.ACTION_MOVE:
                 // Check if we are scrolling
diff --git a/src/com/android/launcher3/widget/WidgetsContainerRecyclerView.java b/src/com/android/launcher3/widget/WidgetsContainerRecyclerView.java
new file mode 100644
index 0000000..56791c0
--- /dev/null
+++ b/src/com/android/launcher3/widget/WidgetsContainerRecyclerView.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher3.widget;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+
+/**
+ * The widgets recycler view container.
+ * <p>
+ * Overwritten to NOT intercept a touch sequence that started when the {@link RecycleView}
+ * scrolling slowing down below the internally defined threshold.
+ */
+public class WidgetsContainerRecyclerView extends RecyclerView
+        implements RecyclerView.OnItemTouchListener {
+
+    private static final int SCROLL_DELTA_THRESHOLD = 6;
+
+    /** Keeps the last known scrolling delta/velocity along y-axis. */
+    private int mDy = 0;
+    private float mDeltaThreshold;
+
+    public WidgetsContainerRecyclerView(Context context) {
+        this(context, null);
+    }
+
+    public WidgetsContainerRecyclerView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public WidgetsContainerRecyclerView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        mDeltaThreshold = getResources().getDisplayMetrics().density * SCROLL_DELTA_THRESHOLD;
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        addOnItemTouchListener(this);
+    }
+
+    @Override
+    public void onScrolled(int dx, int dy) {
+        mDy = dy;
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent ev) {
+        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
+            if ((Math.abs(mDy) < mDeltaThreshold &&
+                    getScrollState() != RecyclerView.SCROLL_STATE_IDLE)) {
+                // now the touch events are being passed to the {@link WidgetCell} until the
+                // touch sequence goes over the touch slop.
+                stopScroll();
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public void onTouchEvent(RecyclerView rv, MotionEvent ev) {
+        // Do nothing.
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/launcher3/widget/WidgetsRowView.java b/src/com/android/launcher3/widget/WidgetsRowView.java
deleted file mode 100644
index 5466738..0000000
--- a/src/com/android/launcher3/widget/WidgetsRowView.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.launcher3.widget;
-
-import android.content.Context;
-import android.view.MotionEvent;
-import android.widget.FrameLayout;
-import android.widget.HorizontalScrollView;
-import android.widget.TextView;
-
-import com.android.launcher3.R;
-
-/**
- * Layout used for widget tray rows for each app. For performance, this view can be replaced with
- * a {@link RecyclerView} in the future if we settle on scrollable single row for the widgets.
- * If we decide on collapsable grid, then HorizontalScrollView can be replaced with a
- * {@link GridLayout}.
- */
-public class WidgetsRowView extends HorizontalScrollView {
-    static final String TAG = "WidgetsRow";
-
-    private Runnable mOnLayoutListener;
-    private String mAppName;
-
-    public WidgetsRowView(Context context, String appName) {
-        super(context, null, 0);
-        mAppName = appName;
-    }
-
-    /**
-     * Clears all the key listeners for the individual widgets.
-     */
-    public void resetChildrenOnKeyListeners() {
-        int childCount = getChildCount();
-        for (int j = 0; j < childCount; ++j) {
-            getChildAt(j).setOnKeyListener(null);
-        }
-    }
-
-    @Override
-    protected void onAttachedToWindow() {
-        super.onAttachedToWindow();
-        TextView tv = (TextView) findViewById(R.id.widget_name);
-        tv.setText(mAppName);
-    }
-
-    @Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        mOnLayoutListener = null;
-    }
-
-    public void setOnLayoutListener(Runnable r) {
-        mOnLayoutListener = r;
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        super.onLayout(changed, left, top, right, bottom);
-        if (mOnLayoutListener != null) {
-            mOnLayoutListener.run();
-        }
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent event) {
-        boolean result = super.onTouchEvent(event);
-        return result;
-    }
-
-    public static class LayoutParams extends FrameLayout.LayoutParams {
-        public LayoutParams(int width, int height) {
-            super(width, height);
-        }
-    }
-}
