diff --git a/res/values/strings.xml b/res/values/strings.xml
index 8999282..5c8f362 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -137,7 +137,7 @@
     <!-- Verb, menu item used to add an item on the desktop -->
     <string name="menu_add">Add</string>
     <!-- Menu item used to manage installed applications -->
-    <string name="menu_manage_apps">Manage Apps</string>
+    <string name="menu_manage_apps">Manage apps</string>
     <!-- Noun, menu item used to set the desktop's wallpaper -->
     <string name="menu_wallpaper">Wallpaper</string>
     <!-- Verb, menu item used to initiate global search -->
diff --git a/src/com/android/launcher2/ApplicationInfoDropTarget.java b/src/com/android/launcher2/ApplicationInfoDropTarget.java
index cb45b3a..c4aa98c 100644
--- a/src/com/android/launcher2/ApplicationInfoDropTarget.java
+++ b/src/com/android/launcher2/ApplicationInfoDropTarget.java
@@ -21,6 +21,7 @@
 import android.graphics.Paint;
 import android.graphics.PorterDuff;
 import android.graphics.PorterDuffColorFilter;
+import android.graphics.Rect;
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.ImageView;
@@ -98,9 +99,8 @@
 
     public void onDragStart(DragSource source, Object info, int dragAction) {
         if (info != null) {
-            mActive = true;
-
             if (mManageVisibility) {
+                mActive = true;
                 // Only show the info icon when an application is selected
                 if (((ItemInfo)info).itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION) {
                     setVisibility(VISIBLE);
@@ -111,7 +111,7 @@
     }
 
     public boolean isDropEnabled() {
-        return true;
+        return mActive;
     }
 
     public void onDragEnd() {
@@ -124,6 +124,17 @@
         }
     }
 
+    @Override
+    public void getHitRect(Rect outRect) {
+        super.getHitRect(outRect);
+        if (LauncherApplication.isScreenXLarge()) {
+            outRect.top -= 50;
+            outRect.left -= 50;
+            outRect.bottom += 50;
+            outRect.right += 50;
+        }
+    }
+
     void setLauncher(Launcher launcher) {
         mLauncher = launcher;
     }
diff --git a/src/com/android/launcher2/DeleteZone.java b/src/com/android/launcher2/DeleteZone.java
index 1f54b36..e8f160f 100644
--- a/src/com/android/launcher2/DeleteZone.java
+++ b/src/com/android/launcher2/DeleteZone.java
@@ -23,6 +23,7 @@
 import android.graphics.Paint;
 import android.graphics.PorterDuff;
 import android.graphics.PorterDuffColorFilter;
+import android.graphics.Rect;
 import android.graphics.RectF;
 import android.graphics.drawable.TransitionDrawable;
 import android.util.AttributeSet;
@@ -59,7 +60,8 @@
     private int mOrientation;
     private DragController mDragController;
 
-    private final RectF mRegion = new RectF();
+    private final RectF mRegionF = new RectF();
+    private final Rect mRegion = new Rect();
     private TransitionDrawable mTransition;
     private final Paint mTrashPaint = new Paint();
 
@@ -158,11 +160,17 @@
         final ItemInfo item = (ItemInfo) info;
         if (item != null) {
             mTrashMode = true;
-            final int[] location = mLocation;
-            getLocationOnScreen(location);
-            mRegion.set(location[0], location[1], location[0] + mRight - mLeft,
-                    location[1] + mBottom - mTop);
-            mDragController.setDeleteRegion(mRegion);
+            getHitRect(mRegion);
+            mRegionF.set(mRegion);
+
+            if (LauncherApplication.isScreenXLarge()) {
+                // This region will be a "dead zone" for scrolling; make it extend to the edge of
+                // the screen so users don't accidentally trigger a scroll while deleting items
+                mRegionF.top = mLauncher.getWorkspace().getTop();
+                mRegionF.right = mLauncher.getWorkspace().getRight();
+            }
+
+            mDragController.setDeleteRegion(mRegionF);
 
             // Make sure the icon is set to the default drawable, not the hover drawable
             mTransition.resetTransition();
@@ -194,6 +202,17 @@
         return true;
     }
 
+    @Override
+    public void getHitRect(Rect outRect) {
+        super.getHitRect(outRect);
+        if (LauncherApplication.isScreenXLarge()) {
+            outRect.top -= 50;
+            outRect.left -= 50;
+            outRect.bottom += 50;
+            outRect.right += 50;
+        }
+    }
+
     private void createAnimations() {
         if (mInAnimation == null) {
             mInAnimation = new FastAnimationSet();
