diff --git a/server/cros/bluetooth/bluetooth_adapter_quick_tests.py b/server/cros/bluetooth/bluetooth_adapter_quick_tests.py
index 13de10f..27ddf41 100644
--- a/server/cros/bluetooth/bluetooth_adapter_quick_tests.py
+++ b/server/cros/bluetooth/bluetooth_adapter_quick_tests.py
@@ -68,14 +68,16 @@
     def start_peers(self, devices):
         """Start peer devices"""
         # Start the link to devices
-        logging.info('Starting peer devices...')
-        self.get_device_rasp(devices)
+        if self.use_btpeer:
+            logging.info('Starting peer devices...')
+            self.get_device_rasp(devices)
 
     def _print_delimiter(self):
         logging.info('=======================================================')
 
 
-    def quick_test_init(self, host, use_chameleon=True, flag='Quick Sanity'):
+    def quick_test_init(self, host, use_btpeer=True, use_chameleon=False,
+                        flag='Quick Sanity'):
         """Inits the test batch"""
         self.host = host
         #factory can not be declared as local variable, otherwise
@@ -100,8 +102,14 @@
             # Raise the original exception
             raise
 
-        self.use_chameleon = use_chameleon
-        if self.use_chameleon:
+        # Common list to track old/new Bluetooth peers
+        # Adding chameleon to btpeer_list causes issue in cros_labels
+        self.host.peer_list = []
+
+        # Keep use_chameleon for any unmodified tests
+        # TODO(b:149637050) Remove use_chameleon
+        self.use_btpeer = use_btpeer or use_chameleon
+        if self.use_btpeer:
             self.input_facade = self.factory.create_input_facade()
             self.check_btpeer()
 
@@ -115,7 +123,6 @@
             logging.info('%s Bluetooth peers found',
                          len(self.host.btpeer_list))
 
-            # Adding hostname-chameleon to same list causes issue in cros_labels
             self.host.peer_list = self.host.btpeer_list[:]
 
             if (self.host._chameleon_host is not None and
@@ -207,7 +214,7 @@
                     self._print_delimiter()
                     return False
 
-                # Check that chameleon has all required devices before running
+                # Check that btpeer has all required devices before running
                 for device_type, number in devices.items():
                     if self.available_devices.get(device_type, 0) < number:
                         logging.info('SKIPPING TEST %s', test_name)
@@ -310,12 +317,13 @@
         # Repopulate btpeer_group for next tests
         # Clear previous tets's leftover entries. Don't delete the
         # btpeer_group dictionary though, it'll be used as it is.
-        for device_type in self.btpeer_group:
-            if len(self.btpeer_group[device_type]) > 0:
-                del self.btpeer_group[device_type][:]
+        if self.use_btpeer:
+            for device_type in self.btpeer_group:
+                if len(self.btpeer_group[device_type]) > 0:
+                    del self.btpeer_group[device_type][:]
 
-        # Repopulate
-        self.group_btpeers_type()
+            # Repopulate
+            self.group_btpeers_type()
 
         # Close the connection between peers
         self.cleanup(test_state='NEW')
diff --git a/server/cros/bluetooth/bluetooth_adapter_tests.py b/server/cros/bluetooth/bluetooth_adapter_tests.py
index 51244fc..a839908 100644
--- a/server/cros/bluetooth/bluetooth_adapter_tests.py
+++ b/server/cros/bluetooth/bluetooth_adapter_tests.py
@@ -38,16 +38,16 @@
 
 # Delay binding the methods since host is only available at run time.
 SUPPORTED_DEVICE_TYPES = {
-    'MOUSE': lambda chameleon: chameleon.get_bluetooth_hid_mouse,
-    'KEYBOARD': lambda chameleon: chameleon.get_bluetooth_hid_keyboard,
-    'BLE_MOUSE': lambda chameleon: chameleon.get_ble_mouse,
-    'BLE_KEYBOARD': lambda chameleon: chameleon.get_ble_keyboard,
-    'A2DP_SINK': lambda chameleon: chameleon.get_bluetooth_a2dp_sink,
+    'MOUSE': lambda btpeer: btpeer.get_bluetooth_hid_mouse,
+    'KEYBOARD': lambda btpeer: btpeer.get_bluetooth_hid_keyboard,
+    'BLE_MOUSE': lambda btpeer: btpeer.get_ble_mouse,
+    'BLE_KEYBOARD': lambda btpeer: btpeer.get_ble_keyboard,
+    'A2DP_SINK': lambda btpeer: btpeer.get_bluetooth_a2dp_sink,
 
     # This is a base object that does not emulate any Bluetooth device.
     # This object is preferred when only a pure XMLRPC server is needed
-    # on the chameleon host, e.g., to perform servod methods.
-    'BLUETOOTH_BASE': lambda chameleon: chameleon.get_bluetooth_base,
+    # on the btpeer host, e.g., to perform servod methods.
+    'BLUETOOTH_BASE': lambda btpeer: btpeer.get_bluetooth_base,
 }
 
 
@@ -86,10 +86,10 @@
     return result
 
 
-def get_bluetooth_emulated_device(chameleon, device_type):
+def get_bluetooth_emulated_device(btpeer, device_type):
     """Get the bluetooth emulated device object.
 
-    @param chameleon: the chameleon host
+    @param btpeer: the Bluetooth peer device
     @param device_type : the bluetooth device type, e.g., 'MOUSE'
 
     @returns: the bluetooth device object
@@ -118,7 +118,7 @@
         step and retry the device method. The remediation steps are
          1) re-creating the serial device.
          2) reset (powercycle) the bluetooth dongle.
-         3) reboot chameleond host.
+         3) reboot Bluetooth peer.
         If the device method still fails after these steps, we fail the test
 
         The default values exist for uses of this function before the options
@@ -148,7 +148,7 @@
 
             logging.error('%s failed the %s time. Attempting to %s',
                           method_name,i,description)
-            if not fix_serial_device(chameleon, device, action):
+            if not fix_serial_device(btpeer, device, action):
                 logging.info('%s failed', description)
             else:
                 logging.info('%s successful', description)
@@ -167,10 +167,10 @@
                               device_type)
 
     # Get the bluetooth device object and query some important properties.
-    device = SUPPORTED_DEVICE_TYPES[device_type](chameleon)()
+    device = SUPPORTED_DEVICE_TYPES[device_type](btpeer)()
 
     # Get some properties of the kit
-    # NOTE: Strings updated here must be kept in sync with Chameleon.
+    # NOTE: Strings updated here must be kept in sync with Btpeer.
     device._capabilities = _retry_device_method('GetCapabilities')
     device._transports = device._capabilities["CAP_TRANSPORTS"]
     device._is_le_only = ("TRANSPORT_LE" in device._transports and
@@ -264,8 +264,8 @@
     logging.info('The device is created successfully after %s.', operation)
     return True
 
-def _reboot_chameleon(chameleon, device):
-    """ Reboot chameleond host
+def _reboot_btpeer(btpeer, device):
+    """ Reboot Bluetooth peer device.
 
     Also power cycle the device since reboot may not do that.."""
 
@@ -279,11 +279,11 @@
     logging.info("Powercycling the device")
     device.PowerCycle()
     time.sleep(RESET_SLEEP_SECS)
-    logging.info('rebooting chameleon...')
-    chameleon.reboot()
+    logging.info('rebooting Bluetooth peer...')
+    btpeer.reboot()
 
-    # Every chameleon reboot would take a bit more than REBOOT_SLEEP_SECS.
-    # Sleep REBOOT_SLEEP_SECS and then begin probing the chameleon board.
+    # Every btpeer reboot would take a bit more than REBOOT_SLEEP_SECS.
+    # Sleep REBOOT_SLEEP_SECS and then begin probing the btpeer board.
     time.sleep(REBOOT_SLEEP_SECS)
     return _check_device_init(device, 'reboot')
 
@@ -320,21 +320,21 @@
     return truthiness_of_result or result in legal_falsy_values
 
 
-def fix_serial_device(chameleon, device, operation='reset'):
+def fix_serial_device(btpeer, device, operation='reset'):
     """Fix the serial device.
 
     This function tries to fix the serial device by
     (1) re-creating a serial device, or
     (2) power cycling the usb port to which device is connected
-    (3) rebooting the chameleon board.
+    (3) rebooting the Bluetooth peeer
 
     Argument operation determine which of the steps above are perform
 
-    Note that rebooting the chameleon board or reseting the device will remove
+    Note that rebooting the btpeer board or resetting the device will remove
     the state on the peripheral which might cause test failures. Please use
     reset/reboot only before or after a test.
 
-    @param chameleon: the chameleon host
+    @param btpeer: the Bluetooth peer
     @param device: the bluetooth device.
     @param operation: Recovery operation to perform 'recreate/reset/reboot'
 
@@ -363,9 +363,9 @@
         return _reset_device_power(device)
 
     elif operation == 'reboot':
-        # Reboot the chameleon host.
-        # The device is power cycled before rebooting chameleon host
-        return _reboot_chameleon(chameleon, device)
+        # Reboot the Bluetooth peer device.
+        # The device is power cycled before rebooting Bluetooth peer device
+        return _reboot_btpeer(btpeer, device)
 
     else:
         logging.error('fix_serial_device Invalid operation %s', operation)
@@ -398,13 +398,13 @@
     time.sleep(1)
 
 
-    if not hasattr(instance, 'use_chameleon'):
+    if not hasattr(instance, 'use_btpeer'):
         return _is_successful(_run_method(test_method, test_method.__name__,
                                           instance, *args, **kwargs))
     for device_type in SUPPORTED_DEVICE_TYPES:
         for device in getattr(instance, 'devices')[device_type]:
-            #fix_serial_device in 'recreate' mode doesn't require chameleon
-            #so just pass None for convinent.
+            #fix_serial_device in 'recreate' mode doesn't require btpeer
+            #so just pass None for convenient.
             if not fix_serial_device(None, device, "recreate"):
                 return False
 
@@ -638,7 +638,7 @@
 
 
     def clear_raspi_device(self, device):
-        """Clears a device on a raspi chameleon by resetting bluetooth stack
+        """Clears a device on a raspi peer by resetting bluetooth stack
 
         @param device: proxy object of peripheral device
         """
@@ -675,7 +675,7 @@
 
 
     def get_device_rasp(self, device_num, on_start=True):
-        """Get all bluetooth device objects from Bluetooth peers.
+        """Get all bluetooth device objects from Bluetooth peer devices
         This method should be called only after group_btpeers_type
         @param device_num : dict of {device_type:number}, to specify the number
                             of device needed for each device_type.
@@ -768,15 +768,15 @@
         return self.devices[device_type][-1]
 
 
-    def is_device_available(self, chameleon, device_type):
-        """Determines if the named device is available on the linked chameleon
+    def is_device_available(self, btpeer, device_type):
+        """Determines if the named device is available on the linked peer
 
         @param device_type: the bluetooth HID device type, e.g., 'MOUSE'
 
         @returns: True if it is able to resolve the device, false otherwise
         """
 
-        device = SUPPORTED_DEVICE_TYPES[device_type](chameleon)()
+        device = SUPPORTED_DEVICE_TYPES[device_type](btpeer)()
         try:
             # The proxy prevents us from checking if the object is None directly
             # so instead we call a fast method that any peripheral must support.
diff --git a/server/site_tests/bluetooth_AdapterCLSanity/bluetooth_AdapterCLSanity.py b/server/site_tests/bluetooth_AdapterCLSanity/bluetooth_AdapterCLSanity.py
index 762722a..637cf64 100644
--- a/server/site_tests/bluetooth_AdapterCLSanity/bluetooth_AdapterCLSanity.py
+++ b/server/site_tests/bluetooth_AdapterCLSanity/bluetooth_AdapterCLSanity.py
@@ -154,6 +154,6 @@
         """
 
         # Initialize and run the test batch or the requested specific test
-        self.quick_test_init(host, use_chameleon=True, flag=flag)
+        self.quick_test_init(host, use_btpeer=True, flag=flag)
         self.cl_sanity_batch_run(num_iterations, test_name)
         self.quick_test_cleanup()
diff --git a/server/site_tests/bluetooth_AdapterLEBetterTogether/bluetooth_AdapterLEBetterTogether.py b/server/site_tests/bluetooth_AdapterLEBetterTogether/bluetooth_AdapterLEBetterTogether.py
index 7d6ba6f..6a51a5a 100644
--- a/server/site_tests/bluetooth_AdapterLEBetterTogether/bluetooth_AdapterLEBetterTogether.py
+++ b/server/site_tests/bluetooth_AdapterLEBetterTogether/bluetooth_AdapterLEBetterTogether.py
@@ -99,6 +99,6 @@
         """
 
         # Initialize and run the test batch or the requested specific test
-        self.quick_test_init(host, use_chameleon=True, flag=flag)
+        self.quick_test_init(host, use_btpeer=True, flag=flag)
         self.better_together_batch_run(num_iterations, test_name)
         self.quick_test_cleanup()
diff --git a/server/site_tests/bluetooth_AdapterLESanity/bluetooth_AdapterLESanity.py b/server/site_tests/bluetooth_AdapterLESanity/bluetooth_AdapterLESanity.py
index b585e97..ec57dd4 100644
--- a/server/site_tests/bluetooth_AdapterLESanity/bluetooth_AdapterLESanity.py
+++ b/server/site_tests/bluetooth_AdapterLESanity/bluetooth_AdapterLESanity.py
@@ -156,6 +156,6 @@
         """
 
         # Initialize and run the test batch or the requested specific test
-        self.quick_test_init(host, use_chameleon=True, flag=flag)
+        self.quick_test_init(host, use_btpeer=True, flag=flag)
         self.le_sanity_batch_run(num_iterations, test_name)
         self.quick_test_cleanup()
diff --git a/server/site_tests/bluetooth_AdapterMDSanity/bluetooth_AdapterMDSanity.py b/server/site_tests/bluetooth_AdapterMDSanity/bluetooth_AdapterMDSanity.py
index 95613f4..4d63363 100644
--- a/server/site_tests/bluetooth_AdapterMDSanity/bluetooth_AdapterMDSanity.py
+++ b/server/site_tests/bluetooth_AdapterMDSanity/bluetooth_AdapterMDSanity.py
@@ -66,8 +66,6 @@
         @param num_iterations: the number of rounds to execute the test
         """
         # Initialize and run the test batch or the requested specific test
-        self.quick_test_init(host, use_chameleon=True, flag=flag)
+        self.quick_test_init(host, use_btpeer=True, flag=flag)
         self.md_sanity_batch_run(num_iterations, test_name)
         self.quick_test_cleanup()
-
-
diff --git a/server/site_tests/bluetooth_AdapterQuickSanity/bluetooth_AdapterQuickSanity.py b/server/site_tests/bluetooth_AdapterQuickSanity/bluetooth_AdapterQuickSanity.py
index 39d0ae7..e9e11d6 100644
--- a/server/site_tests/bluetooth_AdapterQuickSanity/bluetooth_AdapterQuickSanity.py
+++ b/server/site_tests/bluetooth_AdapterQuickSanity/bluetooth_AdapterQuickSanity.py
@@ -33,7 +33,7 @@
         """
 
         # Init the quick test and start the package
-        self.quick_test_init(host, use_chameleon=True, flag=flag)
+        self.quick_test_init(host, use_btpeer=True, flag=flag)
         self.quick_test_package_start('BT Quick Sanity')
 
         # Run sanity package
diff --git a/server/site_tests/bluetooth_AdapterSASanity/bluetooth_AdapterSASanity.py b/server/site_tests/bluetooth_AdapterSASanity/bluetooth_AdapterSASanity.py
index 83fd880..35d2e47 100644
--- a/server/site_tests/bluetooth_AdapterSASanity/bluetooth_AdapterSASanity.py
+++ b/server/site_tests/bluetooth_AdapterSASanity/bluetooth_AdapterSASanity.py
@@ -245,6 +245,6 @@
         @param num_iterations: the number of rounds to execute the test
         """
         # Initialize and run the test batch or the requested specific test
-        self.quick_test_init(host, use_chameleon=False, flag=flag)
+        self.quick_test_init(host, use_btpeer=False, flag=flag)
         self.sa_sanity_batch_run(num_iterations, test_name)
         self.quick_test_cleanup()
