diff --git a/res/mipmap-xlarge/ic_launcher_browser.png b/res/mipmap-xlarge/ic_launcher_browser.png
new file mode 100644
index 0000000..2ca92c8
--- /dev/null
+++ b/res/mipmap-xlarge/ic_launcher_browser.png
Binary files differ
diff --git a/res/mipmap-xlarge/ic_launcher_shortcut_browser_bookmark.png b/res/mipmap-xlarge/ic_launcher_shortcut_browser_bookmark.png
new file mode 100644
index 0000000..7b2c680
--- /dev/null
+++ b/res/mipmap-xlarge/ic_launcher_shortcut_browser_bookmark.png
Binary files differ
diff --git a/res/values-xlarge/dimensions.xml b/res/values-xlarge/dimensions.xml
index c335c19..5b86c86 100644
--- a/res/values-xlarge/dimensions.xml
+++ b/res/values-xlarge/dimensions.xml
@@ -13,4 +13,5 @@
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <dimen name="bookmarkThumbnailWidth">180dip</dimen>
     <dimen name="bookmarkThumbnailHeight">120dip</dimen>
-</resources>
\ No newline at end of file
+    <dimen name="favicon_padded_size">24dip</dimen>
+</resources>
diff --git a/res/values/dimensions.xml b/res/values/dimensions.xml
index 404b2ac..d51ab33 100644
--- a/res/values/dimensions.xml
+++ b/res/values/dimensions.xml
@@ -24,4 +24,6 @@
     <dimen name="add_bookmark_width">500dip</dimen>
     <dimen name="folder_selector_height">300dip</dimen>
     <dimen name="widgetItemMinHeight">48dip</dimen>
+    <dimen name="favicon_size">16dip</dimen>
+    <dimen name="favicon_padded_size">20dip</dimen>
 </resources>
diff --git a/src/com/android/browser/BookmarkUtils.java b/src/com/android/browser/BookmarkUtils.java
index a63b90f..c72cbd1 100644
--- a/src/com/android/browser/BookmarkUtils.java
+++ b/src/com/android/browser/BookmarkUtils.java
@@ -70,14 +70,14 @@
 
             if (icon != null) {
                 // Now draw the correct icon background into our new bitmap.
-                canvas.drawBitmap(icon, null, iconBounds, null);
+                Paint p = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
+                canvas.drawBitmap(icon, null, iconBounds, p);
             }
 
             // If we have a favicon, overlay it in a nice rounded white box on top of the
             // background.
             if (favicon != null) {
-                drawFaviconToCanvas(favicon, canvas, iconBounds,
-                        context.getResources().getDisplayMetrics().density);
+                drawFaviconToCanvas(context, favicon, canvas, iconBounds);
             }
         }
         return bm;
@@ -139,8 +139,8 @@
         canvas.drawPath(path, paint);
     }
 
-    private static void drawFaviconToCanvas(Bitmap favicon, Canvas canvas, Rect iconBounds,
-            float density) {
+    private static void drawFaviconToCanvas(Context context, Bitmap favicon, Canvas canvas,
+            Rect iconBounds) {
         // Make a Paint for the white background rectangle and for
         // filtering the favicon.
         Paint p = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
@@ -148,15 +148,16 @@
         p.setColor(Color.WHITE);
 
         // Create a rectangle that is slightly wider than the favicon
-        final float iconSize = 16 * density; // 16x16 favicon
-        final float padding = 2 * density; // white padding around icon
-        final float rectSize = iconSize + 2 * padding;
-        final float x = iconBounds.exactCenterX() - (rectSize / 2);
-        // Note: Subtract 2 dip from the y position since the box is
+        int faviconDimension = context.getResources().getDimensionPixelSize(R.dimen.favicon_size);
+        int faviconPaddedRectDimension = context.getResources().getDimensionPixelSize(
+                R.dimen.favicon_padded_size);
+        float padding = (faviconPaddedRectDimension - faviconDimension) / 2;
+        final float x = iconBounds.exactCenterX() - (faviconPaddedRectDimension / 2);
+        // Note: Subtract from the y position since the box is
         // slightly higher than center. Use padding since it is already
-        // 2 * density.
-        final float y = iconBounds.exactCenterY() - (rectSize / 2) - padding;
-        RectF r = new RectF(x, y, x + rectSize, y + rectSize);
+        // device independent.
+        final float y = iconBounds.exactCenterY() - (faviconPaddedRectDimension / 2) - padding;
+        RectF r = new RectF(x, y, x + faviconPaddedRectDimension, y + faviconPaddedRectDimension);
 
         // Draw a white rounded rectangle behind the favicon
         canvas.drawRoundRect(r, 2, 2, p);
@@ -165,7 +166,7 @@
         // rectangle but inset by the padding
         // (results in a 16x16 favicon).
         r.inset(padding, padding);
-        canvas.drawBitmap(favicon, null, r, p);
+        canvas.drawBitmap(favicon, null, r, null);
     }
 
     /* package */ static Uri getBookmarksUri(Context context) {
