diff --git a/res/values/config.xml b/res/values/config.xml
index 9d3f688..15ec05b 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -1,4 +1,6 @@
 <resources>
     <integer name="config_allAppsFadeInTime">700</integer>
     <integer name="config_allAppsFadeOutTime">700</integer>
+    <integer name="config_allAppsBatchLoadDelay">0</integer>
+    <integer name="config_allAppsBatchSize">0</integer>
 </resources>
diff --git a/src/com/android/launcher2/AllApps2D.java b/src/com/android/launcher2/AllApps2D.java
index eb7cd83..90c87fb 100644
--- a/src/com/android/launcher2/AllApps2D.java
+++ b/src/com/android/launcher2/AllApps2D.java
@@ -50,8 +50,6 @@
 
     private static final String TAG = "Launcher.AllApps2D";
 
-    private static final int BATCH_SIZE = 6; // give us a few apps at a time
-
     private Launcher mLauncher;
     private DragController mDragController;
 
@@ -302,10 +300,6 @@
         return -1;
     }
 
-    public int getAppBatchSize() {
-        return BATCH_SIZE;
-    }
-
     public void dumpState() {
         ApplicationInfo.dumpApplicationInfoList(TAG, "mAllAppsList", mAllAppsList);
     }
diff --git a/src/com/android/launcher2/AllApps3D.java b/src/com/android/launcher2/AllApps3D.java
index 2b27c7c..9c3b3e4 100644
--- a/src/com/android/launcher2/AllApps3D.java
+++ b/src/com/android/launcher2/AllApps3D.java
@@ -73,8 +73,6 @@
     private static final int SELECTION_ICONS = 1;
     private static final int SELECTION_HOME = 2;
 
-    private static final int BATCH_SIZE = 0; // give us all the apps at once
-
     private Launcher mLauncher;
     private DragController mDragController;
 
@@ -91,6 +89,10 @@
     private static RenderScriptGL sRS;
     private static RolloRS sRollo;
 
+    private static boolean sZoomDirty = false;
+    private static boolean sAnimateNextZoom;
+    private static float sNextZoom;
+
     /**
      * True when we are using arrow keys or trackball to drive navigation
      */
@@ -120,9 +122,6 @@
     private boolean mShouldGainFocus;
 
     private boolean mHaveSurface = false;
-    private boolean mZoomDirty = false;
-    private boolean mAnimateNextZoom;
-    private float mNextZoom;
     private float mZoom;
     private float mVelocity;
     private AAMessage mMessageProc;
@@ -241,7 +240,7 @@
         }
         // We may lose any callbacks that are pending, so make sure that we re-sync that
         // on the next surfaceChanged.
-        mZoomDirty = true;
+        sZoomDirty = true;
         mHaveSurface = false;
     }
 
@@ -801,12 +800,12 @@
      */
     public void zoom(float zoom, boolean animate) {
         cancelLongPress();
-        mNextZoom = zoom;
-        mAnimateNextZoom = animate;
+        sNextZoom = zoom;
+        sAnimateNextZoom = animate;
         // if we do setZoom while we don't have a surface, we won't
         // get the callbacks that actually set mZoom.
         if (sRollo == null || !mHaveSurface) {
-            mZoomDirty = true;
+            sZoomDirty = true;
             mZoom = zoom;
         } else {
             sRollo.setZoom(zoom, animate);
@@ -963,7 +962,7 @@
             sRollo.mScrollPos = ((float)mData[0]) / (1 << 16);
             mVelocity = ((float)mData[1]) / (1 << 16);
             mZoom = ((float)mData[2]) / (1 << 16);
-            mZoomDirty = false;
+            sZoomDirty = false;
         }
     }
 
@@ -1309,8 +1308,8 @@
         }
 
         void dirtyCheck() {
-            if (mAllApps.mZoomDirty) {
-                setZoom(mAllApps.mNextZoom, mAllApps.mAnimateNextZoom);
+            if (sZoomDirty) {
+                setZoom(mAllApps.sNextZoom, mAllApps.sAnimateNextZoom);
             }
         }
 
@@ -1599,10 +1598,6 @@
         }
     }
 
-    public int getAppBatchSize() {
-        return BATCH_SIZE;
-    }
-
     public void dumpState() {
         Log.d(TAG, "sRS=" + sRS);
         Log.d(TAG, "sRollo=" + sRollo);
@@ -1616,8 +1611,8 @@
         Log.d(TAG, "mVelocityTracker=" + mVelocityTracker);
         Log.d(TAG, "mTouchTracking=" + mTouchTracking);
         Log.d(TAG, "mShouldGainFocus=" + mShouldGainFocus);
-        Log.d(TAG, "mZoomDirty=" + mZoomDirty);
-        Log.d(TAG, "mAnimateNextZoom=" + mAnimateNextZoom);
+        Log.d(TAG, "sZoomDirty=" + sZoomDirty);
+        Log.d(TAG, "sAnimateNextZoom=" + sAnimateNextZoom);
         Log.d(TAG, "mZoom=" + mZoom);
         Log.d(TAG, "mScrollPos=" + sRollo.mScrollPos);
         Log.d(TAG, "mVelocity=" + mVelocity);
diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java
index 8888737..877c075 100644
--- a/src/com/android/launcher2/AllAppsView.java
+++ b/src/com/android/launcher2/AllAppsView.java
@@ -41,8 +41,6 @@
 
     public void updateApps(ArrayList<ApplicationInfo> list);
     
-    public int  getAppBatchSize();
-
     public void dumpState();
 
     public void surrender();
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index b82e0cf..3522199 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -1750,6 +1750,10 @@
      *          - Go back with back key  TODO: make this not go to workspace
      *          - From all apps
      *          - From workspace
+     *   - Enter and exit car mode (becuase it causes an extra configuration changed)
+     *          - From all apps
+     *          - From the center workspace
+     *          - From another workspace
      */
     void closeAllApps(boolean animated) {
         if (mAllAppsGrid.isVisible()) {
@@ -2091,7 +2095,7 @@
      * Implementation of the method from LauncherModel.Callbacks.
      */
     public int getAppBatchSize() {
-        return mAllAppsGrid.getAppBatchSize();
+        return getResources().getInteger(R.integer.config_allAppsBatchSize);
     }
 
     /**
diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java
index 9766831..7a56bcd 100644
--- a/src/com/android/launcher2/LauncherModel.java
+++ b/src/com/android/launcher2/LauncherModel.java
@@ -62,7 +62,7 @@
     static final boolean DEBUG_LOADERS = false;
     static final String TAG = "Launcher.Model";
 
-    final int ALL_APPS_LOAD_DELAY = 150; // ms
+    private int mAllAppsLoadDelay; // milliseconds between batches
 
     private final LauncherApplication mApp;
     private final Object mLock = new Object();
@@ -98,6 +98,8 @@
 
         mDefaultIcon = Utilities.createIconBitmap(
                 app.getPackageManager().getDefaultActivityIcon(), app);
+
+        mAllAppsLoadDelay = app.getResources().getInteger(R.integer.config_allAppsBatchLoadDelay);
     }
 
     public Bitmap getFallbackIcon() {
@@ -581,7 +583,7 @@
                 // Whew! Hard work done.
                 synchronized (mLock) {
                     if (mIsLaunching) {
-                        android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_DEFAULT);
+                        android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
                     }
                 }
 
@@ -1055,9 +1057,6 @@
                             mAllAppsList.add(new ApplicationInfo(apps.get(i), mIconCache));
                             i++;
                         }
-                        // re-sort before binding this batch to the grid
-                        Collections.sort(mAllAppsList.data, APP_NAME_COMPARATOR);
-                        Collections.sort(mAllAppsList.added, APP_NAME_COMPARATOR);
                         if (DEBUG_LOADERS) {
                             Log.d(TAG, "batch of " + batchSize + " icons processed in "
                                     + (SystemClock.uptimeMillis()-t2) + "ms");
@@ -1066,16 +1065,17 @@
 
                     mHandler.post(bindAllAppsTask);
 
-                    if (ALL_APPS_LOAD_DELAY > 0) {
+                    if (mAllAppsLoadDelay > 0 && i < N) {
                         try {
-                            Thread.sleep(ALL_APPS_LOAD_DELAY);
+                            Thread.sleep(mAllAppsLoadDelay);
                         } catch (InterruptedException exc) { }
                     }
                 }
 
                 if (DEBUG_LOADERS) {
                     Log.d(TAG, "cached all " + N + " apps in "
-                            + (SystemClock.uptimeMillis()-t) + "ms");
+                            + (SystemClock.uptimeMillis()-t) + "ms"
+                            + (mAllAppsLoadDelay > 0 ? " (including delay)" : ""));
                 }
             }
 
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 8f5bd29..b85b12c 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -16,22 +16,25 @@
 
 package com.android.launcher2;
 
+import java.util.ArrayList;
+import java.util.HashSet;
+
 import android.app.WallpaperManager;
 import android.appwidget.AppWidgetManager;
 import android.appwidget.AppWidgetProviderInfo;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
-import android.content.ComponentName;
+import android.content.pm.PackageManager;
 import android.content.pm.ProviderInfo;
 import android.content.res.TypedArray;
-import android.content.pm.PackageManager;
 import android.graphics.Canvas;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.IBinder;
-import android.os.Parcelable;
 import android.os.Parcel;
+import android.os.Parcelable;
 import android.util.AttributeSet;
 import android.view.MotionEvent;
 import android.view.VelocityTracker;
@@ -39,12 +42,10 @@
 import android.view.ViewConfiguration;
 import android.view.ViewGroup;
 import android.view.ViewParent;
+import android.view.animation.OvershootInterpolator;
 import android.widget.Scroller;
 import android.widget.TextView;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-
 import com.android.launcher.R;
 
 /**
@@ -153,7 +154,7 @@
      */
     private void initWorkspace() {
         Context context = getContext();
-        mScroller = new Scroller(context);
+        mScroller = new Scroller(context, new OvershootInterpolator());
         mCurrentScreen = mDefaultScreen;
         Launcher.setScreen(mCurrentScreen);
         LauncherApplication app = (LauncherApplication)context.getApplicationContext();
@@ -390,7 +391,8 @@
         IBinder token = getWindowToken();
         if (token != null) {
             mWallpaperManager.setWallpaperOffsetSteps(1.0f / (getChildCount() - 1), 0 );
-            mWallpaperManager.setWallpaperOffsets(getWindowToken(), mScrollX/(float)scrollRange, 0);
+            mWallpaperManager.setWallpaperOffsets(getWindowToken(),
+                    Math.max(0.f, Math.min(mScrollX/(float)scrollRange, 1.f)), 0);
         }
     }
     
@@ -1316,7 +1318,7 @@
                             final ProviderInfo providerInfo = manager.resolveContentProvider(
                                     uri.getAuthority(), 0);
 
-                            if (providerInfo == null) {
+                            if (providerInfo != null) {
                                 for (String packageName: packageNames) {
                                     if (packageName.equals(providerInfo.packageName)) {
                                         // TODO: This should probably be done on a worker thread
