diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 1574be8..36d7da1 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -108,8 +108,8 @@
     static final String EXTRA_CUSTOM_WIDGET = "custom_widget";
     static final String SEARCH_WIDGET = "search_widget";
 
-    static final int SCREEN_COUNT = 3;
-    static final int DEFAULT_SCREN = 1;
+    static final int SCREEN_COUNT = 5;
+    static final int DEFAULT_SCREEN = 2;
     static final int NUMBER_CELLS_X = 4;
     static final int NUMBER_CELLS_Y = 4;
 
@@ -148,7 +148,7 @@
     static final int APPWIDGET_HOST_ID = 1024;
 
     private static final Object sLock = new Object();
-    private static int sScreen = DEFAULT_SCREN;
+    private static int sScreen = DEFAULT_SCREEN;
 
     private LayoutInflater mInflater;
 
diff --git a/src/com/android/launcher2/LauncherProvider.java b/src/com/android/launcher2/LauncherProvider.java
index 9226c22..942b4be 100644
--- a/src/com/android/launcher2/LauncherProvider.java
+++ b/src/com/android/launcher2/LauncherProvider.java
@@ -58,7 +58,7 @@
 
     private static final String DATABASE_NAME = "launcher.db";
     
-    private static final int DATABASE_VERSION = 4;
+    private static final int DATABASE_VERSION = 5;
 
     static final String AUTHORITY = "com.android.launcher2.settings";
     
@@ -393,6 +393,21 @@
                 }
             }
             
+            if (version < 5) {
+                // We went from 3 to 5 screens. Move everything 1 to the right
+                db.beginTransaction();
+                try {
+                    db.execSQL("UPDATE favorites SET screen=(screen + 1);");
+                    db.setTransactionSuccessful();
+                    version = 5;
+                } catch (SQLException ex) {
+                    // Old version remains, which means we wipe old data
+                    Log.e(LOG_TAG, ex.getMessage(), ex);
+                } finally {
+                    db.endTransaction();
+                }
+            }
+            
             if (version != DATABASE_VERSION) {
                 Log.w(LOG_TAG, "Destroying all old data.");
                 db.execSQL("DROP TABLE IF EXISTS " + TABLE_FAVORITES);
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index a0391d3..a14a11f 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -543,6 +543,14 @@
         if (restore) {
             canvas.restoreToCount(restoreCount);
         }
+        
+        onDrawScrollBars(canvas);
+    }
+
+    @Override
+    protected int computeHorizontalScrollRange() {
+        final int count = getChildCount();
+        return count == 0 ? getWidth() : (getChildAt(count - 1)).getRight();
     }
 
     private float mScale = 1.0f;
@@ -577,8 +585,11 @@
             getChildAt(i).measure(widthMeasureSpec, heightMeasureSpec);
         }
 
+
         if (mFirstLayout) {
+            setHorizontalScrollBarEnabled(false);
             scrollTo(mCurrentScreen * width, 0);
+            setHorizontalScrollBarEnabled(true);
             updateWallpaperOffset(width * (getChildCount() - 1));
             mFirstLayout = false;
         }
@@ -725,7 +736,7 @@
                     if (xMoved) {
                         // Scroll if the user moved far enough along the X axis
                         mTouchState = TOUCH_STATE_SCROLLING;
-                        enableChildrenCache();
+                        enableChildrenCache(mCurrentScreen - 1, mCurrentScreen + 1);
                     }
                     // Either way, cancel any pending longpress
                     if (mAllowLongPress) {
@@ -781,9 +792,20 @@
         return mTouchState != TOUCH_STATE_REST;
     }
 
-    void enableChildrenCache() {
+    void enableChildrenCache(int fromScreen, int toScreen) {
+        if (fromScreen > toScreen) {
+            int temp = fromScreen;
+            fromScreen = toScreen;
+            toScreen = fromScreen;
+        }
+        
         final int count = getChildCount();
-        for (int i = 0; i < count; i++) {
+        
+        fromScreen = Math.max(fromScreen, 0);
+        toScreen = Math.min(toScreen, count - 1);
+        
+        for (int i = fromScreen; i <= toScreen; i++) {
+            // Log.d("TAG", "enablingChildrenCache: " + i);
             final CellLayout layout = (CellLayout) getChildAt(i);
             layout.setChildrenDrawnWithCacheEnabled(true);
             layout.setChildrenDrawingCacheEnabled(true);
@@ -852,6 +874,8 @@
                         scrollBy(Math.min(availableToScroll, deltaX), 0);
                         updateWallpaperOffset();
                     }
+                } else {
+                    awakenScrollBars();
                 }
             }
             break;
@@ -895,22 +919,26 @@
     void snapToScreen(int whichScreen) {
         if (!mScroller.isFinished()) return;
 
-        clearVacantCache();
-        enableChildrenCache();
-
         whichScreen = Math.max(0, Math.min(whichScreen, getChildCount() - 1));
-        boolean changingScreens = whichScreen != mCurrentScreen;
+        
+        clearVacantCache();
+        enableChildrenCache(mCurrentScreen, whichScreen);
+
+
+        final int screenDelta = Math.abs(whichScreen - mCurrentScreen);
         
         mNextScreen = whichScreen;
         
         View focusedChild = getFocusedChild();
-        if (focusedChild != null && changingScreens && focusedChild == getChildAt(mCurrentScreen)) {
+        if (focusedChild != null && screenDelta != 0 && focusedChild == getChildAt(mCurrentScreen)) {
             focusedChild.clearFocus();
         }
         
         final int newX = whichScreen * getWidth();
         final int delta = newX - mScrollX;
-        mScroller.startScroll(mScrollX, 0, delta, 0, Math.abs(delta) * 2);
+        final int duration = screenDelta * 300;
+        awakenScrollBars(duration);
+        mScroller.startScroll(mScrollX, 0, delta, 0, duration);
         invalidate();
     }
 
