diff --git a/res/drawable-sw720dp-land-hdpi/divider_launcher_holo.9.png b/res/drawable-sw720dp-land-hdpi/divider_launcher_holo.9.png
new file mode 100644
index 0000000..0a1bd2a
--- /dev/null
+++ b/res/drawable-sw720dp-land-hdpi/divider_launcher_holo.9.png
Binary files differ
diff --git a/res/drawable-sw720dp-land-mdpi/divider_launcher_holo.9.png b/res/drawable-sw720dp-land-mdpi/divider_launcher_holo.9.png
new file mode 100644
index 0000000..6d101f4
--- /dev/null
+++ b/res/drawable-sw720dp-land-mdpi/divider_launcher_holo.9.png
Binary files differ
diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml
index b4ddc00..5f03510 100644
--- a/res/values-land/dimens.xml
+++ b/res/values-land/dimens.xml
@@ -33,7 +33,7 @@
     <dimen name="workspace_bottom_padding">0dp</dimen>
     <!-- We really want the page spacing to be the max of either the button bar
          height or the qsb bar height -->
-    <dimen name="workspace_page_spacing">@dimen/button_bar_height</dimen>
+    <dimen name="workspace_page_spacing">-1dp</dimen>
     <dimen name="workspace_divider_padding_left">0dp</dimen>
     <dimen name="workspace_divider_padding_right">0dp</dimen>
     <dimen name="workspace_divider_padding_top">12dp</dimen>
diff --git a/res/values-sw600dp-land/dimens.xml b/res/values-sw600dp-land/dimens.xml
index 882de23..7db0a8a 100644
--- a/res/values-sw600dp-land/dimens.xml
+++ b/res/values-sw600dp-land/dimens.xml
@@ -21,7 +21,7 @@
 
 <!-- Hotseat -->
     <dimen name="hotseat_cell_width">75dp</dimen>
-    <dimen name="hotseat_cell_height">85dp</dimen>
+    <dimen name="hotseat_cell_height">75dp</dimen>
 
 <!-- Workspace -->
     <dimen name="workspace_cell_width">96dp</dimen>
diff --git a/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml
index 0fb8d33..62bf9a8 100644
--- a/res/values-sw720dp/dimens.xml
+++ b/res/values-sw720dp/dimens.xml
@@ -27,6 +27,9 @@
     <dimen name="workspace_cell_width">96dip</dimen>
     <dimen name="workspace_cell_height">96dip</dimen>
 
+    <dimen name="folder_cell_width">96dp</dimen>
+    <dimen name="folder_cell_height">96dp</dimen>
+
 <!-- AppsCustomize -->
     <integer name="apps_customize_maxCellCountX">-1</integer>
     <integer name="apps_customize_maxCellCountY">-1</integer>
@@ -49,5 +52,5 @@
     <!-- When dragging items on the workspace, the number of dps by which the position of
      the drag view should be offset from the position of the original view. -->
     <dimen name="dragViewOffsetX">0dp</dimen>
-    <dimen name="dragViewOffsetY">-12dp</dimen>
+    <dimen name="dragViewOffsetY">0dp</dimen>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 4a69f4a..45e544a 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -102,10 +102,10 @@
     <!-- When dragging items on the workspace, the number of dps by which the position of
      the drag view should be offset from the position of the original view. -->
     <dimen name="dragViewOffsetX">0dp</dimen>
-    <dimen name="dragViewOffsetY">-8dp</dimen>
+    <dimen name="dragViewOffsetY">0dp</dimen>
     <!--  When dragging an item, how much bigger (fixed dps) the dragged view
           should be. If 0, it will not be scaled at all. -->
-    <dimen name="dragViewScale">8dp</dimen>
+    <dimen name="dragViewScale">12dp</dimen>
 
     <!-- Padding applied to AppWidgets -->
     <dimen name="app_widget_preview_padding_left">8dp</dimen>
diff --git a/src/com/android/launcher2/BubbleTextView.java b/src/com/android/launcher2/BubbleTextView.java
index 623c6ff..4a3a7a4 100644
--- a/src/com/android/launcher2/BubbleTextView.java
+++ b/src/com/android/launcher2/BubbleTextView.java
@@ -47,8 +47,6 @@
     static final float PADDING_H = 8.0f;
     static final float PADDING_V = 3.0f;
 
-    private Paint mPaint;
-    private float mBubbleColorAlpha;
     private int mPrevAlpha = -1;
 
     private final HolographicOutlineHelper mOutlineHelper = new HolographicOutlineHelper();
@@ -88,9 +86,6 @@
 
         final Resources res = getContext().getResources();
         int bubbleColor = res.getColor(R.color.bubble_dark_background);
-        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
-        mPaint.setColor(bubbleColor);
-        mBubbleColorAlpha = Color.alpha(bubbleColor) / 255.0f;
         mFocusedOutlineColor = mFocusedGlowColor = mPressedOutlineColor = mPressedGlowColor =
             res.getColor(android.R.color.holo_blue_light);
 
@@ -178,7 +173,8 @@
         // The translate of scrollX and scrollY is necessary when drawing TextViews, because
         // they set scrollX and scrollY to large values to achieve centered text
         destCanvas.save();
-        destCanvas.scale(getScaleX(), getScaleY(), getWidth() / 2, getHeight() / 2);
+        destCanvas.scale(getScaleX(), getScaleY(),
+                (getWidth() + padding) / 2, (getHeight() + padding) / 2);
         destCanvas.translate(-getScrollX() + padding / 2, -getScrollY() + padding / 2);
         destCanvas.clipRect(clipRect, Op.REPLACE);
         draw(destCanvas);
@@ -328,7 +324,6 @@
     protected boolean onSetAlpha(int alpha) {
         if (mPrevAlpha != alpha) {
             mPrevAlpha = alpha;
-            mPaint.setAlpha((int) (alpha * mBubbleColorAlpha));
             super.onSetAlpha(alpha);
         }
         return true;
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index 1aaba6d..528984a 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -137,8 +137,8 @@
     private CellLayoutChildren mChildren;
 
     private boolean mIsHotseat = false;
-    private final int mBubbleScalePercent;
-    private final int mBubbleHotseatScalePercent;
+    private float mChildScale = 1f;
+    private float mHotseatChildScale = 1f;
 
     public CellLayout(Context context) {
         this(context, null);
@@ -185,8 +185,14 @@
         mNormalBackground.setFilterBitmap(true);
         mActiveGlowBackground.setFilterBitmap(true);
 
-        mBubbleScalePercent = res.getInteger(R.integer.app_icon_scale_percent);
-        mBubbleHotseatScalePercent = res.getInteger(R.integer.app_icon_hotseat_scale_percent);
+        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.
 
@@ -497,25 +503,6 @@
 
     @Override
     protected void dispatchDraw(Canvas canvas) {
-        // Debug drawing for hit space
-        if (false) {
-            final Rect frame = mRect;
-            for (int i = mChildren.getChildCount() - 1; i >= 0; i--) {
-                final View child = mChildren.getChildAt(i);
-                final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-
-                if ((child.getVisibility() == VISIBLE || child.getAnimation() != null) &&
-                        lp.isLockedToGrid) {
-                    child.getHitRect(frame);
-                    frame.offset(mPaddingLeft, mPaddingTop);
-
-                    Paint p = new Paint();
-                    p.setColor(Color.GREEN);
-                    canvas.drawRect(frame, p);
-                }
-            }
-        }
-
         super.dispatchDraw(canvas);
         if (mForegroundAlpha > 0) {
             mOverScrollForegroundDrawable.setBounds(mForegroundRect);
@@ -582,12 +569,16 @@
         mIsHotseat = isHotseat;
     }
 
+    public float getChildrenScale() {
+        return mIsHotseat ? mHotseatChildScale : mChildScale;
+    }
+
     public boolean addViewToCellLayout(
             View child, int index, int childId, LayoutParams params, boolean markCells) {
         return addViewToCellLayout(child, index, childId, params, markCells, false);
     }
 
-    private void scaleChild(BubbleTextView bubbleChild, float pivot, int scalePercent) {
+    private void scaleChild(BubbleTextView bubbleChild, float pivot, 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 &&
@@ -597,20 +588,13 @@
         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));
     }
@@ -629,14 +613,14 @@
             // Start the child with 100% scale and visible text
             resetChild(bubbleChild);
 
-            if (mIsHotseat && !allApps && mBubbleHotseatScalePercent >= 0) {
+            if (mIsHotseat && !allApps && mHotseatChildScale >= 0) {
                 // Scale/make transparent for a hotseat
-                scaleChild(bubbleChild, 0f, mBubbleHotseatScalePercent);
+                scaleChild(bubbleChild, 0f, mHotseatChildScale);
 
                 bubbleChild.setTextColor(getResources().getColor(android.R.color.transparent));
-            } else if (mBubbleScalePercent >= 0) {
+            } else if (mChildScale >= 0) {
                 // Else possibly still scale it if we need to for smaller icons
-                scaleChild(bubbleChild, 0f, mBubbleScalePercent);
+                scaleChild(bubbleChild, 0f, mChildScale);
             }
         }
 
@@ -727,7 +711,7 @@
 
     public void setTagToCellInfoForPoint(int touchX, int touchY) {
         final CellInfo cellInfo = mCellInfo;
-        final Rect frame = mRect;
+        Rect frame = mRect;
         final int x = touchX + mScrollX;
         final int y = touchY + mScrollY;
         final int count = mChildren.getChildCount();
@@ -741,10 +725,15 @@
                     lp.isLockedToGrid) {
                 child.getHitRect(frame);
 
+                float scale = child.getScaleX();
+                frame = new Rect(child.getLeft(), child.getTop(), child.getRight(),
+                        child.getBottom());
                 // The child hit rect is relative to the CellLayoutChildren parent, so we need to
                 // offset that by this CellLayout's padding to test an (x,y) point that is relative
                 // to this view.
                 frame.offset(mPaddingLeft, mPaddingTop);
+                frame.inset((int) (frame.width() * (1f - scale) / 2),
+                        (int) (frame.height() * (1f - scale) / 2));
 
                 if (frame.contains(x, y)) {
                     cellInfo.cell = child;
@@ -791,6 +780,7 @@
         if (action == MotionEvent.ACTION_DOWN) {
             setTagToCellInfoForPoint((int) ev.getX(), (int) ev.getY());
         }
+
         return false;
     }
 
@@ -1978,8 +1968,8 @@
                         leftMargin - rightMargin;
                 height = myCellVSpan * cellHeight + ((myCellVSpan - 1) * heightGap) -
                         topMargin - bottomMargin;
-                x = myCellX * (cellWidth + widthGap) + leftMargin;
-                y = myCellY * (cellHeight + heightGap) + topMargin;
+                x = (int) (myCellX * (cellWidth + widthGap) + leftMargin);
+                y = (int) (myCellY * (cellHeight + heightGap) + topMargin);
             }
         }
 
diff --git a/src/com/android/launcher2/CellLayoutChildren.java b/src/com/android/launcher2/CellLayoutChildren.java
index 35f5af1..4ca44ed 100644
--- a/src/com/android/launcher2/CellLayoutChildren.java
+++ b/src/com/android/launcher2/CellLayoutChildren.java
@@ -18,10 +18,14 @@
 
 import android.app.WallpaperManager;
 import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
 import android.graphics.Rect;
 import android.view.View;
 import android.view.ViewGroup;
 
+import com.android.launcher2.CellLayout.LayoutParams;
+
 public class CellLayoutChildren extends ViewGroup {
     static final String TAG = "CellLayoutChildren";
 
@@ -68,6 +72,22 @@
     }
 
     @Override
+    protected void dispatchDraw(Canvas canvas) {
+        // Debug drawing for hit space
+        if (false) {
+            Paint p = new Paint();
+            p.setColor(0x6600FF00);
+            for (int i = getChildCount() - 1; i >= 0; i--) {
+                final View child = getChildAt(i);
+                final CellLayout.LayoutParams lp = (CellLayout.LayoutParams) child.getLayoutParams();
+
+                canvas.drawRect(lp.x, lp.y, lp.x + lp.width, lp.y + lp.height, p);
+            }
+        }
+        super.dispatchDraw(canvas);
+    }
+
+    @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         int count = getChildCount();
         for (int i = 0; i < count; i++) {
diff --git a/src/com/android/launcher2/DragLayer.java b/src/com/android/launcher2/DragLayer.java
index a3b389d..ce5c8c5 100644
--- a/src/com/android/launcher2/DragLayer.java
+++ b/src/com/android/launcher2/DragLayer.java
@@ -433,8 +433,10 @@
 
     public void animateViewIntoPosition(DragView dragView, final View child, int duration,
             final Runnable onFinishAnimationRunnable, View anchorView) {
-        ((CellLayoutChildren) child.getParent()).measureChild(child);
+        CellLayoutChildren parentChildren = (CellLayoutChildren) child.getParent();
+        CellLayout parent = (CellLayout) (CellLayout) parentChildren.getParent();
         CellLayout.LayoutParams lp =  (CellLayout.LayoutParams) child.getLayoutParams();
+        parentChildren.measureChild(child);
 
         Rect r = new Rect();
         getViewRectRelativeToSelf(dragView, r);
@@ -442,20 +444,25 @@
         int coord[] = new int[2];
         coord[0] = lp.x;
         coord[1] = lp.y;
+
         // Since the child hasn't necessarily been laid out, we force the lp to be updated with
         // the correct coordinates (above) and use these to determine the final location
         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;
-            Drawable d = tv.getCompoundDrawables()[1];
 
-            // Center in the y coordinate about the target's drawable
-            toY += Math.round(scale * tv.getPaddingTop());
-            toY -= (dragView.getHeight() - (int) Math.round(scale * d.getIntrinsicHeight())) / 2;
-            // Center in the x coordinate about the target's drawable
+            // 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) {
             // Account for holographic blur padding on the drag view
             toY -= Workspace.DRAG_BITMAP_PADDING / 2;
diff --git a/src/com/android/launcher2/DragView.java b/src/com/android/launcher2/DragView.java
index f6c16b3..3090e8f 100644
--- a/src/com/android/launcher2/DragView.java
+++ b/src/com/android/launcher2/DragView.java
@@ -162,7 +162,7 @@
             // for debugging
             Paint p = new Paint();
             p.setStyle(Paint.Style.FILL);
-            p.setColor(0xaaffffff);
+            p.setColor(0x66ffffff);
             canvas.drawRect(0, 0, getWidth(), getHeight(), p);
         }
 
diff --git a/src/com/android/launcher2/FastBitmapDrawable.java b/src/com/android/launcher2/FastBitmapDrawable.java
index 9fa62da..d317d33 100644
--- a/src/com/android/launcher2/FastBitmapDrawable.java
+++ b/src/com/android/launcher2/FastBitmapDrawable.java
@@ -29,7 +29,7 @@
     private int mAlpha;
     private int mWidth;
     private int mHeight;
-    private final Paint mPaint = new Paint();
+    private final Paint mPaint = new Paint(Paint.FILTER_BITMAP_FLAG);
 
     FastBitmapDrawable(Bitmap b) {
 	mAlpha = 255;
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 4e0f980..b7d4c8b 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -2015,6 +2015,7 @@
     }
 
     public boolean onLongClick(View v) {
+
         if (mState != State.WORKSPACE) {
             return false;
         }
diff --git a/src/com/android/launcher2/PagedView.java b/src/com/android/launcher2/PagedView.java
index e64b0c3..0854508 100644
--- a/src/com/android/launcher2/PagedView.java
+++ b/src/com/android/launcher2/PagedView.java
@@ -580,7 +580,14 @@
 
             // Calculate the variable page spacing if necessary
             if (mPageSpacing < 0) {
-                setPageSpacing(((right - left) - getChildAt(0).getMeasuredWidth()) / 2);
+                // The gap between pages in the PagedView should be equal to the gap from the page
+                // to the edge of the screen (so it is not visible in the current screen).  To
+                // account for unequal padding on each side of the paged view, we take the maximum
+                // of the left/right gap and use that as the gap between each page.
+                int offset = getRelativeChildOffset(0);
+                int spacing = Math.max(offset, (right - left) - offset -
+                        getChildAt(0).getMeasuredWidth());
+                setPageSpacing(spacing);
             }
         }
 
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index b7fdfe8..b8807a9 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -1902,10 +1902,14 @@
         final Bitmap b = createDragBitmap(child, new Canvas(), DRAG_BITMAP_PADDING);
 
         final int bmpWidth = b.getWidth();
+        final int bmpHeight = b.getHeight();
 
         mLauncher.getDragLayer().getLocationInDragLayer(child, mTempXY);
-        final int dragLayerX = (int) mTempXY[0] + (child.getWidth() - bmpWidth) / 2;
-        int dragLayerY = mTempXY[1] - DRAG_BITMAP_PADDING / 2;
+        int dragLayerX =
+                Math.round(mTempXY[0] - (bmpWidth - child.getScaleX() * child.getWidth()) / 2);
+        int dragLayerY =
+                Math.round(mTempXY[1] - (bmpHeight - child.getScaleY() * bmpHeight) / 2
+                        - DRAG_BITMAP_PADDING / 2);
 
         Point dragVisualizeOffset = null;
         Rect dragRect = null;
@@ -1934,7 +1938,7 @@
         }
 
         mDragController.startDrag(b, dragLayerX, dragLayerY, source, child.getTag(),
-                DragController.DRAG_ACTION_MOVE, dragVisualizeOffset, dragRect, 1f);
+                DragController.DRAG_ACTION_MOVE, dragVisualizeOffset, dragRect, child.getScaleX());
         b.recycle();
 
         // Show the scrolling indicator when you pick up an item
