diff --git a/src/com/android/launcher2/PagedViewIcon.java b/src/com/android/launcher2/PagedViewIcon.java
index e2c22c3..ea5e6d7 100644
--- a/src/com/android/launcher2/PagedViewIcon.java
+++ b/src/com/android/launcher2/PagedViewIcon.java
@@ -29,9 +29,10 @@
 import android.graphics.PorterDuffXfermode;
 import android.graphics.Rect;
 import android.graphics.Region.Op;
+import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
-import android.view.View;
+import android.widget.Checkable;
 import android.widget.TextView;
 
 class HolographicOutlineHelper {
@@ -42,8 +43,11 @@
     private static final float STROKE_WIDTH = 6.0f;
     private static final float BLUR_FACTOR = 3.5f;
 
+    public static final int HOLOGRAPHIC_BLUE = 0xFF6699FF;
+    public static final int HOLOGRAPHIC_GREEN = 0xFF66FF66;
+
     HolographicOutlineHelper(float density) {
-        mHolographicPaint.setColor(0xFF6699ff);
+        mHolographicPaint.setColor(HOLOGRAPHIC_BLUE);
         mHolographicPaint.setFilterBitmap(true);
         mHolographicPaint.setAntiAlias(true);
         mBlurPaint.setMaskFilter(new BlurMaskFilter(BLUR_FACTOR * density, 
@@ -84,6 +88,13 @@
     }
 
     /**
+     * Sets the color of the holographic paint to be used when applying the outline/blur.
+     */
+    void setColor(int color) {
+        mHolographicPaint.setColor(color);
+    }
+
+    /**
      * Applies an outline to whatever is currently drawn in the specified bitmap.
      */
     void applyOutline(Bitmap srcDst, Canvas srcDstCanvas, PointF offset) {
@@ -117,7 +128,7 @@
  * An icon on a PagedView, specifically for items in the launcher's paged view (with compound
  * drawables on the top).
  */
-public class PagedViewIcon extends TextView {
+public class PagedViewIcon extends TextView implements Checkable {
     private static final String TAG = "PagedViewIcon";
 
     // holographic outline
@@ -131,6 +142,8 @@
     private int mAlpha;
     private int mHolographicAlpha;
 
+    private boolean mIsChecked;
+
     public PagedViewIcon(Context context) {
         this(context, null);
     }
@@ -172,6 +185,21 @@
     }
 
     @Override
+    public void setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top,
+            Drawable right, Drawable bottom) {
+        invalidateHolographicImage();
+        super.setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom);
+    }
+
+    public void invalidateHolographicImage() {
+        if (mHolographicOutline != null) {
+            mHolographicOutline.recycle();
+            mHolographicOutline = null;
+            mHolographicOutlineCanvas = null;
+        }
+    }
+
+    @Override
     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
         super.onLayout(changed, left, top, right, bottom);
 
@@ -191,7 +219,8 @@
             mHolographicOutlineCanvas = new Canvas(mHolographicOutline);
             mHolographicOutlineCanvas.concat(getMatrix());
             draw(mHolographicOutlineCanvas);
-            sHolographicOutlineHelper.applyOutline(mHolographicOutline, mHolographicOutlineCanvas, 
+            sHolographicOutlineHelper.setColor(HolographicOutlineHelper.HOLOGRAPHIC_BLUE);
+            sHolographicOutlineHelper.applyOutline(mHolographicOutline, mHolographicOutlineCanvas,
                     offset);
             sHolographicOutlineHelper.applyBlur(mHolographicOutline, mHolographicOutlineCanvas);
             mIsHolographicUpdatePass = false;
@@ -231,4 +260,20 @@
             canvas.drawBitmap(mHolographicOutline, 0, 0, mPaint);
         }
     }
+
+    @Override
+    public boolean isChecked() {
+        return mIsChecked;
+    }
+
+    @Override
+    public void setChecked(boolean checked) {
+        mIsChecked = checked;
+        invalidate();
+    }
+
+    @Override
+    public void toggle() {
+        setChecked(!mIsChecked);
+    }
 }
