diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java
index bf439f5..3a45d59 100644
--- a/src/com/android/launcher2/AllAppsView.java
+++ b/src/com/android/launcher2/AllAppsView.java
@@ -74,11 +74,13 @@
      * TODO: What about scrolling? */
     private int mLocks = LOCK_ICONS_PENDING;
 
+    private int mSlopX;
+    private int mMaxFlingVelocity;
+
     private RenderScript mRS;
     private RolloRS mRollo;
     private ArrayList<ApplicationInfo> mAllAppsList;
 
-    private ViewConfiguration mConfig;
     private int mPageCount;
     private boolean mStartedScrolling;
     private VelocityTracker mVelocity;
@@ -126,7 +128,10 @@
         super(context, attrs);
         setFocusable(true);
         getHolder().setFormat(PixelFormat.TRANSLUCENT);
-        mConfig = ViewConfiguration.get(context);
+        final ViewConfiguration config = ViewConfiguration.get(context);
+        mSlopX = config.getScaledTouchSlop();
+        mMaxFlingVelocity = config.getScaledMaximumFlingVelocity();
+
         setOnClickListener(this);
         setOnLongClickListener(this);
         setZOrderOnTop(true);
@@ -217,12 +222,11 @@
             break;
         case MotionEvent.ACTION_MOVE:
         case MotionEvent.ACTION_OUTSIDE:
-            int slop = Math.abs(x - mLastMotionX);
-            if (!mStartedScrolling && slop < mConfig.getScaledTouchSlop()) {
-                // don't update mLastMotionX so slop is right and when we do start scrolling
+            int slopX = Math.abs(x - mLastMotionX);
+            if (!mStartedScrolling && slopX < mSlopX) {
+                // don't update mLastMotionX so slopX is right and when we do start scrolling
                 // below, we get the right delta.
             } else {
-
                 mRollo.mState.newPositionX = ev.getRawX() / Defines.SCREEN_WIDTH_PX;
                 mRollo.mState.newTouchDown = 1;
                 mRollo.mInvokeMove.execute();
@@ -241,8 +245,7 @@
             mRollo.mState.newPositionX = ev.getRawX() / Defines.SCREEN_WIDTH_PX;
 
             if (!mZoomSwipeInProgress) {
-                mVelocity.computeCurrentVelocity(1000 /* px/sec */,
-                        mConfig.getScaledMaximumFlingVelocity());
+                mVelocity.computeCurrentVelocity(1000 /* px/sec */, mMaxFlingVelocity);
                 mRollo.mState.flingVelocityX = mVelocity.getXVelocity() / Defines.SCREEN_WIDTH_PX;
                 mRollo.clearSelectedIcon();
                 mRollo.mState.save();
diff --git a/src/com/android/launcher2/SwipeController.java b/src/com/android/launcher2/SwipeController.java
index a900fca..fe61c2e 100644
--- a/src/com/android/launcher2/SwipeController.java
+++ b/src/com/android/launcher2/SwipeController.java
@@ -40,7 +40,8 @@
     private static final float SPRING_CONSTANT = 0.0009f;
 
     // configuration
-    private int mSlop;
+    private int mSlopX;
+    private int mSlopY;
     private float mSwipeDistance;
 
     private AllAppsView mAllAppsView;
@@ -59,7 +60,8 @@
 
     public SwipeController(Context context) {
         ViewConfiguration config = ViewConfiguration.get(context);
-        mSlop = config.getScaledTouchSlop();
+        mSlopX = config.getScaledTouchSlop();
+        mSlopY = 3 * mSlopX / 2; // make it 50% more biased towards horizontal swiping.
         
         DisplayMetrics display = context.getResources().getDisplayMetrics();
         mSwipeDistance = display.heightPixels / 2; // one half of the screen
@@ -130,12 +132,11 @@
 
         case MotionEvent.ACTION_MOVE:
             if (!mCanceled && !mTracking) {
-                if (Math.abs(deltaX) > mSlop) {
+                if (Math.abs(deltaX) > mSlopX) {
                     mCanceled = true;
                     mTracking = false;
                     mAllAppsView.setZoomSwipeInProgress(false, true);
-                }
-                if (Math.abs(deltaY) > mSlop) {
+                } else if (Math.abs(deltaY) > mSlopY) {
                     mTracking = true;
                 }
             }
