diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index ba20a76..69457ea 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -136,8 +136,6 @@
     private ShortcutAndWidgetContainer mShortcutsAndWidgets;
 
     private boolean mIsHotseat = false;
-    private float mChildScale = 1f;
-    private float mHotseatChildScale = 1f;
 
     public static final int MODE_DRAG_OVER = 0;
     public static final int MODE_ON_DROP = 1;
@@ -214,15 +212,6 @@
         mNormalBackground.setFilterBitmap(true);
         mActiveGlowBackground.setFilterBitmap(true);
 
-        int iconScale = res.getInteger(R.integer.app_icon_scale_percent);
-        if (iconScale >= 0) {
-            mChildScale = iconScale / 100f;
-        }
-        int hotseatIconScale = res.getInteger(R.integer.app_icon_hotseat_scale_percent);
-        if (hotseatIconScale >= 0) {
-            mHotseatChildScale = hotseatIconScale / 100f;
-        }
-
         // Initialize the data structures used for the drag visualization.
 
         mEaseOutInterpolator = new DecelerateInterpolator(2.5f); // Quint ease out
@@ -571,52 +560,19 @@
         mIsHotseat = isHotseat;
     }
 
-    public float getChildrenScale() {
-        return mIsHotseat ? mHotseatChildScale : mChildScale;
-    }
-
-
-    private void scaleChild(BubbleTextView bubbleChild, float scale) {
-        // 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) {
-            getShortcutsAndWidgets().measureChild(bubbleChild);
-        }
-
-        bubbleChild.setScaleX(scale);
-        bubbleChild.setScaleY(scale);
-    }
-
-    private void resetChild(BubbleTextView bubbleChild) {
-        bubbleChild.setScaleX(1f);
-        bubbleChild.setScaleY(1f);
-
-        bubbleChild.setTextColor(getResources().getColor(R.color.workspace_icon_text_color));
-    }
-
     public boolean addViewToCellLayout(View child, int index, int childId, LayoutParams params,
             boolean markCells) {
         final LayoutParams lp = params;
 
-        // Hotseat icons - scale down and remove text
-        // Don't scale the all apps button
-        // scale percent set to -1 means do not scale
-        // Only scale BubbleTextViews
+        // Hotseat icons - remove text
         if (child instanceof BubbleTextView) {
             BubbleTextView bubbleChild = (BubbleTextView) child;
 
-            // Start the child with 100% scale and visible text
-            resetChild(bubbleChild);
-
-            if (mIsHotseat && mHotseatChildScale >= 0) {
-                // Scale/make transparent for a hotseat
-                scaleChild(bubbleChild, mHotseatChildScale);
-
-                bubbleChild.setTextColor(getResources().getColor(android.R.color.transparent));
-            } else if (mChildScale >= 0) {
-                // Else possibly still scale it if we need to for smaller icons
-                scaleChild(bubbleChild, mChildScale);
+            Resources res = getResources();
+            if (mIsHotseat) {
+                bubbleChild.setTextColor(res.getColor(android.R.color.transparent));
+            } else {
+                bubbleChild.setTextColor(res.getColor(R.color.workspace_icon_text_color));
             }
         }
 
diff --git a/src/com/android/launcher2/DragLayer.java b/src/com/android/launcher2/DragLayer.java
index 379e599..b316665 100644
--- a/src/com/android/launcher2/DragLayer.java
+++ b/src/com/android/launcher2/DragLayer.java
@@ -462,20 +462,7 @@
         float scale = getDescendantCoordRelativeToSelf((View) child.getParent(), coord);
         int toX = coord[0];
         int toY = coord[1];
-        if (child instanceof TextView) {
-            float childrenScale = parent.getChildrenScale();
-            TextView tv = (TextView) child;
-
-            // The child may be scaled (always about the center of the view) so to account for it,
-            // we have to offset the position by the scaled size.  Once we do that, we can center
-            // the drag view about the scaled child view.
-            toY += Math.round(((1f - childrenScale) * child.getMeasuredHeight()) / 2 +
-                    scale * childrenScale * tv.getPaddingTop());
-            toY -= dragView.getMeasuredHeight() * (1 - scale * childrenScale) / 2;
-            toX -= (dragView.getMeasuredWidth() - Math.round(scale * child.getMeasuredWidth())) / 2;
-
-            scale *= childrenScale;
-        } else if (child instanceof FolderIcon) {
+        if (child instanceof FolderIcon) {
             // Account for holographic blur padding on the drag view
             toY -= Workspace.DRAG_BITMAP_PADDING / 2;
             // Center in the x coordinate about the target's drawable
