diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
index 86c674f..a447d7b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
@@ -20,8 +20,6 @@
 import android.content.res.Configuration;
 import android.os.SystemProperties;
 import android.util.AttributeSet;
-import android.util.FloatProperty;
-import android.util.Property;
 import android.view.View;
 import android.view.ViewGroup;
 
@@ -287,49 +285,50 @@
         }
         float viewEnd = viewStart + fullHeight;
         float fullTransitionAmount;
-        float iconTransitonAmount;
-        if (viewEnd >= getTranslationY() && (mAmbientState.isShadeExpanded()
+        float iconTransitionAmount;
+        float shelfStart = getTranslationY();
+        if (viewEnd >= shelfStart && (mAmbientState.isShadeExpanded()
                 || (!row.isPinned() && !row.isHeadsUpAnimatingAway()))) {
-            if (viewStart < getTranslationY()) {
+            if (viewStart < shelfStart) {
 
-                float fullAmount = (getTranslationY() - viewStart) / fullHeight;
+                float fullAmount = (shelfStart - viewStart) / fullHeight;
                 float interpolatedAmount =  Interpolators.ACCELERATE_DECELERATE.getInterpolation(
                         fullAmount);
                 interpolatedAmount = NotificationUtils.interpolate(
                         interpolatedAmount, fullAmount, expandAmount);
                 fullTransitionAmount = 1.0f - interpolatedAmount;
 
-                iconTransitonAmount = (getTranslationY() - viewStart) / iconTransformDistance;
-                iconTransitonAmount = Math.min(1.0f, iconTransitonAmount);
-                iconTransitonAmount = 1.0f - iconTransitonAmount;
+                iconTransitionAmount = (shelfStart - viewStart) / iconTransformDistance;
+                iconTransitionAmount = Math.min(1.0f, iconTransitionAmount);
+                iconTransitionAmount = 1.0f - iconTransitionAmount;
 
             } else {
                 fullTransitionAmount = 1.0f;
-                iconTransitonAmount = 1.0f;
+                iconTransitionAmount = 1.0f;
             }
         } else {
             fullTransitionAmount = 0.0f;
-            iconTransitonAmount = 0.0f;
+            iconTransitionAmount = 0.0f;
         }
-        row.setContentTransformationAmount(iconTransitonAmount, isLastChild);
-        updateIconPositioning(row, iconTransitonAmount, fullTransitionAmount);
+        updateIconPositioning(row, iconTransitionAmount, fullTransitionAmount, isLastChild);
         return fullTransitionAmount;
     }
 
     private void updateIconPositioning(ExpandableNotificationRow row, float iconTransitionAmount,
-            float fullTransitionAmount) {
+            float fullTransitionAmount, boolean isLastChild) {
         StatusBarIconView icon = row.getEntry().expandedIcon;
         NotificationIconContainer.IconState iconState = getIconState(icon);
         if (iconState == null) {
             return;
         }
         float clampedAmount = iconTransitionAmount > 0.5f ? 1.0f : 0.0f;
-        boolean isLastChild = isLastChild(row);
         if (clampedAmount == iconTransitionAmount) {
             iconState.keepClampedPosition = false;
         }
         if (clampedAmount == fullTransitionAmount) {
             iconState.useFullTransitionAmount = fullTransitionAmount == 0.0f;
+            iconState.translateContent = mMaxLayoutHeight - getTranslationY()
+                    - getIntrinsicHeight() > 0;
         }
         float transitionAmount;
         boolean needCannedAnimation = iconState.clampedAppearAmount == 1.0f
@@ -358,6 +357,10 @@
                 : transitionAmount;
         iconState.clampedAppearAmount = clampedAmount;
         setIconTransformationAmount(row, transitionAmount);
+        float contentTransformationAmount = isLastChild || iconState.translateContent
+                ? iconTransitionAmount
+                : 0.0f;
+        row.setContentTransformationAmount(contentTransformationAmount, isLastChild);
     }
 
     private boolean isLastChild(ExpandableNotificationRow row) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
index 6650e72..a2c2fd7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
@@ -515,7 +515,9 @@
                 }
             } else {
                 setIconAppearAmount(visibleState == STATE_ICON ? 1.0f : 0.0f);
-                setDotAppearAmount(visibleState == STATE_DOT ? 1.0f : 0.0f);
+                setDotAppearAmount(visibleState == STATE_DOT ? 1.0f
+                        : visibleState == STATE_ICON ? 2.0f
+                        : 0.0f);
             }
         }
         if (!runnableAdded) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java
index 203d689..d323e4f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java
@@ -411,6 +411,7 @@
         public boolean needsCannedAnimation;
         public boolean keepClampedPosition;
         public boolean useFullTransitionAmount;
+        public boolean translateContent;
 
         @Override
         public void applyToView(View view) {
