diff --git a/components/badge23/espan.c b/components/badge23/espan.c
index 21fbaa98ef41685ce29cfa1e2aa2f8cbb57b290c..2c761265846a725b42f741a811f6eb2dc857dd07 100644
--- a/components/badge23/espan.c
+++ b/components/badge23/espan.c
@@ -1,23 +1,12 @@
 #include "badge23/captouch.h"
 #include "badge23/spio.h"
-
 #include "flow3r_bsp.h"
-#include "st3m_gfx.h"
-#include "st3m_fs.h"
 #include "st3m_audio.h"
-#include "st3m_leds.h"
-
 #include "bl00mbox.h"
 
 #include "esp_log.h"
-#include "driver/i2c.h"
-#include "driver/spi_master.h"
-#include "freertos/timers.h"
-
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-#include <stdint.h>
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
 
 static const char *TAG = "espan";
 
@@ -32,15 +21,6 @@ static void io_fast_task(void * data){
     }
 }
 
-// read out stuff like jack detection, battery status, usb connection etc.
-static void io_slow_task(void * data){
-    TickType_t last_wake = xTaskGetTickCount();
-    while(1) {
-        vTaskDelayUntil(&last_wake, pdMS_TO_TICKS(100)); // 10 Hz
-        st3m_audio_update_jacksense();
-    }
-}
-
 void badge23_main(void)
 {
     ESP_LOGI(TAG, "Starting on %s...", flow3r_bsp_hw_name);
@@ -53,7 +33,6 @@ void badge23_main(void)
     captouch_force_calibration();
 
     xTaskCreatePinnedToCore(&io_fast_task, "iofast", 4096, NULL, configMAX_PRIORITIES-1, NULL, 0);
-    xTaskCreatePinnedToCore(&io_slow_task, "ioslow", 4096, NULL, configMAX_PRIORITIES-2, NULL, 0);
 
     hw_init_done = 1;
 }
diff --git a/components/st3m/st3m_audio.c b/components/st3m/st3m_audio.c
index 8818a70ebdc251afbd575cffd596dfad8e06680e..3abb26f9ce74326ceb584ce7c250b1b1866d7b97 100644
--- a/components/st3m/st3m_audio.c
+++ b/components/st3m/st3m_audio.c
@@ -15,7 +15,8 @@ static const char *TAG = "st3m-audio";
 
 #define TIMEOUT_MS 1000
 
-static void _audio_player_task(void* arg);
+static void _audio_player_task(void *data);
+static void _jacksense_update_task(void *data);
 static bool _headphones_connected(void);
 
 // used for exp(vol_dB * NAT_LOG_DB)
@@ -230,7 +231,7 @@ static bool _headphones_connected(void) {
     return state.jacksense.headphones || state.headphones_detection_override;
 }
 
-void st3m_audio_update_jacksense() {
+static void _update_jacksense() {
     flow3r_bsp_audio_jacksense_state_t st;
     flow3r_bsp_audio_read_jacksense(&st);
 
@@ -259,16 +260,18 @@ void st3m_audio_init(void) {
     flow3r_bsp_audio_init();
 
     st3m_audio_input_thru_set_volume_dB(-20);
-    st3m_audio_update_jacksense();
+    _update_jacksense();
     _output_apply(&state.speaker);
     _output_apply(&state.headphones);
 
-    TaskHandle_t handle;
-    xTaskCreate(&_audio_player_task, "audio", 3000, NULL, configMAX_PRIORITIES - 1, &handle);
+    xTaskCreate(&_audio_player_task, "audio", 3000, NULL, configMAX_PRIORITIES - 1, NULL);
+    xTaskCreate(&_jacksense_update_task, "jacksense", 2048, NULL, configMAX_PRIORITIES - 2, NULL);
     ESP_LOGI(TAG, "Audio task started");
 }
 
-static void _audio_player_task(void *arg) {
+static void _audio_player_task(void *data) {
+    (void)data;
+
     int16_t buffer_tx[FLOW3R_BSP_AUDIO_DMA_BUFFER_SIZE * 2];
     int16_t buffer_rx[FLOW3R_BSP_AUDIO_DMA_BUFFER_SIZE * 2];
     memset(buffer_tx, 0, sizeof(buffer_tx));
@@ -323,6 +326,17 @@ static void _audio_player_task(void *arg) {
     }
 }
 
+static void _jacksense_update_task(void * data) {
+    (void)data;
+
+    TickType_t last_wake = xTaskGetTickCount();
+    while(1) {
+        vTaskDelayUntil(&last_wake, pdMS_TO_TICKS(100)); // 10 Hz
+        _update_jacksense();
+    }
+}
+
+
 // BSP wrappers that don't need locking.
 
 void st3m_audio_headphones_line_in_set_hardware_thru(bool enable) {
diff --git a/components/st3m/st3m_audio.h b/components/st3m/st3m_audio.h
index b3216391c589f7fa041b445e283a45c2d5cb78c6..76fdcb5e37f669e60484061b133f829fab74c901 100644
--- a/components/st3m/st3m_audio.h
+++ b/components/st3m/st3m_audio.h
@@ -32,15 +32,6 @@ void st3m_audio_player_function_dummy(int16_t * rx, int16_t * tx, uint16_t len);
  */
 void st3m_audio_init(void);
 
-/* Polls hardware to check if headphones, headset or line in are plugged
- * into the 3.5mm jacks. If it detects a plug in the headphone jack, speakers
- * are automatically muted. There is no override for this at this moment.
- * 
- * Should be called periodically (100ms ish?) by a low priority task. Requires
- * the I2C lock.
- */
-void st3m_audio_update_jacksense(void);
-
 /* Returns true if headphones with or without microphone were connected to the
  * headphone jack at the last call of st3m_audio_update_jacksense.
  */