diff --git a/src/com/android/launcher2/BubbleTextView.java b/src/com/android/launcher2/BubbleTextView.java
index 4d1dbf8..9f0e5fb 100644
--- a/src/com/android/launcher2/BubbleTextView.java
+++ b/src/com/android/launcher2/BubbleTextView.java
@@ -118,7 +118,6 @@
                 new FastBitmapDrawable(b),
                 null, null);
         setText(info.title);
-        buildAndEnableCache();
         setTag(info);
     }
 
diff --git a/src/com/android/launcher2/CacheableTextView.java b/src/com/android/launcher2/CacheableTextView.java
index da2f302..167133d 100644
--- a/src/com/android/launcher2/CacheableTextView.java
+++ b/src/com/android/launcher2/CacheableTextView.java
@@ -18,10 +18,9 @@
 
 import android.content.Context;
 import android.graphics.Bitmap;
-import android.graphics.Bitmap.Config;
 import android.graphics.Canvas;
-import android.graphics.Color;
 import android.graphics.Paint;
+import android.graphics.Bitmap.Config;
 import android.text.Layout;
 import android.util.AttributeSet;
 import android.widget.TextView;
@@ -39,7 +38,7 @@
 
     private int mPrevAlpha = -1;
     private boolean mIsBuildingCache;
-    boolean mWaitingToGenerateCache;
+    boolean mIsTextCacheDirty;
     float mTextCacheLeft;
     float mTextCacheTop;
     float mTextCacheScrollX;
@@ -73,18 +72,12 @@
         return 0;
     }
 
-    public void buildAndEnableCache() {
-        // Defers building the cache until the next draw to allow measuring
-        // and laying out.
-        buildAndEnableCache(false);
+    public void setText(CharSequence text, BufferType type) {
+        super.setText(text, type);
+        mIsTextCacheDirty = true;
     }
 
-    public void buildAndEnableCache(boolean isImmediate) {
-        if (getLayout() == null || !isImmediate) {
-            mWaitingToGenerateCache = true;
-            return;
-        }
-
+    private void buildAndUpdateCache() {
         final Layout layout = getLayout();
         final int left = getCompoundPaddingLeft();
         final int top = getExtendedPaddingTop();
@@ -133,8 +126,7 @@
 
             // A hack-- we set the text to be one space (we don't make it empty just to avoid any
             // potential issues with text measurement, like line height, etc.) so that the text view
-            // doesn't draw it anymore, since it's been cached. We have to manually rebuild
-            // the cache whenever the text is changed (which is never in Launcher)
+            // doesn't draw it anymore, since it's been cached.
             mText = getText();
             setText(" ");
         }
@@ -145,9 +137,9 @@
     }
 
     public void draw(Canvas canvas) {
-        if (mWaitingToGenerateCache && !mIsBuildingCache) {
-            buildAndEnableCache(true);
-            mWaitingToGenerateCache = false;
+        if (mIsTextCacheDirty && !mIsBuildingCache) {
+            buildAndUpdateCache();
+            mIsTextCacheDirty = false;
         }
         if (mCache != null && !mIsBuildingCache) {
             canvas.drawBitmap(mCache, mTextCacheLeft - mTextCacheScrollX + mScrollX,
diff --git a/src/com/android/launcher2/PagedViewIcon.java b/src/com/android/launcher2/PagedViewIcon.java
index 6ce308b..90cff97 100644
--- a/src/com/android/launcher2/PagedViewIcon.java
+++ b/src/com/android/launcher2/PagedViewIcon.java
@@ -143,7 +143,6 @@
         mIcon = info.iconBitmap;
         setCompoundDrawablesWithIntrinsicBounds(null, new FastBitmapDrawable(mIcon), null, null);
         setText(info.title);
-        buildAndEnableCache();
         setTag(info);
 
         if (createHolographicOutlines) {
@@ -160,7 +159,6 @@
                 modelIconCache.getFullResIcon(info, packageManager), mContext);
         setCompoundDrawablesWithIntrinsicBounds(null, new FastBitmapDrawable(mIcon), null, null);
         setText(info.loadLabel(packageManager));
-        buildAndEnableCache();
         setTag(info);
 
         if (createHolographicOutlines) {
