diff --git a/epicardium/ble/ble_main.c b/epicardium/ble/ble_main.c
index 7344683b6f2cda48d3ef80e7794bff63208d6a58..009db4b843e0628ae0e1a6474bcafd2746fb2fd9 100644
--- a/epicardium/ble/ble_main.c
+++ b/epicardium/ble/ble_main.c
@@ -600,7 +600,11 @@ static void bleProcMsg(bleMsg_t *pMsg)
       break;
 
     case DM_ADV_START_IND:
-      LOG_INFO("ble", "Advertisement started");
+      LOG_INFO("ble", "Advertisement started %u %u", advertising_mode, advertising_mode_target);
+      if(advertising_mode != advertising_mode_target) {
+        AppAdvStop();
+      }
+
       break;
 
     case DM_ADV_STOP_IND:
@@ -648,6 +652,12 @@ static void bleProcMsg(bleMsg_t *pMsg)
                    pMsg->dm.connClose.reason);
           break;
       }
+      /* Stack overwrites advertising mode after connection close.
+       * Force our desired mode.
+       */
+      advertising_mode = APP_MODE_NONE;
+      AppAdvStop();
+
       bleClose(pMsg);
       break;