diff --git a/src/com/android/launcher2/IconCache.java b/src/com/android/launcher2/IconCache.java
index 04762e9..4bb7d08 100644
--- a/src/com/android/launcher2/IconCache.java
+++ b/src/com/android/launcher2/IconCache.java
@@ -100,24 +100,28 @@
     }
 
     public Bitmap getIcon(Intent intent) {
-        final ResolveInfo resolveInfo = mPackageManager.resolveActivity(intent, 0);
-        ComponentName component = intent.getComponent();
+        synchronized (mCache) {
+            final ResolveInfo resolveInfo = mPackageManager.resolveActivity(intent, 0);
+            ComponentName component = intent.getComponent();
 
-        if (resolveInfo == null || component == null) {
-            return mDefaultIcon;
+            if (resolveInfo == null || component == null) {
+                return mDefaultIcon;
+            }
+
+            CacheEntry entry = cacheLocked(component, resolveInfo);
+            return entry.icon;
         }
-
-        CacheEntry entry = cacheLocked(component, resolveInfo);
-        return entry.icon;
     }
 
     public Bitmap getIcon(ComponentName component, ResolveInfo resolveInfo) {
-        if (resolveInfo == null || component == null) {
-            return null;
-        }
+        synchronized (mCache) {
+            if (resolveInfo == null || component == null) {
+                return null;
+            }
 
-        CacheEntry entry = cacheLocked(component, resolveInfo);
-        return entry.icon;
+            CacheEntry entry = cacheLocked(component, resolveInfo);
+            return entry.icon;
+        }
     }
 
     private CacheEntry cacheLocked(ComponentName componentName, ResolveInfo info) {
diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java
index d5b5859..a867200 100644
--- a/src/com/android/launcher2/LauncherModel.java
+++ b/src/com/android/launcher2/LauncherModel.java
@@ -73,6 +73,7 @@
     private boolean mBeforeFirstLoad = true; // only access this from main thread
     private WeakReference<Callbacks> mCallbacks;
 
+    private final Object mAllAppsListLock = new Object();
     private AllAppsList mAllAppsList;
     private IconCache mIconCache;
 
@@ -306,7 +307,7 @@
         ArrayList<ApplicationInfo> removed = null;
         ArrayList<ApplicationInfo> modified = null;
 
-        synchronized (mLock) {
+        synchronized (mAllAppsListLock) {
             if (mBeforeFirstLoad) {
                 // If we haven't even loaded yet, don't bother, since we'll just pick
                 // up the changes.
@@ -1047,7 +1048,7 @@
                 int i=0;
                 int batchSize = -1;
                 while (i < N && !mStopped) {
-                    synchronized (mLock) {
+                    synchronized (mAllAppsListLock) {
                         if (i == 0) {
                             // This needs to happen inside the same lock block as when we
                             // prepare the first batch for bindAllApplications.  Otherwise
