diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java
index d96268c..722213d 100644
--- a/src/com/android/launcher2/AllAppsView.java
+++ b/src/com/android/launcher2/AllAppsView.java
@@ -110,6 +110,8 @@
     private int mDownIconIndex = -1;
     private int mCurrentIconIndex = -1;
 
+    private boolean mShouldGainFocus;
+
 
     static class Defines {
         public static final int ALLOC_PARAMS = 0;
@@ -192,6 +194,10 @@
                 mRollo.setApps(mAllAppsList);
                 Log.d(TAG, "surfaceChanged... calling mRollo.setApps");
             }
+            if (mShouldGainFocus) {
+                gainFocus();
+                mShouldGainFocus = false;
+            }
         } else {
             mRollo.mHasSurface = true;
             mRollo.dirtyCheck();
@@ -249,24 +255,36 @@
         }
 
         if (gainFocus) {
-            if (!mArrowNavigation && mRollo.mState.iconCount > 0) {
-                // Select the first icon when we gain keyboard focus
-                mArrowNavigation = true;
-                mRollo.selectIcon(Math.round(mRollo.mMessageProc.mPosX) * Defines.COLUMNS_PER_PAGE,
-                        SELECTED_FOCUSED);
-                mRollo.mState.save();
+            if (mRollo != null) {
+                gainFocus();
+            } else {
+                mShouldGainFocus = true;
             }
         } else {
-            if (mArrowNavigation) {
-                // Clear selection when we lose focus
-                mRollo.clearSelectedIcon();
-                mRollo.setHomeSelected(SELECTED_NONE);
-                mRollo.mState.save();
-                mArrowNavigation = false;
+            if (mRollo != null) {
+                if (mArrowNavigation) {
+                    // Clear selection when we lose focus
+                    mRollo.clearSelectedIcon();
+                    mRollo.setHomeSelected(SELECTED_NONE);
+                    mRollo.mState.save();
+                    mArrowNavigation = false;
+                }
+            } else {
+                mShouldGainFocus = false;
             }
         }
     }
 
+    private void gainFocus() {
+        if (!mArrowNavigation && mRollo.mState.iconCount > 0) {
+            // Select the first icon when we gain keyboard focus
+            mArrowNavigation = true;
+            mRollo.selectIcon(Math.round(mRollo.mMessageProc.mPosX) * Defines.COLUMNS_PER_PAGE,
+                    SELECTED_FOCUSED);
+            mRollo.mState.save();
+        }
+    }
+
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
 
