diff --git a/samples/bluetooth/peripheral_hr_coded/prj.conf b/samples/bluetooth/peripheral_hr_coded/prj.conf
index 385a1ad..ab3e802 100644
--- a/samples/bluetooth/peripheral_hr_coded/prj.conf
+++ b/samples/bluetooth/peripheral_hr_coded/prj.conf
@@ -7,3 +7,6 @@ CONFIG_BT_HRS=y
 CONFIG_BT_CTLR_PHY_CODED=y
 CONFIG_BT_EXT_ADV=y
 CONFIG_BT_USER_PHY_UPDATE=y
+
+CONFIG_BT_MAX_CONN=2
+CONFIG_BT_EXT_ADV_MAX_ADV_SET=2
diff --git a/samples/bluetooth/peripheral_hr_coded/src/main.c b/samples/bluetooth/peripheral_hr_coded/src/main.c
index 503e483..a97239f 100644
--- a/samples/bluetooth/peripheral_hr_coded/src/main.c
+++ b/samples/bluetooth/peripheral_hr_coded/src/main.c
@@ -31,6 +31,10 @@ static const struct bt_data ad[] = {
 	BT_DATA_BYTES(BT_DATA_UUID16_ALL, 0x0d, 0x18, 0x0f, 0x18, 0x0a, 0x18),
 };
 
+static const struct bt_data sd[] = {
+	BT_DATA_BYTES(BT_DATA_UUID16_ALL, 0x0d, 0x18, 0x0f, 0x18, 0x0a, 0x18),
+};
+
 static void connected(struct bt_conn *conn, uint8_t conn_err)
 {
 	int err;
@@ -110,21 +114,109 @@ static void start_advertising_coded(struct k_work *item)
 	printk("Advertiser %p set started\n", adv);
 }
 
+static void adv_sent(struct bt_le_ext_adv *adv,
+			struct bt_le_ext_adv_sent_info *info)
+{
+	printk("Advertiser[%d] %p sent %d\n", bt_le_ext_adv_get_index(adv),
+	       adv, info->num_sent);
+}
+
+#define ADV_OPTIONS_COMMON  BT_LE_ADV_OPT_CONNECTABLE \
+                          | BT_LE_ADV_OPT_USE_NAME \
+                          | BT_LE_ADV_OPT_EXT_ADV \
+                          | BT_LE_ADV_OPT_USE_TX_POWER
+
+int ble_adv_init(void) {
+    int err;
+
+    struct bt_le_ext_adv *adv_set_coded_PHY = NULL;
+    struct bt_le_ext_adv *adv_set_1M_PHY = NULL;
+
+    struct bt_le_adv_param adv_param_coded = {
+        .id = BT_ID_DEFAULT,
+        .sid = 0,
+        .secondary_max_skip = 0,
+        .options = ADV_OPTIONS_COMMON | BT_LE_ADV_OPT_CODED,    // Advertise on long-range coded PHY
+        .interval_min = 0x20,   // 20 ms (32 * 0.625)
+        .interval_max = 0x152,  // 152.5 ms
+        .peer = NULL
+    };
+
+    struct bt_le_adv_param adv_param_1M = {
+        .id = BT_ID_DEFAULT,
+        .sid = 1,
+        .secondary_max_skip = 0,
+        .options = ADV_OPTIONS_COMMON | BT_LE_ADV_OPT_NO_2M,    // Advertise only on legacy 1M PHY
+        .interval_min = 0x20,   // 20 ms (32 * 0.625)
+        .interval_max = 0x152,  // 152.5 ms
+        .peer = NULL
+    };
+
+    struct bt_le_ext_adv_cb adv_cb = {.sent = adv_sent};
+
+    err = bt_le_ext_adv_create(&adv_param_coded, &adv_cb, &adv_set_coded_PHY);
+    if (err) {
+        // TODO
+        return err;
+    }
+
+    err = bt_le_ext_adv_create(&adv_param_1M, &adv_cb, &adv_set_1M_PHY);
+    if (err) {
+        // TODO
+        return err;
+    }
+
+    err = bt_le_ext_adv_set_data(adv_set_coded_PHY, ad, ARRAY_SIZE(ad), sd, ARRAY_SIZE(sd));
+    if (err) {
+        // TODO
+        return err;
+    }
+
+    err = bt_le_ext_adv_set_data(adv_set_1M_PHY, ad, ARRAY_SIZE(ad), sd, ARRAY_SIZE(sd));
+    if (err) {
+        // TODO
+        return err;
+    }
+
+    struct bt_le_ext_adv_start_param adv_start_param = {
+        .timeout = 30000,   // 5 minutes in 10 ms units
+        .num_events = 0
+    };
+
+    err = bt_le_ext_adv_start(adv_set_coded_PHY, &adv_start_param);
+    if (err) {
+        // TODO
+        return err;
+    }
+
+    err = bt_le_ext_adv_start(adv_set_1M_PHY, &adv_start_param);    // Never returns, logs: <err> mpsl_init: MPSL ASSERT: 112, 2164
+    if (err) {
+        // TODO
+        return err;
+    }
+
+    return 0;
+}
+
 static void bt_ready(void)
 {
 	int err = 0;
 
 	printk("Bluetooth initialized\n");
 
-	k_work_init(&start_advertising_worker, start_advertising_coded);
+  err = ble_adv_init();
+  printk("ble_adv_init err %d\n", err);
 
-	err = create_advertising_coded();
-	if (err) {
-		printk("Advertising failed to create (err %d)\n", err);
-		return;
-	}
+  (void)create_advertising_coded; (void)start_advertising_coded;
+	// k_work_init(&start_advertising_worker, start_advertising_coded);
 
-	k_work_submit(&start_advertising_worker);
+	// err = create_advertising_coded();
+	// if (err) {
+		// printk("Advertising failed to create (err %d)\n", err);
+		// return;
+	// }
+
+	// k_work_submit(&start_advertising_worker);
 }
 
 static void bas_notify(void)
