diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 72e486b..7bdc9cf 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -94,7 +94,8 @@
 
         <activity
             android:name="GesturesActivity"
-            android:label="@string/gestures_activity" />        
+            android:label="@string/gestures_activity"
+            android:theme="@android:style/Theme.Light.NoTitleBar" />        
         
         <!-- Enable system-default search mode for any activity in Home -->
         <meta-data
diff --git a/res/drawable/btn_circle.xml b/res/drawable/btn_add.xml
similarity index 64%
copy from res/drawable/btn_circle.xml
copy to res/drawable/btn_add.xml
index 9208010..1345fd1 100644
--- a/res/drawable/btn_circle.xml
+++ b/res/drawable/btn_add.xml
@@ -16,17 +16,11 @@
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_window_focused="false" android:state_enabled="true"
-        android:drawable="@drawable/btn_circle_normal" />
-    <item android:state_window_focused="false" android:state_enabled="false"
-        android:drawable="@drawable/btn_circle_disable" />
+        android:drawable="@drawable/plus_normal" />
     <item android:state_pressed="true" 
-        android:drawable="@drawable/btn_circle_pressed" />
+        android:drawable="@drawable/plus_pressed" />
     <item android:state_focused="true" android:state_enabled="true"
-        android:drawable="@drawable/btn_circle_selected" />
+        android:drawable="@drawable/plus_selected" />
     <item android:state_enabled="true"
-        android:drawable="@drawable/btn_circle_normal" />
-    <item android:state_focused="true"
-        android:drawable="@drawable/btn_circle_disable_focused" />
-    <item
-         android:drawable="@drawable/btn_circle_disable" />
+        android:drawable="@drawable/plus_normal" />
 </selector>
diff --git a/res/drawable/btn_circle_disable.png b/res/drawable/btn_circle_disable.png
deleted file mode 100644
index 33b74a6..0000000
--- a/res/drawable/btn_circle_disable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/btn_circle_disable_focused.png b/res/drawable/btn_circle_disable_focused.png
deleted file mode 100644
index 005ad8d..0000000
--- a/res/drawable/btn_circle_disable_focused.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/btn_circle_normal.png b/res/drawable/btn_circle_normal.png
deleted file mode 100644
index fc5af1c..0000000
--- a/res/drawable/btn_circle_normal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/btn_circle_pressed.png b/res/drawable/btn_circle_pressed.png
deleted file mode 100644
index 8f40afd..0000000
--- a/res/drawable/btn_circle_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/btn_circle_selected.png b/res/drawable/btn_circle_selected.png
deleted file mode 100644
index c74fac2..0000000
--- a/res/drawable/btn_circle_selected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/btn_circle.xml b/res/drawable/btn_g.xml
similarity index 64%
rename from res/drawable/btn_circle.xml
rename to res/drawable/btn_g.xml
index 9208010..d033b43 100644
--- a/res/drawable/btn_circle.xml
+++ b/res/drawable/btn_g.xml
@@ -16,17 +16,11 @@
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_window_focused="false" android:state_enabled="true"
-        android:drawable="@drawable/btn_circle_normal" />
-    <item android:state_window_focused="false" android:state_enabled="false"
-        android:drawable="@drawable/btn_circle_disable" />
+        android:drawable="@drawable/g_normal" />
     <item android:state_pressed="true" 
-        android:drawable="@drawable/btn_circle_pressed" />
+        android:drawable="@drawable/g_pressed" />
     <item android:state_focused="true" android:state_enabled="true"
-        android:drawable="@drawable/btn_circle_selected" />
+        android:drawable="@drawable/g_selected" />
     <item android:state_enabled="true"
-        android:drawable="@drawable/btn_circle_normal" />
-    <item android:state_focused="true"
-        android:drawable="@drawable/btn_circle_disable_focused" />
-    <item
-         android:drawable="@drawable/btn_circle_disable" />
+        android:drawable="@drawable/g_normal" />
 </selector>
diff --git a/res/drawable/btn_circle.xml b/res/drawable/btn_list.xml
similarity index 64%
copy from res/drawable/btn_circle.xml
copy to res/drawable/btn_list.xml
index 9208010..84a033e 100644
--- a/res/drawable/btn_circle.xml
+++ b/res/drawable/btn_list.xml
@@ -16,17 +16,11 @@
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_window_focused="false" android:state_enabled="true"
-        android:drawable="@drawable/btn_circle_normal" />
-    <item android:state_window_focused="false" android:state_enabled="false"
-        android:drawable="@drawable/btn_circle_disable" />
+        android:drawable="@drawable/list_normal" />
     <item android:state_pressed="true" 
-        android:drawable="@drawable/btn_circle_pressed" />
+        android:drawable="@drawable/list_pressed" />
     <item android:state_focused="true" android:state_enabled="true"
-        android:drawable="@drawable/btn_circle_selected" />
+        android:drawable="@drawable/list_selected" />
     <item android:state_enabled="true"
-        android:drawable="@drawable/btn_circle_normal" />
-    <item android:state_focused="true"
-        android:drawable="@drawable/btn_circle_disable_focused" />
-    <item
-         android:drawable="@drawable/btn_circle_disable" />
+        android:drawable="@drawable/list_normal" />
 </selector>
diff --git a/res/drawable/g_normal.png b/res/drawable/g_normal.png
new file mode 100644
index 0000000..2ae9703
--- /dev/null
+++ b/res/drawable/g_normal.png
Binary files differ
diff --git a/res/drawable/g_pressed.png b/res/drawable/g_pressed.png
new file mode 100644
index 0000000..13667dc
--- /dev/null
+++ b/res/drawable/g_pressed.png
Binary files differ
diff --git a/res/drawable/g_selected.png b/res/drawable/g_selected.png
new file mode 100644
index 0000000..faed865
--- /dev/null
+++ b/res/drawable/g_selected.png
Binary files differ
diff --git a/res/drawable/gestures_background.xml b/res/drawable/gestures_background.xml
old mode 100755
new mode 100644
index 34ec051..59c11dc
--- a/res/drawable/gestures_background.xml
+++ b/res/drawable/gestures_background.xml
@@ -1,20 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
-   Copyright (C) 2009 Romain Guy
+<!-- Copyright (C) 2009 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
+     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
+          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.
+     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.
 -->
 
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-    android:src="@drawable/texture_paper"
-    android:tileMode="repeat" />
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/gestures_frame"
+    android:dither="true" />
diff --git a/res/drawable/gestures_frame.9.png b/res/drawable/gestures_frame.9.png
new file mode 100644
index 0000000..c5f5640
--- /dev/null
+++ b/res/drawable/gestures_frame.9.png
Binary files differ
diff --git a/res/drawable/ic_btn_round_plus.png b/res/drawable/ic_btn_round_plus.png
deleted file mode 100644
index 1ec8a95..0000000
--- a/res/drawable/ic_btn_round_plus.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/list_normal.png b/res/drawable/list_normal.png
new file mode 100644
index 0000000..ee05949
--- /dev/null
+++ b/res/drawable/list_normal.png
Binary files differ
diff --git a/res/drawable/list_pressed.png b/res/drawable/list_pressed.png
new file mode 100644
index 0000000..8e3c68c
--- /dev/null
+++ b/res/drawable/list_pressed.png
Binary files differ
diff --git a/res/drawable/list_selected.png b/res/drawable/list_selected.png
new file mode 100644
index 0000000..93858f4
--- /dev/null
+++ b/res/drawable/list_selected.png
Binary files differ
diff --git a/res/drawable/plus_normal.png b/res/drawable/plus_normal.png
new file mode 100644
index 0000000..ddc5888
--- /dev/null
+++ b/res/drawable/plus_normal.png
Binary files differ
diff --git a/res/drawable/plus_pressed.png b/res/drawable/plus_pressed.png
new file mode 100644
index 0000000..872f092
--- /dev/null
+++ b/res/drawable/plus_pressed.png
Binary files differ
diff --git a/res/drawable/plus_selected.png b/res/drawable/plus_selected.png
new file mode 100644
index 0000000..32c441f
--- /dev/null
+++ b/res/drawable/plus_selected.png
Binary files differ
diff --git a/res/drawable/texture_paper.jpg b/res/drawable/texture_paper.jpg
deleted file mode 100644
index 27f4fd6..0000000
--- a/res/drawable/texture_paper.jpg
+++ /dev/null
Binary files differ
diff --git a/res/layout/gestures.xml b/res/layout/gestures.xml
index c9ea2a5..a22ce06 100644
--- a/res/layout/gestures.xml
+++ b/res/layout/gestures.xml
@@ -14,83 +14,89 @@
      limitations under the License.
 -->
 
-<!-- Note: GesturesPanel is a special implementation that forces the widget
-     to be opaque for performance reasons. Make sure it visually is. -->
+<!-- TODO: Replace all this with a RelativeLayout -->
 <com.android.launcher.GesturesPanel
     xmlns:android="http://schemas.android.com/apk/res/android"
-        
-    android:id="@+id/gestures_panel"
+
     android:layout_width="fill_parent"
-    android:layout_height="fill_parent">
+    android:layout_height="fill_parent"
+    
+    android:paddingLeft="13dip"
+    android:paddingRight="13dip"
+    
+    android:orientation="vertical"
+    android:background="@drawable/gestures_background">
 
-    <ViewSwitcher
-        android:id="@+id/gestures_actions"
+    <FrameLayout
         android:layout_width="fill_parent"
-        android:layout_height="83dip"
-        android:layout_alignParentBottom="true"
-
-        android:inAnimation="@anim/fade_in_fast"
-        android:outAnimation="@anim/fade_out_fast"
-
-        android:foregroundGravity="top|fill_horizontal"
-        android:foreground="@*android:drawable/title_bar_shadow"
-        android:background="@android:drawable/title_bar_tall">
-
+        android:layout_height="wrap_content"
+        
+        android:paddingTop="13dip"
+        android:paddingBottom="13dip">
+        
         <TextView
-            android:layout_width="wrap_content"
-            android:layout_height="fill_parent"
-            android:layout_gravity="center_horizontal"
-
-            android:gravity="center_vertical"
-
-            android:shadowColor="#FF000000"
-            android:shadowRadius="2.0"
-
-            android:drawablePadding="8dip"
-            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:id="@+id/gestures_prompt"
+            android:layout_width="fill_parent"
+            android:layout_height="64dip"
+            
+            android:gravity="center"
+            android:textAppearance="?android:attr/textAppearanceLargeInverse"
             android:ellipsize="end"
-            android:maxLines="2"
+            android:maxLines="1"
+            android:singleLine="true"
             android:text="@string/gestures_instructions" />
 
-        <TextView
-            android:layout_width="wrap_content"
-            android:layout_height="fill_parent"
-            android:layout_gravity="center_horizontal"
+        <Button
+            android:id="@+id/gestures_action"
+            android:layout_width="fill_parent"
+            android:layout_height="64dip"
 
-            android:gravity="center_vertical"
-
-            android:shadowColor="#FF000000"
-            android:shadowRadius="2.0"
-
-            android:drawablePadding="8dip"
-            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:gravity="left|center_vertical"
+            android:textAppearance="?android:attr/textAppearanceLargeInverse"
             android:ellipsize="end"
-            android:maxLines="2"
-            android:text="@string/gestures_instructions" />
-
-    </ViewSwitcher>
+            android:maxLines="1"
+            android:singleLine="true"
+            android:drawablePadding="6dip"
+            
+            android:visibility="gone" />
+        
+    </FrameLayout>
 
     <android.gesture.GestureOverlayView
         android:id="@+id/gestures_overlay"
         android:layout_width="fill_parent"
         android:layout_height="0dip"
         android:layout_weight="1.0"
-        android:layout_alignParentTop="true"
-        android:layout_above="@id/gestures_actions"
+        android:layout_marginLeft="6dip"
+        android:layout_marginRight="6dip"
 
-        android:background="@drawable/gestures_background"
-
+        android:gestureColor="@color/gesture_color"
+        android:uncertainGestureColor="@color/uncertain_gesture_color"
         android:gestureStrokeType="multiple" />
 
-    <ImageButton
-        style="@style/PlusButton"
-
-        android:id="@+id/gestures_add"
-        android:layout_width="wrap_content"
+    <RelativeLayout
+        android:layout_width="fill_parent"
         android:layout_height="wrap_content"
-        android:layout_alignParentRight="true"
-        android:layout_alignTop="@id/gestures_actions"
-        android:layout_marginRight="5dip"  
-        android:layout_marginTop="-47dip" />
+        
+        android:paddingTop="15dip"
+        android:paddingBottom="13dip">
+
+        <ImageButton
+            android:id="@+id/gestures_add"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentLeft="true"
+            
+            android:background="@drawable/btn_add" />
+        
+        <ImageButton
+            android:id="@+id/gestures_list"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentRight="true"
+
+            android:background="@drawable/btn_list" />
+
+    </RelativeLayout>
 
 </com.android.launcher.GesturesPanel>
diff --git a/res/layout/gestures_settings.xml b/res/layout/gestures_settings.xml
index 4b1976f..d32b3ec 100644
--- a/res/layout/gestures_settings.xml
+++ b/res/layout/gestures_settings.xml
@@ -14,9 +14,7 @@
      limitations under the License.
 -->
 
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent">
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
 
     <ListView
         android:id="@android:id/list"
@@ -34,4 +32,4 @@
         android:text="@string/gestures_loading"
         android:textAppearance="?android:attr/textAppearanceMedium" />
 
-</FrameLayout>
+</merge>
diff --git a/res/layout/list_category.xml b/res/layout/list_category.xml
new file mode 100644
index 0000000..1e8d04c
--- /dev/null
+++ b/res/layout/list_category.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    style="?android:attr/listSeparatorTextViewStyle" />
diff --git a/res/layout/list_checkbox_2lines.xml b/res/layout/list_checkbox_2lines.xml
new file mode 100644
index 0000000..ed80c5f
--- /dev/null
+++ b/res/layout/list_checkbox_2lines.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:gravity="center_vertical"
+    android:paddingRight="?android:attr/scrollbarSize">
+
+    <RelativeLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="15dip"
+        android:layout_marginRight="6dip"
+        android:layout_marginTop="6dip"
+        android:layout_marginBottom="6dip"
+        android:layout_weight="1">
+
+        <TextView android:id="@+id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:singleLine="true"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:ellipsize="marquee"
+            android:fadingEdge="horizontal" />
+
+        <TextView android:id="@+id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/title"
+            android:layout_alignLeft="@id/title"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:maxLines="2" />
+
+    </RelativeLayout>
+
+    <CheckBox
+        android:id="@+id/checkbox"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginRight="4dip"
+        android:layout_gravity="center_vertical"
+        android:focusable="false"
+        android:clickable="false" />
+
+</LinearLayout>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index e1b4843..9b9700f 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -26,5 +26,6 @@
     <color name="appwidget_error_color">#FCCC</color>
     <color name="snag_callout_color">#F444</color>
 
-    <color name="gesture_color">#FFFFFF00</color>
+    <color name="gesture_color">#ff0563c1</color>
+    <color name="uncertain_gesture_color">#ff848484</color>
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 5319bb0..6f4365f 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -61,9 +61,4 @@
         <item name="android:paddingRight">10dip</item>
     </style>
 
-    <style name="PlusButton">
-        <item name="android:background">@drawable/btn_circle</item>
-        <item name="android:src">@drawable/ic_btn_round_plus</item>
-    </style>
-
 </resources>
diff --git a/src/com/android/launcher/GesturesActivity.java b/src/com/android/launcher/GesturesActivity.java
index 844392d..24775ff 100644
--- a/src/com/android/launcher/GesturesActivity.java
+++ b/src/com/android/launcher/GesturesActivity.java
@@ -26,8 +26,11 @@
 import android.widget.AdapterView;
 import android.widget.Toast;
 import android.widget.EditText;
+import android.widget.BaseAdapter;
+import android.widget.CheckBox;
 import android.content.Context;
 import android.content.DialogInterface;
+import android.content.SharedPreferences;
 import android.content.res.Resources;
 import android.view.View;
 import android.view.ViewGroup;
@@ -40,18 +43,22 @@
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.BitmapDrawable;
 import android.text.TextUtils;
+import android.database.DataSetObserver;
 
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Collections;
 import java.util.Map;
 
-public class GesturesActivity extends ListActivity {
+public class GesturesActivity extends ListActivity implements AdapterView.OnItemClickListener {
     private static final int MENU_ID_RENAME = 1;
     private static final int MENU_ID_REMOVE = 2;
 
     private static final int DIALOG_RENAME_GESTURE = 1;
 
+    static final String PREFERENCES_NAME = "gestures";
+    static final String PREFERENCES_HOME_KEY = "gestures.home";
+    
     // Type: long (id)
     private static final String GESTURES_INFO_ID = "gestures.info_id";
 
@@ -66,6 +73,7 @@
     private Dialog mRenameDialog;
     private EditText mInput;
     private ApplicationInfo mCurrentRenameInfo;
+    private SharedPreferences mPreferences;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -74,13 +82,16 @@
         setContentView(R.layout.gestures_settings);
 
         mAdapter = new GesturesAdapter(this);
-        setListAdapter(mAdapter);
+        setListAdapter(new GesturesSettingsAdapter(mAdapter));
+        getListView().setOnItemClickListener(this);
 
         mStore = Launcher.getGestureLibrary();
         mEmpty = (TextView) findViewById(android.R.id.empty);
         mTask = (GesturesLoadTask) new GesturesLoadTask().execute();
 
         registerForContextMenu(getListView());
+
+        mPreferences = getSharedPreferences(PREFERENCES_NAME, MODE_PRIVATE);
     }
 
     @Override
@@ -127,10 +138,12 @@
         super.onCreateContextMenu(menu, v, menuInfo);
 
         AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
-        menu.setHeaderTitle(((TextView) info.targetView).getText());
+        if (info.position > 2) {
+            menu.setHeaderTitle(((TextView) info.targetView).getText());
 
-        menu.add(0, MENU_ID_RENAME, 0, R.string.gestures_rename);
-        menu.add(0, MENU_ID_REMOVE, 0, R.string.gestures_delete);
+            menu.add(0, MENU_ID_RENAME, 0, R.string.gestures_rename);
+            menu.add(0, MENU_ID_REMOVE, 0, R.string.gestures_delete);
+        }
     }
 
     @Override
@@ -252,6 +265,14 @@
         Toast.makeText(this, R.string.gestures_delete_success, Toast.LENGTH_SHORT).show();
     }
 
+    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+        if (position == 1) {
+            final CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkbox);
+            checkBox.toggle();
+            mPreferences.edit().putBoolean(PREFERENCES_HOME_KEY, checkBox.isChecked()).commit();
+        }
+    }
+
     private class GesturesLoadTask extends AsyncTask<Void, ApplicationInfo, Boolean> {
         private int mThumbnailSize;
         private int mThumbnailInset;
@@ -346,4 +367,121 @@
             return convertView;
         }
     }
+
+    private class GesturesSettingsAdapter extends BaseAdapter {
+        private static final int FIXED_CHILDREN_COUNT = 3;
+
+        private static final int VIEW_TYPE_SEPARATOR = 0;
+        private static final int VIEW_TYPE_CHECKBOX = 1;
+
+        private final GesturesAdapter mAdapter;
+        private final LayoutInflater mInflater;
+
+        public GesturesSettingsAdapter(GesturesAdapter adapter) {
+            mAdapter = adapter;
+            mInflater = adapter.mInflater;
+            adapter.registerDataSetObserver(new DataSetObserver() {
+                @Override
+                public void onChanged() {
+                    notifyDataSetChanged();
+                }
+
+                @Override
+                public void onInvalidated() {
+                    notifyDataSetInvalidated();
+                }
+            });
+        }
+
+        public int getCount() {
+            return FIXED_CHILDREN_COUNT + mAdapter.getCount();
+        }
+
+        public Object getItem(int position) {
+            if (position < FIXED_CHILDREN_COUNT) {
+                return String.valueOf(position);
+            }
+            return mAdapter.getItem(position - FIXED_CHILDREN_COUNT);
+        }
+
+        public long getItemId(int position) {
+            return position;
+        }
+
+        @Override
+        public int getItemViewType(int position) {
+            if (position < FIXED_CHILDREN_COUNT) {
+                switch (position) {
+                    case 0:
+                    case 2:
+                        return VIEW_TYPE_SEPARATOR;
+                    case 1:
+                        return VIEW_TYPE_CHECKBOX;
+                }
+            }
+            return 2 + super.getItemViewType(position);
+        }
+
+        @Override
+        public int getViewTypeCount() {
+            return 2 + mAdapter.getViewTypeCount();
+        }
+
+        @Override
+        public boolean areAllItemsEnabled() {
+            return false;
+        }
+
+        @Override
+        public boolean isEnabled(int position) {
+            return position != 0 && position != 2;
+        }
+
+        public View getView(int position, View convertView, ViewGroup parent) {
+            if (position < FIXED_CHILDREN_COUNT) {
+                // NOTE: Don't bother with ViewHolders here, we only have 3 items and
+                //       the list is likely to not be very long
+                switch (position) {
+                    case 0:
+                        convertView = createHeader(convertView, parent,
+                                R.string.gestures_group_settings);
+                        break;
+                    case 1:
+                        convertView = createSetting(convertView, parent,
+                                R.string.gestures_preference_hotkey_title,
+                                R.string.gestures_preference_hotkey_summary);
+                        break;
+                    case 2:
+                        convertView = createHeader(convertView, parent,
+                                R.string.gestures_group_gestures);
+                        break;
+                }
+                return convertView;
+            }
+            return mAdapter.getView(position - FIXED_CHILDREN_COUNT, convertView, parent);
+        }
+
+        private View createSetting(View convertView, ViewGroup parent,
+                int title, int summary) {
+
+            if (convertView == null) {
+                convertView = mInflater.inflate(R.layout.list_checkbox_2lines, parent, false);
+            }
+
+            ((TextView) convertView.findViewById(R.id.title)).setText(title);
+            ((TextView) convertView.findViewById(R.id.summary)).setText(summary);
+            ((CheckBox) convertView.findViewById(R.id.checkbox)).setChecked(
+                    mPreferences.getBoolean(PREFERENCES_HOME_KEY, false));
+
+            return convertView;
+        }
+
+        private View createHeader(View convertView, ViewGroup parent, int text) {
+            if (convertView == null) {
+                convertView = mInflater.inflate(R.layout.list_category, parent, false);
+            }
+            ((TextView) convertView).setText(text);
+            return convertView;
+        }
+    }
 }
diff --git a/src/com/android/launcher/GesturesPanel.java b/src/com/android/launcher/GesturesPanel.java
index 33dc102..2d8647d 100644
--- a/src/com/android/launcher/GesturesPanel.java
+++ b/src/com/android/launcher/GesturesPanel.java
@@ -16,12 +16,12 @@
 
 package com.android.launcher;
 
-import android.widget.RelativeLayout;
+import android.widget.LinearLayout;
 import android.content.Context;
 import android.util.AttributeSet;
 import android.view.KeyEvent;
 
-public class GesturesPanel extends RelativeLayout {
+public class GesturesPanel extends LinearLayout {
     public GesturesPanel(Context context) {
         super(context);
     }
@@ -37,7 +37,26 @@
 
     @Override
     public boolean dispatchKeyEvent(KeyEvent event) {
-        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK &&
+        final int keyCode = event.getKeyCode();
+        
+        switch (keyCode) {
+            case KeyEvent.KEYCODE_VOLUME_UP:
+            case KeyEvent.KEYCODE_VOLUME_DOWN:
+            case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
+            case KeyEvent.KEYCODE_MUTE:
+            case KeyEvent.KEYCODE_HEADSETHOOK:
+            case KeyEvent.KEYCODE_MEDIA_STOP:
+            case KeyEvent.KEYCODE_MEDIA_NEXT:
+            case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
+            case KeyEvent.KEYCODE_MEDIA_REWIND:
+            case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
+            case KeyEvent.KEYCODE_CAMERA:
+            case KeyEvent.KEYCODE_CALL:
+            case KeyEvent.KEYCODE_SEARCH:
+                return ((Launcher) mContext).getWorkspace().getRootView().dispatchKeyEvent(event);
+        }
+        
+        if (keyCode == KeyEvent.KEYCODE_BACK &&
                 event.getAction() == KeyEvent.ACTION_DOWN) {
 
             ((Launcher) mContext).hideGesturesPanel();
diff --git a/src/com/android/launcher/Launcher.java b/src/com/android/launcher/Launcher.java
index 000ce14..21b6949 100644
--- a/src/com/android/launcher/Launcher.java
+++ b/src/com/android/launcher/Launcher.java
@@ -32,6 +32,7 @@
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.SharedPreferences;
 import android.content.Intent.ShortcutIconResource;
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
@@ -79,7 +80,7 @@
 import android.widget.Toast;
 import android.widget.ImageView;
 import android.widget.PopupWindow;
-import android.widget.ViewSwitcher;
+import android.widget.Button;
 import android.appwidget.AppWidgetManager;
 import android.appwidget.AppWidgetProviderInfo;
 import android.gesture.GestureOverlayView;
@@ -233,13 +234,14 @@
 
     private View mGesturesPanel;
     private GestureOverlayView mGesturesOverlay;
-    private ViewSwitcher mGesturesPrompt;
     private ImageView mGesturesAdd;
     private PopupWindow mGesturesWindow;
     private Launcher.GesturesProcessor mGesturesProcessor;
     private Gesture mCurrentGesture;
     private GesturesAction mGesturesAction;
     private boolean mHideGesturesPanel;
+    private TextView mGesturesPrompt;
+    private Button mGesturesSend;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -605,7 +607,7 @@
             mWorkspace.post(new Runnable() {
                 public void run() {
                     showGesturesPanel(false);
-                    mGesturesProcessor.matchGesture(gesture, false);
+                    mGesturesProcessor.matchGesture(gesture);
                     mWorkspace.post(new Runnable() {
                         public void run() {
                             if (gesture != null) {
@@ -667,22 +669,26 @@
         mGesturesPanel = mInflater.inflate(R.layout.gestures, mDragLayer, false);
         final View gesturesPanel = mGesturesPanel;
 
-        mGesturesPrompt = (ViewSwitcher) gesturesPanel.findViewById(R.id.gestures_actions);
         mGesturesAction = new GesturesAction();
 
-        mGesturesPrompt.getChildAt(0).setOnClickListener(mGesturesAction);
-        mGesturesPrompt.getChildAt(1).setOnClickListener(mGesturesAction);
-
+        mGesturesPrompt = (TextView) gesturesPanel.findViewById(R.id.gestures_prompt);
+        mGesturesSend = (Button) gesturesPanel.findViewById(R.id.gestures_action);
+        mGesturesSend.setOnClickListener(mGesturesAction);
+       
         mGesturesAdd = (ImageView) gesturesPanel.findViewById(R.id.gestures_add);
         final ImageView gesturesAdd = mGesturesAdd;
-        gesturesAdd.setAlpha(128);
-        gesturesAdd.setEnabled(false);
         gesturesAdd.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 createGesture();
             }
         });
 
+        gesturesPanel.findViewById(R.id.gestures_list).setOnClickListener(new View.OnClickListener() {
+            public void onClick(View v) {
+                startActivity(new Intent(Launcher.this, GesturesActivity.class));
+            }
+        });
+
         mGesturesOverlay = (GestureOverlayView) gesturesPanel.findViewById(R.id.gestures_overlay);
         mGesturesProcessor = new GesturesProcessor();
 
@@ -976,17 +982,34 @@
             if ((intent.getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) !=
                     Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) {
 
-                if (mGesturesPanel != null && mDragLayer.getWindowVisibility() == View.VISIBLE &&
-                        (mDragLayer.hasWindowFocus() ||
-                                (mGesturesWindow != null && mGesturesWindow.isShowing()))) {
+                // TODO: This really should not be done here every time
+                final SharedPreferences preferences =
+                        getSharedPreferences(GesturesActivity.PREFERENCES_NAME, MODE_PRIVATE);
+                final boolean homeKey = preferences.getBoolean(
+                        GesturesActivity.PREFERENCES_HOME_KEY, false);
 
-                    SearchManager searchManager =
-                            (SearchManager) getSystemService(Context.SEARCH_SERVICE);
+                if (!homeKey) {
+                    if (!mWorkspace.isDefaultScreenShowing()) {
+                        mWorkspace.moveToDefaultScreen();
+                    }
 
-                    if (!searchManager.isVisible()) {
-                        onHomeKeyPressed();
+                    if (mGesturesWindow == null || mGesturesWindow.isShowing()) {
+                        hideGesturesPanel();
+                    }                    
+                } else {
+                    if (mGesturesPanel != null && mDragLayer.getWindowVisibility() == View.VISIBLE
+                            && (mDragLayer.hasWindowFocus() || (mGesturesWindow != null
+                            && mGesturesWindow.isShowing()))) {
+
+                        SearchManager searchManager =
+                                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
+
+                        if (!searchManager.isVisible()) {
+                            onHomeKeyPressed();
+                        }
                     }
                 }
+
                 closeDrawer();
 
                 final View v = getWindow().peekDecorView();
@@ -1016,8 +1039,7 @@
     private void showGesturesPanel(boolean animate) {
         resetGesturesPrompt();
 
-        mGesturesAdd.setEnabled(false);
-        mGesturesAdd.setAlpha(128);
+        mGesturesAdd.setVisibility(View.GONE);
 
         mGesturesOverlay.clear(false);
 
@@ -1027,12 +1049,13 @@
             window = mGesturesWindow;
             window.setFocusable(true);
             window.setTouchable(true);
-            window.setBackgroundDrawable(null);
+            window.setBackgroundDrawable(getResources().getDrawable(
+                    android.R.drawable.screen_background_dark));
             window.setContentView(mGesturesPanel);
         } else {
             window = mGesturesWindow;
         }
-        window.setAnimationStyle(animate ? com.android.internal.R.style.Animation_SlidingCard : 0);
+        window.setAnimationStyle(animate ? com.android.internal.R.style.Animation_Toast : 0);
 
         final int[] xy = new int[2];
         final DragLayer dragLayer = mDragLayer;
@@ -1045,31 +1068,23 @@
 
     private void resetGesturesPrompt() {
         mGesturesAction.intent = null;
-        final TextView prompt = (TextView) mGesturesPrompt.getCurrentView();
-        prompt.setText(R.string.gestures_instructions);
-        prompt.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
-        prompt.setClickable(false);
+        mGesturesPrompt.setText(R.string.gestures_instructions);
+        mGesturesPrompt.setVisibility(View.VISIBLE);
+        mGesturesSend.setVisibility(View.GONE);
     }
 
-    private void resetGesturesNextPrompt() {
+    private void setGestureUnknown() {
         mGesturesAction.intent = null;
-        setGesturesNextPrompt(null, getString(R.string.gestures_instructions));
-        mGesturesPrompt.getNextView().setClickable(false);
+        mGesturesPrompt.setText(R.string.gestures_unknown);
+        mGesturesPrompt.setVisibility(View.VISIBLE);
+        mGesturesSend.setVisibility(View.GONE);
     }
 
-    private void setGesturesNextPrompt(Drawable icon, CharSequence title) {
-        final TextView prompt = (TextView) mGesturesPrompt.getNextView();
-        prompt.setText(title);
-        prompt.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
-        prompt.setClickable(true);
-        mGesturesPrompt.showNext();
-    }
-
-    private void setGesturesPrompt(Drawable icon, CharSequence title) {
-        final TextView prompt = (TextView) mGesturesPrompt.getCurrentView();
-        prompt.setText(title);
-        prompt.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
-        prompt.setClickable(true);
+    private void setGestureAction(Drawable icon, CharSequence title) {
+        mGesturesPrompt.setVisibility(View.GONE);
+        mGesturesSend.setVisibility(View.VISIBLE);
+        mGesturesSend.setText(title);
+        mGesturesSend.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
     }
 
     void hideGesturesPanel() {
@@ -1080,7 +1095,7 @@
         if (mGesturesWindow != null) {
             final PopupWindow popupWindow = mGesturesWindow;
             popupWindow.setAnimationStyle(animate ?
-                    com.android.internal.R.style.Animation_SlidingCard : 0);
+                    com.android.internal.R.style.Animation_Toast : 0);
             popupWindow.update();
             popupWindow.dismiss();
         }
@@ -1270,10 +1285,10 @@
                 .setIcon(com.android.internal.R.drawable.ic_menu_notifications)
                 .setAlphabeticShortcut('N');
 
-        final Intent gestures = new Intent(this, GesturesActivity.class);
+        // TODO: Remove
         menu.add(0, MENU_GESTURES, 0, R.string.menu_gestures)
-                .setIcon(com.android.internal.R.drawable.ic_menu_compose).setAlphabeticShortcut('G')
-                .setIntent(gestures);
+                .setIcon(com.android.internal.R.drawable.ic_menu_compose)
+                .setAlphabeticShortcut('G');
 
         final Intent settings = new Intent(android.provider.Settings.ACTION_SETTINGS);
         settings.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
@@ -1311,6 +1326,9 @@
             case MENU_NOTIFICATIONS:
                 showNotifications();
                 return true;
+            case MENU_GESTURES:
+                showGesturesPanel();
+                return true;
         }
 
         return super.onOptionsItemSelected(item);
@@ -2509,11 +2527,10 @@
             //noinspection PointlessBooleanExpression,ConstantConditions
             if (!CONFIG_GESTURES_IMMEDIATE_MODE) {
                 overlay.removeCallbacks(mMatcher);
-                resetGesturesNextPrompt();
+                resetGesturesPrompt();
             }
 
-            mGesturesAdd.setAlpha(128);
-            mGesturesAdd.setEnabled(false);
+            mGesturesAdd.setVisibility(View.GONE);
         }
 
         public void onGesture(GestureOverlayView overlay, MotionEvent event) {
@@ -2529,7 +2546,7 @@
                     overlay.clear(false);
                     if (mGesturesAction.intent != null) {
                         mGesturesAction.intent = null;
-                        setGesturesNextPrompt(null, getString(R.string.gestures_unknown));
+                        setGestureAction(null, getString(R.string.gestures_unknown));
                     }
                 } else {
                     mMatcher.run();
@@ -2542,7 +2559,7 @@
                     overlay.clear(false);
                     if (mGesturesAction.intent != null) {
                         mGesturesAction.intent = null;
-                        setGesturesNextPrompt(null, getString(R.string.gestures_unknown));
+                        setGestureAction(null, getString(R.string.gestures_unknown));
                     }
                 } else {
                     overlay.postDelayed(mMatcher, GesturesConstants.MATCH_DELAY);
@@ -2551,12 +2568,7 @@
         }
 
         void matchGesture(Gesture gesture) {
-            matchGesture(gesture, true);
-        }
-
-        void matchGesture(Gesture gesture, boolean animate) {
-            mGesturesAdd.setAlpha(255);
-            mGesturesAdd.setEnabled(true);
+            mGesturesAdd.setVisibility(View.VISIBLE);
 
             if (gesture != null) {
                 final ArrayList<Prediction> predictions = sLibrary.recognize(gesture);
@@ -2575,38 +2587,27 @@
 
                         ApplicationInfo info = sModel.queryGesture(Launcher.this, prediction.name);
                         if (info != null) {
-                            updatePrompt(info, animate);
+                            updatePrompt(info);
                         }
                     }
                 }
 
                 if (!match){
                     mGesturesAction.intent = null;
-                    if (animate) {
-                        setGesturesNextPrompt(null, getString(R.string.gestures_unknown));
-                    } else {
-                        setGesturesPrompt(null, getString(R.string.gestures_unknown));
-                    }
+                    setGestureUnknown();
                 }
             }
         }
 
         private void updatePrompt(ApplicationInfo info) {
-            updatePrompt(info, true);
-        }
-
-        private void updatePrompt(ApplicationInfo info, boolean animate) {
+            // TODO: BRING BACK            
             if (mGesturesAction.intent != null &&
                     info.intent.toUri(0).equals(mGesturesAction.intent.toUri(0)) &&
-                    info.title.equals(((TextView) mGesturesPrompt.getCurrentView()).getText())) {
+                    info.title.equals(mGesturesSend.getText())) {
                 return;
             }
 
-            if (animate) {
-                setGesturesNextPrompt(info.icon, info.title);
-            } else {
-                setGesturesPrompt(info.icon, info.title);
-            }
+            setGestureAction(info.icon, info.title);
 
             mGesturesAction.intent = info.intent;
         }
