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[];
