diff --git a/btif/src/btif_ble_advertiser.cc b/btif/src/btif_ble_advertiser.cc
index 1533bad..395bc1d 100644
--- a/btif/src/btif_ble_advertiser.cc
+++ b/btif/src/btif_ble_advertiser.cc
@@ -59,6 +59,29 @@
   return OwnedArrayWrapper<T>(o);
 }
 
+void parseParams(tBTM_BLE_ADV_PARAMS* p_params,
+                 const AdvertiseParameters& params) {
+  p_params->advertising_event_properties = params.advertising_event_properties;
+  p_params->adv_int_min = params.min_interval;
+  p_params->adv_int_max = params.max_interval;
+  p_params->channel_map = params.channel_map;
+  p_params->adv_filter_policy = 0;
+  p_params->tx_power = params.tx_power;
+  p_params->primary_advertising_phy = params.primary_advertising_phy;
+  p_params->secondary_advertising_phy = params.secondary_advertising_phy;
+  p_params->scan_request_notification_enable =
+      params.scan_request_notification_enable;
+}
+
+void parsePeriodicParams(tBLE_PERIODIC_ADV_PARAMS* p_periodic_params,
+                         PeriodicAdvertisingParameters periodic_params) {
+  p_periodic_params->enable = periodic_params.enable;
+  p_periodic_params->min_interval = periodic_params.min_interval;
+  p_periodic_params->max_interval = periodic_params.max_interval;
+  p_periodic_params->periodic_advertising_properties =
+      periodic_params.periodic_advertising_properties;
+}
+
 class BleAdvertiserInterfaceImpl : public BleAdvertiserInterface {
   ~BleAdvertiserInterfaceImpl(){};
 
@@ -84,36 +107,18 @@
              base::Unretained(BleAdvertisingManager::Get()), advertiser_id));
   }
 
-  void SetParametersCb(StatusCallback cb, uint8_t status, int8_t tx_power) {
-    LOG(INFO) << __func__ << " status: " << +status;
-    do_in_jni_thread(Bind(cb, status));
-  }
+  void SetParameters(uint8_t advertiser_id, AdvertiseParameters params,
+                     ParametersCallback cb) override {
+    VLOG(1) << __func__;
 
-  void SetParameters(uint8_t advertiser_id,
-                     uint16_t advertising_event_properties,
-                     uint32_t min_interval, uint32_t max_interval, int chnl_map,
-                     int tx_power, uint8_t primary_advertising_phy,
-                     uint8_t secondary_advertising_phy,
-                     uint8_t scan_request_notification_enable,
-                     StatusCallback cb) {
-    tBTM_BLE_ADV_PARAMS* params = new tBTM_BLE_ADV_PARAMS;
+    tBTM_BLE_ADV_PARAMS* p_params = new tBTM_BLE_ADV_PARAMS;
+    parseParams(p_params, params);
 
-    params->advertising_event_properties = advertising_event_properties;
-    params->adv_int_min = min_interval;
-    params->adv_int_max = max_interval;
-    params->channel_map = chnl_map;
-    params->adv_filter_policy = 0;
-    params->tx_power = tx_power;
-    params->primary_advertising_phy = primary_advertising_phy;
-    params->secondary_advertising_phy = secondary_advertising_phy;
-    params->scan_request_notification_enable = scan_request_notification_enable;
-
-    do_in_bta_thread(FROM_HERE,
-                     Bind(&BleAdvertisingManager::SetParameters,
-                          base::Unretained(BleAdvertisingManager::Get()),
-                          advertiser_id, base::Owned(params),
-                          Bind(&BleAdvertiserInterfaceImpl::SetParametersCb,
-                               base::Unretained(this), cb)));
+    do_in_bta_thread(
+        FROM_HERE,
+        Bind(&BleAdvertisingManager::SetParameters,
+             base::Unretained(BleAdvertisingManager::Get()), advertiser_id,
+             base::Owned(p_params), jni_thread_wrapper(FROM_HERE, cb)));
   }
 
   void SetData(int advertiser_id, bool set_scan_rsp, vector<uint8_t> data,
@@ -146,17 +151,7 @@
     VLOG(1) << __func__;
 
     tBTM_BLE_ADV_PARAMS* p_params = new tBTM_BLE_ADV_PARAMS;
-    p_params->advertising_event_properties =
-        params.advertising_event_properties;
-    p_params->adv_int_min = params.min_interval;
-    p_params->adv_int_max = params.max_interval;
-    p_params->channel_map = params.channel_map;
-    p_params->adv_filter_policy = 0;
-    p_params->tx_power = params.tx_power;
-    p_params->primary_advertising_phy = params.primary_advertising_phy;
-    p_params->secondary_advertising_phy = params.secondary_advertising_phy;
-    p_params->scan_request_notification_enable =
-        params.scan_request_notification_enable;
+    parseParams(p_params, params);
 
     do_in_bta_thread(
         FROM_HERE,
@@ -167,33 +162,20 @@
              timeout_s, jni_thread_wrapper(FROM_HERE, timeout_cb)));
   }
 
-  void StartAdvertisingSet(IdStatusCallback cb, AdvertiseParameters params,
+  void StartAdvertisingSet(IdTxPowerStatusCallback cb,
+                           AdvertiseParameters params,
                            std::vector<uint8_t> advertise_data,
                            std::vector<uint8_t> scan_response_data,
                            PeriodicAdvertisingParameters periodic_params,
                            std::vector<uint8_t> periodic_data, int timeout_s,
-                           IdStatusCallback timeout_cb) {
+                           IdStatusCallback timeout_cb) override {
     VLOG(1) << __func__;
 
     tBTM_BLE_ADV_PARAMS* p_params = new tBTM_BLE_ADV_PARAMS;
-    p_params->advertising_event_properties =
-        params.advertising_event_properties;
-    p_params->adv_int_min = params.min_interval;
-    p_params->adv_int_max = params.max_interval;
-    p_params->channel_map = params.channel_map;
-    p_params->adv_filter_policy = 0;
-    p_params->tx_power = params.tx_power;
-    p_params->primary_advertising_phy = params.primary_advertising_phy;
-    p_params->secondary_advertising_phy = params.secondary_advertising_phy;
-    p_params->scan_request_notification_enable =
-        params.scan_request_notification_enable;
+    parseParams(p_params, params);
 
     tBLE_PERIODIC_ADV_PARAMS* p_periodic_params = new tBLE_PERIODIC_ADV_PARAMS;
-    p_periodic_params->enable = periodic_params.enable;
-    p_periodic_params->min_interval = periodic_params.min_interval;
-    p_periodic_params->max_interval = periodic_params.max_interval;
-    p_periodic_params->periodic_advertising_properties =
-        periodic_params.periodic_advertising_properties;
+    parsePeriodicParams(p_periodic_params, periodic_params);
 
     do_in_bta_thread(
         FROM_HERE,
@@ -203,7 +185,46 @@
              std::move(advertise_data), std::move(scan_response_data),
              base::Owned(p_periodic_params), std::move(periodic_data),
              timeout_s, jni_thread_wrapper(FROM_HERE, timeout_cb)));
-  };
+  }
+
+  void SetPeriodicAdvertisingParameters(
+      int advertiser_id, PeriodicAdvertisingParameters periodic_params,
+      StatusCallback cb) override {
+    VLOG(1) << __func__ << " advertiser_id: " << +advertiser_id;
+
+    tBLE_PERIODIC_ADV_PARAMS* p_periodic_params = new tBLE_PERIODIC_ADV_PARAMS;
+    parsePeriodicParams(p_periodic_params, periodic_params);
+
+    do_in_bta_thread(
+        FROM_HERE,
+        Bind(&BleAdvertisingManager::SetPeriodicAdvertisingParameters,
+             base::Unretained(BleAdvertisingManager::Get()), advertiser_id,
+             base::Owned(p_periodic_params),
+             jni_thread_wrapper(FROM_HERE, cb)));
+  }
+
+  void SetPeriodicAdvertisingData(int advertiser_id, std::vector<uint8_t> data,
+                                  StatusCallback cb) override {
+    VLOG(1) << __func__ << " advertiser_id: " << +advertiser_id;
+
+    do_in_bta_thread(
+        FROM_HERE,
+        Bind(&BleAdvertisingManager::SetPeriodicAdvertisingData,
+             base::Unretained(BleAdvertisingManager::Get()), advertiser_id,
+             std::move(data), jni_thread_wrapper(FROM_HERE, cb)));
+  }
+
+  void SetPeriodicAdvertisingEnable(int advertiser_id, bool enable,
+                                    StatusCallback cb) override {
+    VLOG(1) << __func__ << " advertiser_id: " << +advertiser_id
+            << " ,enable: " << enable;
+
+    do_in_bta_thread(
+        FROM_HERE,
+        Bind(&BleAdvertisingManager::SetPeriodicAdvertisingEnable,
+             base::Unretained(BleAdvertisingManager::Get()), advertiser_id,
+             enable, jni_thread_wrapper(FROM_HERE, cb)));
+  }
 };
 
 BleAdvertiserInterface* btLeAdvertiserInstance = nullptr;
diff --git a/service/test/low_energy_advertiser_unittest.cc b/service/test/low_energy_advertiser_unittest.cc
index eb2211c..d7b0632 100644
--- a/service/test/low_energy_advertiser_unittest.cc
+++ b/service/test/low_energy_advertiser_unittest.cc
@@ -47,31 +47,27 @@
 
   MOCK_METHOD1(RegisterAdvertiser, void(IdStatusCallback));
   MOCK_METHOD1(Unregister, void(uint8_t));
-  MOCK_METHOD10(SetParameters,
-                void(uint8_t advertiser_id,
-                     uint16_t advertising_event_properties,
-                     uint32_t min_interval, uint32_t max_interval, int chnl_map,
-                     int tx_power, uint8_t primary_advertising_phy,
-                     uint8_t secondary_advertising_phy,
-                     uint8_t scan_request_notification_enable,
-                     StatusCallback cb));
-  MOCK_METHOD4(SetData, void(int advertiser_id, bool set_scan_rsp,
-                             std::vector<uint8_t> data, StatusCallback cb));
+  MOCK_METHOD3(SetParameters,
+               void(uint8_t, AdvertiseParameters, ParametersCallback));
+  MOCK_METHOD4(SetData, void(int, bool, std::vector<uint8_t>, StatusCallback));
   MOCK_METHOD5(Enable,
-               void(uint8_t advertiser_id, bool enable, StatusCallback cb,
-                    int timeout_s, StatusCallback timeout_cb));
+               void(uint8_t, bool, StatusCallback, int, StatusCallback));
   MOCK_METHOD7(StartAdvertising,
                void(uint8_t advertiser_id, StatusCallback cb,
                     AdvertiseParameters, std::vector<uint8_t>,
                     std::vector<uint8_t>, int, StatusCallback));
-
   MOCK_METHOD8(StartAdvertisingSet,
-               void(IdStatusCallback cb, AdvertiseParameters params,
+               void(IdTxPowerStatusCallback cb, AdvertiseParameters params,
                     std::vector<uint8_t> advertise_data,
                     std::vector<uint8_t> scan_response_data,
                     PeriodicAdvertisingParameters periodic_params,
                     std::vector<uint8_t> periodic_data, int timeout_s,
                     IdStatusCallback timeout_cb));
+  MOCK_METHOD3(SetPeriodicAdvertisingParameters,
+               void(int, PeriodicAdvertisingParameters, StatusCallback));
+  MOCK_METHOD3(SetPeriodicAdvertisingData,
+               void(int, std::vector<uint8_t>, StatusCallback));
+  MOCK_METHOD3(SetPeriodicAdvertisingEnable, void(int, bool, StatusCallback));
 
  private:
   DISALLOW_COPY_AND_ASSIGN(MockAdvertiserHandler);
diff --git a/stack/btm/btm_ble_multi_adv.cc b/stack/btm/btm_ble_multi_adv.cc
index b4ad65f..f659025 100644
--- a/stack/btm/btm_ble_multi_adv.cc
+++ b/stack/btm/btm_ble_multi_adv.cc
@@ -34,6 +34,8 @@
 using base::Bind;
 using RegisterCb =
     base::Callback<void(uint8_t /* inst_id */, uint8_t /* status */)>;
+using IdTxPowerStatusCb = base::Callback<void(
+    uint8_t /* inst_id */, int8_t /* tx_power */, uint8_t /* status */)>;
 extern void btm_gen_resolvable_private_addr(
     base::Callback<void(uint8_t[8])> cb);
 extern fixed_queue_t* btu_general_alarm_queue;
@@ -113,7 +115,7 @@
 struct CreatorParams {
   uint8_t inst_id;
   BleAdvertisingManagerImpl* self;
-  RegisterCb cb;
+  IdTxPowerStatusCb cb;
   tBTM_BLE_ADV_PARAMS params;
   std::vector<uint8_t> advertise_data;
   std::vector<uint8_t> scan_response_data;
@@ -314,7 +316,7 @@
     // clang-format on
   }
 
-  void StartAdvertisingSet(RegisterCb cb, tBTM_BLE_ADV_PARAMS* params,
+  void StartAdvertisingSet(IdTxPowerStatusCb cb, tBTM_BLE_ADV_PARAMS* params,
                            std::vector<uint8_t> advertise_data,
                            std::vector<uint8_t> scan_response_data,
                            tBLE_PERIODIC_ADV_PARAMS* periodic_params,
@@ -341,7 +343,7 @@
       [](c_type c, uint8_t advertiser_id, uint8_t status) {
         if (status != 0) {
           LOG(ERROR) << "registering advertiser failed, status: " << +status;
-          c->cb.Run(0, status);
+          c->cb.Run(0, 0, status);
           return;
         }
 
@@ -352,7 +354,7 @@
             if (status != 0) {
               c->self->Unregister(c->inst_id);
               LOG(ERROR) << "setting parameters failed, status: " << +status;
-              c->cb.Run(0, status);
+              c->cb.Run(0, 0, status);
               return;
             }
 
@@ -364,7 +366,7 @@
                 if (status != 0) {
                   c->self->Unregister(c->inst_id);
                   LOG(ERROR) << "setting random address failed, status: " << +status;
-                  c->cb.Run(0, status);
+                  c->cb.Run(0, 0, status);
                   return;
                 }
 
@@ -373,7 +375,7 @@
                     if (status != 0) {
                       c->self->Unregister(c->inst_id);
                       LOG(ERROR) << "setting advertise data failed, status: " << +status;
-                      c->cb.Run(0, status);
+                      c->cb.Run(0, 0, status);
                       return;
                     }
 
@@ -382,7 +384,7 @@
                         if (status != 0) {
                           c->self->Unregister(c->inst_id);
                           LOG(ERROR) << "setting scan response data failed, status: " << +status;
-                          c->cb.Run(0, status);
+                          c->cb.Run(0, 0, status);
                           return;
                         }
 
@@ -408,7 +410,7 @@
         if (status != 0) {
           c->self->Unregister(c->inst_id);
           LOG(ERROR) << "setting periodic parameters failed, status: " << +status;
-          c->cb.Run(0, status);
+          c->cb.Run(0, 0, status);
           return;
         }
 
@@ -417,7 +419,7 @@
             if (status != 0) {
               c->self->Unregister(c->inst_id);
               LOG(ERROR) << "setting periodic parameters failed, status: " << +status;
-              c->cb.Run(0, status);
+              c->cb.Run(0, 0, status);
               return;
             }
 
@@ -426,7 +428,7 @@
                 if (status != 0) {
                   c->self->Unregister(c->inst_id);
                   LOG(ERROR) << "enabling periodic advertising failed, status: " << +status;
-                  c->cb.Run(0, status);
+                  c->cb.Run(0, 0, status);
                   return;
                 }
 
@@ -448,10 +450,11 @@
           if (status != 0) {
             c->self->Unregister(c->inst_id);
             LOG(ERROR) << "enabling advertiser failed, status: " << +status;
-            c->cb.Run(0, status);
+            c->cb.Run(0, 0, status);
             return;
           }
-          c->cb.Run(c->inst_id, status);
+          int8_t tx_power = c->self->adv_inst[c->inst_id].tx_power;
+          c->cb.Run(c->inst_id, tx_power, status);
         },
         base::Passed(&c));
 
@@ -461,6 +464,7 @@
 
   void EnableWithTimerCb(uint8_t inst_id, MultiAdvCb enable_cb, int timeout_s,
                          MultiAdvCb timeout_cb, uint8_t status) {
+    VLOG(1) << __func__ << " inst_id: " << +inst_id;
     AdvertisingInstance* p_inst = &adv_inst[inst_id];
 
     // Run the regular enable callback
@@ -488,7 +492,7 @@
     }
 
     AdvertisingInstance* p_inst = &adv_inst[inst_id];
-    VLOG(1) << __func__ << "enable: " << enable;
+    VLOG(1) << __func__ << " enable: " << enable << ", timeout: " << +timeout_s;
     if (!p_inst->in_use) {
       LOG(ERROR) << "Invalid or no active instance";
       cb.Run(BTM_BLE_MULTI_ADV_FAILURE);
diff --git a/stack/include/ble_advertiser.h b/stack/include/ble_advertiser.h
index 7546c53..30fe6e6 100644
--- a/stack/include/ble_advertiser.h
+++ b/stack/include/ble_advertiser.h
@@ -95,7 +95,9 @@
    * enabled.
    */
   virtual void StartAdvertisingSet(
-      base::Callback<void(uint8_t /* inst_id */, uint8_t /* status */)> cb,
+      base::Callback<void(uint8_t /* inst_id */, int8_t /* tx_power */,
+                          uint8_t /* status */)>
+          cb,
       tBTM_BLE_ADV_PARAMS* params, std::vector<uint8_t> advertise_data,
       std::vector<uint8_t> scan_response_data,
       tBLE_PERIODIC_ADV_PARAMS* periodic_params,
