diff --git a/Android.mk b/Android.mk
index 55f7de7..9ecc2de 100644
--- a/Android.mk
+++ b/Android.mk
@@ -26,7 +26,7 @@
 
 LOCAL_FORCE_STATIC_EXECUTABLE := true
 
-RECOVERY_VERSION := ClockworkMod Recovery v2.0.2.2
+RECOVERY_VERSION := ClockworkMod Recovery v2.0.2.4
 LOCAL_CFLAGS := -DRECOVERY_VERSION="$(RECOVERY_VERSION)"
 RECOVERY_API_VERSION := 2
 LOCAL_CFLAGS += -DRECOVERY_API_VERSION=$(RECOVERY_API_VERSION)
diff --git a/common.h b/common.h
index 81d9029..6c60d07 100644
--- a/common.h
+++ b/common.h
@@ -47,6 +47,9 @@
 // statements will be displayed.
 void ui_end_menu();
 
+int ui_get_showing_back_button();
+void ui_set_showing_back_button(int showBackButton);
+
 // Set the icon (normally the only thing visible besides the progress bar).
 enum {
   BACKGROUND_ICON_NONE,
diff --git a/default_recovery_ui.c b/default_recovery_ui.c
index f189da4..8ee1239 100644
--- a/default_recovery_ui.c
+++ b/default_recovery_ui.c
@@ -37,11 +37,10 @@
     if (alt && key_code == KEY_L)
         return 1;
     // allow toggling of the display if the correct key is pressed, and the display toggle is allowed or the display is currently off
-#ifdef KEY_POWER_IS_SELECT_ITEM
-    return get_allow_toggle_display() && (key_code == KEY_HOME || key_code == KEY_MENU || key_code == KEY_END);
-#else
+    if (ui_get_showing_back_button()) {
+        return get_allow_toggle_display() && (key_code == KEY_HOME || key_code == KEY_MENU || key_code == KEY_END);
+    }
     return get_allow_toggle_display() && (key_code == KEY_HOME || key_code == KEY_MENU || key_code == KEY_POWER || key_code == KEY_END);
-#endif
 }
 
 int device_reboot_now(volatile char* key_pressed, int key_code) {
@@ -59,9 +58,13 @@
             case KEY_VOLUMEUP:
                 return HIGHLIGHT_UP;
 
-#ifdef KEY_POWER_IS_SELECT_ITEM
             case KEY_POWER:
-#endif
+                if (ui_get_showing_back_button()) {
+                    return SELECT_ITEM;
+                }
+                if (!get_allow_toggle_display())
+                    return GO_BACK;
+                break;
             case KEY_ENTER:
             case BTN_MOUSE:
             case KEY_CENTER:
@@ -70,9 +73,6 @@
             case KEY_SEND:
                 return SELECT_ITEM;
             
-#ifndef KEY_POWER_IS_SELECT_ITEM
-            case KEY_POWER:
-#endif
             case KEY_END:
             case KEY_BACKSPACE:
             case KEY_BACK:
diff --git a/extendedcommands.c b/extendedcommands.c
index 9310d21..baa72c5 100644
--- a/extendedcommands.c
+++ b/extendedcommands.c
@@ -627,6 +627,7 @@
     char tmp[PATH_MAX];
     sprintf(tmp, "cp %s /tmp/%s", EXTENDEDCOMMAND_SCRIPT, basename(EXTENDEDCOMMAND_SCRIPT));
     __system(tmp);
+    __system("rm /sdcard/clockworkmod/.recoverycheckpoint");
     remove(EXTENDEDCOMMAND_SCRIPT);
     int i = 0;
     for (i = 20; i > 0; i--) {
diff --git a/recovery.c b/recovery.c
index 344ed46..34e02ab 100644
--- a/recovery.c
+++ b/recovery.c
@@ -317,12 +317,19 @@
     int selected = 0;
     int chosen_item = -1;
 
+    // Some users with dead enter keys need a way to turn on power to select.
+    // Jiggering across the wrapping menu is one "secret" way to enable it.
+    // We can't rely on /cache or /sdcard since they may not be available.
+    int wrap_count = 0;
+
     while (chosen_item < 0 && chosen_item != GO_BACK) {
         int key = ui_wait_key();
         int visible = ui_text_visible();
 
         int action = device_handle_key(key, visible);
 
+        int old_selected = selected;
+
         if (action < 0) {
             switch (action) {
                 case HIGHLIGHT_UP:
@@ -335,11 +342,11 @@
                     break;
                 case SELECT_ITEM:
                     chosen_item = selected;
-#ifdef KEY_POWER_IS_SELECT_ITEM
-                    if (chosen_item == item_count) {
-                        chosen_item = GO_BACK;
+                    if (ui_get_showing_back_button()) {
+                        if (chosen_item == item_count) {
+                            chosen_item = GO_BACK;
+                        }
                     }
-#endif
                     break;
                 case NO_ACTION:
                     break;
@@ -350,6 +357,21 @@
         } else if (!menu_only) {
             chosen_item = action;
         }
+
+        if (abs(selected - old_selected) > 1) {
+            wrap_count++;
+            if (wrap_count == 3) {
+                wrap_count = 0;
+                if (ui_get_showing_back_button()) {
+                    ui_print("Back button disabled.\n");
+                    ui_set_showing_back_button(0);
+                }
+                else {
+                    ui_print("Back button enabled.\n");
+                    ui_set_showing_back_button(1);
+                }
+            }
+        }
     }
 
     ui_end_menu();
diff --git a/roots.c b/roots.c
index d54de2d..da10ee7 100644
--- a/roots.c
+++ b/roots.c
@@ -21,6 +21,8 @@
 #include <sys/types.h>
 #include <unistd.h>
 
+#include <limits.h>
+
 #include "mtdutils/mtdutils.h"
 #include "mtdutils/mounts.h"
 #include "minzip/Zip.h"
@@ -205,6 +207,18 @@
     return internal_root_mounted(info) >= 0;
 }
 
+static int mount_internal(const char* device, const char* mount_point, const char* filesystem)
+{
+    if (strcmp(filesystem, "auto") != 0) {
+        return mount(device, mount_point, filesystem, MS_NOATIME | MS_NODEV | MS_NODIRATIME, "");
+    }
+    else {
+        char mount_cmd[PATH_MAX];
+        sprintf(mount_cmd, "mount -onoatime,nodiratime,nodev %s %s", device, mount_point);
+        return __system(mount_cmd);
+    }
+}
+
 int
 ensure_root_path_mounted(const char *root_path)
 {
@@ -245,8 +259,7 @@
     }
 
     mkdir(info->mount_point, 0755);  // in case it doesn't already exist
-    if (mount(info->device, info->mount_point, info->filesystem,
-            MS_NOATIME | MS_NODEV | MS_NODIRATIME, "")) {
+    if (mount_internal(info->device, info->mount_point, info->filesystem)) {
         if (info->device2 == NULL) {
             LOGE("Can't mount %s\n(%s)\n", info->device, strerror(errno));
             return -1;
diff --git a/roots.h b/roots.h
index 40aef87..e777093 100644
--- a/roots.h
+++ b/roots.h
@@ -33,7 +33,7 @@
 #endif
 
 #ifndef SDEXT_FILESYSTEM
-#define SDEXT_FILESYSTEM "ext4"
+#define SDEXT_FILESYSTEM "auto"
 #endif
 
 #ifndef DATA_DEVICE
diff --git a/ui.c b/ui.c
index 2e0ff83..fe56c5d 100644
--- a/ui.c
+++ b/ui.c
@@ -29,6 +29,12 @@
 #include "minui/minui.h"
 #include "recovery_ui.h"
 
+#ifdef KEY_POWER_IS_SELECT_ITEM
+static int gShowBackButton = 1;
+#else
+static int gShowBackButton = 0;
+#endif
+
 #define MAX_COLS 64
 #define MAX_ROWS 32 
 
@@ -511,10 +517,11 @@
             strncpy(menu[i] + MENU_ITEM_HEADER_LENGTH, items[i-menu_top], text_cols-1 - MENU_ITEM_HEADER_LENGTH);
             menu[i][text_cols-1] = '\0';
         }
-#ifdef KEY_POWER_IS_SELECT_ITEM
-        strcpy(menu[i], " - +++++Go Back+++++");
-        ++i;
-#endif
+
+        if (gShowBackButton) {
+            strcpy(menu[i], " - +++++Go Back+++++");
+            ++i;
+        }
 
         menu_items = i - menu_top;
         show_menu = 1;
@@ -522,11 +529,10 @@
         update_screen_locked();
     }
     pthread_mutex_unlock(&gUpdateMutex);
-#ifdef KEY_POWER_IS_SELECT_ITEM
-    return menu_items - 1;
-#else
+    if (gShowBackButton) {
+        return menu_items - 1;
+    }
     return menu_items;
-#endif
 }
 
 int ui_menu_select(int sel) {
@@ -602,3 +608,11 @@
 void ui_set_show_text(int value) {
     show_text = value;
 }
+
+void ui_set_showing_back_button(int showBackButton) {
+    gShowBackButton = showBackButton;
+}
+
+int ui_get_showing_back_button() {
+    return gShowBackButton;
+}
\ No newline at end of file
