diff --git a/quickstep/src/com/android/quickstep/NavBarSwipeInteractionHandler.java b/quickstep/src/com/android/quickstep/NavBarSwipeInteractionHandler.java
index 7077185..43a01a7 100644
--- a/quickstep/src/com/android/quickstep/NavBarSwipeInteractionHandler.java
+++ b/quickstep/src/com/android/quickstep/NavBarSwipeInteractionHandler.java
@@ -328,5 +328,9 @@
 
     private void onAnimationToLauncherComplete() {
         mDragView.close(false);
+        View currentRecentsPage = mRecentsView.getPageAt(mRecentsView.getCurrentPage());
+        if (currentRecentsPage instanceof TaskView) {
+            ((TaskView) currentRecentsPage).animateIconToScale(1f);
+        }
     }
 }
diff --git a/quickstep/src/com/android/quickstep/RecentsView.java b/quickstep/src/com/android/quickstep/RecentsView.java
index a107343..fd9010d 100644
--- a/quickstep/src/com/android/quickstep/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/RecentsView.java
@@ -146,6 +146,9 @@
     public void update(RecentsTaskLoadPlan loadPlan) {
         final RecentsTaskLoader loader = TouchInteractionService.getRecentsTaskLoader();
         setCurrentPage(0);
+        if (getPageAt(mCurrentPage) instanceof TaskView) {
+            ((TaskView) getPageAt(mCurrentPage)).setIconScale(0);
+        }
         TaskStack stack = loadPlan != null ? loadPlan.getTaskStack() : null;
         if (stack == null) {
             removeAllViews();
diff --git a/quickstep/src/com/android/quickstep/TaskView.java b/quickstep/src/com/android/quickstep/TaskView.java
index a0ad618..d834881 100644
--- a/quickstep/src/com/android/quickstep/TaskView.java
+++ b/quickstep/src/com/android/quickstep/TaskView.java
@@ -59,6 +59,8 @@
      */
     private static final float SWIPE_DISTANCE_HEIGHT_PERCENTAGE = 0.38f;
 
+    private static final long SCALE_ICON_DURATION = 120;
+
     private static final Property<TaskView, Float> PROPERTY_SWIPE_PROGRESS =
             new Property<TaskView, Float>(Float.class, "swipe_progress") {
 
@@ -73,6 +75,19 @@
                 }
             };
 
+    private static final Property<TaskView, Float> SCALE_ICON_PROPERTY =
+            new Property<TaskView, Float>(Float.TYPE, "scale_icon") {
+                @Override
+                public Float get(TaskView taskView) {
+                    return taskView.mIconScale;
+                }
+
+                @Override
+                public void set(TaskView taskView, Float iconScale) {
+                    taskView.setIconScale(iconScale);
+                }
+            };
+
     private Task mTask;
     private TaskThumbnailView mSnapshotView;
     private ImageView mIconView;
@@ -81,6 +96,7 @@
     private float mSwipeProgress;
     private Interpolator mAlphaInterpolator;
     private Interpolator mSwipeAnimInterpolator;
+    private float mIconScale = 1f;
 
     public TaskView(Context context) {
         this(context, null);
@@ -259,4 +275,17 @@
         swipeAnimator.setInterpolator(mSwipeAnimInterpolator);
         swipeAnimator.start();
     }
+
+    public void animateIconToScale(float scale) {
+        ObjectAnimator.ofFloat(this, SCALE_ICON_PROPERTY, scale)
+                .setDuration(SCALE_ICON_DURATION).start();
+    }
+
+    protected void setIconScale(float iconScale) {
+        mIconScale = iconScale;
+        if (mIconView != null) {
+            mIconView.setScaleX(mIconScale);
+            mIconView.setScaleY(mIconScale);
+        }
+    }
 }
diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java
index 7b89c5c..b98d852 100644
--- a/src/com/android/launcher3/allapps/AllAppsContainerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java
@@ -495,6 +495,7 @@
             public void onPageSelected(int pos) {
                 tabs.updateTabTextColor(pos);
                 mHeader.setMainActive(pos == 0);
+                reset();
                 applyTouchDelegate();
                 if (mAH[pos].recyclerView != null) {
                     mAH[pos].recyclerView.bindFastScrollbar();
@@ -674,8 +675,9 @@
                 recyclerView.setPadding(padding.left, paddingTop, padding.right, padding.bottom);
             }
             if (isHeaderVisible()) {
-                mHeader.getPredictionRow()
-                        .setPadding(padding.left, 0 , padding.right, 0);
+                PredictionRowView prv = mHeader.getPredictionRow();
+                prv.setPadding(padding.left, prv.getPaddingTop() , padding.right,
+                        prv.getPaddingBottom());
             }
         }
 
diff --git a/src/com/android/launcher3/allapps/FloatingHeaderView.java b/src/com/android/launcher3/allapps/FloatingHeaderView.java
index dc3afb5..409985c 100644
--- a/src/com/android/launcher3/allapps/FloatingHeaderView.java
+++ b/src/com/android/launcher3/allapps/FloatingHeaderView.java
@@ -107,6 +107,7 @@
         mWorkRV = setupRV(mWorkRV, mAH[AllAppsContainerView.AdapterHolder.WORK].recyclerView);
         mParent = (ViewGroup) mMainRV.getParent();
         setMainActive(true);
+        reset();
         setupDivider();
     }
 
@@ -130,8 +131,6 @@
 
     public void setMainActive(boolean active) {
         mCurrentRV = active ? mMainRV : mWorkRV;
-        mSnappedScrolledY = mCurrentRV.getCurrentScrollY() - mMaxTranslation;
-        setExpanded(true);
     }
 
     public PredictionRowView getPredictionRow() {
@@ -142,10 +141,6 @@
         return mDivider;
     }
 
-    public void reset() {
-        setExpanded(true);
-    }
-
     private boolean canSnapAt(int currentScrollY) {
         return Math.abs(currentScrollY) <= mPredictionRow.getHeight();
     }
@@ -194,16 +189,14 @@
         }
     }
 
-    private void setExpanded(boolean expand) {
-        int translateTo = expand ? 0 : -mMaxTranslation;
+    public void reset() {
+        int translateTo = 0;
         mAnimator.setIntValues(mTranslationY, translateTo);
         mAnimator.addUpdateListener(this);
         mAnimator.setDuration(150);
         mAnimator.start();
-        mHeaderCollapsed = !expand;
-        mSnappedScrolledY = expand
-                ? mCurrentRV.getCurrentScrollY() - mMaxTranslation
-                : mCurrentRV.getCurrentScrollY();
+        mHeaderCollapsed = false;
+        mSnappedScrolledY = -mMaxTranslation;
     }
 
     public boolean isExpanded() {
