diff --git a/system/gd/rust/linux/client/src/bt_adv.rs b/system/gd/rust/linux/client/src/bt_adv.rs
index c55a3a2918725786fb199710a6c6c6ecb084090e..e36fff46bf57dd3763398ff58dd7d09b051edbe3 100644
--- a/system/gd/rust/linux/client/src/bt_adv.rs
+++ b/system/gd/rust/linux/client/src/bt_adv.rs
@@ -15,6 +15,9 @@ pub(crate) struct AdvSet {
 
     /// Advertising data.
     pub(crate) data: AdvertiseData,
+
+    /// Scan response data.
+    pub(crate) scan_rsp: AdvertiseData,
 }
 
 impl AdvSet {
@@ -33,21 +36,31 @@ impl AdvSet {
         };
 
         let data = AdvertiseData {
+            service_uuids: Vec::new(),
+            solicit_uuids: Vec::new(),
+            transport_discovery_data: Vec::new(),
+            manufacturer_data: HashMap::from([(0, vec![0, 1, 2])]),
+            service_data: HashMap::new(),
+            include_tx_power_level: true,
+            include_device_name: true,
+        };
+
+        let scan_rsp = AdvertiseData {
             service_uuids: vec![Uuid::from([
                 0x00, 0x00, 0xfe, 0xf3, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5f, 0x9b,
                 0x34, 0xfb,
             ])],
             solicit_uuids: Vec::new(),
             transport_discovery_data: Vec::new(),
-            manufacturer_data: HashMap::from([(0, vec![0, 1, 2])]),
+            manufacturer_data: HashMap::new(),
             service_data: HashMap::from([(
                 "0000fef3-0000-1000-8000-00805f9b34fb".to_string(),
                 vec![0x0a, 0x0b],
             )]),
-            include_tx_power_level: true,
-            include_device_name: true,
+            include_tx_power_level: false,
+            include_device_name: false,
         };
 
-        AdvSet { adv_id: None, params, data }
+        AdvSet { adv_id: None, params, data, scan_rsp }
     }
 }
diff --git a/system/gd/rust/linux/client/src/command_handler.rs b/system/gd/rust/linux/client/src/command_handler.rs
index b2536984acb3ad477f14c13451f83633cc836f58..60b6358df347327c3f7e011a0646b32aa39105bc 100644
--- a/system/gd/rust/linux/client/src/command_handler.rs
+++ b/system/gd/rust/linux/client/src/command_handler.rs
@@ -164,7 +164,11 @@ fn build_commands() -> HashMap<String, CommandOption> {
     command_options.insert(
         String::from("advertise"),
         CommandOption {
-            rules: vec![String::from("advertise <on|off|set-interval>")],
+            rules: vec![
+                String::from("advertise <on|off>"),
+                String::from("advertise set-interval <ms>"),
+                String::from("advertise set-scan-rsp <enable|disable>"),
+            ],
             description: String::from("Advertising utilities."),
             function_pointer: CommandHandler::cmd_advertise,
         },
@@ -947,7 +951,8 @@ impl CommandHandler {
         }
         let callback_id = self.context.lock().unwrap().advertiser_callback_id.clone().unwrap();
 
-        enforce_arg_len(args, 1, "advertise <on|off|set-interval>", || match &args[0][0..] {
+        let cmd_usage = "advertise <on|off|set-interval|set-scan-rsp>";
+        enforce_arg_len(args, 1, cmd_usage, || match &args[0][0..] {
             "on" => {
                 let mut context = self.context.lock().unwrap();
 
@@ -1004,6 +1009,35 @@ impl CommandHandler {
                     context.gatt_dbus.as_mut().unwrap().set_advertising_parameters(adv_id, params);
                 }
             }
+            "set-scan-rsp" => {
+                if args.len() < 2 {
+                    println!("usage: advertise set-scan-rsp <enable|disable>");
+                    return;
+                }
+                let enable = match &args[1][0..] {
+                    "enable" => true,
+                    "disable" => false,
+                    _ => false,
+                };
+
+                let mut context = self.context.lock().unwrap();
+                context.adv_sets.iter_mut().for_each(|(_, s)| s.params.scannable = enable);
+
+                let advs: Vec<(_, _, _)> = context
+                    .adv_sets
+                    .iter()
+                    .filter_map(|(_, s)| {
+                        s.adv_id
+                            .map(|adv_id| (adv_id.clone(), s.params.clone(), s.scan_rsp.clone()))
+                    })
+                    .collect();
+                for (adv_id, params, scan_rsp) in advs {
+                    print_info!("Setting scan response data for {}", adv_id);
+                    context.gatt_dbus.as_mut().unwrap().set_scan_response_data(adv_id, scan_rsp);
+                    print_info!("Setting parameters for {}", adv_id);
+                    context.gatt_dbus.as_mut().unwrap().set_advertising_parameters(adv_id, params);
+                }
+            }
             _ => {
                 println!("Invalid argument '{}'", args[0]);
             }