diff --git a/src/com/android/launcher/GesturesActivity.java b/src/com/android/launcher/GesturesActivity.java
index 24775ff..0b66ae1 100644
--- a/src/com/android/launcher/GesturesActivity.java
+++ b/src/com/android/launcher/GesturesActivity.java
@@ -56,9 +56,6 @@
 
     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";
 
@@ -68,7 +65,6 @@
     private GesturesAdapter mAdapter;
     private GestureLibrary mStore;
     private GesturesLoadTask mTask;
-    private TextView mEmpty;
 
     private Dialog mRenameDialog;
     private EditText mInput;
@@ -86,12 +82,16 @@
         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);
+        mPreferences = getSharedPreferences(GesturesConstants.PREFERENCES_NAME, MODE_PRIVATE);
+    }
+
+    @SuppressWarnings({ "UnusedDeclaration" })
+    public void back(View v) {
+        finish();
     }
 
     @Override
@@ -106,12 +106,6 @@
         cleanupRenameDialog();
     }
 
-    private void checkForEmpty() {
-        if (mAdapter.getCount() == 0) {
-            mEmpty.setText(R.string.gestures_empty);
-        }
-    }
-
     @Override
     protected void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
@@ -257,7 +251,6 @@
         adapter.setNotifyOnChange(false);
         adapter.remove(info);
         adapter.sort(mSorter);
-        checkForEmpty();
         adapter.notifyDataSetChanged();
 
         LauncherModel.deleteGestureFromDatabase(this, info);
@@ -269,7 +262,8 @@
         if (position == 1) {
             final CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkbox);
             checkBox.toggle();
-            mPreferences.edit().putBoolean(PREFERENCES_HOME_KEY, checkBox.isChecked()).commit();
+            mPreferences.edit().putBoolean(GesturesConstants.PREFERENCES_HOME_KEY,
+                    checkBox.isChecked()).commit();
         }
     }
 
@@ -328,12 +322,6 @@
             adapter.sort(mSorter);
             adapter.notifyDataSetChanged();
         }
-
-        @Override
-        protected void onPostExecute(Boolean aBoolean) {
-            super.onPostExecute(aBoolean);
-            checkForEmpty();
-        }
     }
 
     private class GesturesAdapter extends ArrayAdapter<ApplicationInfo> {
@@ -471,7 +459,7 @@
             ((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));
+                    mPreferences.getBoolean(GesturesConstants.PREFERENCES_HOME_KEY, false));
 
             return convertView;
         }
diff --git a/src/com/android/launcher/GesturesConstants.java b/src/com/android/launcher/GesturesConstants.java
index 3151ea3..93a1f10b 100644
--- a/src/com/android/launcher/GesturesConstants.java
+++ b/src/com/android/launcher/GesturesConstants.java
@@ -22,4 +22,6 @@
     final long MATCH_DELAY = 370;
     final float LENGTH_THRESHOLD = 120.0f;
     int PATH_SAMPLE_COUNT = 10;
+    String PREFERENCES_NAME = "gestures";
+    String PREFERENCES_HOME_KEY = "gestures.home";
 }
diff --git a/src/com/android/launcher/Launcher.java b/src/com/android/launcher/Launcher.java
index 21b6949..be013eb 100644
--- a/src/com/android/launcher/Launcher.java
+++ b/src/com/android/launcher/Launcher.java
@@ -984,9 +984,9 @@
 
                 // TODO: This really should not be done here every time
                 final SharedPreferences preferences =
-                        getSharedPreferences(GesturesActivity.PREFERENCES_NAME, MODE_PRIVATE);
+                        getSharedPreferences(GesturesConstants.PREFERENCES_NAME, MODE_PRIVATE);
                 final boolean homeKey = preferences.getBoolean(
-                        GesturesActivity.PREFERENCES_HOME_KEY, false);
+                        GesturesConstants.PREFERENCES_HOME_KEY, false);
 
                 if (!homeKey) {
                     if (!mWorkspace.isDefaultScreenShowing()) {
