diff --git a/src/drivers/boards/auav-x21/init.c b/src/drivers/boards/auav-x21/init.c
index 2d7822cc5fde94b6069a11583a444fa19b282b61..0f25f1f9cdcba85bebe4e02797c76650a71ffcdc 100644
--- a/src/drivers/boards/auav-x21/init.c
+++ b/src/drivers/boards/auav-x21/init.c
@@ -76,8 +76,6 @@
 #include <perf/perf_counter.h>
 #include <systemlib/err.h>
 
-#include <systemlib/hardfault_log.h>
-
 #include <parameters/param.h>
 
 /****************************************************************************
@@ -304,151 +302,21 @@ __EXPORT int board_app_initialize(uintptr_t arg)
 		       (hrt_callout)stm32_serial_dma_poll,
 		       NULL);
 
-#if defined(CONFIG_STM32_BBSRAM)
-
-	if (hardfault_check_status) {
-		/* NB. the use of the console requires the hrt running
-		 * to poll the DMA
-		 */
-
-		/* Using Battery Backed Up SRAM */
-
-		int filesizes[CONFIG_STM32_BBSRAM_FILES + 1] = BSRAM_FILE_SIZES;
-
-		stm32_bbsraminitialize(BBSRAM_PATH, filesizes);
-
-#if defined(CONFIG_STM32_SAVE_CRASHDUMP)
-
-		/* Panic Logging in Battery Backed Up Files */
-
-		/*
-		 * In an ideal world, if a fault happens in flight the
-		 * system save it to BBSRAM will then reboot. Upon
-		 * rebooting, the system will log the fault to disk, recover
-		 * the flight state and continue to fly.  But if there is
-		 * a fault on the bench or in the air that prohibit the recovery
-		 * or committing the log to disk, the things are too broken to
-		 * fly. So the question is:
-		 *
-		 * Did we have a hard fault and not make it far enough
-		 * through the boot sequence to commit the fault data to
-		 * the SD card?
-		 */
-
-		/* Do we have an uncommitted hard fault in BBSRAM?
-		 *  - this will be reset after a successful commit to SD
-		 */
-		int hadCrash = hardfault_check_status("boot");
-
-		if (hadCrash == OK) {
-
-			message("[boot] There is a hard fault logged. Hold down the SPACE BAR," \
-				" while booting to halt the system!\n");
-
-			/* Yes. So add one to the boot count - this will be reset after a successful
-			 * commit to SD
-			 */
-
-			int reboots = hardfault_increment_reboot("boot", false);
-
-			/* Also end the misery for a user that holds for a key down on the console */
-
-			int bytesWaiting;
-			ioctl(fileno(stdin), FIONREAD, (unsigned long)((uintptr_t) &bytesWaiting));
-
-			if (reboots > 2 || bytesWaiting != 0) {
-
-				/* Since we can not commit the fault dump to disk. Display it
-				 * to the console.
-				 */
-
-				hardfault_write("boot", fileno(stdout), HARDFAULT_DISPLAY_FORMAT, false);
-
-				message("[boot] There were %d reboots with Hard fault that were not committed to disk - System halted %s\n",
-					reboots,
-					(bytesWaiting == 0 ? "" : " Due to Key Press\n"));
-
-
-				/* For those of you with a debugger set a break point on up_assert and
-				 * then set dbgContinue = 1 and go.
-				 */
-
-				/* Clear any key press that got us here */
-
-				static volatile bool dbgContinue = false;
-				int c = '>';
-
-				while (!dbgContinue) {
-
-					switch (c) {
-
-					case EOF:
-
-
-					case '\n':
-					case '\r':
-					case ' ':
-						continue;
-
-					default:
-
-						putchar(c);
-						putchar('\n');
-
-						switch (c) {
-
-						case 'D':
-						case 'd':
-							hardfault_write("boot", fileno(stdout), HARDFAULT_DISPLAY_FORMAT, false);
-							break;
-
-						case 'C':
-						case 'c':
-							hardfault_rearm("boot");
-							hardfault_increment_reboot("boot", true);
-							break;
-
-						case 'B':
-						case 'b':
-							dbgContinue = true;
-							break;
-
-						default:
-							break;
-						} // Inner Switch
-
-						message("\nEnter B - Continue booting\n" \
-							"Enter C - Clear the fault log\n" \
-							"Enter D - Dump fault log\n\n?>");
-						fflush(stdout);
-
-						if (!dbgContinue) {
-							c = getchar();
-						}
-
-						break;
-
-					} // outer switch
-				} // for
-
-			} // inner if
-		} // outer if
-	} // hardfault_check_status
-
-#endif // CONFIG_STM32_SAVE_CRASHDUMP
-#endif // CONFIG_STM32_BBSRAM
-
 	/* initial LED state */
 	drv_led_start();
 	led_off(LED_AMBER);
 
+	if (board_hardfault_init(2, true) != 0) {
+		led_on(LED_AMBER);
+	}
+
 	/* Configure SPI-based devices */
 
 	spi1 = px4_spibus_initialize(1);
 
 	if (!spi1) {
 		message("[boot] FAILED to initialize SPI port 1\n");
-		board_autoled_on(LED_AMBER);
+		led_on(LED_AMBER);
 		return -ENODEV;
 	}
 
@@ -467,7 +335,7 @@ __EXPORT int board_app_initialize(uintptr_t arg)
 
 	if (!spi2) {
 		message("[boot] FAILED to initialize SPI port 2\n");
-		board_autoled_on(LED_AMBER);
+		led_on(LED_AMBER);
 		return -ENODEV;
 	}
 
@@ -489,6 +357,7 @@ __EXPORT int board_app_initialize(uintptr_t arg)
 	if (!sdio) {
 		message("[boot] Failed to initialize SDIO slot %d\n",
 			CONFIG_NSH_MMCSDSLOTNO);
+		led_on(LED_AMBER);
 		return -ENODEV;
 	}
 
@@ -497,6 +366,7 @@ __EXPORT int board_app_initialize(uintptr_t arg)
 
 	if (ret != OK) {
 		message("[boot] Failed to bind SDIO to the MMC/SD driver: %d\n", ret);
+		led_on(LED_AMBER);
 		return ret;
 	}