diff --git a/src/com/android/launcher2/InstallShortcutReceiver.java b/src/com/android/launcher2/InstallShortcutReceiver.java
index 23c8964..337097e 100644
--- a/src/com/android/launcher2/InstallShortcutReceiver.java
+++ b/src/com/android/launcher2/InstallShortcutReceiver.java
@@ -203,7 +203,7 @@
                                 final int newAppsScreen = sharedPrefs.getInt(
                                         NEW_APPS_PAGE_KEY, screen);
                                 SharedPreferences.Editor editor = sharedPrefs.edit();
-                                if (newAppsScreen == screen) {
+                                if (newAppsScreen == -1 || newAppsScreen == screen) {
                                     addToStringSet(sharedPrefs,
                                         editor, NEW_APPS_LIST_KEY, intent.toUri(0));
                                 }
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index d9d20da..473a3d1 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -126,6 +126,7 @@
     static final boolean PROFILE_STARTUP = false;
     static final boolean DEBUG_WIDGETS = false;
     static final boolean DEBUG_STRICT_MODE = false;
+    static final boolean DEBUG_RESUME_TIME = true;
 
     private static final int MENU_GROUP_WALLPAPER = 1;
     private static final int MENU_WALLPAPER_SETTINGS = Menu.FIRST + 1;
@@ -730,6 +731,10 @@
 
     @Override
     protected void onResume() {
+        long startTime = 0;
+        if (DEBUG_RESUME_TIME) {
+            startTime = System.currentTimeMillis();
+        }
         super.onResume();
 
         // Restore the previous launcher state
@@ -756,10 +761,18 @@
         }
         // We might have postponed some bind calls until onResume (see waitUntilResume) --
         // execute them here
+        long startTimeCallbacks = 0;
+        if (DEBUG_RESUME_TIME) {
+            startTimeCallbacks = System.currentTimeMillis();
+        }
         for (int i = 0; i < mOnResumeCallbacks.size(); i++) {
             mOnResumeCallbacks.get(i).run();
         }
         mOnResumeCallbacks.clear();
+        if (DEBUG_RESUME_TIME) {
+            Log.d(TAG, "Time spent processing callbacks in onResume: " +
+                (System.currentTimeMillis() - startTimeCallbacks));
+        }
 
         // Reset the pressed state of icons that were locked in the press state while activities
         // were launching
@@ -780,6 +793,9 @@
         // Again, as with the above scenario, it's possible that one or more of the global icons
         // were updated in the wrong orientation.
         updateGlobalIcons();
+        if (DEBUG_RESUME_TIME) {
+            Log.d(TAG, "Time spent in onResume: " + (System.currentTimeMillis() - startTime));
+        }
     }
 
     @Override
@@ -1412,6 +1428,10 @@
 
     @Override
     protected void onNewIntent(Intent intent) {
+        long startTime = 0;
+        if (DEBUG_RESUME_TIME) {
+            startTime = System.currentTimeMillis();
+        }
         super.onNewIntent(intent);
 
         // Close the menu
@@ -1472,6 +1492,9 @@
             }
 
         }
+        if (DEBUG_RESUME_TIME) {
+            Log.d(TAG, "Time spent in onNewIntent: " + (System.currentTimeMillis() - startTime));
+        }
     }
 
     @Override
