Remove any references to mmcblk0. Add recovery.log failure hook into ROM Manager.
diff --git a/Android.mk b/Android.mk
index 78f24b5..6903494 100644
--- a/Android.mk
+++ b/Android.mk
@@ -26,7 +26,7 @@
 
 LOCAL_FORCE_STATIC_EXECUTABLE := true
 
-RECOVERY_VERSION := ClockworkMod Recovery v2.0.0.4
+RECOVERY_VERSION := ClockworkMod Recovery v2.0.0.6
 LOCAL_CFLAGS := -DRECOVERY_VERSION="$(RECOVERY_VERSION)"
 RECOVERY_API_VERSION := 2
 LOCAL_CFLAGS += -DRECOVERY_API_VERSION=$(RECOVERY_API_VERSION)
diff --git a/extendedcommands.c b/extendedcommands.c
index d4e20fd..ff6bb88 100644
--- a/extendedcommands.c
+++ b/extendedcommands.c
@@ -365,7 +365,9 @@
 
 void show_mount_usb_storage_menu()
 {
-    __system("echo /dev/block/mmcblk0 > /sys/devices/platform/usb_mass_storage/lun0/file");
+    char command[PATH_MAX];
+    sprintf(command, "echo %s > /sys/devices/platform/usb_mass_storage/lun0/file", SDCARD_DEVICE_PRIMARY);
+    __system(command);
     static char* headers[] = {  "USB Mass Storage device",
                                 "Leaving this menu unmount",
                                 "your SD card from your PC.",
@@ -417,7 +419,7 @@
     if (0 == strcmp(root, "SDEXT:"))
     {
         struct stat st;
-        if (0 != stat("/dev/block/mmcblk0p2", &st))
+        if (0 != stat(SDEXT_DEVICE, &st))
         {
             ui_print("No app2sd partition found. Skipping format of /sd-ext.\n");
             return 0;
@@ -753,6 +755,7 @@
 
     static char* list[] = { "Reboot Recovery",
                             "Wipe Battery Stats",
+                            "Report Error",
                             "Key Test",
                             NULL
     };
@@ -771,6 +774,9 @@
                 wipe_battery_stats();
                 break;
             case 2:
+                handle_failure(1);
+                break;
+            case 3:
             {
                 ui_print("Outputting key codes.\n");
                 ui_print("Go back to end debugging.\n");
@@ -791,6 +797,8 @@
 void write_fstab_root(char *root_path, FILE *file)
 {
     RootInfo *info = get_root_info_for_path(root_path);
+    if (info == NULL)
+        return;
     MtdPartition *mtd = get_root_mtd_partition(root_path);
     if (mtd != NULL)
     {
@@ -808,10 +816,23 @@
 void create_fstab()
 {
     FILE *file = fopen("/etc/fstab", "w");
+    if (file == NULL)
+        return;
     write_fstab_root("CACHE:", file);
     write_fstab_root("DATA:", file);
     write_fstab_root("SYSTEM:", file);
     write_fstab_root("SDCARD:", file);
     write_fstab_root("SDEXT:", file);
     fclose(file);
+}
+
+void handle_failure(int ret)
+{
+    if (ret == 0)
+        return;
+    if (0 != ensure_root_path_mounted("SDCARD:"))
+        return;
+    mkdir("/sdcard/clockworkmod");
+    copyfile("/tmp/recovery.log", "/sdcard/clockworkmod/recovery.log");
+    ui_print("/tmp/recovery.log was copied to /sdcard/clockworkmod/recovery.log. Please open ROM Manager to report the issue.");
 }
\ No newline at end of file
diff --git a/nandroid.c b/nandroid.c
index e9234da..7d7aad9 100644
--- a/nandroid.c
+++ b/nandroid.c
@@ -154,7 +154,7 @@
         return ret;
 
     struct stat st;
-    if (0 != stat("/dev/block/mmcblk0p2", &st))
+    if (0 == stat(SDEXT_DEVICE, &st))
     {
         ui_print("No sd-ext found. Skipping backup of sd-ext.\n");
     }
diff --git a/recovery.c b/recovery.c
index 4a513b4..cf8560d 100644
--- a/recovery.c
+++ b/recovery.c
@@ -567,10 +567,14 @@
         
         if (extendedcommand_file_exists()) {
             LOGI("Running extendedcommand...\n");
-            if (0 == run_and_remove_extendedcommand()) {
+            int ret;
+            if (0 == (ret = run_and_remove_extendedcommand())) {
                 status = INSTALL_SUCCESS;
                 ui_set_show_text(0);
             }
+            else {
+                handle_failure(ret);
+            }
         } else {
             LOGI("Skipping execution of extendedcommand, file not found...\n");
         }