diff --git a/src/com/android/launcher2/InstallShortcutReceiver.java b/src/com/android/launcher2/InstallShortcutReceiver.java
index b454afd..54ba7de 100644
--- a/src/com/android/launcher2/InstallShortcutReceiver.java
+++ b/src/com/android/launcher2/InstallShortcutReceiver.java
@@ -191,10 +191,12 @@
                     final Set<String> savedNewApps = newApps;
                     new Thread("setNewAppsThread") {
                         public void run() {
-                            sharedPrefs.edit()
-                                       .putInt(NEW_APPS_PAGE_KEY, screen)
-                                       .putStringSet(NEW_APPS_LIST_KEY, savedNewApps)
-                                       .commit();
+                            synchronized (savedNewApps) {
+                                sharedPrefs.edit()
+                                           .putInt(NEW_APPS_PAGE_KEY, screen)
+                                           .putStringSet(NEW_APPS_LIST_KEY, savedNewApps)
+                                           .commit();
+                            }
                         }
                     }.start();
 
diff --git a/src/com/android/launcher2/UninstallShortcutReceiver.java b/src/com/android/launcher2/UninstallShortcutReceiver.java
index e94a17f..02590c9 100644
--- a/src/com/android/launcher2/UninstallShortcutReceiver.java
+++ b/src/com/android/launcher2/UninstallShortcutReceiver.java
@@ -148,14 +148,16 @@
                 final Set<String> savedNewApps = newApps;
                 new Thread("setNewAppsThread-remove") {
                     public void run() {
-                        SharedPreferences.Editor editor = sharedPrefs.edit();
-                        editor.putStringSet(InstallShortcutReceiver.NEW_APPS_LIST_KEY,
-                                savedNewApps);
-                        if (savedNewApps.isEmpty()) {
-                            // Reset the page index if there are no more items
-                            editor.putInt(InstallShortcutReceiver.NEW_APPS_PAGE_KEY, -1);
+                        synchronized (savedNewApps) {
+                            SharedPreferences.Editor editor = sharedPrefs.edit();
+                            editor.putStringSet(InstallShortcutReceiver.NEW_APPS_LIST_KEY,
+                                    savedNewApps);
+                            if (savedNewApps.isEmpty()) {
+                                // Reset the page index if there are no more items
+                                editor.putInt(InstallShortcutReceiver.NEW_APPS_PAGE_KEY, -1);
+                            }
+                            editor.commit();
                         }
-                        editor.commit();
                     }
                 }.start();
             }
