diff --git a/res/drawable-hdpi/all_apps_button.png b/res/drawable-hdpi/all_apps_button.png
deleted file mode 100644
index bb84278..0000000
--- a/res/drawable-hdpi/all_apps_button.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/all_apps_button_normal.png b/res/drawable-hdpi/all_apps_button_normal.png
new file mode 100644
index 0000000..c29d3d7
--- /dev/null
+++ b/res/drawable-hdpi/all_apps_button_normal.png
Binary files differ
diff --git a/res/drawable-hdpi/all_apps_button_pressed.png b/res/drawable-hdpi/all_apps_button_pressed.png
new file mode 100644
index 0000000..4c64d69
--- /dev/null
+++ b/res/drawable-hdpi/all_apps_button_pressed.png
Binary files differ
diff --git a/res/drawable-hdpi/home_button.png b/res/drawable-hdpi/home_button_normal.png
similarity index 100%
rename from res/drawable-hdpi/home_button.png
rename to res/drawable-hdpi/home_button_normal.png
Binary files differ
diff --git a/res/drawable-hdpi/home_button_pressed.png b/res/drawable-hdpi/home_button_pressed.png
new file mode 100644
index 0000000..392bc66
--- /dev/null
+++ b/res/drawable-hdpi/home_button_pressed.png
Binary files differ
diff --git a/res/drawable/all_apps_button.xml b/res/drawable/all_apps_button.xml
new file mode 100644
index 0000000..985bdff
--- /dev/null
+++ b/res/drawable/all_apps_button.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true" android:drawable="@drawable/all_apps_button_pressed" />
+    <item android:state_focused="true" android:state_window_focused="true" android:drawable="@drawable/all_apps_button_pressed" />
+    <item android:state_focused="true" android:state_window_focused="false" android:drawable="@drawable/all_apps_button_normal" />
+    <item android:drawable="@drawable/all_apps_button_normal" />
+</selector>
+
diff --git a/res/raw/rollo.c b/res/raw/rollo.c
index 2dd17aa..6a41727 100644
--- a/res/raw/rollo.c
+++ b/res/raw/rollo.c
@@ -301,7 +301,7 @@
 draw_home_button()
 {
     color(1.0f, 1.0f, 1.0f, 1.0f);
-    bindTexture(NAMED_PFTexLinear, 0, params->homeButtonId);
+    bindTexture(NAMED_PFTexLinear, 0, state->homeButtonId);
 
     float scale = 2.0f / SCREEN_WIDTH_PX;
 
diff --git a/res/raw/rollo2.c b/res/raw/rollo2.c
index ad7b18f..eb87063 100644
--- a/res/raw/rollo2.c
+++ b/res/raw/rollo2.c
@@ -246,7 +246,7 @@
 draw_home_button()
 {
     color(1.0f, 1.0f, 1.0f, 1.0f);
-    bindTexture(NAMED_PFTexLinear, 0, params->homeButtonId);
+    bindTexture(NAMED_PFTexLinear, 0, state->homeButtonId);
 
     float scale = 2.0f / SCREEN_WIDTH_PX;
 
diff --git a/res/raw/rollo3.c b/res/raw/rollo3.c
index 0fe940e..3c3ebf0 100644
--- a/res/raw/rollo3.c
+++ b/res/raw/rollo3.c
@@ -233,7 +233,7 @@
 draw_home_button()
 {
     setColor(1.0f, 1.0f, 1.0f, 1.0f);
-    bindTexture(NAMED_PFTexLinear, 0, params->homeButtonId);
+    bindTexture(NAMED_PFTexLinear, 0, state->homeButtonId);
 
     float scale = 2.0f / SCREEN_WIDTH_PX;
 
diff --git a/res/raw/rollo4.c b/res/raw/rollo4.c
index b0ea5b0..29b31a3 100644
--- a/res/raw/rollo4.c
+++ b/res/raw/rollo4.c
@@ -301,7 +301,7 @@
 draw_home_button()
 {
     color(1.0f, 1.0f, 1.0f, 1.0f);
-    bindTexture(NAMED_PFTexLinear, 0, params->homeButtonId);
+    bindTexture(NAMED_PFTexLinear, 0, state->homeButtonId);
 
     float scale = 2.0f / SCREEN_WIDTH_PX;
 
diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java
index b5074b1..6b4eab4 100644
--- a/src/com/android/launcher2/AllAppsView.java
+++ b/src/com/android/launcher2/AllAppsView.java
@@ -225,6 +225,8 @@
 
             if (y > mRollo.mTouchYBorders[mRollo.mTouchYBorders.length-1]) {
                 mTouchTracking = TRACKING_HOME;
+                mRollo.setHomeSelected(true);
+                mRollo.mState.save();
             } else {
                 mTouchTracking = TRACKING_FLING;
 
@@ -258,7 +260,8 @@
         case MotionEvent.ACTION_MOVE:
         case MotionEvent.ACTION_OUTSIDE:
             if (mTouchTracking == TRACKING_HOME) {
-                // TODO: highlight?
+                mRollo.setHomeSelected(y > mRollo.mTouchYBorders[mRollo.mTouchYBorders.length-1]);
+                mRollo.mState.save();
             } else if (mTouchTracking == TRACKING_FLING) {
                 int rawX = (int)ev.getRawX();
                 int rawY = (int)ev.getRawY();
@@ -306,6 +309,8 @@
                     if (y > mRollo.mTouchYBorders[mRollo.mTouchYBorders.length-1]) {
                         mLauncher.closeAllApps(true);
                     }
+                    mRollo.setHomeSelected(false);
+                    mRollo.mState.save();
                 }
             } else if (mTouchTracking == TRACKING_FLING) {
                 mRollo.mState.newTouchDown = 0;
@@ -533,7 +538,8 @@
         private SimpleMesh mMesh;
         private SimpleMesh mMesh2;
 
-        private Allocation mHomeButton;
+        private Allocation mHomeButtonNormal;
+        private Allocation mHomeButtonPressed;
 
         private Allocation[] mIcons;
         private int[] mIconIds;
@@ -595,7 +601,6 @@
             public int bubbleBitmapWidth;
             public int bubbleBitmapHeight;
 
-            public int homeButtonId;
             public int homeButtonWidth;
             public int homeButtonHeight;
             public int homeButtonTextureWidth;
@@ -610,6 +615,7 @@
             public int selectedIconIndex = -1;
             public int selectedIconTexture;
             public float zoomTarget;
+            public int homeButtonId;
 
             State() {
                 mType = Type.createFromClass(mRS, State.class, 1, "StateClass");
@@ -814,15 +820,19 @@
             mParams.bubbleBitmapWidth = bubble.getBitmapWidth();
             mParams.bubbleBitmapHeight = bubble.getBitmapHeight();
 
-            mHomeButton = Allocation.createFromBitmapResource(mRS, mRes,
-                    R.drawable.home_button, Element.RGBA_8888(mRS), false);
-            mHomeButton.uploadToTexture(0);
-            mParams.homeButtonId = mHomeButton.getID();
+            mHomeButtonNormal = Allocation.createFromBitmapResource(mRS, mRes,
+                    R.drawable.home_button_normal, Element.RGBA_8888(mRS), false);
+            mHomeButtonNormal.uploadToTexture(0);
+            mHomeButtonPressed = Allocation.createFromBitmapResource(mRS, mRes,
+                    R.drawable.home_button_pressed, Element.RGBA_8888(mRS), false);
+            mHomeButtonPressed.uploadToTexture(0);
             mParams.homeButtonWidth = 76;
             mParams.homeButtonHeight = 68;
             mParams.homeButtonTextureWidth = 128;
             mParams.homeButtonTextureHeight = 128;
 
+            mState.homeButtonId = mHomeButtonNormal.getID();
+
             mParams.save();
             mState.save();
 
@@ -1131,6 +1141,13 @@
             mState.selectedIconIndex = -1;
         }
 
+        void setHomeSelected(boolean pressed) {
+            if (pressed) {
+                mState.homeButtonId = mHomeButtonPressed.getID();
+            } else {
+                mState.homeButtonId = mHomeButtonNormal.getID();
+            }
+        }
     }
 }
 
