diff --git a/include/hardware/ble_advertiser.h b/include/hardware/ble_advertiser.h
index 02d553f..5284800 100644
--- a/include/hardware/ble_advertiser.h
+++ b/include/hardware/ble_advertiser.h
@@ -57,7 +57,7 @@
   /** Registers an advertiser with the stack */
   virtual void RegisterAdvertiser(IdStatusCallback) = 0;
 
-  using GetAddressCallback = base::Callback<void(uint8_t /* address_type*/, bt_bdaddr_t /*address*/)>;
+  using GetAddressCallback = base::Callback<void(uint8_t /* address_type*/, RawAddress /*address*/)>;
   virtual void GetOwnAddress(uint8_t advertiser_id, GetAddressCallback cb) = 0;
 
   /* Set the parameters as per spec, user manual specified values */
diff --git a/include/hardware/ble_scanner.h b/include/hardware/ble_scanner.h
index c8f9ec2..2d3ec82 100644
--- a/include/hardware/ble_scanner.h
+++ b/include/hardware/ble_scanner.h
@@ -37,7 +37,7 @@
 
 /** Callback for scan results */
 typedef void (*scan_result_callback)(uint16_t event_type, uint8_t addr_type,
-                                     bt_bdaddr_t *bda, uint8_t primary_phy,
+                                     RawAddress *bda, uint8_t primary_phy,
                                      uint8_t secondary_phy,
                                      uint8_t advertising_sid, int8_t tx_power,
                                      int8_t rssi, uint16_t periodic_adv_int,
@@ -90,7 +90,7 @@
                                    int company_id, int company_id_mask,
                                    const bt_uuid_t *p_uuid,
                                    const bt_uuid_t *p_uuid_mask,
-                                   const bt_bdaddr_t *bd_addr, char addr_type,
+                                   const RawAddress *bd_addr, char addr_type,
                                    std::vector<uint8_t> data,
                                    std::vector<uint8_t> p_mask,
                                    FilterConfigCallback cb) = 0;
@@ -125,12 +125,12 @@
   using StartSyncCb =
       base::Callback<void(uint8_t status, uint16_t sync_handle,
                           uint8_t advertising_sid, uint8_t address_type,
-                          bt_bdaddr_t address, uint8_t phy, uint16_t interval)>;
+                          RawAddress address, uint8_t phy, uint16_t interval)>;
   using SyncReportCb =
       base::Callback<void(uint16_t sync_handle, int8_t tx_power, int8_t rssi,
                           uint8_t status, std::vector<uint8_t> data)>;
   using SyncLostCb = base::Callback<void(uint16_t sync_handle)>;
-  virtual void StartSync(uint8_t sid, bt_bdaddr_t address, uint16_t skip,
+  virtual void StartSync(uint8_t sid, RawAddress address, uint16_t skip,
                          uint16_t timeout, StartSyncCb start_cb,
                          SyncReportCb report_cb, SyncLostCb lost_cb) = 0;
   virtual void StopSync(uint16_t handle) = 0;
diff --git a/include/hardware/bluetooth.h b/include/hardware/bluetooth.h
index 6e287e6..119c35d 100644
--- a/include/hardware/bluetooth.h
+++ b/include/hardware/bluetooth.h
@@ -58,7 +58,7 @@
 /** Bluetooth Address */
 typedef struct {
     uint8_t address[6];
-} __attribute__((packed))bt_bdaddr_t;
+} __attribute__((packed))RawAddress;
 
 /** Bluetooth Device Name */
 typedef struct {
@@ -185,7 +185,7 @@
     /**
      * Description - Bluetooth Device Address
      * Access mode - Only GET.
-     * Data type   - bt_bdaddr_t
+     * Data type   - RawAddress
      */
     BT_PROPERTY_BDADDR,
     /**
@@ -223,7 +223,7 @@
     /**
      * Description - List of bonded devices
      * Access mode - Only GET.
-     * Data type   - Array of bt_bdaddr_t of the bonded remote devices
+     * Data type   - Array of RawAddress of the bonded remote devices
      *               (Array size inferred from property length).
      */
     BT_PROPERTY_ADAPTER_BONDED_DEVICES,
@@ -334,7 +334,7 @@
  * multiple properties - num_properties shall be 1
  */
 typedef void (*remote_device_properties_callback)(bt_status_t status,
-                                                       bt_bdaddr_t *bd_addr,
+                                                       RawAddress *bd_addr,
                                                        int num_properties,
                                                        bt_property_t *properties);
 
@@ -348,7 +348,7 @@
 typedef void (*discovery_state_changed_callback)(bt_discovery_state_t state);
 
 /** Bluetooth Legacy PinKey Request callback */
-typedef void (*pin_request_callback)(bt_bdaddr_t *remote_bd_addr,
+typedef void (*pin_request_callback)(RawAddress *remote_bd_addr,
                                         bt_bdname_t *bd_name, uint32_t cod, bool min_16_digit);
 
 /** Bluetooth SSP Request callback - Just Works & Numeric Comparison*/
@@ -356,7 +356,7 @@
  *  BT_SSP_PAIRING_PASSKEY_ENTRY */
 /* TODO: Passkey request callback shall not be needed for devices with display
  * capability. We still need support this in the stack for completeness */
-typedef void (*ssp_request_callback)(bt_bdaddr_t *remote_bd_addr,
+typedef void (*ssp_request_callback)(RawAddress *remote_bd_addr,
                                         bt_bdname_t *bd_name,
                                         uint32_t cod,
                                         bt_ssp_variant_t pairing_variant,
@@ -365,11 +365,11 @@
 /** Bluetooth Bond state changed callback */
 /* Invoked in response to create_bond, cancel_bond or remove_bond */
 typedef void (*bond_state_changed_callback)(bt_status_t status,
-                                               bt_bdaddr_t *remote_bd_addr,
+                                               RawAddress *remote_bd_addr,
                                                bt_bond_state_t state);
 
 /** Bluetooth ACL connection state changed callback */
-typedef void (*acl_state_changed_callback)(bt_status_t status, bt_bdaddr_t *remote_bd_addr,
+typedef void (*acl_state_changed_callback)(bt_status_t status, RawAddress *remote_bd_addr,
                                             bt_acl_state_t state);
 
 typedef enum {
@@ -489,27 +489,27 @@
 
     /** Set Bluetooth Adapter property of 'type' */
     /* Based on the type, val shall be one of
-     * bt_bdaddr_t or bt_bdname_t or bt_scanmode_t etc
+     * RawAddress or bt_bdname_t or bt_scanmode_t etc
      */
     int (*set_adapter_property)(const bt_property_t *property);
 
     /** Get all Remote Device properties */
-    int (*get_remote_device_properties)(bt_bdaddr_t *remote_addr);
+    int (*get_remote_device_properties)(RawAddress *remote_addr);
 
     /** Get Remote Device property of 'type' */
-    int (*get_remote_device_property)(bt_bdaddr_t *remote_addr,
+    int (*get_remote_device_property)(RawAddress *remote_addr,
                                       bt_property_type_t type);
 
     /** Set Remote Device property of 'type' */
-    int (*set_remote_device_property)(bt_bdaddr_t *remote_addr,
+    int (*set_remote_device_property)(RawAddress *remote_addr,
                                       const bt_property_t *property);
 
     /** Get Remote Device's service record  for the given UUID */
-    int (*get_remote_service_record)(bt_bdaddr_t *remote_addr,
+    int (*get_remote_service_record)(RawAddress *remote_addr,
                                      bt_uuid_t *uuid);
 
     /** Start SDP to get remote services */
-    int (*get_remote_services)(bt_bdaddr_t *remote_addr);
+    int (*get_remote_services)(RawAddress *remote_addr);
 
     /** Start Discovery */
     int (*start_discovery)(void);
@@ -518,28 +518,28 @@
     int (*cancel_discovery)(void);
 
     /** Create Bluetooth Bonding */
-    int (*create_bond)(const bt_bdaddr_t *bd_addr, int transport);
+    int (*create_bond)(const RawAddress *bd_addr, int transport);
 
     /** Create Bluetooth Bond using out of band data */
-    int (*create_bond_out_of_band)(const bt_bdaddr_t *bd_addr, int transport,
+    int (*create_bond_out_of_band)(const RawAddress *bd_addr, int transport,
                                    const bt_out_of_band_data_t *oob_data);
 
     /** Remove Bond */
-    int (*remove_bond)(const bt_bdaddr_t *bd_addr);
+    int (*remove_bond)(const RawAddress *bd_addr);
 
     /** Cancel Bond */
-    int (*cancel_bond)(const bt_bdaddr_t *bd_addr);
+    int (*cancel_bond)(const RawAddress *bd_addr);
 
     /**
      * Get the connection status for a given remote device.
      * return value of 0 means the device is not connected,
      * non-zero return status indicates an active connection.
      */
-    int (*get_connection_state)(const bt_bdaddr_t *bd_addr);
+    int (*get_connection_state)(const RawAddress *bd_addr);
 
     /** BT Legacy PinKey Reply */
     /** If accept==FALSE, then pin_len and pin_code shall be 0x0 */
-    int (*pin_reply)(const bt_bdaddr_t *bd_addr, uint8_t accept,
+    int (*pin_reply)(const RawAddress *bd_addr, uint8_t accept,
                      uint8_t pin_len, bt_pin_code_t *pin_code);
 
     /** BT SSP Reply - Just Works, Numeric Comparison and Passkey
@@ -547,7 +547,7 @@
      * BT_SSP_VARIANT_CONSENT
      * For BT_SSP_VARIANT_PASSKEY_ENTRY, if accept==FALSE, then passkey
      * shall be zero */
-    int (*ssp_reply)(const bt_bdaddr_t *bd_addr, bt_ssp_variant_t variant,
+    int (*ssp_reply)(const RawAddress *bd_addr, bt_ssp_variant_t variant,
                      uint8_t accept, uint32_t passkey);
 
     /** Get Bluetooth profile interface */
@@ -596,7 +596,7 @@
      * first |len| bytes of the its device address match |addr|.
      * NOTE: |feature| has to match an item defined in interop_feature_t (interop.h).
      */
-    void (*interop_database_add)(uint16_t feature, const bt_bdaddr_t *addr, size_t len);
+    void (*interop_database_add)(uint16_t feature, const RawAddress *addr, size_t len);
 } bt_interface_t;
 
 /** TODO: Need to add APIs for Service Discovery, Service authorization and
diff --git a/include/hardware/bt_av.h b/include/hardware/bt_av.h
index 91ae2ac..36722d4 100644
--- a/include/hardware/bt_av.h
+++ b/include/hardware/bt_av.h
@@ -130,13 +130,13 @@
  *  state will have one of the values from btav_connection_state_t
  */
 typedef void (* btav_connection_state_callback)(btav_connection_state_t state,
-                                                    bt_bdaddr_t *bd_addr);
+                                                    RawAddress *bd_addr);
 
 /** Callback for audiopath state change.
  *  state will have one of the values from btav_audio_state_t
  */
 typedef void (* btav_audio_state_callback)(btav_audio_state_t state,
-                                               bt_bdaddr_t *bd_addr);
+                                               RawAddress *bd_addr);
 
 /** Callback for audio configuration change.
  *  Used only for the A2DP Source interface.
@@ -151,7 +151,7 @@
  *  sample_rate: sample rate in Hz
  *  channel_count: number of channels (1 for mono, 2 for stereo)
  */
-typedef void (* btav_audio_sink_config_callback)(bt_bdaddr_t *bd_addr,
+typedef void (* btav_audio_sink_config_callback)(RawAddress *bd_addr,
                                                  uint32_t sample_rate,
                                                  uint8_t channel_count);
 
@@ -197,10 +197,10 @@
                 std::vector<btav_a2dp_codec_config_t> codec_priorities);
 
     /** connect to headset */
-    bt_status_t (*connect)( bt_bdaddr_t *bd_addr );
+    bt_status_t (*connect)( RawAddress *bd_addr );
 
     /** dis-connect from headset */
-    bt_status_t (*disconnect)( bt_bdaddr_t *bd_addr );
+    bt_status_t (*disconnect)( RawAddress *bd_addr );
 
     /** configure the codecs settings preferences */
     bt_status_t (*config_codec)(std::vector<btav_a2dp_codec_config_t> codec_preferences);
@@ -222,10 +222,10 @@
     bt_status_t (*init)( btav_sink_callbacks_t* callbacks );
 
     /** connect to headset */
-    bt_status_t (*connect)( bt_bdaddr_t *bd_addr );
+    bt_status_t (*connect)( RawAddress *bd_addr );
 
     /** dis-connect from headset */
-    bt_status_t (*disconnect)( bt_bdaddr_t *bd_addr );
+    bt_status_t (*disconnect)( RawAddress *bd_addr );
 
     /** Closes the interface. */
     void  (*cleanup)( void );
diff --git a/include/hardware/bt_common_types.h b/include/hardware/bt_common_types.h
index cff3072..8d13ed4 100644
--- a/include/hardware/bt_common_types.h
+++ b/include/hardware/bt_common_types.h
@@ -34,7 +34,7 @@
     uint8_t  tx_power;
     int8_t  rssi_value;
     uint16_t time_stamp;
-    bt_bdaddr_t bd_addr;
+    RawAddress bd_addr;
     uint8_t  adv_pkt_len;
     uint8_t  *p_adv_pkt_data;
     uint8_t  scan_rsp_len;
diff --git a/include/hardware/bt_gatt_client.h b/include/hardware/bt_gatt_client.h
index f0b22c3..9adeb6f 100644
--- a/include/hardware/bt_gatt_client.h
+++ b/include/hardware/bt_gatt_client.h
@@ -60,7 +60,7 @@
 typedef struct
 {
     uint8_t             value[BTGATT_MAX_ATTR_LEN];
-    bt_bdaddr_t         bda;
+    RawAddress         bda;
     uint16_t            handle;
     uint16_t            len;
     uint8_t             is_notify;
@@ -68,7 +68,7 @@
 
 typedef struct
 {
-    bt_bdaddr_t        *bda1;
+    RawAddress        *bda1;
     bt_uuid_t          *uuid1;
     uint16_t            u1;
     uint16_t            u2;
@@ -102,11 +102,11 @@
 typedef void (*register_client_callback)(int status, int client_if, const bt_uuid_t& app_uuid);
 
 /** GATT open callback invoked in response to open */
-typedef void (*connect_callback)(int conn_id, int status, int client_if, const bt_bdaddr_t& bda);
+typedef void (*connect_callback)(int conn_id, int status, int client_if, const RawAddress& bda);
 
 /** Callback invoked in response to close */
 typedef void (*disconnect_callback)(int conn_id, int status,
-                int client_if, const bt_bdaddr_t& bda);
+                int client_if, const RawAddress& bda);
 
 /**
  * Invoked in response to search_service when the GATT service search
@@ -142,7 +142,7 @@
 typedef void (*write_descriptor_callback)(int conn_id, int status, uint16_t handle);
 
 /** Callback triggered in response to read_remote_rssi */
-typedef void (*read_remote_rssi_callback)(int client_if, const bt_bdaddr_t& bda,
+typedef void (*read_remote_rssi_callback)(int client_if, const RawAddress& bda,
                                           int rssi, int status);
 
 /** Callback invoked when the MTU for a given connection changes */
@@ -206,15 +206,15 @@
     bt_status_t (*unregister_client)(int client_if);
 
     /** Create a connection to a remote LE or dual-mode device */
-    bt_status_t (*connect)(int client_if, const bt_bdaddr_t& bd_addr,
+    bt_status_t (*connect)(int client_if, const RawAddress& bd_addr,
                            bool is_direct, int transport, int initiating_phys);
 
     /** Disconnect a remote device or cancel a pending connection */
-    bt_status_t (*disconnect)( int client_if, const bt_bdaddr_t& bd_addr,
+    bt_status_t (*disconnect)( int client_if, const RawAddress& bd_addr,
                     int conn_id);
 
     /** Clear the attribute cache for a given device */
-    bt_status_t (*refresh)( int client_if, const bt_bdaddr_t& bd_addr);
+    bt_status_t (*refresh)( int client_if, const RawAddress& bd_addr);
 
     /**
      * Enumerate all GATT services on a connected device.
@@ -256,30 +256,30 @@
      * characteristic
      */
     bt_status_t (*register_for_notification)( int client_if,
-                    const bt_bdaddr_t& bd_addr, uint16_t handle);
+                    const RawAddress& bd_addr, uint16_t handle);
 
     /** Deregister a previous request for notifications/indications */
     bt_status_t (*deregister_for_notification)( int client_if,
-                    const bt_bdaddr_t& bd_addr, uint16_t handle);
+                    const RawAddress& bd_addr, uint16_t handle);
 
     /** Request RSSI for a given remote device */
-    bt_status_t (*read_remote_rssi)(int client_if, const bt_bdaddr_t& bd_addr);
+    bt_status_t (*read_remote_rssi)(int client_if, const RawAddress& bd_addr);
 
     /** Determine the type of the remote device (LE, BR/EDR, Dual-mode) */
-    int (*get_device_type)(const bt_bdaddr_t &bd_addr);
+    int (*get_device_type)(const RawAddress &bd_addr);
 
     /** Configure the MTU for a given connection */
     bt_status_t (*configure_mtu)(int conn_id, int mtu);
 
     /** Request a connection parameter update */
-    bt_status_t (*conn_parameter_update)(const bt_bdaddr_t& bd_addr, int min_interval,
+    bt_status_t (*conn_parameter_update)(const RawAddress& bd_addr, int min_interval,
                     int max_interval, int latency, int timeout);
 
-    bt_status_t (*set_preferred_phy)(const bt_bdaddr_t& bd_addr, uint8_t tx_phy,
+    bt_status_t (*set_preferred_phy)(const RawAddress& bd_addr, uint8_t tx_phy,
                                      uint8_t rx_phy, uint16_t phy_options);
 
     bt_status_t (*read_phy)(
-        const bt_bdaddr_t& bd_addr,
+        const RawAddress& bd_addr,
         base::Callback<void(uint8_t tx_phy, uint8_t rx_phy, uint8_t status)>
             cb);
 
diff --git a/include/hardware/bt_gatt_server.h b/include/hardware/bt_gatt_server.h
index c24575f..93ecc02 100644
--- a/include/hardware/bt_gatt_server.h
+++ b/include/hardware/bt_gatt_server.h
@@ -50,7 +50,7 @@
 
 /** Callback indicating that a remote device has connected or been disconnected */
 typedef void (*connection_callback)(int conn_id, int server_if, int connected,
-                                    const bt_bdaddr_t& bda);
+                                    const RawAddress& bda);
 
 /** Callback invoked in response to create_service */
 typedef void (*service_added_callback)(int status, int server_if,
@@ -68,20 +68,20 @@
  * Callback invoked when a remote device has requested to read a characteristic
  * or descriptor. The application must respond by calling send_response
  */
-typedef void (*request_read_callback)(int conn_id, int trans_id, const bt_bdaddr_t& bda,
+typedef void (*request_read_callback)(int conn_id, int trans_id, const RawAddress& bda,
                                       int attr_handle, int offset, bool is_long);
 
 /**
  * Callback invoked when a remote device has requested to write to a
  * characteristic or descriptor.
  */
-typedef void (*request_write_callback)(int conn_id, int trans_id, const bt_bdaddr_t& bda,
+typedef void (*request_write_callback)(int conn_id, int trans_id, const RawAddress& bda,
                                        int attr_handle, int offset, bool need_rsp,
                                        bool is_prep, std::vector<uint8_t> value);
 
 /** Callback invoked when a previously prepared write is to be executed */
 typedef void (*request_exec_write_callback)(int conn_id, int trans_id,
-                                            const bt_bdaddr_t& bda, int exec_write);
+                                            const RawAddress& bda, int exec_write);
 
 /**
  * Callback triggered in response to send_response if the remote device
@@ -141,11 +141,11 @@
     bt_status_t (*unregister_server)(int server_if );
 
     /** Create a connection to a remote peripheral */
-    bt_status_t (*connect)(int server_if, const bt_bdaddr_t& bd_addr,
+    bt_status_t (*connect)(int server_if, const RawAddress& bd_addr,
                             bool is_direct, int transport);
 
     /** Disconnect an established connection or cancel a pending one */
-    bt_status_t (*disconnect)(int server_if, const bt_bdaddr_t& bd_addr,
+    bt_status_t (*disconnect)(int server_if, const RawAddress& bd_addr,
                     int conn_id );
 
     /** Create a new service */
@@ -166,11 +166,11 @@
     bt_status_t (*send_response)(int conn_id, int trans_id,
                                  int status, const btgatt_response_t& response);
 
-    bt_status_t (*set_preferred_phy)(const bt_bdaddr_t& bd_addr, uint8_t tx_phy,
+    bt_status_t (*set_preferred_phy)(const RawAddress& bd_addr, uint8_t tx_phy,
                                      uint8_t rx_phy, uint16_t phy_options);
 
     bt_status_t (*read_phy)(
-        const bt_bdaddr_t& bd_addr,
+        const RawAddress& bd_addr,
         base::Callback<void(uint8_t tx_phy, uint8_t rx_phy, uint8_t status)>
             cb);
 
diff --git a/include/hardware/bt_hd.h b/include/hardware/bt_hd.h
index 263f29f..c99ab24 100644
--- a/include/hardware/bt_hd.h
+++ b/include/hardware/bt_hd.h
@@ -65,8 +65,8 @@
     uint32_t delay_variation;
 } bthd_qos_param_t;
 
-typedef void (* bthd_application_state_callback)(bt_bdaddr_t *bd_addr, bthd_application_state_t state);
-typedef void (* bthd_connection_state_callback)(bt_bdaddr_t *bd_addr, bthd_connection_state_t state);
+typedef void (* bthd_application_state_callback)(RawAddress *bd_addr, bthd_application_state_t state);
+typedef void (* bthd_connection_state_callback)(RawAddress *bd_addr, bthd_connection_state_t state);
 typedef void (* bthd_get_report_callback)(uint8_t type, uint8_t id, uint16_t buffer_size);
 typedef void (* bthd_set_report_callback)(uint8_t type, uint8_t id, uint16_t len, uint8_t *p_data);
 typedef void (* bthd_set_protocol_callback)(uint8_t protocol);
@@ -105,7 +105,7 @@
     bt_status_t (*unregister_app)(void);
 
     /** connects to host with virtual cable */
-    bt_status_t (*connect)(bt_bdaddr_t *bd_addr);
+    bt_status_t (*connect)(RawAddress *bd_addr);
 
     /** disconnects from currently connected host */
     bt_status_t (*disconnect)(void);
diff --git a/include/hardware/bt_hf.h b/include/hardware/bt_hf.h
index 2b89c91..1f6f6eb 100644
--- a/include/hardware/bt_hf.h
+++ b/include/hardware/bt_hf.h
@@ -91,89 +91,89 @@
 /** Callback for connection state change.
  *  state will have one of the values from BtHfConnectionState
  */
-typedef void (* bthf_connection_state_callback)(bthf_connection_state_t state, bt_bdaddr_t *bd_addr);
+typedef void (* bthf_connection_state_callback)(bthf_connection_state_t state, RawAddress *bd_addr);
 
 /** Callback for audio connection state change.
  *  state will have one of the values from BtHfAudioState
  */
-typedef void (* bthf_audio_state_callback)(bthf_audio_state_t state, bt_bdaddr_t *bd_addr);
+typedef void (* bthf_audio_state_callback)(bthf_audio_state_t state, RawAddress *bd_addr);
 
 /** Callback for VR connection state change.
  *  state will have one of the values from BtHfVRState
  */
-typedef void (* bthf_vr_cmd_callback)(bthf_vr_state_t state, bt_bdaddr_t *bd_addr);
+typedef void (* bthf_vr_cmd_callback)(bthf_vr_state_t state, RawAddress *bd_addr);
 
 /** Callback for answer incoming call (ATA)
  */
-typedef void (* bthf_answer_call_cmd_callback)(bt_bdaddr_t *bd_addr);
+typedef void (* bthf_answer_call_cmd_callback)(RawAddress *bd_addr);
 
 /** Callback for disconnect call (AT+CHUP)
  */
-typedef void (* bthf_hangup_call_cmd_callback)(bt_bdaddr_t *bd_addr);
+typedef void (* bthf_hangup_call_cmd_callback)(RawAddress *bd_addr);
 
 /** Callback for disconnect call (AT+CHUP)
  *  type will denote Speaker/Mic gain (BtHfVolumeControl).
  */
-typedef void (* bthf_volume_cmd_callback)(bthf_volume_type_t type, int volume, bt_bdaddr_t *bd_addr);
+typedef void (* bthf_volume_cmd_callback)(bthf_volume_type_t type, int volume, RawAddress *bd_addr);
 
 /** Callback for dialing an outgoing call
  *  If number is NULL, redial
  */
-typedef void (* bthf_dial_call_cmd_callback)(char *number, bt_bdaddr_t *bd_addr);
+typedef void (* bthf_dial_call_cmd_callback)(char *number, RawAddress *bd_addr);
 
 /** Callback for sending DTMF tones
  *  tone contains the dtmf character to be sent
  */
-typedef void (* bthf_dtmf_cmd_callback)(char tone, bt_bdaddr_t *bd_addr);
+typedef void (* bthf_dtmf_cmd_callback)(char tone, RawAddress *bd_addr);
 
 /** Callback for enabling/disabling noise reduction/echo cancellation
  *  value will be 1 to enable, 0 to disable
  */
-typedef void (* bthf_nrec_cmd_callback)(bthf_nrec_t nrec, bt_bdaddr_t *bd_addr);
+typedef void (* bthf_nrec_cmd_callback)(bthf_nrec_t nrec, RawAddress *bd_addr);
 
 /** Callback for AT+BCS and event from BAC
  *  WBS enable, WBS disable
  */
-typedef void (* bthf_wbs_callback)(bthf_wbs_config_t wbs, bt_bdaddr_t *bd_addr);
+typedef void (* bthf_wbs_callback)(bthf_wbs_config_t wbs, RawAddress *bd_addr);
 
 /** Callback for call hold handling (AT+CHLD)
  *  value will contain the call hold command (0, 1, 2, 3)
  */
-typedef void (* bthf_chld_cmd_callback)(bthf_chld_type_t chld, bt_bdaddr_t *bd_addr);
+typedef void (* bthf_chld_cmd_callback)(bthf_chld_type_t chld, RawAddress *bd_addr);
 
 /** Callback for CNUM (subscriber number)
  */
-typedef void (* bthf_cnum_cmd_callback)(bt_bdaddr_t *bd_addr);
+typedef void (* bthf_cnum_cmd_callback)(RawAddress *bd_addr);
 
 /** Callback for indicators (CIND)
  */
-typedef void (* bthf_cind_cmd_callback)(bt_bdaddr_t *bd_addr);
+typedef void (* bthf_cind_cmd_callback)(RawAddress *bd_addr);
 
 /** Callback for operator selection (COPS)
  */
-typedef void (* bthf_cops_cmd_callback)(bt_bdaddr_t *bd_addr);
+typedef void (* bthf_cops_cmd_callback)(RawAddress *bd_addr);
 
 /** Callback for call list (AT+CLCC)
  */
-typedef void (* bthf_clcc_cmd_callback) (bt_bdaddr_t *bd_addr);
+typedef void (* bthf_clcc_cmd_callback) (RawAddress *bd_addr);
 
 /** Callback for unknown AT command recd from HF
  *  at_string will contain the unparsed AT string
  */
-typedef void (* bthf_unknown_at_cmd_callback)(char *at_string, bt_bdaddr_t *bd_addr);
+typedef void (* bthf_unknown_at_cmd_callback)(char *at_string, RawAddress *bd_addr);
 
 /** Callback for keypressed (HSP) event.
  */
-typedef void (* bthf_key_pressed_cmd_callback)(bt_bdaddr_t *bd_addr);
+typedef void (* bthf_key_pressed_cmd_callback)(RawAddress *bd_addr);
 
 /** Callback for BIND. Pass the remote HF Indicators supported.
  */
-typedef void (* bthf_bind_cmd_callback)(char *at_string, bt_bdaddr_t *bd_addr);
+typedef void (* bthf_bind_cmd_callback)(char *at_string, RawAddress *bd_addr);
 
 /** Callback for BIEV. Pass the change in the Remote HF indicator values
  */
 typedef void (* bthf_biev_cmd_callback)(bthf_hf_ind_type_t ind_id, int ind_value,
-                                        bt_bdaddr_t *bd_addr);
+                                        RawAddress *bd_addr);
 
 /** BT-HF callback structure. */
 typedef struct {
@@ -255,45 +255,45 @@
     bt_status_t (*init)( bthf_callbacks_t* callbacks, int max_hf_clients, bool inband_ringing_supported);
 
     /** connect to headset */
-    bt_status_t (*connect)( bt_bdaddr_t *bd_addr );
+    bt_status_t (*connect)( RawAddress *bd_addr );
 
     /** dis-connect from headset */
-    bt_status_t (*disconnect)( bt_bdaddr_t *bd_addr );
+    bt_status_t (*disconnect)( RawAddress *bd_addr );
 
     /** create an audio connection */
-    bt_status_t (*connect_audio)( bt_bdaddr_t *bd_addr );
+    bt_status_t (*connect_audio)( RawAddress *bd_addr );
 
     /** close the audio connection */
-    bt_status_t (*disconnect_audio)( bt_bdaddr_t *bd_addr );
+    bt_status_t (*disconnect_audio)( RawAddress *bd_addr );
 
     /** start voice recognition */
-    bt_status_t (*start_voice_recognition)( bt_bdaddr_t *bd_addr );
+    bt_status_t (*start_voice_recognition)( RawAddress *bd_addr );
 
     /** stop voice recognition */
-    bt_status_t (*stop_voice_recognition)( bt_bdaddr_t *bd_addr );
+    bt_status_t (*stop_voice_recognition)( RawAddress *bd_addr );
 
     /** volume control */
-    bt_status_t (*volume_control) (bthf_volume_type_t type, int volume, bt_bdaddr_t *bd_addr );
+    bt_status_t (*volume_control) (bthf_volume_type_t type, int volume, RawAddress *bd_addr );
 
     /** Combined device status change notification */
     bt_status_t (*device_status_notification)(bthf_network_state_t ntk_state, bthf_service_type_t svc_type, int signal,
                            int batt_chg);
 
     /** Response for COPS command */
-    bt_status_t (*cops_response)(const char *cops, bt_bdaddr_t *bd_addr );
+    bt_status_t (*cops_response)(const char *cops, RawAddress *bd_addr );
 
     /** Response for CIND command */
     bt_status_t (*cind_response)(int svc, int num_active, int num_held, bthf_call_state_t call_setup_state,
-                                 int signal, int roam, int batt_chg, bt_bdaddr_t *bd_addr );
+                                 int signal, int roam, int batt_chg, RawAddress *bd_addr );
 
     /** Pre-formatted AT response, typically in response to unknown AT cmd */
-    bt_status_t (*formatted_at_response)(const char *rsp, bt_bdaddr_t *bd_addr );
+    bt_status_t (*formatted_at_response)(const char *rsp, RawAddress *bd_addr );
 
     /** ok/error response
      *  ERROR (0)
      *  OK    (1)
      */
-    bt_status_t (*at_response) (bthf_at_response_t response_code, int error_code, bt_bdaddr_t *bd_addr );
+    bt_status_t (*at_response) (bthf_at_response_t response_code, int error_code, RawAddress *bd_addr );
 
     /** response for CLCC command
      *  Can be iteratively called for each call index
@@ -302,7 +302,7 @@
     bt_status_t (*clcc_response) (int index, bthf_call_direction_t dir,
                                 bthf_call_state_t state, bthf_call_mode_t mode,
                                 bthf_call_mpty_type_t mpty, const char *number,
-                                bthf_call_addrtype_t type, bt_bdaddr_t *bd_addr );
+                                bthf_call_addrtype_t type, RawAddress *bd_addr );
 
     /** notify of a call state change
      *  Each update notifies
@@ -318,11 +318,11 @@
     void  (*cleanup)( void );
 
     /** configuration for the SCO codec */
-    bt_status_t (*configure_wbs)( bt_bdaddr_t *bd_addr ,bthf_wbs_config_t config );
+    bt_status_t (*configure_wbs)( RawAddress *bd_addr ,bthf_wbs_config_t config );
 
     /** Response for HF Indicator change (+BIND) */
     bt_status_t (*bind_response)(bthf_hf_ind_type_t ind_id, bthf_hf_ind_status_t ind_status,
-                                 bt_bdaddr_t *bd_addr);
+                                 RawAddress *bd_addr);
 
     /** Whether we will initiate SCO or not **/
     bt_status_t (*set_sco_allowed)(bool value);
diff --git a/include/hardware/bt_hf_client.h b/include/hardware/bt_hf_client.h
index b728be3..5207296 100644
--- a/include/hardware/bt_hf_client.h
+++ b/include/hardware/bt_hf_client.h
@@ -167,7 +167,7 @@
  *  state will have one of the values from BtHfConnectionState
  *  peer/chld_features are valid only for BTHF_CLIENT_CONNECTION_STATE_SLC_CONNECTED state
  */
-typedef void (* bthf_client_connection_state_callback)(const bt_bdaddr_t *bd_addr,
+typedef void (* bthf_client_connection_state_callback)(const RawAddress *bd_addr,
                                                        bthf_client_connection_state_t state,
                                                        unsigned int peer_feat,
                                                        unsigned int chld_feat);
@@ -175,73 +175,73 @@
 /** Callback for audio connection state change.
  *  state will have one of the values from BtHfAudioState
  */
-typedef void (* bthf_client_audio_state_callback)(const bt_bdaddr_t *bd_addr,
+typedef void (* bthf_client_audio_state_callback)(const RawAddress *bd_addr,
                                                   bthf_client_audio_state_t state);
 
 /** Callback for VR connection state change.
  *  state will have one of the values from BtHfVRState
  */
-typedef void (* bthf_client_vr_cmd_callback)(const bt_bdaddr_t *bd_addr, bthf_client_vr_state_t state);
+typedef void (* bthf_client_vr_cmd_callback)(const RawAddress *bd_addr, bthf_client_vr_state_t state);
 
 /** Callback for network state change
  */
-typedef void (* bthf_client_network_state_callback) (const bt_bdaddr_t *bd_addr,
+typedef void (* bthf_client_network_state_callback) (const RawAddress *bd_addr,
                                                      bthf_client_network_state_t state);
 
 /** Callback for network roaming status change
  */
-typedef void (* bthf_client_network_roaming_callback) (const bt_bdaddr_t *bd_addr,
+typedef void (* bthf_client_network_roaming_callback) (const RawAddress *bd_addr,
                                                        bthf_client_service_type_t type);
 
 /** Callback for signal strength indication
  */
-typedef void (* bthf_client_network_signal_callback) (const bt_bdaddr_t *bd_addr,
+typedef void (* bthf_client_network_signal_callback) (const RawAddress *bd_addr,
                                                       int signal_strength);
 
 /** Callback for battery level indication
  */
-typedef void (* bthf_client_battery_level_callback) (const bt_bdaddr_t *bd_addr,
+typedef void (* bthf_client_battery_level_callback) (const RawAddress *bd_addr,
                                                      int battery_level);
 
 /** Callback for current operator name
  */
-typedef void (* bthf_client_current_operator_callback) (const bt_bdaddr_t *bd_addr,
+typedef void (* bthf_client_current_operator_callback) (const RawAddress *bd_addr,
                                                         const char *name);
 
 /** Callback for call indicator
  */
-typedef void (* bthf_client_call_callback) (const bt_bdaddr_t *bd_addr, bthf_client_call_t call);
+typedef void (* bthf_client_call_callback) (const RawAddress *bd_addr, bthf_client_call_t call);
 
 /** Callback for callsetup indicator
  */
-typedef void (* bthf_client_callsetup_callback) (const bt_bdaddr_t *bd_addr,
+typedef void (* bthf_client_callsetup_callback) (const RawAddress *bd_addr,
                                                  bthf_client_callsetup_t callsetup);
 
 /** Callback for callheld indicator
  */
-typedef void (* bthf_client_callheld_callback) (const bt_bdaddr_t *bd_addr,
+typedef void (* bthf_client_callheld_callback) (const RawAddress *bd_addr,
                                                 bthf_client_callheld_t callheld);
 
 /** Callback for response and hold
  */
-typedef void (* bthf_client_resp_and_hold_callback) (const bt_bdaddr_t *bd_addr,
+typedef void (* bthf_client_resp_and_hold_callback) (const RawAddress *bd_addr,
                                                      bthf_client_resp_and_hold_t resp_and_hold);
 
 /** Callback for Calling Line Identification notification
  *  Will be called only when there is an incoming call and number is provided.
  */
-typedef void (* bthf_client_clip_callback) (const bt_bdaddr_t *bd_addr, const char *number);
+typedef void (* bthf_client_clip_callback) (const RawAddress *bd_addr, const char *number);
 
 /**
  * Callback for Call Waiting notification
  */
-typedef void (* bthf_client_call_waiting_callback) (const bt_bdaddr_t *bd_addr, const char *number);
+typedef void (* bthf_client_call_waiting_callback) (const RawAddress *bd_addr, const char *number);
 
 /**
  *  Callback for listing current calls. Can be called multiple time.
  *  If number is unknown NULL is passed.
  */
-typedef void (*bthf_client_current_calls) (const bt_bdaddr_t *bd_addr, int index,
+typedef void (*bthf_client_current_calls) (const RawAddress *bd_addr, int index,
                                            bthf_client_call_direction_t dir,
                                            bthf_client_call_state_t state,
                                            bthf_client_call_mpty_type_t mpty,
@@ -249,38 +249,38 @@
 
 /** Callback for audio volume change
  */
-typedef void (*bthf_client_volume_change_callback) (const bt_bdaddr_t *bd_addr,
+typedef void (*bthf_client_volume_change_callback) (const RawAddress *bd_addr,
                                                     bthf_client_volume_type_t type,
                                                     int volume);
 
 /** Callback for command complete event
  *  cme is valid only for BTHF_CLIENT_CMD_COMPLETE_ERROR_CME type
  */
-typedef void (*bthf_client_cmd_complete_callback) (const bt_bdaddr_t *bd_addr,
+typedef void (*bthf_client_cmd_complete_callback) (const RawAddress *bd_addr,
                                                    bthf_client_cmd_complete_t type,
                                                    int cme);
 
 /** Callback for subscriber information
  */
-typedef void (* bthf_client_subscriber_info_callback) (const bt_bdaddr_t *bd_addr,
+typedef void (* bthf_client_subscriber_info_callback) (const RawAddress *bd_addr,
                                                        const char *name,
                                                        bthf_client_subscriber_service_type_t type);
 
 /** Callback for in-band ring tone settings
  */
-typedef void (* bthf_client_in_band_ring_tone_callback) (const bt_bdaddr_t *bd_addr,
+typedef void (* bthf_client_in_band_ring_tone_callback) (const RawAddress *bd_addr,
                                                          bthf_client_in_band_ring_state_t state);
 
 /**
  * Callback for requested number from AG
  */
-typedef void (* bthf_client_last_voice_tag_number_callback) (const bt_bdaddr_t *bd_addr,
+typedef void (* bthf_client_last_voice_tag_number_callback) (const RawAddress *bd_addr,
                                                              const char *number);
 
 /**
  * Callback for sending ring indication to app
  */
-typedef void (* bthf_client_ring_indication_callback) (const bt_bdaddr_t *bd_addr);
+typedef void (* bthf_client_ring_indication_callback) (const RawAddress *bd_addr);
 
 /** BT-HF callback structure. */
 typedef struct {
@@ -320,62 +320,62 @@
     bt_status_t (*init)(bthf_client_callbacks_t* callbacks);
 
     /** connect to audio gateway */
-    bt_status_t (*connect)(bt_bdaddr_t *bd_addr);
+    bt_status_t (*connect)(RawAddress *bd_addr);
 
     /** disconnect from audio gateway */
-    bt_status_t (*disconnect)(const bt_bdaddr_t *bd_addr);
+    bt_status_t (*disconnect)(const RawAddress *bd_addr);
 
     /** create an audio connection */
-    bt_status_t (*connect_audio)(const bt_bdaddr_t *bd_addr);
+    bt_status_t (*connect_audio)(const RawAddress *bd_addr);
 
     /** close the audio connection */
-    bt_status_t (*disconnect_audio)(const bt_bdaddr_t *bd_addr);
+    bt_status_t (*disconnect_audio)(const RawAddress *bd_addr);
 
     /** start voice recognition */
-    bt_status_t (*start_voice_recognition)(const bt_bdaddr_t *bd_addr);
+    bt_status_t (*start_voice_recognition)(const RawAddress *bd_addr);
 
     /** stop voice recognition */
-    bt_status_t (*stop_voice_recognition)(const bt_bdaddr_t *bd_addr);
+    bt_status_t (*stop_voice_recognition)(const RawAddress *bd_addr);
 
     /** volume control */
-    bt_status_t (*volume_control) (const bt_bdaddr_t *bd_addr,
+    bt_status_t (*volume_control) (const RawAddress *bd_addr,
                                    bthf_client_volume_type_t type,
                                    int volume);
 
     /** place a call with number a number
      * if number is NULL last called number is called (aka re-dial)*/
-    bt_status_t (*dial) (const bt_bdaddr_t *bd_addr, const char *number);
+    bt_status_t (*dial) (const RawAddress *bd_addr, const char *number);
 
     /** place a call with number specified by location (speed dial) */
-    bt_status_t (*dial_memory) (const bt_bdaddr_t *bd_addr, int location);
+    bt_status_t (*dial_memory) (const RawAddress *bd_addr, int location);
 
     /** perform specified call related action
      * idx is limited only for enhanced call control related action
      */
-    bt_status_t (*handle_call_action) (const bt_bdaddr_t *bd_addr,
+    bt_status_t (*handle_call_action) (const RawAddress *bd_addr,
                                        bthf_client_call_action_t action,
                                        int idx);
 
     /** query list of current calls */
-    bt_status_t (*query_current_calls) (const bt_bdaddr_t *bd_addr);
+    bt_status_t (*query_current_calls) (const RawAddress *bd_addr);
 
     /** query name of current selected operator */
-    bt_status_t (*query_current_operator_name) (const bt_bdaddr_t *bd_addr);
+    bt_status_t (*query_current_operator_name) (const RawAddress *bd_addr);
 
     /** Retrieve subscriber information */
-    bt_status_t (*retrieve_subscriber_info) (const bt_bdaddr_t *bd_addr);
+    bt_status_t (*retrieve_subscriber_info) (const RawAddress *bd_addr);
 
     /** Send DTMF code*/
-    bt_status_t (*send_dtmf) (const bt_bdaddr_t *bd_addr, char code);
+    bt_status_t (*send_dtmf) (const RawAddress *bd_addr, char code);
 
     /** Request a phone number from AG corresponding to last voice tag recorded */
-    bt_status_t (*request_last_voice_tag_number) (const bt_bdaddr_t *bd_addr);
+    bt_status_t (*request_last_voice_tag_number) (const RawAddress *bd_addr);
 
     /** Closes the interface. */
     void (*cleanup)(void);
 
     /** Send AT Command. */
-    bt_status_t (*send_at_cmd) (const bt_bdaddr_t *bd_addr, int cmd, int val1, int val2, const char *arg);
+    bt_status_t (*send_at_cmd) (const RawAddress *bd_addr, int cmd, int val1, int val2, const char *arg);
 } bthf_client_interface_t;
 
 __END_DECLS
diff --git a/include/hardware/bt_hh.h b/include/hardware/bt_hh.h
index ece3c11..c39e3e5 100644
--- a/include/hardware/bt_hh.h
+++ b/include/hardware/bt_hh.h
@@ -87,37 +87,37 @@
 /** Callback for connection state change.
  *  state will have one of the values from bthh_connection_state_t
  */
-typedef void (* bthh_connection_state_callback)(bt_bdaddr_t *bd_addr, bthh_connection_state_t state);
+typedef void (* bthh_connection_state_callback)(RawAddress *bd_addr, bthh_connection_state_t state);
 
 /** Callback for vitual unplug api.
  *  the status of the vitual unplug
  */
-typedef void (* bthh_virtual_unplug_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status);
+typedef void (* bthh_virtual_unplug_callback)(RawAddress *bd_addr, bthh_status_t hh_status);
 
 /** Callback for get hid info
  *  hid_info will contain attr_mask, sub_class, app_id, vendor_id, product_id, version, ctry_code, len
  */
-typedef void (* bthh_hid_info_callback)(bt_bdaddr_t *bd_addr, bthh_hid_info_t hid_info);
+typedef void (* bthh_hid_info_callback)(RawAddress *bd_addr, bthh_hid_info_t hid_info);
 
 /** Callback for get protocol api.
  *  the protocol mode is one of the value from bthh_protocol_mode_t
  */
-typedef void (* bthh_protocol_mode_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status, bthh_protocol_mode_t mode);
+typedef void (* bthh_protocol_mode_callback)(RawAddress *bd_addr, bthh_status_t hh_status, bthh_protocol_mode_t mode);
 
 /** Callback for get/set_idle_time api.
  */
-typedef void (* bthh_idle_time_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status, int idle_rate);
+typedef void (* bthh_idle_time_callback)(RawAddress *bd_addr, bthh_status_t hh_status, int idle_rate);
 
 
 /** Callback for get report api.
  *  if staus is ok rpt_data contains the report data
  */
-typedef void (* bthh_get_report_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status, uint8_t* rpt_data, int rpt_size);
+typedef void (* bthh_get_report_callback)(RawAddress *bd_addr, bthh_status_t hh_status, uint8_t* rpt_data, int rpt_size);
 
 /** Callback for set_report/set_protocol api and if error
  *  occurs for get_report/get_protocol api.
  */
-typedef void (* bthh_handshake_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status);
+typedef void (* bthh_handshake_callback)(RawAddress *bd_addr, bthh_status_t hh_status);
 
 
 /** BT-HH callback structure. */
@@ -148,37 +148,37 @@
     bt_status_t (*init)( bthh_callbacks_t* callbacks );
 
     /** connect to hid device */
-    bt_status_t (*connect)( bt_bdaddr_t *bd_addr);
+    bt_status_t (*connect)( RawAddress *bd_addr);
 
     /** dis-connect from hid device */
-    bt_status_t (*disconnect)( bt_bdaddr_t *bd_addr );
+    bt_status_t (*disconnect)( RawAddress *bd_addr );
 
     /** Virtual UnPlug (VUP) the specified HID device */
-    bt_status_t (*virtual_unplug)(bt_bdaddr_t *bd_addr);
+    bt_status_t (*virtual_unplug)(RawAddress *bd_addr);
 
     /** Set the HID device descriptor for the specified HID device. */
-    bt_status_t (*set_info)(bt_bdaddr_t *bd_addr, bthh_hid_info_t hid_info );
+    bt_status_t (*set_info)(RawAddress *bd_addr, bthh_hid_info_t hid_info );
 
     /** Get the HID proto mode. */
-    bt_status_t (*get_protocol) (bt_bdaddr_t *bd_addr, bthh_protocol_mode_t protocolMode);
+    bt_status_t (*get_protocol) (RawAddress *bd_addr, bthh_protocol_mode_t protocolMode);
 
     /** Set the HID proto mode. */
-    bt_status_t (*set_protocol)(bt_bdaddr_t *bd_addr, bthh_protocol_mode_t protocolMode);
+    bt_status_t (*set_protocol)(RawAddress *bd_addr, bthh_protocol_mode_t protocolMode);
 
     /** Get the HID Idle Time */
-    bt_status_t (*get_idle_time)(bt_bdaddr_t *bd_addr);
+    bt_status_t (*get_idle_time)(RawAddress *bd_addr);
 
     /** Set the HID Idle Time */
-    bt_status_t (*set_idle_time)(bt_bdaddr_t *bd_addr, uint8_t idleTime);
+    bt_status_t (*set_idle_time)(RawAddress *bd_addr, uint8_t idleTime);
 
     /** Send a GET_REPORT to HID device. */
-    bt_status_t (*get_report)(bt_bdaddr_t *bd_addr, bthh_report_type_t reportType, uint8_t reportId, int bufferSize);
+    bt_status_t (*get_report)(RawAddress *bd_addr, bthh_report_type_t reportType, uint8_t reportId, int bufferSize);
 
     /** Send a SET_REPORT to HID device. */
-    bt_status_t (*set_report)(bt_bdaddr_t *bd_addr, bthh_report_type_t reportType, char* report);
+    bt_status_t (*set_report)(RawAddress *bd_addr, bthh_report_type_t reportType, char* report);
 
     /** Send data to HID device. */
-    bt_status_t (*send_data)(bt_bdaddr_t *bd_addr, char* data);
+    bt_status_t (*send_data)(RawAddress *bd_addr, char* data);
 
     /** Closes the interface. */
     void  (*cleanup)( void );
diff --git a/include/hardware/bt_hl.h b/include/hardware/bt_hl.h
index bd29e3a..6d909fb 100644
--- a/include/hardware/bt_hl.h
+++ b/include/hardware/bt_hl.h
@@ -78,7 +78,7 @@
  *  state will have one of the values from
  *  bthl_connection_state_t and fd (file descriptor)
  */
-typedef void (* bthl_channel_state_callback)(int app_id, bt_bdaddr_t *bd_addr, int mdep_cfg_index, int channel_id, bthl_channel_state_t state, int fd);
+typedef void (* bthl_channel_state_callback)(int app_id, RawAddress *bd_addr, int mdep_cfg_index, int channel_id, bthl_channel_state_t state, int fd);
 
 /** BT-HL callback structure. */
 typedef struct {
@@ -107,7 +107,7 @@
     bt_status_t (*unregister_application) (int app_id);
 
     /** connect channel */
-    bt_status_t (*connect_channel)(int app_id, bt_bdaddr_t *bd_addr, int mdep_cfg_index, int *channel_id);
+    bt_status_t (*connect_channel)(int app_id, RawAddress *bd_addr, int mdep_cfg_index, int *channel_id);
 
     /** destroy channel */
     bt_status_t (*destroy_channel)(int channel_id);
diff --git a/include/hardware/bt_mce.h b/include/hardware/bt_mce.h
index 5d159b3..406a26a 100644
--- a/include/hardware/bt_mce.h
+++ b/include/hardware/bt_mce.h
@@ -29,7 +29,7 @@
 } btmce_mas_instance_t;
 
 /** callback for get_remote_mas_instances */
-typedef void (*btmce_remote_mas_instances_callback)(bt_status_t status, bt_bdaddr_t *bd_addr,
+typedef void (*btmce_remote_mas_instances_callback)(bt_status_t status, RawAddress *bd_addr,
                                                     int num_instances, btmce_mas_instance_t *instances);
 
 typedef struct {
@@ -46,7 +46,7 @@
     bt_status_t (*init)(btmce_callbacks_t *callbacks);
 
     /** search for MAS instances on remote device */
-    bt_status_t (*get_remote_mas_instances)(bt_bdaddr_t *bd_addr);
+    bt_status_t (*get_remote_mas_instances)(RawAddress *bd_addr);
 } btmce_interface_t;
 
 __END_DECLS
diff --git a/include/hardware/bt_pan.h b/include/hardware/bt_pan.h
index 83e7949..2f2e2e5 100644
--- a/include/hardware/bt_pan.h
+++ b/include/hardware/bt_pan.h
@@ -39,7 +39,7 @@
 * Callback for pan connection state
 */
 typedef void (*btpan_connection_state_callback)(btpan_connection_state_t state, bt_status_t error,
-                                                const bt_bdaddr_t *bd_addr, int local_role, int remote_role);
+                                                const RawAddress *bd_addr, int local_role, int remote_role);
 typedef void (*btpan_control_state_callback)(btpan_control_state_t state, int local_role,
                                             bt_status_t error, const char* ifname);
 
@@ -69,11 +69,11 @@
      * start bluetooth pan connection to the remote device by specified pan role. The result state will be
      * returned by btpan_connection_state_callback
      */
-    bt_status_t (*connect)(const bt_bdaddr_t *bd_addr, int local_role, int remote_role);
+    bt_status_t (*connect)(const RawAddress *bd_addr, int local_role, int remote_role);
     /**
      * stop bluetooth pan connection. The result state will be returned by btpan_connection_state_callback
      */
-    bt_status_t (*disconnect)(const bt_bdaddr_t *bd_addr);
+    bt_status_t (*disconnect)(const RawAddress *bd_addr);
 
     /**
      * Cleanup the pan interface
diff --git a/include/hardware/bt_rc.h b/include/hardware/bt_rc.h
index ee99d91..93fb32f 100644
--- a/include/hardware/bt_rc.h
+++ b/include/hardware/bt_rc.h
@@ -287,98 +287,98 @@
 } btrc_br_folder_name_t;
 
 /** Callback for the controller's supported feautres */
-typedef void (* btrc_remote_features_callback)(bt_bdaddr_t *bd_addr,
+typedef void (* btrc_remote_features_callback)(RawAddress *bd_addr,
                                                       btrc_remote_features_t features);
 
 /** Callback for play status request */
-typedef void (* btrc_get_play_status_callback)(bt_bdaddr_t *bd_addr);
+typedef void (* btrc_get_play_status_callback)(RawAddress *bd_addr);
 
 /** Callback for list player application attributes (Shuffle, Repeat,...) */
-typedef void (* btrc_list_player_app_attr_callback)(bt_bdaddr_t *bd_addr);
+typedef void (* btrc_list_player_app_attr_callback)(RawAddress *bd_addr);
 
 /** Callback for list player application attributes (Shuffle, Repeat,...) */
 typedef void (* btrc_list_player_app_values_callback)(btrc_player_attr_t attr_id,
-    bt_bdaddr_t *bd_addr);
+    RawAddress *bd_addr);
 
 /** Callback for getting the current player application settings value
 **  num_attr: specifies the number of attribute ids contained in p_attrs
 */
 typedef void (* btrc_get_player_app_value_callback) (uint8_t num_attr,
-    btrc_player_attr_t *p_attrs, bt_bdaddr_t *bd_addr);
+    btrc_player_attr_t *p_attrs, RawAddress *bd_addr);
 
 /** Callback for getting the player application settings attributes' text
 **  num_attr: specifies the number of attribute ids contained in p_attrs
 */
 typedef void (* btrc_get_player_app_attrs_text_callback) (uint8_t num_attr,
-    btrc_player_attr_t *p_attrs, bt_bdaddr_t *bd_addr);
+    btrc_player_attr_t *p_attrs, RawAddress *bd_addr);
 
 /** Callback for getting the player application settings values' text
 **  num_attr: specifies the number of value ids contained in p_vals
 */
 typedef void (* btrc_get_player_app_values_text_callback) (uint8_t attr_id, uint8_t num_val,
-    uint8_t *p_vals, bt_bdaddr_t *bd_addr);
+    uint8_t *p_vals, RawAddress *bd_addr);
 
 /** Callback for setting the player application settings values */
 typedef void (* btrc_set_player_app_value_callback) (btrc_player_settings_t *p_vals,
-    bt_bdaddr_t *bd_addr);
+    RawAddress *bd_addr);
 
 /** Callback to fetch the get element attributes of the current song
 **  num_attr: specifies the number of attributes requested in p_attrs
 */
 typedef void (* btrc_get_element_attr_callback) (uint8_t num_attr, btrc_media_attr_t *p_attrs,
-    bt_bdaddr_t *bd_addr);
+    RawAddress *bd_addr);
 
 /** Callback for register notification (Play state change/track change/...)
 **  param: Is only valid if event_id is BTRC_EVT_PLAY_POS_CHANGED
 */
 typedef void (* btrc_register_notification_callback) (btrc_event_id_t event_id, uint32_t param,
-    bt_bdaddr_t *bd_addr);
+    RawAddress *bd_addr);
 
 /* AVRCP 1.4 Enhancements */
 /** Callback for volume change on CT
 **  volume: Current volume setting on the CT (0-127)
 */
-typedef void (* btrc_volume_change_callback) (uint8_t volume, uint8_t ctype, bt_bdaddr_t *bd_addr);
+typedef void (* btrc_volume_change_callback) (uint8_t volume, uint8_t ctype, RawAddress *bd_addr);
 
 /** Callback for passthrough commands */
-typedef void (* btrc_passthrough_cmd_callback) (int id, int key_state, bt_bdaddr_t *bd_addr);
+typedef void (* btrc_passthrough_cmd_callback) (int id, int key_state, RawAddress *bd_addr);
 
 /** Callback for set addressed player response on TG **/
-typedef void (* btrc_set_addressed_player_callback) (uint16_t player_id, bt_bdaddr_t *bd_addr);
+typedef void (* btrc_set_addressed_player_callback) (uint16_t player_id, RawAddress *bd_addr);
 
 /** Callback for set browsed player response on TG **/
-typedef void (* btrc_set_browsed_player_callback) (uint16_t player_id, bt_bdaddr_t *bd_addr);
+typedef void (* btrc_set_browsed_player_callback) (uint16_t player_id, RawAddress *bd_addr);
 
 /** Callback for get folder items on TG
 **  num_attr: specifies the number of attributes requested in p_attr_ids
 */
 typedef void (* btrc_get_folder_items_callback) (uint8_t scope, uint32_t start_item,
-              uint32_t end_item, uint8_t num_attr, uint32_t *p_attr_ids, bt_bdaddr_t *bd_addr);
+              uint32_t end_item, uint8_t num_attr, uint32_t *p_attr_ids, RawAddress *bd_addr);
 
 /** Callback for changing browsed path on TG **/
 typedef void (* btrc_change_path_callback) (uint8_t direction,
-                uint8_t* folder_uid, bt_bdaddr_t *bd_addr);
+                uint8_t* folder_uid, RawAddress *bd_addr);
 
 /** Callback to fetch the get item attributes of the media item
 **  num_attr: specifies the number of attributes requested in p_attrs
 */
 typedef void (* btrc_get_item_attr_callback) (uint8_t scope, uint8_t* uid, uint16_t uid_counter,
-                uint8_t num_attr, btrc_media_attr_t *p_attrs, bt_bdaddr_t *bd_addr);
+                uint8_t num_attr, btrc_media_attr_t *p_attrs, RawAddress *bd_addr);
 
 /** Callback for play request for the media item indicated by an identifier */
 typedef void (* btrc_play_item_callback) (uint8_t scope,
-                uint16_t uid_counter, uint8_t* uid, bt_bdaddr_t *bd_addr);
+                uint16_t uid_counter, uint8_t* uid, RawAddress *bd_addr);
 
 /** Callback to fetch total number of items from a folder **/
-typedef void (* btrc_get_total_num_of_items_callback) (uint8_t scope, bt_bdaddr_t *bd_addr);
+typedef void (* btrc_get_total_num_of_items_callback) (uint8_t scope, RawAddress *bd_addr);
 
 /** Callback for conducting recursive search on a current browsed path for a specified string */
 typedef void (* btrc_search_callback) (uint16_t charset_id,
-                uint16_t str_len, uint8_t* p_str, bt_bdaddr_t *bd_addr);
+                uint16_t str_len, uint8_t* p_str, RawAddress *bd_addr);
 
 /** Callback to add a specified media item indicated by an identifier to now playing queue. */
 typedef void (* btrc_add_to_now_playing_callback) (uint8_t scope,
-                uint8_t* uid, uint16_t  uid_counter, bt_bdaddr_t *bd_addr);
+                uint8_t* uid, uint16_t  uid_counter, RawAddress *bd_addr);
 
 /** BT-RC Target callback structure. */
 typedef struct {
@@ -422,45 +422,45 @@
     **  2. Song duration/length
     **  3. Song position
     */
-    bt_status_t (*get_play_status_rsp)( bt_bdaddr_t *bd_addr, btrc_play_status_t play_status,
+    bt_status_t (*get_play_status_rsp)( RawAddress *bd_addr, btrc_play_status_t play_status,
         uint32_t song_len, uint32_t song_pos);
 
     /** Lists the support player application attributes (Shuffle/Repeat/...)
     **  num_attr: Specifies the number of attributes contained in the pointer p_attrs
     */
-    bt_status_t (*list_player_app_attr_rsp)( bt_bdaddr_t *bd_addr, int num_attr,
+    bt_status_t (*list_player_app_attr_rsp)( RawAddress *bd_addr, int num_attr,
         btrc_player_attr_t *p_attrs);
 
     /** Lists the support player application attributes (Shuffle Off/On/Group)
     **  num_val: Specifies the number of values contained in the pointer p_vals
     */
-    bt_status_t (*list_player_app_value_rsp)( bt_bdaddr_t *bd_addr, int num_val, uint8_t *p_vals);
+    bt_status_t (*list_player_app_value_rsp)( RawAddress *bd_addr, int num_val, uint8_t *p_vals);
 
     /** Returns the current application attribute values for each of the specified attr_id */
-    bt_status_t (*get_player_app_value_rsp)( bt_bdaddr_t *bd_addr, btrc_player_settings_t *p_vals);
+    bt_status_t (*get_player_app_value_rsp)( RawAddress *bd_addr, btrc_player_settings_t *p_vals);
 
     /** Returns the application attributes text ("Shuffle"/"Repeat"/...)
     **  num_attr: Specifies the number of attributes' text contained in the pointer p_attrs
     */
-    bt_status_t (*get_player_app_attr_text_rsp)( bt_bdaddr_t *bd_addr, int num_attr,
+    bt_status_t (*get_player_app_attr_text_rsp)( RawAddress *bd_addr, int num_attr,
         btrc_player_setting_text_t *p_attrs);
 
     /** Returns the application attributes text ("Shuffle"/"Repeat"/...)
     **  num_attr: Specifies the number of attribute values' text contained in the pointer p_vals
     */
-    bt_status_t (*get_player_app_value_text_rsp)( bt_bdaddr_t *bd_addr, int num_val,
+    bt_status_t (*get_player_app_value_text_rsp)( RawAddress *bd_addr, int num_val,
         btrc_player_setting_text_t *p_vals);
 
     /** Returns the current songs' element attributes text ("Title"/"Album"/"Artist")
     **  num_attr: Specifies the number of attributes' text contained in the pointer p_attrs
     */
-    bt_status_t (*get_element_attr_rsp)( bt_bdaddr_t *bd_addr, uint8_t num_attr,
+    bt_status_t (*get_element_attr_rsp)( RawAddress *bd_addr, uint8_t num_attr,
         btrc_element_attr_val_t *p_attrs);
 
     /** Response to set player attribute request ("Shuffle"/"Repeat")
     **  rsp_status: Status of setting the player attributes for the current media player
     */
-    bt_status_t (*set_player_app_value_rsp)(bt_bdaddr_t *bd_addr, btrc_status_t rsp_status);
+    bt_status_t (*set_player_app_value_rsp)(RawAddress *bd_addr, btrc_status_t rsp_status);
 
     /* Response to the register notification request (Play state change/track change/...).
     ** event_id: Refers to the event_id this notification change corresponds too
@@ -481,89 +481,89 @@
     bt_status_t (*set_volume)(uint8_t volume);
 
     /* Set addressed player response from TG to CT */
-    bt_status_t (*set_addressed_player_rsp)(bt_bdaddr_t *bd_addr, btrc_status_t rsp_status);
+    bt_status_t (*set_addressed_player_rsp)(RawAddress *bd_addr, btrc_status_t rsp_status);
 
     /* Set browsed player response from TG to CT */
-    bt_status_t (*set_browsed_player_rsp)(bt_bdaddr_t *bd_addr, btrc_status_t rsp_status,
+    bt_status_t (*set_browsed_player_rsp)(RawAddress *bd_addr, btrc_status_t rsp_status,
         uint32_t num_items, uint16_t charset_id, uint8_t folder_depth,
         btrc_br_folder_name_t *p_folders);
 
     /* Get folder item list response from TG to CT */
-     bt_status_t (*get_folder_items_list_rsp)(bt_bdaddr_t *bd_addr, btrc_status_t rsp_status,
+     bt_status_t (*get_folder_items_list_rsp)(RawAddress *bd_addr, btrc_status_t rsp_status,
         uint16_t uid_counter, uint8_t num_items, btrc_folder_items_t *p_items);
 
     /* Change path response from TG to CT */
-    bt_status_t (*change_path_rsp)(bt_bdaddr_t *bd_addr, btrc_status_t rsp_status,
+    bt_status_t (*change_path_rsp)(RawAddress *bd_addr, btrc_status_t rsp_status,
         uint32_t num_items);
 
     /** Returns the element's attributes num_attr: Specifies the number of attributes' text
      * contained in the pointer p_attrs
      */
-    bt_status_t (*get_item_attr_rsp)(bt_bdaddr_t *bd_addr, btrc_status_t rsp_status,
+    bt_status_t (*get_item_attr_rsp)(RawAddress *bd_addr, btrc_status_t rsp_status,
         uint8_t num_attr, btrc_element_attr_val_t *p_attrs);
 
     /* play media item response from TG to CT */
-    bt_status_t (*play_item_rsp)(bt_bdaddr_t *bd_addr, btrc_status_t rsp_status);
+    bt_status_t (*play_item_rsp)(RawAddress *bd_addr, btrc_status_t rsp_status);
 
     /* get total number of items response from TG to CT*/
-    bt_status_t (*get_total_num_of_items_rsp)(bt_bdaddr_t *bd_addr, btrc_status_t rsp_status,
+    bt_status_t (*get_total_num_of_items_rsp)(RawAddress *bd_addr, btrc_status_t rsp_status,
         uint32_t uid_counter, uint32_t num_items);
 
     /* Search VFS response from TG to CT */
-    bt_status_t (*search_rsp)(bt_bdaddr_t *bd_addr, btrc_status_t rsp_status, uint32_t uid_counter,
+    bt_status_t (*search_rsp)(RawAddress *bd_addr, btrc_status_t rsp_status, uint32_t uid_counter,
         uint32_t num_items);
 
     /* add_to_now playing list response from TG to CT */
-    bt_status_t (*add_to_now_playing_rsp)(bt_bdaddr_t *bd_addr, btrc_status_t rsp_status);
+    bt_status_t (*add_to_now_playing_rsp)(RawAddress *bd_addr, btrc_status_t rsp_status);
 
     /** Closes the interface. */
     void  (*cleanup)( void );
 } btrc_interface_t;
 
-typedef void (* btrc_passthrough_rsp_callback) (bt_bdaddr_t *bd_addr, int id, int key_state);
+typedef void (* btrc_passthrough_rsp_callback) (RawAddress *bd_addr, int id, int key_state);
 
 typedef void (* btrc_groupnavigation_rsp_callback) (int id, int key_state);
 
 typedef void (* btrc_connection_state_callback) (
-    bool rc_connect, bool bt_connect, bt_bdaddr_t *bd_addr);
+    bool rc_connect, bool bt_connect, RawAddress *bd_addr);
 
-typedef void (* btrc_ctrl_getrcfeatures_callback) (bt_bdaddr_t *bd_addr, int features);
+typedef void (* btrc_ctrl_getrcfeatures_callback) (RawAddress *bd_addr, int features);
 
-typedef void (* btrc_ctrl_setabsvol_cmd_callback) (bt_bdaddr_t *bd_addr, uint8_t abs_vol, uint8_t label);
+typedef void (* btrc_ctrl_setabsvol_cmd_callback) (RawAddress *bd_addr, uint8_t abs_vol, uint8_t label);
 
-typedef void (* btrc_ctrl_registernotification_abs_vol_callback) (bt_bdaddr_t *bd_addr, uint8_t label);
+typedef void (* btrc_ctrl_registernotification_abs_vol_callback) (RawAddress *bd_addr, uint8_t label);
 
-typedef void (* btrc_ctrl_setplayerapplicationsetting_rsp_callback) (bt_bdaddr_t *bd_addr,
+typedef void (* btrc_ctrl_setplayerapplicationsetting_rsp_callback) (RawAddress *bd_addr,
                                                                           uint8_t accepted);
 
-typedef void (* btrc_ctrl_playerapplicationsetting_callback)(bt_bdaddr_t *bd_addr,
+typedef void (* btrc_ctrl_playerapplicationsetting_callback)(RawAddress *bd_addr,
                                                                  uint8_t num_attr,
                                                                  btrc_player_app_attr_t *app_attrs,
                                                                  uint8_t num_ext_attr,
                                                                  btrc_player_app_ext_attr_t *ext_attrs);
 
-typedef void (* btrc_ctrl_playerapplicationsetting_changed_callback)(bt_bdaddr_t *bd_addr,
+typedef void (* btrc_ctrl_playerapplicationsetting_changed_callback)(RawAddress *bd_addr,
                                                                           btrc_player_settings_t *p_vals);
 
-typedef void (* btrc_ctrl_track_changed_callback)(bt_bdaddr_t *bd_addr, uint8_t num_attr,
+typedef void (* btrc_ctrl_track_changed_callback)(RawAddress *bd_addr, uint8_t num_attr,
                                                      btrc_element_attr_val_t *p_attrs);
 
-typedef void (* btrc_ctrl_play_position_changed_callback)(bt_bdaddr_t *bd_addr,
+typedef void (* btrc_ctrl_play_position_changed_callback)(RawAddress *bd_addr,
                                                               uint32_t song_len, uint32_t song_pos);
 
-typedef void (* btrc_ctrl_play_status_changed_callback)(bt_bdaddr_t *bd_addr,
+typedef void (* btrc_ctrl_play_status_changed_callback)(RawAddress *bd_addr,
                                                             btrc_play_status_t play_status);
 
-typedef void (* btrc_ctrl_get_folder_items_callback )(bt_bdaddr_t *bd_addr,
+typedef void (* btrc_ctrl_get_folder_items_callback )(RawAddress *bd_addr,
                                                             btrc_status_t status,
                                                             const btrc_folder_items_t *folder_items,
                                                             uint8_t count);
 
-typedef void (* btrc_ctrl_change_path_callback)(bt_bdaddr_t *bd_addr, uint8_t count);
+typedef void (* btrc_ctrl_change_path_callback)(RawAddress *bd_addr, uint8_t count);
 
 typedef void (* btrc_ctrl_set_browsed_player_callback )(
-    bt_bdaddr_t *bd_addr, uint8_t num_items, uint8_t depth);
-typedef void (* btrc_ctrl_set_addressed_player_callback)(bt_bdaddr_t *bd_addr, uint8_t status);
+    RawAddress *bd_addr, uint8_t num_items, uint8_t depth);
+typedef void (* btrc_ctrl_set_addressed_player_callback)(RawAddress *bd_addr, uint8_t status);
 /** BT-RC Controller callback structure. */
 typedef struct {
     /** set to sizeof(BtRcCallbacks) */
@@ -597,47 +597,47 @@
     bt_status_t (*init)( btrc_ctrl_callbacks_t* callbacks );
 
     /** send pass through command to target */
-    bt_status_t (*send_pass_through_cmd) (bt_bdaddr_t *bd_addr, uint8_t key_code,
+    bt_status_t (*send_pass_through_cmd) (RawAddress *bd_addr, uint8_t key_code,
             uint8_t key_state );
 
     /** send group navigation command to target */
-    bt_status_t (*send_group_navigation_cmd) (bt_bdaddr_t *bd_addr, uint8_t key_code,
+    bt_status_t (*send_group_navigation_cmd) (RawAddress *bd_addr, uint8_t key_code,
             uint8_t key_state );
 
     /** send command to set player applicaiton setting attributes to target */
-    bt_status_t (*set_player_app_setting_cmd) (bt_bdaddr_t *bd_addr, uint8_t num_attrib,
+    bt_status_t (*set_player_app_setting_cmd) (RawAddress *bd_addr, uint8_t num_attrib,
             uint8_t* attrib_ids, uint8_t* attrib_vals);
 
     /** send command to play a particular item */
     bt_status_t (*play_item_cmd) (
-        bt_bdaddr_t *bd_addr, uint8_t scope, uint8_t *uid, uint16_t uid_counter);
+        RawAddress *bd_addr, uint8_t scope, uint8_t *uid, uint16_t uid_counter);
 
     /** get the playback state */
-    bt_status_t (*get_playback_state_cmd) (bt_bdaddr_t *bd_addr);
+    bt_status_t (*get_playback_state_cmd) (RawAddress *bd_addr);
 
     /** get the now playing list */
-    bt_status_t (*get_now_playing_list_cmd) (bt_bdaddr_t *bd_addr, uint8_t start, uint8_t items);
+    bt_status_t (*get_now_playing_list_cmd) (RawAddress *bd_addr, uint8_t start, uint8_t items);
 
     /** get the folder list */
-    bt_status_t (*get_folder_list_cmd) (bt_bdaddr_t *bd_addr, uint8_t start, uint8_t items);
+    bt_status_t (*get_folder_list_cmd) (RawAddress *bd_addr, uint8_t start, uint8_t items);
 
     /** get the folder list */
-    bt_status_t (*get_player_list_cmd) (bt_bdaddr_t *bd_addr, uint8_t start, uint8_t items);
+    bt_status_t (*get_player_list_cmd) (RawAddress *bd_addr, uint8_t start, uint8_t items);
 
     /** get the folder list */
-    bt_status_t (*change_folder_path_cmd) (bt_bdaddr_t *bd_addr, uint8_t direction, uint8_t * uid);
+    bt_status_t (*change_folder_path_cmd) (RawAddress *bd_addr, uint8_t direction, uint8_t * uid);
 
     /** set browsed player */
-    bt_status_t (*set_browsed_player_cmd) (bt_bdaddr_t *bd_addr, uint16_t player_id);
+    bt_status_t (*set_browsed_player_cmd) (RawAddress *bd_addr, uint16_t player_id);
 
     /** set addressed player */
-    bt_status_t (*set_addressed_player_cmd) (bt_bdaddr_t *bd_addr, uint16_t player_id);
+    bt_status_t (*set_addressed_player_cmd) (RawAddress *bd_addr, uint16_t player_id);
 
     /** send rsp to set_abs_vol received from target */
-    bt_status_t (*set_volume_rsp) (bt_bdaddr_t *bd_addr, uint8_t abs_vol, uint8_t label);
+    bt_status_t (*set_volume_rsp) (RawAddress *bd_addr, uint8_t abs_vol, uint8_t label);
 
     /** send notificaiton rsp for abs vol to target */
-    bt_status_t (*register_abs_vol_rsp) (bt_bdaddr_t *bd_addr, btrc_notification_type_t rsp_type,
+    bt_status_t (*register_abs_vol_rsp) (RawAddress *bd_addr, btrc_notification_type_t rsp_type,
             uint8_t abs_vol, uint8_t label);
 
     /** Closes the interface. */
diff --git a/include/hardware/bt_sdp.h b/include/hardware/bt_sdp.h
index 8f39bc5..76cb579 100644
--- a/include/hardware/bt_sdp.h
+++ b/include/hardware/bt_sdp.h
@@ -109,7 +109,7 @@
 
 
 /** Callback for SDP search */
-typedef void (*btsdp_search_callback)(bt_status_t status, bt_bdaddr_t *bd_addr, uint8_t* uuid, int num_records, bluetooth_sdp_record *records);
+typedef void (*btsdp_search_callback)(bt_status_t status, RawAddress *bd_addr, uint8_t* uuid, int num_records, bluetooth_sdp_record *records);
 
 typedef struct {
     /** Set to sizeof(btsdp_callbacks_t) */
@@ -128,7 +128,7 @@
     bt_status_t (*deinit)();
 
     /** Search for SDP records with specific uuid on remote device */
-    bt_status_t (*sdp_search)(bt_bdaddr_t *bd_addr,  const uint8_t* uuid);
+    bt_status_t (*sdp_search)(RawAddress *bd_addr,  const uint8_t* uuid);
 
     /**
      * Use listen in the socket interface to create rfcomm and/or l2cap PSM channels,
diff --git a/include/hardware/bt_sock.h b/include/hardware/bt_sock.h
index 8d1a9e0..4c098f1 100644
--- a/include/hardware/bt_sock.h
+++ b/include/hardware/bt_sock.h
@@ -33,7 +33,7 @@
 /** Represents the standard BT SOCKET interface. */
 typedef struct {
     short size;
-    bt_bdaddr_t bd_addr;
+    RawAddress bd_addr;
     int channel;
     int status;
 
@@ -68,7 +68,7 @@
      * The callingUid is the UID of the application which is requesting the socket. This is
      * used for traffic accounting purposes.
      */
-    bt_status_t (*connect)(const bt_bdaddr_t *bd_addr, btsock_type_t type, const uint8_t* uuid,
+    bt_status_t (*connect)(const RawAddress *bd_addr, btsock_type_t type, const uint8_t* uuid,
             int channel, int* sock_fd, int flags, int callingUid);
 } btsock_interface_t;
 
