diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index e27345b..5df271e 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -903,10 +903,6 @@
         return mBackgroundAlpha;
     }
 
-    public void setFastBackgroundAlpha(float alpha) {
-        mBackgroundAlpha = alpha;
-    }
-
     public void setBackgroundAlphaMultiplier(float multiplier) {
         mBackgroundAlphaMultiplier = multiplier;
     }
@@ -936,11 +932,6 @@
         super.setAlpha(alpha);
     }
 
-    public void setFastAlpha(float alpha) {
-        setFastChildrenAlpha(alpha);
-        super.setFastAlpha(alpha);
-    }
-
     private void setChildrenAlpha(float alpha) {
         final int childCount = getChildCount();
         for (int i = 0; i < childCount; i++) {
@@ -948,13 +939,6 @@
         }
     }
 
-    private void setFastChildrenAlpha(float alpha) {
-        final int childCount = getChildCount();
-        for (int i = 0; i < childCount; i++) {
-            getChildAt(i).setFastAlpha(alpha);
-        }
-    }
-
     public View getChildAt(int x, int y) {
         return mChildren.getChildAt(x, y);
     }
diff --git a/src/com/android/launcher2/PagedView.java b/src/com/android/launcher2/PagedView.java
index c72fdcc..939b7fd 100644
--- a/src/com/android/launcher2/PagedView.java
+++ b/src/com/android/launcher2/PagedView.java
@@ -624,8 +624,7 @@
                 if (child != null) {
                     float scrollProgress = getScrollProgress(screenCenter, child, i);
                     float alpha = 1 - Math.abs(scrollProgress);
-                    child.setFastAlpha(alpha);
-                    child.fastInvalidate();
+                    child.setAlpha(alpha);
                 }
             }
             invalidate();
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 7d61f62..74ab607 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -854,7 +854,7 @@
             }
         }
         if (keepUpdating) {
-            fastInvalidate();
+            invalidate();
         }
     }
 
@@ -1166,13 +1166,12 @@
                                 backgroundAlphaInterpolator(Math.abs(scrollProgress)));
                     }
                 }
-                cl.setFastTranslationX(translationX);
-                cl.setFastRotationY(rotation);
+                cl.setTranslationX(translationX);
+                cl.setRotationY(rotation);
                 if (mFadeInAdjacentScreens && !isSmall()) {
                     float alpha = 1 - Math.abs(scrollProgress);
-                    cl.setFastAlpha(alpha);
+                    cl.setAlpha(alpha);
                 }
-                cl.fastInvalidate();
             }
         }
         if (!isSwitchingState() && !isInOverscroll) {
@@ -1652,16 +1651,15 @@
             for (int index = 0; index < getChildCount(); index++) {
                 final int i = index;
                 final CellLayout cl = (CellLayout) getChildAt(i);
-                invalidate();
                 if (mOldAlphas[i] == 0 && mNewAlphas[i] == 0) {
-                    cl.fastInvalidate();
-                    cl.setFastTranslationX(mNewTranslationXs[i]);
-                    cl.setFastTranslationY(mNewTranslationYs[i]);
-                    cl.setFastScaleX(mNewScaleXs[i]);
-                    cl.setFastScaleY(mNewScaleYs[i]);
-                    cl.setFastBackgroundAlpha(mNewBackgroundAlphas[i]);
+                    cl.setTranslationX(mNewTranslationXs[i]);
+                    cl.setTranslationY(mNewTranslationYs[i]);
+                    cl.setScaleX(mNewScaleXs[i]);
+                    cl.setScaleY(mNewScaleYs[i]);
+                    cl.setBackgroundAlpha(mNewBackgroundAlphas[i]);
                     cl.setBackgroundAlphaMultiplier(mNewBackgroundAlphaMultipliers[i]);
-                    cl.setFastAlpha(mNewAlphas[i]);
+                    cl.setAlpha(mNewAlphas[i]);
+                    cl.setRotationY(mNewRotationYs[i]);
                 } else {
                     LauncherViewPropertyAnimator a = new LauncherViewPropertyAnimator(cl);
                     a.translationX(mNewTranslationXs[i])
@@ -1692,7 +1690,7 @@
                         bgAnim.setInterpolator(mZoomInInterpolator);
                         bgAnim.addUpdateListener(new LauncherAnimatorUpdateListener() {
                                 public void onAnimationUpdate(float a, float b) {
-                                    cl.setFastBackgroundAlpha(
+                                    cl.setBackgroundAlpha(
                                             a * mOldBackgroundAlphas[i] +
                                             b * mNewBackgroundAlphas[i]);
                                     cl.setBackgroundAlphaMultiplier(
