diff --git a/res/values-sw600dp-land/dimens.xml b/res/values-sw600dp-land/dimens.xml
index 0e7d63c..882de23 100644
--- a/res/values-sw600dp-land/dimens.xml
+++ b/res/values-sw600dp-land/dimens.xml
@@ -15,8 +15,9 @@
 -->
 
 <resources>
-    <dimen name="app_icon_size">65dp</dimen>
-    <dimen name="app_icon_padding_top">2dp</dimen>
+    <dimen name="app_icon_padding_top">0dp</dimen>
+    <dimen name="app_icon_drawable_padding_land">0dp</dimen>
+    <integer name="app_icon_scale_percent">90</integer>
 
 <!-- Hotseat -->
     <dimen name="hotseat_cell_width">75dp</dimen>
@@ -27,6 +28,7 @@
     <dimen name="workspace_cell_height">86dp</dimen>
     <dimen name="workspace_width_gap">32dp</dimen>
     <dimen name="workspace_height_gap">0dp</dimen>
+    <dimen name="workspace_icon_text_size">11sp</dimen>
 
 <!-- Folders -->
     <!-- The size of the image which sits behind the preview of the folder contents -->
diff --git a/res/values-sw600dp-port/dimens.xml b/res/values-sw600dp-port/dimens.xml
index 8e8455d..9565992 100644
--- a/res/values-sw600dp-port/dimens.xml
+++ b/res/values-sw600dp-port/dimens.xml
@@ -16,6 +16,7 @@
 
 <resources>
 <!-- Workspace -->
+    <integer name="app_icon_scale_percent">-1</integer>
     <dimen name="workspace_width_gap">0dp</dimen>
     <dimen name="workspace_height_gap">32dp</dimen>
 
diff --git a/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml
index a6402ae..0fb8d33 100644
--- a/res/values-sw720dp/dimens.xml
+++ b/res/values-sw720dp/dimens.xml
@@ -34,7 +34,7 @@
     <dimen name="app_widget_preview_padding_top">10dp</dimen>
 
     <!-- Size of icons in workspace -->
-    <dimen name="app_icon_size">72dp</dimen>
+    <integer name="app_icon_scale_percent">-1</integer>
     <integer name="app_icon_hotseat_scale_percent">-1</integer>
 
     <dimen name="all_apps_button_vertical_padding">4dip</dimen>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 890e216..4a69f4a 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -47,8 +47,10 @@
     <dimen name="hotseat_width_gap">-1dp</dimen>
     <dimen name="hotseat_height_gap">-1dp</dimen>
     <dimen name="workspace_overscroll_drawable_padding">0dp</dimen>
+    <dimen name="workspace_icon_text_size">12sp</dimen>
 
     <dimen name="app_icon_drawable_padding">6dp</dimen>
+    <dimen name="app_icon_drawable_padding_land">2dp</dimen>
     <dimen name="app_icon_padding_top">8dp</dimen>
 
 <!-- QSB -->
@@ -66,6 +68,7 @@
     <dimen name="apps_customize_tab_bar_height">52dp</dimen>
     <dimen name="apps_customize_tab_bar_margin_top">0dp</dimen>
     <dimen name="app_icon_size">48dp</dimen>
+    <integer name="app_icon_scale_percent">-1</integer>
     <integer name="app_icon_hotseat_scale_percent">-1</integer>
     <!-- The width can be 72dp because we don't have L/R padding -->
     <dimen name="apps_customize_cell_width">74dp</dimen>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index f5224d2..6506f95 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -62,7 +62,7 @@
         <item name="android:gravity">center_horizontal</item>
         <item name="android:singleLine">true</item>
         <item name="android:ellipsize">marquee</item>
-        <item name="android:textSize">12sp</item>
+        <item name="android:textSize">@dimen/workspace_icon_text_size</item>
         <item name="android:textColor">@color/workspace_icon_text_color</item>
         <item name="android:shadowRadius">2.0</item>
         <item name="android:shadowColor">#B0000000</item>
@@ -77,7 +77,7 @@
     </style>
 
     <style name="WorkspaceIcon.Landscape">
-        <item name="android:drawablePadding">2dp</item>
+        <item name="android:drawablePadding">@dimen/app_icon_drawable_padding_land</item>
         <item name="android:paddingLeft">4dp</item>
         <item name="android:paddingRight">4dp</item>
         <item name="android:paddingTop">@dimen/app_icon_padding_top</item>
diff --git a/src/com/android/launcher2/BubbleTextView.java b/src/com/android/launcher2/BubbleTextView.java
index b41a02e..623c6ff 100644
--- a/src/com/android/launcher2/BubbleTextView.java
+++ b/src/com/android/launcher2/BubbleTextView.java
@@ -295,7 +295,7 @@
         }
 
         // If text is transparent, don't draw any shadow
-        if (getCurrentTextColor() == android.R.color.transparent) {
+        if (getCurrentTextColor() == getResources().getColor(android.R.color.transparent)) {
             getPaint().clearShadowLayer();
             super.draw(canvas);
             return;
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index bbb0d7f..1aaba6d 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -138,6 +138,7 @@
 
     private boolean mIsHotseat = false;
     private final int mBubbleScalePercent;
+    private final int mBubbleHotseatScalePercent;
 
     public CellLayout(Context context) {
         this(context, null);
@@ -184,7 +185,8 @@
         mNormalBackground.setFilterBitmap(true);
         mActiveGlowBackground.setFilterBitmap(true);
 
-        mBubbleScalePercent = res.getInteger(R.integer.app_icon_hotseat_scale_percent);
+        mBubbleScalePercent = res.getInteger(R.integer.app_icon_scale_percent);
+        mBubbleHotseatScalePercent = res.getInteger(R.integer.app_icon_hotseat_scale_percent);
 
         // Initialize the data structures used for the drag visualization.
 
@@ -585,6 +587,34 @@
         return addViewToCellLayout(child, index, childId, params, markCells, false);
     }
 
+    private void scaleChild(BubbleTextView bubbleChild, float pivot, int scalePercent) {
+        // If we haven't measured the child yet, do it now
+        // (this happens if we're being dropped from all-apps
+        if (bubbleChild.getLayoutParams() instanceof LayoutParams &&
+                (bubbleChild.getMeasuredWidth() | bubbleChild.getMeasuredHeight()) == 0) {
+            getChildrenLayout().measureChild(bubbleChild);
+        }
+        int measuredWidth = bubbleChild.getMeasuredWidth();
+        int measuredHeight = bubbleChild.getMeasuredHeight();
+
+        float scale = scalePercent / 100f;
+        bubbleChild.setPivotX(pivot);
+        bubbleChild.setPivotY(pivot);
+        bubbleChild.setScaleX(scale);
+        bubbleChild.setScaleY(scale);
+        bubbleChild.setTranslationX(measuredWidth * (1 - scale) / 2);
+        bubbleChild.setTranslationY(measuredHeight * (1 - scale) / 2);
+    }
+
+    private void resetChild(BubbleTextView bubbleChild) {
+        bubbleChild.setScaleX(1f);
+        bubbleChild.setScaleY(1f);
+        bubbleChild.setTranslationX(0f);
+        bubbleChild.setTranslationY(0f);
+
+        bubbleChild.setTextColor(getResources().getColor(R.color.workspace_icon_text_color));
+    }
+
     public boolean addViewToCellLayout(View child, int index, int childId, LayoutParams params,
             boolean markCells, boolean allApps) {
         final LayoutParams lp = params;
@@ -596,32 +626,17 @@
         if (child instanceof BubbleTextView) {
             BubbleTextView bubbleChild = (BubbleTextView) child;
 
-            if (mIsHotseat && !allApps && mBubbleScalePercent >= 0) {
-                // If we haven't measured the child yet, do it now
-                // (this happens if we're being dropped from all-apps
-                if ((bubbleChild.getMeasuredWidth() | bubbleChild.getMeasuredHeight()) == 0) {
-                    getChildrenLayout().measureChild(bubbleChild);
-                }
-                int measuredWidth = bubbleChild.getMeasuredWidth();
-                int measuredHeight = bubbleChild.getMeasuredHeight();
+            // Start the child with 100% scale and visible text
+            resetChild(bubbleChild);
 
-                float bubbleScale = mBubbleScalePercent / 100f;
-                bubbleChild.setPivotX(0);
-                bubbleChild.setPivotY(0);
-                bubbleChild.setScaleX(bubbleScale);
-                bubbleChild.setScaleY(bubbleScale);
-                bubbleChild.setTranslationX(measuredWidth * (1 - bubbleScale) / 2);
-                bubbleChild.setTranslationY(measuredHeight * (1 - bubbleScale) / 2);
+            if (mIsHotseat && !allApps && mBubbleHotseatScalePercent >= 0) {
+                // Scale/make transparent for a hotseat
+                scaleChild(bubbleChild, 0f, mBubbleHotseatScalePercent);
 
-                bubbleChild.setTextColor(android.R.color.transparent);
-            } else {
-                bubbleChild.setScaleX(1f);
-                bubbleChild.setScaleY(1f);
-                bubbleChild.setTranslationX(0f);
-                bubbleChild.setTranslationY(0f);
-
-                bubbleChild.setTextColor(
-                        getResources().getColor(R.color.workspace_icon_text_color));
+                bubbleChild.setTextColor(getResources().getColor(android.R.color.transparent));
+            } else if (mBubbleScalePercent >= 0) {
+                // Else possibly still scale it if we need to for smaller icons
+                scaleChild(bubbleChild, 0f, mBubbleScalePercent);
             }
         }
 
