diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java
index 6d3ae47..9e22231 100644
--- a/src/com/android/launcher2/AllAppsView.java
+++ b/src/com/android/launcher2/AllAppsView.java
@@ -271,13 +271,13 @@
         }
 
         if (gainFocus) {
-            if (mRollo != null) {
+            if (mRollo != null && mRollo.mHasSurface) {
                 gainFocus();
             } else {
                 mShouldGainFocus = true;
             }
         } else {
-            if (mRollo != null) {
+            if (mRollo != null && mRollo.mHasSurface) {
                 if (mArrowNavigation) {
                     // Clear selection when we lose focus
                     mRollo.clearSelectedIcon();
@@ -658,7 +658,11 @@
     public void setApps(ArrayList<ApplicationInfo> list) {
         mAllAppsList = list;
         if (mRollo != null) {
-            mRollo.setApps(list);
+            if (mRollo.mHasSurface) {
+                mRollo.setApps(list);
+            } else {
+                mRollo.mAppsDirty = true;
+            }
         }
         mLocks &= ~LOCK_ICONS_PENDING;
     }
@@ -670,7 +674,7 @@
         }
 
         final int N = list.size();
-        if (mRollo != null) {
+        if (mRollo != null && mRollo.mHasSurface) {
             mRollo.reallocAppsList(mRollo.mState.iconCount + N);
         }
 
@@ -682,13 +686,13 @@
                 index = -(index+1);
             }
             mAllAppsList.add(index, item);
-            if (mRollo != null) {
+            if (mRollo != null && mRollo.mHasSurface) {
                 mRollo.addApp(index, item);
                 mRollo.mState.iconCount++;
             }
         }
 
-        if (mRollo != null) {
+        if (mRollo != null && mRollo.mHasSurface) {
             mRollo.saveAppsList();
         }
     }
@@ -704,10 +708,10 @@
             final ApplicationInfo item = list.get(i);
             int index = findAppByComponent(mAllAppsList, item);
             if (index >= 0) {
+                int ic = mRollo != null ? mRollo.mState.iconCount : 666;
                 mAllAppsList.remove(index);
-                if (mRollo != null) {
+                if (mRollo != null && mRollo.mHasSurface) {
                     mRollo.removeApp(index);
-                    mRollo.mState.iconCount--;
                 }
             } else {
                 Log.w(TAG, "couldn't find a match for item \"" + item + "\"");
@@ -715,7 +719,7 @@
             }
         }
 
-        if (mRollo != null) {
+        if (mRollo != null && mRollo.mHasSurface) {
             mRollo.saveAppsList();
         }
     }
@@ -1174,7 +1178,7 @@
             System.arraycopy(mLabels, index, mLabels, dest, count);
             System.arraycopy(mLabelIds, index, mLabelIds, dest, count);
 
-            if (mHasSurface ) {
+            if (mHasSurface) {
                 uploadAppIcon(index, item);
             } else {
                 mAppsDirty = true;
@@ -1193,7 +1197,9 @@
             System.arraycopy(mLabels, src, mLabels, index, count);
             System.arraycopy(mLabelIds, src, mLabelIds, index, count);
 
+            mRollo.mState.iconCount--;
             final int last = mState.iconCount - 1;
+
             mIcons[last] = null;
             mIconIds[last] = 0;
             mLabels[last] = null;
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index ac94cca..374f0bf 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -693,7 +693,6 @@
     public boolean onInterceptTouchEvent(MotionEvent ev) {
         final boolean workspaceLocked = mLauncher.isWorkspaceLocked();
         final boolean allAppsVisible = mLauncher.isAllAppsVisible();
-        Log.d(TAG, "workspaceLocked=" + workspaceLocked + " allAppsVisible=" + allAppsVisible);
         if (workspaceLocked || allAppsVisible) {
             return false; // We don't want the events.  Let them fall through to the all apps view.
         }
