diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java
index 2095192..0083d47 100644
--- a/src/com/android/launcher3/allapps/AllAppsContainerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java
@@ -21,7 +21,6 @@
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.InsetDrawable;
 import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
 import android.text.Selection;
 import android.text.SpannableStringBuilder;
 import android.util.AttributeSet;
@@ -227,7 +226,6 @@
         mAppsRecyclerView.setHasFixedSize(true);
         if (FeatureFlags.LAUNCHER3_PHYSICS) {
             mAppsRecyclerView.setSpringAnimationHandler(mSpringAnimationHandler);
-            mAppsRecyclerView.addOnScrollListener(new SpringMotionOnScrollListener());
         }
 
         mSearchContainer = findViewById(R.id.search_container_all_apps);
@@ -403,33 +401,4 @@
     public SpringAnimationHandler getSpringAnimationHandler() {
         return mSpringAnimationHandler;
     }
-
-    public class SpringMotionOnScrollListener extends RecyclerView.OnScrollListener {
-
-        private int mScrollState = RecyclerView.SCROLL_STATE_IDLE;
-
-        @Override
-        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
-            if (mScrollState == RecyclerView.SCROLL_STATE_DRAGGING || (dx == 0 && dy == 0)) {
-                if (mSpringAnimationHandler.isRunning()){
-                    mSpringAnimationHandler.skipToEnd();
-                }
-                return;
-            }
-
-            // We only start the spring animation when we fling and hit the top/bottom, to ensure
-            // that all of the animations start at the same time.
-            if (dy < 0 && !mAppsRecyclerView.canScrollVertically(-1)) {
-                mSpringAnimationHandler.animateToFinalPosition(0, 1);
-            } else if (dy > 0 && !mAppsRecyclerView.canScrollVertically(1)) {
-                mSpringAnimationHandler.animateToFinalPosition(0, -1);
-            }
-        }
-
-        @Override
-        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
-            super.onScrollStateChanged(recyclerView, newState);
-            mScrollState = newState;
-        }
-    }
 }
diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
index ab589d8..331900c 100644
--- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
@@ -104,7 +104,10 @@
     }
 
     public void setSpringAnimationHandler(SpringAnimationHandler springAnimationHandler) {
-        mSpringAnimationHandler = springAnimationHandler;
+        if (FeatureFlags.LAUNCHER3_PHYSICS) {
+            mSpringAnimationHandler = springAnimationHandler;
+            addOnScrollListener(new SpringMotionOnScrollListener());
+        }
     }
 
     @Override
@@ -486,6 +489,25 @@
                 y + mEmptySearchBackground.getIntrinsicHeight());
     }
 
+    private class SpringMotionOnScrollListener extends RecyclerView.OnScrollListener {
+
+        @Override
+        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
+            if (mOverScrollHelper.isInOverScroll()) {
+                // OverScroll will handle animating the springs.
+                return;
+            }
+
+            // We only start the spring animation when we hit the top/bottom, to ensure
+            // that all of the animations start at the same time.
+            if (dy < 0 && !canScrollVertically(-1)) {
+                mSpringAnimationHandler.animateToFinalPosition(0, 1);
+            } else if (dy > 0 && !canScrollVertically(1)) {
+                mSpringAnimationHandler.animateToFinalPosition(0, -1);
+            }
+        }
+    }
+
     private class OverScrollHelper implements SwipeDetector.Listener {
 
         private static final float MAX_RELEASE_VELOCITY = 5000; // px / s
