diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index c9be887..d94bacf 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -49,6 +49,8 @@
 import android.view.animation.DecelerateInterpolator;
 import android.view.animation.LayoutAnimationController;
 
+import java.util.Arrays;
+
 public class CellLayout extends ViewGroup implements Dimmable {
     static final String TAG = "CellLayout";
 
@@ -107,6 +109,7 @@
 
     // Used as an index into the above 3 arrays; indicates which is the most current value.
     private int mDragOutlineCurrent = 0;
+    private final Paint mDragOutlinePaint = new Paint();
 
     private Drawable mCrosshairsDrawable = null;
     private InterruptibleInOutAnimator mCrosshairsAnimator = null;
@@ -188,7 +191,7 @@
         mCrosshairsAnimator.getAnimator().addUpdateListener(new AnimatorUpdateListener() {
             public void onAnimationUpdate(ValueAnimator animation) {
                 mCrosshairsVisibility = ((Float) animation.getAnimatedValue()).floatValue();
-                CellLayout.this.invalidate();
+                invalidate();
             }
         });
         mCrosshairsAnimator.getAnimator().setInterpolator(mEaseOutInterpolator);
@@ -205,9 +208,7 @@
         final float fromAlphaValue = 0;
         final float toAlphaValue = (float)res.getInteger(R.integer.config_dragOutlineMaxAlpha);
 
-        for (int i = 0; i < mDragOutlineAlphas.length; i++) {
-            mDragOutlineAlphas[i] = fromAlphaValue;
-        }
+        Arrays.fill(mDragOutlineAlphas, fromAlphaValue);
 
         for (int i = 0; i < mDragOutlineAnims.length; i++) {
             final InterruptibleInOutAnimator anim =
@@ -404,7 +405,7 @@
             }
         }
 
-        final Paint paint = new Paint();
+        final Paint paint = mDragOutlinePaint;
         for (int i = 0; i < mDragOutlines.length; i++) {
             final float alpha = mDragOutlineAlphas[i];
             if (alpha > 0) {
diff --git a/src/com/android/launcher2/HolographicOutlineHelper.java b/src/com/android/launcher2/HolographicOutlineHelper.java
index ea4b01a..bca3f71 100644
--- a/src/com/android/launcher2/HolographicOutlineHelper.java
+++ b/src/com/android/launcher2/HolographicOutlineHelper.java
@@ -23,7 +23,6 @@
 import android.graphics.Paint;
 import android.graphics.PorterDuff;
 import android.graphics.PorterDuffXfermode;
-import android.graphics.Rect;
 import android.graphics.TableMaskFilter;
 
 public class HolographicOutlineHelper {
@@ -31,19 +30,24 @@
     private final Paint mBlurPaint = new Paint();
     private final Paint mErasePaint = new Paint();
 
-    private static final BlurMaskFilter sLargeGlowBlurMaskFilter = new BlurMaskFilter(
-            10.0f, BlurMaskFilter.Blur.OUTER);
-    private static final BlurMaskFilter sThickOuterBlurMaskFilter = new BlurMaskFilter(
-            6.0f, BlurMaskFilter.Blur.OUTER);
-    private static final BlurMaskFilter sMediumOuterBlurMaskFilter = new BlurMaskFilter(
-            2.0f, BlurMaskFilter.Blur.OUTER);
-    private static final BlurMaskFilter sThinOuterBlurMaskFilter = new BlurMaskFilter(
-            1.0f, BlurMaskFilter.Blur.OUTER);
+    public static final int OUTER_BLUR_RADIUS;
 
-    private static final BlurMaskFilter sThickInnerBlurMaskFilter = new BlurMaskFilter(
-            4.0f, BlurMaskFilter.Blur.NORMAL);
-    private static final BlurMaskFilter sThinInnerBlurMaskFilter = new BlurMaskFilter(
-            1.0f, BlurMaskFilter.Blur.INNER);
+    private static final BlurMaskFilter sThickOuterBlurMaskFilter;
+    private static final BlurMaskFilter sMediumOuterBlurMaskFilter;
+    private static final BlurMaskFilter sThinOuterBlurMaskFilter;
+    private static final BlurMaskFilter sThickInnerBlurMaskFilter;
+
+    static {
+        final float scale = LauncherApplication.getScreenDensity();
+
+        OUTER_BLUR_RADIUS = (int) (scale * 6.0f);
+
+        sThickOuterBlurMaskFilter = new BlurMaskFilter(OUTER_BLUR_RADIUS,
+                BlurMaskFilter.Blur.OUTER);
+        sMediumOuterBlurMaskFilter = new BlurMaskFilter(scale * 2.0f, BlurMaskFilter.Blur.OUTER);
+        sThinOuterBlurMaskFilter = new BlurMaskFilter(scale * 1.0f, BlurMaskFilter.Blur.OUTER);
+        sThickInnerBlurMaskFilter = new BlurMaskFilter(scale * 4.0f, BlurMaskFilter.Blur.NORMAL);
+    }
 
     private static final MaskFilter sFineClipTable = TableMaskFilter.CreateClipTable(0, 20);
     private static final MaskFilter sCoarseClipTable = TableMaskFilter.CreateClipTable(0, 200);
@@ -81,7 +85,12 @@
         }
     }
 
-    void applyGlow(Bitmap bitmap, Canvas canvas, int color) {
+    /**
+     * Apply an outer blur to the given bitmap.
+     * You should use OUTER_BLUR_RADIUS to ensure that the bitmap is big enough to draw
+     * the blur without clipping.
+     */
+    void applyOuterBlur(Bitmap bitmap, Canvas canvas, int color) {
         mBlurPaint.setMaskFilter(sThickOuterBlurMaskFilter);
         Bitmap glow = bitmap.extractAlpha(mBlurPaint, mTempOffset);
 
diff --git a/src/com/android/launcher2/LauncherApplication.java b/src/com/android/launcher2/LauncherApplication.java
index ca08378..8a18317 100644
--- a/src/com/android/launcher2/LauncherApplication.java
+++ b/src/com/android/launcher2/LauncherApplication.java
@@ -29,6 +29,7 @@
     public LauncherModel mModel;
     public IconCache mIconCache;
     private static boolean sIsScreenXLarge;
+    private static float sScreenDensity;
     private static final boolean ENABLE_ROTATION = false;
 
     @Override
@@ -40,6 +41,7 @@
         mIconCache = new IconCache(this);
         mModel = new LauncherModel(this, mIconCache);
         sIsScreenXLarge = (getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE;
+        sScreenDensity = getResources().getDisplayMetrics().density;
 
         // Register intent receivers
         IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
@@ -101,4 +103,8 @@
     public static boolean isScreenXLarge() {
         return sIsScreenXLarge;
     }
+
+    public static float getScreenDensity() {
+        return sScreenDensity;
+    }
 }
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index dd622a6..d123374 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -139,10 +139,10 @@
 
     private boolean mInScrollArea = false;
 
-    private HolographicOutlineHelper mOutlineHelper = new HolographicOutlineHelper();
+    private final HolographicOutlineHelper mOutlineHelper = new HolographicOutlineHelper();
     private Bitmap mDragOutline = null;
-    private Rect mTempRect = new Rect();
-    private int[] mTempXY = new int[2];
+    private final Rect mTempRect = new Rect();
+    private final int[] mTempXY = new int[2];
 
     /**
      * Used to inflate the Workspace from XML.
@@ -991,14 +991,13 @@
         canvas.setBitmap(b);
         canvas.drawBitmap(mDragOutline, 0, 0, null);
         drawDragView(v, canvas, padding);
-        mOutlineHelper.applyGlow(b, canvas, outlineColor);
+        mOutlineHelper.applyOuterBlur(b, canvas, outlineColor);
 
         return b;
     }
 
     void startDrag(CellLayout.CellInfo cellInfo) {
         View child = cellInfo.cell;
-        final int blurPadding = 40;
 
         // Make sure the drag was started by a long press as opposed to a long click.
         if (!child.isInTouchMode()) {
@@ -1017,11 +1016,14 @@
 
         final Canvas canvas = new Canvas();
 
+        // We need to add extra padding to the bitmap to make room for the glow effect
+        final int bitmapPadding = HolographicOutlineHelper.OUTER_BLUR_RADIUS;
+
         // The outline is used to visualize where the item will land if dropped
-        mDragOutline = createDragOutline(child, canvas, blurPadding);
+        mDragOutline = createDragOutline(child, canvas, bitmapPadding);
 
         // The drag bitmap follows the touch point around on the screen
-        final Bitmap b = createDragBitmap(child, canvas, blurPadding);
+        final Bitmap b = createDragBitmap(child, canvas, bitmapPadding);
 
         final int bmpWidth = b.getWidth();
         final int bmpHeight = b.getHeight();
