diff --git a/src/com/android/launcher2/Utilities.java b/src/com/android/launcher2/Utilities.java
index 94e281b..f72bb1b 100644
--- a/src/com/android/launcher2/Utilities.java
+++ b/src/com/android/launcher2/Utilities.java
@@ -22,7 +22,6 @@
 import android.graphics.Bitmap;
 import android.graphics.BlurMaskFilter;
 import android.graphics.Canvas;
-import android.graphics.MaskFilter;
 import android.graphics.Paint;
 import android.graphics.PaintFlagsDrawFilter;
 import android.graphics.PixelFormat;
@@ -56,7 +55,6 @@
     private static final Paint sBlurPaint = new Paint();
     private static final Paint sGlowColorPressedPaint = new Paint();
     private static final Paint sGlowColorFocusedPaint = new Paint();
-    private static final Paint sEmptyPaint = new Paint();
     private static final Rect sBounds = new Rect();
     private static final Rect sOldBounds = new Rect();
     private static final Canvas sCanvas = new Canvas();
@@ -350,23 +348,27 @@
 
     static class BubbleText {
         private static final int MAX_LINES = 2;
-        private TextPaint mTextPaint;
 
-        private float mBubblePadding;
-        private RectF mBubbleRect = new RectF();
+        private final TextPaint mTextPaint;
 
-        private float mTextWidth;
-        private int mLeading;
-        private int mFirstLineY;
-        private int mLineHeight;
+        private final float mBubblePadding;
+        private final RectF mBubbleRect = new RectF();
 
-        private int mBitmapWidth;
-        private int mBitmapHeight;
+        private final float mTextWidth;
+        private final int mLeading;
+        private final int mFirstLineY;
+        private final int mLineHeight;
+
+        private final int mBitmapWidth;
+        private final int mBitmapHeight;
+        private final int mDensity;
 
         BubbleText(Context context) {
             final Resources resources = context.getResources();
 
-            final float scale = resources.getDisplayMetrics().density;
+            final DisplayMetrics metrics = resources.getDisplayMetrics();
+            final float scale = metrics.density;
+            mDensity = metrics.densityDpi;
 
             final float paddingLeft = 5.0f * scale;
             final float paddingRight = 5.0f * scale;
@@ -381,10 +383,6 @@
 
             mTextWidth = bubbleWidth - mBubblePadding - mBubblePadding;
 
-            Paint rectPaint = new Paint();
-            rectPaint.setColor(0xff000000);
-            rectPaint.setAntiAlias(true);
-
             TextPaint textPaint = mTextPaint = new TextPaint();
             textPaint.setTypeface(Typeface.DEFAULT);
             textPaint.setTextSize(13*scale);
@@ -416,6 +414,7 @@
         /** You own the bitmap after this and you must call recycle on it. */
         Bitmap createTextBitmap(String text) {
             Bitmap b = Bitmap.createBitmap(mBitmapWidth, mBitmapHeight, Bitmap.Config.ALPHA_8);
+            b.setDensity(mDensity);
             Canvas c = new Canvas(b);
 
             StaticLayout layout = new StaticLayout(text, mTextPaint, (int)mTextWidth,
@@ -432,11 +431,11 @@
             for (int i=0; i<lineCount; i++) {
                 //int x = (int)((mBubbleRect.width() - layout.getLineMax(i)) / 2.0f);
                 //int y = mFirstLineY + (i * mLineHeight);
+                final String lineText = text.substring(layout.getLineStart(i), layout.getLineEnd(i));
                 int x = (int)(mBubbleRect.left
-                        + ((mBubbleRect.width() - layout.getLineMax(i)) / 2.0f));
+                        + ((mBubbleRect.width() - mTextPaint.measureText(lineText)) * 0.5f));
                 int y = mFirstLineY + (i * mLineHeight);
-                c.drawText(text.substring(layout.getLineStart(i), layout.getLineEnd(i)),
-                        x, y, mTextPaint);
+                c.drawText(lineText, x, y, mTextPaint);
             }
 
             return b;
