diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index 5f7458b..0db7b75 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -92,8 +92,7 @@
  *  - loaded (first part of) image to header load address,
  *  - disabled interrupts.
  */
-typedef void boot_os_fn (cmd_tbl_t *cmdtp, int flag,
-			int argc, char *argv[],
+typedef int boot_os_fn (int flag, int argc, char *argv[],
 			bootm_headers_t *images); /* pointers to os/initrd/fdt */
 
 extern boot_os_fn do_bootm_linux;
@@ -428,36 +427,36 @@
 #ifdef CONFIG_SILENT_CONSOLE
 	    fixup_silent_linux();
 #endif
-	    do_bootm_linux (cmdtp, flag, argc, argv, &images);
+	    do_bootm_linux (0, argc, argv, &images);
 	    break;
 
 	case IH_OS_NETBSD:
-	    do_bootm_netbsd (cmdtp, flag, argc, argv, &images);
+	    do_bootm_netbsd (0, argc, argv, &images);
 	    break;
 
 #ifdef CONFIG_LYNXKDI
 	case IH_OS_LYNXOS:
-	    do_bootm_lynxkdi (cmdtp, flag, argc, argv, &images);
+	    do_bootm_lynxkdi (0, argc, argv, &images);
 	    break;
 #endif
 
 	case IH_OS_RTEMS:
-	    do_bootm_rtems (cmdtp, flag, argc, argv, &images);
+	    do_bootm_rtems (0, argc, argv, &images);
 	    break;
 
 #if defined(CONFIG_CMD_ELF)
 	case IH_OS_VXWORKS:
-	    do_bootm_vxworks (cmdtp, flag, argc, argv, &images);
+	    do_bootm_vxworks (0, argc, argv, &images);
 	    break;
 
 	case IH_OS_QNX:
-	    do_bootm_qnxelf (cmdtp, flag, argc, argv, &images);
+	    do_bootm_qnxelf (0, argc, argv, &images);
 	    break;
 #endif
 
 #ifdef CONFIG_ARTOS
 	case IH_OS_ARTOS:
-	    do_bootm_artos (cmdtp, flag, argc, argv, &images);
+	    do_bootm_artos (0, argc, argv, &images);
 	    break;
 #endif
 	}
@@ -465,10 +464,8 @@
 	show_boot_progress (-9);
 #ifdef DEBUG
 	puts ("\n## Control returned to monitor - resetting...\n");
-	do_reset (cmdtp, flag, argc, argv);
 #endif
-	if (iflag)
-		enable_interrupts();
+	do_reset (cmdtp, flag, argc, argv);
 
 	return 1;
 }
@@ -983,8 +980,7 @@
 /* OS booting routines */
 /*******************************************************************/
 
-static void do_bootm_netbsd (cmd_tbl_t *cmdtp, int flag,
-			    int argc, char *argv[],
+static int do_bootm_netbsd (int flag, int argc, char *argv[],
 			    bootm_headers_t *images)
 {
 	void (*loader)(bd_t *, image_header_t *, char *, char *);
@@ -996,7 +992,7 @@
 #if defined(CONFIG_FIT)
 	if (!images->legacy_hdr_valid) {
 		fit_unsupported_reset ("NetBSD");
-		do_reset (cmdtp, flag, argc, argv);
+		return 1;
 	}
 #endif
 	hdr = images->legacy_hdr_os;
@@ -1063,11 +1059,12 @@
 	 *   r6: boot args string
 	 */
 	(*loader) (gd->bd, os_hdr, consdev, cmdline);
+
+	return 1;
 }
 
 #ifdef CONFIG_LYNXKDI
-static void do_bootm_lynxkdi (cmd_tbl_t *cmdtp, int flag,
-			     int argc, char *argv[],
+static int do_bootm_lynxkdi (int flag, int argc, char *argv[],
 			     bootm_headers_t *images)
 {
 	image_header_t *hdr = &images->legacy_hdr_os_copy;
@@ -1075,16 +1072,17 @@
 #if defined(CONFIG_FIT)
 	if (!images->legacy_hdr_valid) {
 		fit_unsupported_reset ("Lynx");
-		do_reset (cmdtp, flag, argc, argv);
+		return 1;
 	}
 #endif
 
 	lynxkdi_boot ((image_header_t *)hdr);
+
+	return 1;
 }
 #endif /* CONFIG_LYNXKDI */
 
-static void do_bootm_rtems (cmd_tbl_t *cmdtp, int flag,
-			   int argc, char *argv[],
+static int do_bootm_rtems (int flag, int argc, char *argv[],
 			   bootm_headers_t *images)
 {
 	void (*entry_point)(bd_t *);
@@ -1092,7 +1090,7 @@
 #if defined(CONFIG_FIT)
 	if (!images->legacy_hdr_valid) {
 		fit_unsupported_reset ("RTEMS");
-		do_reset (cmdtp, flag, argc, argv);
+		return 1;
 	}
 #endif
 
@@ -1108,11 +1106,12 @@
 	 *   r3: ptr to board info data
 	 */
 	(*entry_point)(gd->bd);
+
+	return 1;
 }
 
 #if defined(CONFIG_CMD_ELF)
-static void do_bootm_vxworks (cmd_tbl_t *cmdtp, int flag,
-			     int argc, char *argv[],
+static int do_bootm_vxworks (int flag, int argc, char *argv[],
 			     bootm_headers_t *images)
 {
 	char str[80];
@@ -1120,17 +1119,18 @@
 #if defined(CONFIG_FIT)
 	if (!images->legacy_hdr_valid) {
 		fit_unsupported_reset ("VxWorks");
-		do_reset (cmdtp, flag, argc, argv);
+		return 1;
 	}
 #endif
 
 	sprintf(str, "%lx", images->ep); /* write entry-point into string */
 	setenv("loadaddr", str);
-	do_bootvx(cmdtp, 0, 0, NULL);
+	do_bootvx(NULL, 0, 0, NULL);
+
+	return 1;
 }
 
-static void do_bootm_qnxelf(cmd_tbl_t *cmdtp, int flag,
-			    int argc, char *argv[],
+static int do_bootm_qnxelf(int flag, int argc, char *argv[],
 			    bootm_headers_t *images)
 {
 	char *local_args[2];
@@ -1139,20 +1139,21 @@
 #if defined(CONFIG_FIT)
 	if (!images->legacy_hdr_valid) {
 		fit_unsupported_reset ("QNX");
-		do_reset (cmdtp, flag, argc, argv);
+		return 1;
 	}
 #endif
 
 	sprintf(str, "%lx", images->ep); /* write entry-point into string */
 	local_args[0] = argv[0];
 	local_args[1] = str;	/* and provide it via the arguments */
-	do_bootelf(cmdtp, 0, 2, local_args);
+	do_bootelf(NULL, 0, 2, local_args);
+
+	return 1;
 }
 #endif
 
 #if defined(CONFIG_ARTOS) && defined(CONFIG_PPC)
-static void do_bootm_artos (cmd_tbl_t *cmdtp, int flag,
-			   int argc, char *argv[],
+static int do_bootm_artos (int flag, int argc, char *argv[],
 			   bootm_headers_t *images)
 {
 	ulong top;
@@ -1165,7 +1166,7 @@
 #if defined(CONFIG_FIT)
 	if (!images->legacy_hdr_valid) {
 		fit_unsupported_reset ("ARTOS");
-		do_reset (cmdtp, flag, argc, argv);
+		return 1;
 	}
 #endif
 
@@ -1237,5 +1238,7 @@
 
 	entry = (void (*)(bd_t *, char *, char **, ulong))images->ep;
 	(*entry) (kbd, cmdline, fwenv, top);
+
+	return 1;
 }
 #endif
