diff --git a/commands.c b/commands.c
index 7617a8d..24bf242 100644
--- a/commands.c
+++ b/commands.c
@@ -797,6 +797,44 @@
     return do_nandroid_restore(argv[0]);
 }
 
+static int
+cmd_sleep(const char *name, void *cookie, int argc, const char *argv[],
+            PermissionRequestList *permissions)
+{
+    UNUSED(cookie);
+    CHECK_WORDS();
+
+    if (argc != 1) {
+        LOGE("Command %s requires exactly one argument\n", name);
+        return 1;
+    }
+    
+    int seconds = atoi(argv[0]);
+    sleep(seconds);
+
+    return 0;
+}
+
+static int
+cmd_print(const char *name, void *cookie, int argc, const char *argv[],
+            PermissionRequestList *permissions)
+{
+    UNUSED(cookie);
+    CHECK_WORDS();
+    
+    char message[1024];
+    message[0] = NULL;
+    int i;
+    for (i = 0; i < argc; i++)
+    {
+        strcat(message, argv[i]);
+        strcat(message, " ");
+    }
+    strcat(message, "\n");
+    
+    ui_print(message);
+    return 0;
+}
 
 /*
  * Function definitions
@@ -1167,6 +1205,12 @@
     ret = registerCommand("restore_rom", CMD_ARGS_WORDS, cmd_restore_rom, (void *)ctx);
     if (ret < 0) return ret;
 
+    ret = registerCommand("sleep", CMD_ARGS_WORDS, cmd_sleep, (void *)ctx);
+    if (ret < 0) return ret;
+
+    ret = registerCommand("print", CMD_ARGS_WORDS, cmd_print, (void *)ctx);
+    if (ret < 0) return ret;
+
     /*
      * Functions
      */
diff --git a/extendedcommands.c b/extendedcommands.c
index e9fd1a7..05ad475 100644
--- a/extendedcommands.c
+++ b/extendedcommands.c
@@ -327,6 +327,11 @@
 
 int do_nandroid_backup(char* backup_name)
 {
+    if (ensure_root_path_mounted("SDCARD:") != 0) {
+        LOGE ("Can't mount /sdcard\n");
+        return 1;
+    }
+
     char cmd[PATH_MAX];
     if (NULL == backup_name)
         backup_name = "";
@@ -344,6 +349,11 @@
 
 int do_nandroid_restore(char* backup_path)
 {
+    if (ensure_root_path_mounted("SDCARD:") != 0) {
+        LOGE ("Can't mount /sdcard\n");
+        return 1;
+    }
+
     char* command[PATH_MAX];
     sprintf(command, "nandroid-mobile.sh restore %s", backup_path);
     ui_print("Performing restore...\n");
@@ -359,11 +369,6 @@
 
 void show_nandroid_restore_menu()
 {
-    if (ensure_root_path_mounted("SDCARD:") != 0) {
-        LOGE ("Can't mount /sdcard\n");
-        return;
-    }
-
     static char* headers[] = {  "Choose an image to restore",
                                 "",
                                 NULL 
