the beginnings of adding a format option,
diff --git a/default_recovery_ui.c b/default_recovery_ui.c
index 0b4bd13..c6955c0 100644
--- a/default_recovery_ui.c
+++ b/default_recovery_ui.c
@@ -27,9 +27,9 @@
                        "wipe data/factory reset",
                        "wipe cache partition",
                        "install zip from sdcard",
-                       "backup",
-                       "restore",
-                       "mount partitions",
+                       "nandroid",
+                       "partitions menu",
+                       "advanced",
                        NULL };
 
 int device_toggle_display(volatile char* key_pressed, int key_code) {
diff --git a/extendedcommands.c b/extendedcommands.c
index 4ea3787..50f4306 100644
--- a/extendedcommands.c
+++ b/extendedcommands.c
@@ -373,8 +373,10 @@
     __system("echo 0 > /sys/devices/platform/usb_mass_storage/lun0/enable");
 }
 
+#define MOUNTABLE_COUNT 4
+#define MTD_COUNT 3
 
-void show_mount_menu()
+void show_partition_menu()
 {
     static char* headers[] = {  "Mount and unmount partitions",
                                 "",
@@ -382,47 +384,56 @@
     };
 
     typedef char* string;
-    string mounts[4][3] = { 
-        { "mount /system", "unmount /system", "SYSTEM:" },
-        { "mount /data", "unmount /data", "DATA:" },
-        { "mount /cache", "unmount /cache", "CACHE:" },
-        { "mount /sdcard", "unmount /sdcard", "SDCARD:" }
+    string mounts[MOUNTABLE_COUNT][4] = { 
+        { "mount /system", "unmount /system", "format SYSTEM:", "SYSTEM:" },
+        { "mount /data", "unmount /data", "format DATA:", "DATA:" },
+        { "mount /cache", "unmount /cache", "format CACHE:", "CACHE:" },
+        { "mount /sdcard", "unmount /sdcard", NULL, "SDCARD:" }
         };
         
     for (;;)
     {
-        int ismounted[4];
+        int ismounted[MOUNTABLE_COUNT];
         int i;
-        static string options[6];
-        for (i = 0; i < 4; i++)
+        static string options[MOUNTABLE_COUNT + MTD_COUNT + 1 + 1]; // mountables, format mtds, usb storage, null
+        for (i = 0; i < MOUNTABLE_COUNT; i++)
         {
-            ismounted[i] = is_root_path_mounted(mounts[i][2]);
+            ismounted[i] = is_root_path_mounted(mounts[i][3]);
             options[i] = ismounted[i] ? mounts[i][1] : mounts[i][0];
         }
+        
+        for (i = 0; i < MTD_COUNT; i++)
+        {
+            options[MOUNTABLE_COUNT + i] = mounts[i][2];
+        }
     
-        options[4] = "mount USB storage";
-        options[5] = NULL;
+        options[MOUNTABLE_COUNT + MTD_COUNT] = "mount USB storage";
+        options[MOUNTABLE_COUNT + MTD_COUNT + 1] = NULL;
         
         int chosen_item = get_menu_selection(headers, options, 0);
         if (chosen_item == GO_BACK)
             break;
-        if (chosen_item == 4)
+        if (chosen_item == MOUNTABLE_COUNT + MTD_COUNT)
         {
             show_mount_usb_storage_menu();
         }
-        else if (chosen_item < 4)
+        else if (chosen_item < MOUNTABLE_COUNT)
         {
             if (ismounted[chosen_item])
             {
-                if (0 != ensure_root_path_unmounted(mounts[chosen_item][2]))
-                    ui_print("Error unmounting %s!\n", mounts[chosen_item][2]);
+                if (0 != ensure_root_path_unmounted(mounts[chosen_item][3]))
+                    ui_print("Error unmounting %s!\n", mounts[chosen_item][3]);
             }
             else
             {
-                if (0 != ensure_root_path_mounted(mounts[chosen_item][2]))
-                    ui_print("Error mounting %s!\n", mounts[chosen_item][2]);
+                if (0 != ensure_root_path_mounted(mounts[chosen_item][3]))
+                    ui_print("Error mounting %s!\n", mounts[chosen_item][3]);
             }
         }
+        else if (chosen_item < MOUNTABLE_COUNT + MTD_COUNT)
+        {
+            chosen_item = chosen_item - MOUNTABLE_COUNT;
+        }
     }
 }
 
@@ -515,3 +526,33 @@
     }
     return run_script(argv[1], 0);
 }
+
+void show_nandroid_menu()
+{
+    static char* headers[] = {  "Nandroid",
+                                "",
+                                NULL 
+    };
+
+    static char* list[] = { "Backup", 
+                            "Restore",
+                            NULL
+    };
+
+    int chosen_item = get_menu_selection(headers, list, 0);
+    switch (chosen_item)
+    {
+        case 0:
+            {
+                struct timeval tp;
+                gettimeofday(&tp, NULL);
+                char backup_path[PATH_MAX];
+                sprintf(backup_path, "/sdcard/clockworkmod/backup/%d", tp.tv_sec);
+                nandroid_backup(backup_path);
+            }
+            break;
+        case 1:
+            show_nandroid_restore_menu();
+            break;
+    }
+}
\ No newline at end of file
diff --git a/extendedcommands.h b/extendedcommands.h
index d525e65..9de8180 100644
--- a/extendedcommands.h
+++ b/extendedcommands.h
@@ -20,7 +20,10 @@
 show_nandroid_restore_menu();
 
 void
-show_mount_menu();
+show_nandroid_menu();
+
+void
+show_partition_menu();
 
 void
 show_choose_zip_menu();
diff --git a/recovery.c b/recovery.c
index cbc2914..85c4dc1 100644
--- a/recovery.c
+++ b/recovery.c
@@ -445,20 +445,11 @@
             case ITEM_INSTALL_ZIP:
                 show_install_update_menu();
                 break;
-            case ITEM_BACKUP:
-                {
-                    struct timeval tp;
-                    gettimeofday(&tp, NULL);
-                    char backup_path[PATH_MAX];
-                    sprintf(backup_path, "/sdcard/clockworkmod/backup/%d", tp.tv_sec);
-                    nandroid_backup(backup_path);
-                }
+            case ITEM_NANDROID:
+                show_nandroid_menu();
                 break;
-            case ITEM_RESTORE:
-                show_nandroid_restore_menu();
-                break;
-            case ITEM_MOUNT:
-                show_mount_menu();
+            case ITEM_PARTITION:
+                show_partition_menu();
                 break;
                 /*
             case ITEM_MOUNT_SDCARD:
diff --git a/recovery_ui.h b/recovery_ui.h
index bb22445..55fe40f 100644
--- a/recovery_ui.h
+++ b/recovery_ui.h
@@ -68,9 +68,8 @@
 #define ITEM_WIPE_DATA       2
 #define ITEM_WIPE_CACHE      3
 #define ITEM_INSTALL_ZIP     4
-#define ITEM_BACKUP          5
-#define ITEM_RESTORE         6
-#define ITEM_MOUNT           7
+#define ITEM_NANDROID        5
+#define ITEM_PARTITION       6
 
 // Header text to display above the main menu.
 extern char* MENU_HEADERS[];