diff --git a/bootloader/main.c b/bootloader/main.c
index 102d45023078610e2b9b463163d93bfed7d807cb..be50bb16f5c855f47e68c84e9d5965271113a292 100644
--- a/bootloader/main.c
+++ b/bootloader/main.c
@@ -8,6 +8,7 @@
 #include "mxc_delay.h"
 #include "flc.h"
 #include "icc.h"
+#include "i2c.h"
 #include "crc.h"
 #include "board.h"
 #include "led.h"
@@ -15,6 +16,7 @@
 #include "crc16-ccitt.h"
 #include "pb.h"
 
+#include "pmic.h"
 
 #define GPIO_PORT_IN                PORT_1
 #define GPIO_PIN_IN                 PIN_6
@@ -174,10 +176,25 @@ static inline void boot(const void * vtable){
 #pragma GCC diagnostic pop
 };
 
+static void pmic_button(bool falling)
+{
+	if (falling) {
+		MXC_GCR->rstr0 = MXC_F_GCR_RSTR0_SYSTEM;
+	}
+}
 
 /******************************************************************************/
 int main(void)
 {
+    /* Copied from card10_init() */
+    I2C_Shutdown(MXC_I2C0_BUS0);
+    I2C_Init(MXC_I2C0_BUS0, I2C_FAST_MODE, NULL);
+
+    I2C_Shutdown(MXC_I2C1_BUS0);
+    I2C_Init(MXC_I2C1_BUS0, I2C_FAST_MODE, NULL);
+
+    pmic_init();
+    pmic_set_button_callback(pmic_button);
 
     printf("\n\nBootloader\n");
     // If the button is pressed, we go into MSC mode.