diff --git a/epicardium/modules/hardware.c b/epicardium/modules/hardware.c
index 055ae486b391ca0b46b6737689141e1ea175014b..a05c65f38af808b714de9158a71536c77452d482 100644
--- a/epicardium/modules/hardware.c
+++ b/epicardium/modules/hardware.c
@@ -13,6 +13,7 @@
 #include "pb.h"
 #include "pmic.h"
 #include "portexpander.h"
+#include "max86150.h"
 
 #include "gpio.h"
 #include "i2c.h"
@@ -191,6 +192,8 @@ int hardware_early_init(void)
 	 */
 	max86150_mutex_init();
 
+	max86150_shut_down();
+
 	/* Allow user space to trigger interrupts.
 	 * Used for BLE, not sure if needed. */
 	SCB->CCR |= SCB_CCR_USERSETMPEND_Msk;
diff --git a/epicardium/modules/max86150.c b/epicardium/modules/max86150.c
index fac9fbc511ca94c6f14a95cbe25097c188a013b6..0ed8367e04442a509396fa631acde48c049437c9 100644
--- a/epicardium/modules/max86150.c
+++ b/epicardium/modules/max86150.c
@@ -106,23 +106,16 @@ int epic_max86150_disable_sensor(void)
 	mutex_lock(&max86150_mutex);
 	hwlock_acquire(HWLOCK_I2C);
 
+	max86150_shut_down();
+	max86150_sensor_active = false;
+
 	struct stream_info *stream = &max86150_stream;
 	result                     = stream_deregister(SD_MAX86150, stream);
-	if (result < 0) {
-		goto out_free;
+	if (result == 0) {
+		vQueueDelete(stream->queue);
+		stream->queue = NULL;
 	}
 
-	vQueueDelete(stream->queue);
-	stream->queue = NULL;
-
-	// disable max86150 leds
-	max86150_set_led_red_amplitude(0);
-	max86150_set_led_ir_amplitude(0);
-
-	max86150_sensor_active = false;
-
-	result = 0;
-out_free:
 	hwlock_release(HWLOCK_I2C);
 	mutex_unlock(&max86150_mutex);
 	return result;