diff --git a/components/st3m/st3m_io.c b/components/st3m/st3m_io.c
index c4265bbf561371c5b2c0a2afed427bbe367d0318..a02abc3b6611942fd3c5f2f7b4cd07e3ca5840ad 100644
--- a/components/st3m/st3m_io.c
+++ b/components/st3m/st3m_io.c
@@ -75,6 +75,8 @@ static int8_t st3m_io_badge_link_set(uint8_t mask, bool state) {
     bool left_ring = (mask & BADGE_LINK_PIN_MASK_LINE_OUT_RING) > 0;
     bool right_tip = (mask & BADGE_LINK_PIN_MASK_LINE_IN_TIP) > 0;
     bool right_ring = (mask & BADGE_LINK_PIN_MASK_LINE_IN_RING) > 0;
+
+    // Apply request to badge_link_enabled.
     if(state) {
         if (left_tip || left_ring) {
             if(!st3m_audio_headphones_are_connected()) {
@@ -94,6 +96,13 @@ static int8_t st3m_io_badge_link_set(uint8_t mask, bool state) {
         if (!right_ring) badge_link_enabled &= ~BADGE_LINK_PIN_MASK_LINE_IN_RING;
     }
 
+    // Convert badge_link_enabled back to {left,right}_{tip,ring}, but this
+    // time as requested state.
+    left_tip = (badge_link_enabled & BADGE_LINK_PIN_MASK_LINE_OUT_TIP) > 0;
+    left_ring = (badge_link_enabled & BADGE_LINK_PIN_MASK_LINE_OUT_RING) > 0;
+    right_tip = (badge_link_enabled & BADGE_LINK_PIN_MASK_LINE_IN_TIP) > 0;
+    right_ring = (badge_link_enabled & BADGE_LINK_PIN_MASK_LINE_IN_RING) > 0;
+
     flow3r_bsp_spio_badgelink_left_enable(left_tip, left_ring);
     flow3r_bsp_spio_badgelink_right_enable(right_tip, right_ring);
     return st3m_io_badge_link_get_active(mask);
@@ -134,4 +143,4 @@ void st3m_io_init(void) {
 
     xTaskCreate(&_task, "io", 4096, NULL, configMAX_PRIORITIES-1, NULL);
 	ESP_LOGI(TAG, "IO task started");
-}
\ No newline at end of file
+}