diff --git a/src/com/android/launcher2/AllAppsPagedView.java b/src/com/android/launcher2/AllAppsPagedView.java
index 28f44e4..fd5979f 100644
--- a/src/com/android/launcher2/AllAppsPagedView.java
+++ b/src/com/android/launcher2/AllAppsPagedView.java
@@ -122,8 +122,7 @@
             mCellCountY = determineCellCountY(height, layout);
             mLastMeasureWidth = width;
             mLastMeasureHeight = height;
-            removeAllViews();
-            invalidatePageData();
+            postInvalidatePageData(true);
         }
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
     }
@@ -132,12 +131,7 @@
     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
         if (mWaitingToInitPages) {
             mWaitingToInitPages = false;
-            invalidatePageData();
-
-            // invalidatePageData() is what causes the child pages to be created. We need the
-            // children to be measured before layout, so force a new measure here.
-            measure(MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.EXACTLY),
-                    MeasureSpec.makeMeasureSpec(getMeasuredHeight(), MeasureSpec.EXACTLY));
+            postInvalidatePageData(false);
         }
         super.onLayout(changed, left, top, right, bottom);
     }
diff --git a/src/com/android/launcher2/AllAppsTabbed.java b/src/com/android/launcher2/AllAppsTabbed.java
index e11113f..27e78d8 100644
--- a/src/com/android/launcher2/AllAppsTabbed.java
+++ b/src/com/android/launcher2/AllAppsTabbed.java
@@ -163,18 +163,28 @@
     protected void onLayout(boolean changed, int l, int t, int r, int b) {
         if (mFirstLayout) {
             mFirstLayout = false;
-            // Set the width of the tab bar properly
-            int pageWidth = mAllApps.getPageContentWidth();
-            TabWidget tabWidget = (TabWidget) findViewById(com.android.internal.R.id.tabs);
-            View allAppsTabBar = (View) findViewById(R.id.all_apps_tab_bar);
-            if (allAppsTabBar == null) throw new Resources.NotFoundException();
-            int tabWidgetPadding = 0;
-            final int childCount = tabWidget.getChildCount();
-            if (childCount > 0) {
-                tabWidgetPadding += tabWidget.getChildAt(0).getPaddingLeft() * 2;
-            }
-            allAppsTabBar.getLayoutParams().width = pageWidth + tabWidgetPadding;
         }
+        // Set the width of the tab bar properly
+        int pageWidth = mAllApps.getPageContentWidth();
+        TabWidget tabWidget = (TabWidget) findViewById(com.android.internal.R.id.tabs);
+        View allAppsTabBar = (View) findViewById(R.id.all_apps_tab_bar);
+        if (allAppsTabBar == null) throw new Resources.NotFoundException();
+        int tabWidgetPadding = 0;
+        final int childCount = tabWidget.getChildCount();
+        if (childCount > 0) {
+            tabWidgetPadding += tabWidget.getChildAt(0).getPaddingLeft() * 2;
+        }
+
+        int newWidth = Math.min(getMeasuredWidth(), pageWidth + tabWidgetPadding);
+        if (newWidth != allAppsTabBar.getLayoutParams().width) {
+            allAppsTabBar.getLayoutParams().width = newWidth;
+            post(new Runnable() {
+                    public void run() {
+                        requestLayout();
+                    }
+                });
+        }
+
         super.onLayout(changed, l, t, r, b);
     }
 
diff --git a/src/com/android/launcher2/CustomizePagedView.java b/src/com/android/launcher2/CustomizePagedView.java
index f803856..d3779c4 100644
--- a/src/com/android/launcher2/CustomizePagedView.java
+++ b/src/com/android/launcher2/CustomizePagedView.java
@@ -210,8 +210,7 @@
             mPageContentWidth = layout.getContentWidth();
             mPageContentHeight = layout.getContentHeight();
             mMinPageWidth = layout.getWidthBeforeFirstLayout();
-            removeAllViews();
-            invalidatePageData();
+            postInvalidatePageData(true);
         }
         if (mPageContentHeight > 0) {
             // Lock our height to the size of the page content
@@ -226,12 +225,7 @@
     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
         if (mWaitingToInitPages) {
             mWaitingToInitPages = false;
-            invalidatePageData();
-
-            // invalidatePageData() is what causes the child pages to be created. We need the
-            // children to be measured before layout, so force a new measure here.
-            measure(MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.EXACTLY),
-                    MeasureSpec.makeMeasureSpec(getMeasuredHeight(), MeasureSpec.EXACTLY));
+            postInvalidatePageData(false);
         }
         super.onLayout(changed, left, top, right, bottom);
         mFirstLayout = false;
diff --git a/src/com/android/launcher2/PagedView.java b/src/com/android/launcher2/PagedView.java
index aa6bef4..01b3d8e 100644
--- a/src/com/android/launcher2/PagedView.java
+++ b/src/com/android/launcher2/PagedView.java
@@ -1514,6 +1514,18 @@
      */
     public abstract void syncPageItems(int page);
 
+    protected void postInvalidatePageData(final boolean clearViews) {
+        post(new Runnable() {
+                // post the call to avoid a call to requestLayout from a layout pass
+                public void run() {
+                    if (clearViews) {
+                        removeAllViews();
+                    }
+                    invalidatePageData();
+                }
+            });
+    }
+
     protected void invalidatePageData() {
         if (mContentIsRefreshable) {
             // Update all the pages
