diff --git a/src/com/android/launcher2/AllAppsList.java b/src/com/android/launcher2/AllAppsList.java
index 4d3ee77..561b345 100644
--- a/src/com/android/launcher2/AllAppsList.java
+++ b/src/com/android/launcher2/AllAppsList.java
@@ -152,7 +152,7 @@
                     data.add(applicationInfo);
                     added.add(applicationInfo);
                 } else {
-                    AppInfoCache.update(info, applicationInfo, context);
+                    AppInfoCache.update(info, applicationInfo, context, bubble);
                     modified.add(applicationInfo);
                 }
             }
diff --git a/src/com/android/launcher2/AppInfoCache.java b/src/com/android/launcher2/AppInfoCache.java
index 2fdfc28..a2d9830 100644
--- a/src/com/android/launcher2/AppInfoCache.java
+++ b/src/com/android/launcher2/AppInfoCache.java
@@ -86,9 +86,10 @@
     /**
      * Update the entry in the in the cache with its new metadata.
      */
-    public static void update(ResolveInfo info, ApplicationInfo applicationInfo, Context context) {
+    public static void update(ResolveInfo info, ApplicationInfo applicationInfo, Context context,
+            Utilities.BubbleText bubble) {
         synchronized (sCache) {
-            updateTitleAndIcon(info, applicationInfo, context, new Utilities.BubbleText(context));
+            updateTitleAndIcon(info, applicationInfo, context, bubble);
 
             ComponentName componentName = new ComponentName(
                     info.activityInfo.applicationInfo.packageName, info.activityInfo.name);
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 3768966..d2fd6a9 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -813,7 +813,6 @@
     }
 
     void closeSystemDialogs() {
-        closeAllApps(true);
         getWindow().closeAllPanels();
 
         try {
@@ -1841,6 +1840,28 @@
         //mHandleView.setVisibility(View.GONE);
     }
 
+    /**
+     * Things to test when changing this code:
+     *   - Home from workspace
+     *          - from center screen
+     *          - from other screens
+     *   - Home from all apps
+     *   - Back from all apps
+     *   - Launch app from workspace and quit
+     *          - with back
+     *          - with home
+     *   - Launch app from all apps and quit
+     *          - with back
+     *          - with home
+     *   - On workspace, long press power and go back
+     *          - with back
+     *          - with home
+     *   - On all apps, long press power and go back
+     *          - with back
+     *          - with home
+     *   - On workspace, power off
+     *   - On all apps, power off
+     */
     void closeAllApps(boolean animated) {
         if (mAllAppsGrid.isVisible()) {
             mAllAppsGrid.zoom(0.0f, animated);
@@ -1992,6 +2013,18 @@
         @Override
         public void onReceive(Context context, Intent intent) {
             closeSystemDialogs();
+            String reason = intent.getStringExtra("reason");
+            if (!"homekey".equals(reason)) {
+                boolean animate = true;
+                /*
+                if ("globalactions".equals(reason)) {
+                    // For some reason (probably the fading), this animation is
+                    // choppy, so don't show it.
+                    animate = false;
+                }
+                */
+                closeAllApps(animate);
+            }
         }
     }
 
@@ -2189,6 +2222,7 @@
     public void bindPackageUpdated(String packageName, ArrayList<ApplicationInfo> apps) {
         removeDialog(DIALOG_CREATE_SHORTCUT);
         mWorkspace.updateShortcutsForPackage(packageName);
+        mAllAppsGrid.updateApps(packageName, apps);
     }
 
     /**
