diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 3fe53b5..1b806a6 100644
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -41,8 +41,6 @@
     
     <!-- Size of icons in workspace -->
     <dimen name="app_icon_size">72dp</dimen>
-    <!-- Size of content of icons in workspace, as specified by the android icon guidelines -->
-    <dimen name="app_icon_content_size">60dp</dimen>
 
     <!-- extra horizontal spacing between mini screen thumbnails ie. in all
          apps and in customization mode -->
diff --git a/src/com/android/launcher2/DragController.java b/src/com/android/launcher2/DragController.java
index 107f8ef..82aa30f 100644
--- a/src/com/android/launcher2/DragController.java
+++ b/src/com/android/launcher2/DragController.java
@@ -16,6 +16,8 @@
 
 package com.android.launcher2;
 
+import android.appwidget.AppWidgetManager;
+import android.appwidget.AppWidgetProviderInfo;
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.Rect;
@@ -367,6 +369,21 @@
         }
         endDrag();
     }
+    public void onAppsRemoved(ArrayList<ApplicationInfo> apps, Context context) {
+        // Cancel the current drag if we are removing an app that we are dragging
+        if (mDragObject != null) {
+            Object rawDragInfo = mDragObject.dragInfo;
+            if (rawDragInfo instanceof ShortcutInfo) {
+                ShortcutInfo dragInfo = (ShortcutInfo) rawDragInfo;
+                for (ApplicationInfo info : apps) {
+                    if (dragInfo.intent.getComponent().equals(info.intent.getComponent())) {
+                        cancelDrag();
+                        return;
+                    }
+                }
+            }
+        }
+    }
 
     private void endDrag() {
         if (mDragging) {
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 83bce6d..1fbf7a5 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -3030,13 +3030,15 @@
             mAppsCustomizeContent.removeApps(apps);
         }
         updateIconsAffectedByPackageManagerChanges();
+
+        // Notify the drag controller
+        mDragController.onAppsRemoved(apps, this);
     }
 
     /**
      * A number of packages were updated.
      */
     public void bindPackagesUpdated() {
-
         if (mAppsCustomizeContent != null) {
             mAppsCustomizeContent.onPackagesUpdated();
         }
diff --git a/src/com/android/launcher2/Utilities.java b/src/com/android/launcher2/Utilities.java
index f7f97c5..e5169a2 100644
--- a/src/com/android/launcher2/Utilities.java
+++ b/src/com/android/launcher2/Utilities.java
@@ -47,7 +47,6 @@
 
     private static int sIconWidth = -1;
     private static int sIconHeight = -1;
-    private static int sIconContentSize = -1;
     private static int sIconTextureWidth = -1;
     private static int sIconTextureHeight = -1;
 
@@ -65,10 +64,6 @@
     static int sColors[] = { 0xffff0000, 0xff00ff00, 0xff0000ff };
     static int sColorIndex = 0;
 
-    static int getIconContentSize() {
-        return sIconContentSize;
-    }
-
     /**
      * Returns a bitmap suitable for the all apps view. Used to convert pre-ICS
      * icon bitmaps that are stored in the database (which were 74x74 pixels at hdpi size)
@@ -242,9 +237,6 @@
         final float density = metrics.density;
 
         sIconWidth = sIconHeight = (int) resources.getDimension(R.dimen.app_icon_size);
-        if (LauncherApplication.isScreenLarge()) {
-            sIconContentSize = (int) resources.getDimension(R.dimen.app_icon_content_size);
-        }
         sIconTextureWidth = sIconTextureHeight = sIconWidth;
 
         sBlurPaint.setMaskFilter(new BlurMaskFilter(5 * density, BlurMaskFilter.Blur.NORMAL));
