diff --git a/btif/src/btif_dm.c b/btif/src/btif_dm.c
index 195c043..7df911b 100644
--- a/btif/src/btif_dm.c
+++ b/btif/src/btif_dm.c
@@ -143,7 +143,7 @@
 #if (defined(BLE_INCLUDED) && (BLE_INCLUDED == TRUE))
     BOOLEAN is_le_only;
     BOOLEAN is_le_nc; /* LE Numeric comparison */
-    BD_ADDR static_bdaddr;
+    bt_bdaddr_t static_bdaddr;
     btif_dm_ble_cb_t ble;
 #endif
 } btif_dm_pairing_cb_t;
@@ -518,8 +518,10 @@
     if ((pairing_cb.state == state) && (state == BT_BOND_STATE_BONDING))
     {
         // Cross key pairing so send callback for static address
-        if (pairing_cb.static_bdaddr != NULL)
+        if (!bdaddr_is_empty(&pairing_cb.static_bdaddr))
+        {
             HAL_CBACK(bt_hal_cbacks, bond_state_changed_cb, status, bd_addr, state);
+        }
         return;
     }
 
@@ -1156,7 +1158,7 @@
             {
                 BTIF_TRACE_DEBUG("%s: bonding initiated due to cross key, adding static address",
                                  __func__);
-                bdcpy(pairing_cb.static_bdaddr, p_auth_cmpl->bd_addr);
+                bdcpy(pairing_cb.static_bdaddr.address, p_auth_cmpl->bd_addr);
             }
 
             if(btif_dm_inquiry_in_progress)
@@ -1483,7 +1485,7 @@
             */
             if ((pairing_cb.state == BT_BOND_STATE_BONDING) &&
                 ((bdcmp(p_data->disc_res.bd_addr, pairing_cb.bd_addr) == 0) ||
-                 (bdcmp(p_data->disc_res.bd_addr, pairing_cb.static_bdaddr) == 0)) &&
+                 (bdcmp(p_data->disc_res.bd_addr, pairing_cb.static_bdaddr.address) == 0)) &&
                   pairing_cb.sdp_attempts > 0)
             {
                  BTIF_TRACE_DEBUG("%s Remote Service SDP done. Call bond_state_changed_cb BONDED",
@@ -1492,7 +1494,7 @@
 
                  // If bonding occured due to cross-key pairing, send bonding callback
                  // for static address now
-                 if (bdcmp(p_data->disc_res.bd_addr, pairing_cb.static_bdaddr) == 0)
+                 if (bdcmp(p_data->disc_res.bd_addr, pairing_cb.static_bdaddr.address) == 0)
                     bond_state_changed(BT_STATUS_SUCCESS, &bd_addr, BT_BOND_STATE_BONDING);
 
                  bond_state_changed(BT_STATUS_SUCCESS, &bd_addr, BT_BOND_STATE_BONDED);
@@ -1818,110 +1820,31 @@
                 case BTA_LE_KEY_PENC:
                     BTIF_TRACE_DEBUG("Rcv BTA_LE_KEY_PENC");
                     pairing_cb.ble.is_penc_key_rcvd = TRUE;
-                    memcpy(pairing_cb.ble.penc_key.ltk,
-                           p_data->ble_key.p_key_value->penc_key.ltk, 16);
-                    memcpy(pairing_cb.ble.penc_key.rand,
-                           p_data->ble_key.p_key_value->penc_key.rand,8);
-                    pairing_cb.ble.penc_key.ediv = p_data->ble_key.p_key_value->penc_key.ediv;
-                    pairing_cb.ble.penc_key.sec_level =
-                           p_data->ble_key.p_key_value->penc_key.sec_level;
-
-                    for (i=0; i<16; i++)
-                    {
-                        BTIF_TRACE_DEBUG("pairing_cb.ble.penc_key.ltk[%d]=0x%02x",
-                                          i,pairing_cb.ble.penc_key.ltk[i]);
-                    }
-                    for (i=0; i<8; i++)
-                    {
-                        BTIF_TRACE_DEBUG("pairing_cb.ble.penc_key.rand[%d]=0x%02x",
-                                          i,pairing_cb.ble.penc_key.rand[i]);
-                    }
-                    BTIF_TRACE_DEBUG("pairing_cb.ble.penc_key.ediv=0x%04x",
-                        pairing_cb.ble.penc_key.ediv);
-                    BTIF_TRACE_DEBUG("pairing_cb.ble.penc_key.sec_level=0x%02x",
-                        pairing_cb.ble.penc_key.sec_level);
-                    BTIF_TRACE_DEBUG("pairing_cb.ble.penc_key.key_size=0x%02x",
-                        pairing_cb.ble.penc_key.key_size);
+                    pairing_cb.ble.penc_key = p_data->ble_key.p_key_value->penc_key;
                     break;
 
                 case BTA_LE_KEY_PID:
                     BTIF_TRACE_DEBUG("Rcv BTA_LE_KEY_PID");
                     pairing_cb.ble.is_pid_key_rcvd = TRUE;
-                    pairing_cb.ble.pid_key.addr_type =
-                           p_data->ble_key.p_key_value->pid_key.addr_type;
-                    memcpy(pairing_cb.ble.pid_key.irk,
-                           p_data->ble_key.p_key_value->pid_key.irk, 16);
-                    memcpy(pairing_cb.ble.pid_key.static_addr,
-                           p_data->ble_key.p_key_value->pid_key.static_addr,BD_ADDR_LEN);
-                    for (i=0; i<16; i++)
-                    {
-                        BTIF_TRACE_DEBUG("pairing_cb.ble.pid_key.irk[%d]=0x%02x"
-                                            ,i,pairing_cb.ble.pid_key.irk[i]);
-                    }
-                    for (i=0; i<BD_ADDR_LEN; i++)
-                    {
-                        BTIF_TRACE_DEBUG("piaring_cb.ble.pid_address[%d] = %x"
-                                            ,i, pairing_cb.ble.pid_key.static_addr[i]);
-                    }
+                    pairing_cb.ble.pid_key = p_data->ble_key.p_key_value->pid_key;
                     break;
 
                 case BTA_LE_KEY_PCSRK:
                     BTIF_TRACE_DEBUG("Rcv BTA_LE_KEY_PCSRK");
                     pairing_cb.ble.is_pcsrk_key_rcvd = TRUE;
-                    pairing_cb.ble.pcsrk_key.counter =
-                           p_data->ble_key.p_key_value->pcsrk_key.counter;
-                    pairing_cb.ble.pcsrk_key.sec_level =
-                           p_data->ble_key.p_key_value->pcsrk_key.sec_level;
-                    memcpy(pairing_cb.ble.pcsrk_key.csrk,
-                           p_data->ble_key.p_key_value->pcsrk_key.csrk,16);
-
-                    for (i=0; i<16; i++)
-                    {
-                        BTIF_TRACE_DEBUG("pairing_cb.ble.pcsrk_key.csrk[%d]=0x%02x",
-                                          i,pairing_cb.ble.pcsrk_key.csrk[i]);
-                    }
-                    BTIF_TRACE_DEBUG("pairing_cb.ble.pcsrk_key.counter=0x%08x",
-                                      pairing_cb.ble.pcsrk_key.counter);
-                    BTIF_TRACE_DEBUG("pairing_cb.ble.pcsrk_key.sec_level=0x%02x",
-                                      pairing_cb.ble.pcsrk_key.sec_level);
+                    pairing_cb.ble.pcsrk_key = p_data->ble_key.p_key_value->pcsrk_key;
                     break;
 
                 case BTA_LE_KEY_LENC:
                     BTIF_TRACE_DEBUG("Rcv BTA_LE_KEY_LENC");
                     pairing_cb.ble.is_lenc_key_rcvd = TRUE;
-                    pairing_cb.ble.lenc_key.div = p_data->ble_key.p_key_value->lenc_key.div;
-                    pairing_cb.ble.lenc_key.key_size =
-                           p_data->ble_key.p_key_value->lenc_key.key_size;
-                    pairing_cb.ble.lenc_key.sec_level =
-                           p_data->ble_key.p_key_value->lenc_key.sec_level;
-
-                    BTIF_TRACE_DEBUG("pairing_cb.ble.lenc_key.div=0x%04x",
-                                      pairing_cb.ble.lenc_key.div);
-                    BTIF_TRACE_DEBUG("pairing_cb.ble.lenc_key.key_size=0x%02x",
-                                      pairing_cb.ble.lenc_key.key_size);
-                    BTIF_TRACE_DEBUG("pairing_cb.ble.lenc_key.sec_level=0x%02x",
-                                      pairing_cb.ble.lenc_key.sec_level);
+                    pairing_cb.ble.lenc_key = p_data->ble_key.p_key_value->lenc_key;
                     break;
 
-
-
                 case BTA_LE_KEY_LCSRK:
                     BTIF_TRACE_DEBUG("Rcv BTA_LE_KEY_LCSRK");
                     pairing_cb.ble.is_lcsrk_key_rcvd = TRUE;
-                    pairing_cb.ble.lcsrk_key.counter =
-                        p_data->ble_key.p_key_value->lcsrk_key.counter;
-                    pairing_cb.ble.lcsrk_key.div =
-                        p_data->ble_key.p_key_value->lcsrk_key.div;
-                    pairing_cb.ble.lcsrk_key.sec_level =
-                        p_data->ble_key.p_key_value->lcsrk_key.sec_level;
-
-                    BTIF_TRACE_DEBUG("pairing_cb.ble.lcsrk_key.div=0x%04x",
-                        pairing_cb.ble.lcsrk_key.div);
-                    BTIF_TRACE_DEBUG("pairing_cb.ble.lcsrk_key.counter=0x%08x",
-                        pairing_cb.ble.lcsrk_key.counter);
-                    BTIF_TRACE_DEBUG("pairing_cb.ble.lcsrk_key.sec_level=0x%02x",
-                        pairing_cb.ble.lcsrk_key.sec_level);
-
+                    pairing_cb.ble.lcsrk_key = p_data->ble_key.p_key_value->lcsrk_key;
                     break;
 
                 case BTA_LE_KEY_LID:
@@ -1933,7 +1856,6 @@
                     BTIF_TRACE_ERROR("unknown BLE key type (0x%02x)", p_data->ble_key.key_type);
                     break;
             }
-
             break;
         case BTA_DM_BLE_SEC_REQ_EVT:
             BTIF_TRACE_DEBUG("BTA_DM_BLE_SEC_REQ_EVT. ");
@@ -3044,7 +2966,7 @@
         btif_storage_add_ble_bonding_key(&bd_addr,
                                          (char *) &pairing_cb.ble.penc_key,
                                          BTIF_DM_LE_KEY_PENC,
-                                         sizeof(btif_dm_ble_penc_keys_t));
+                                         sizeof(tBTM_LE_PENC_KEYS));
     }
 
     if (pairing_cb.ble.is_pid_key_rcvd)
@@ -3052,7 +2974,7 @@
         btif_storage_add_ble_bonding_key(&bd_addr,
                                          (char *) &pairing_cb.ble.pid_key,
                                          BTIF_DM_LE_KEY_PID,
-                                         sizeof(btif_dm_ble_pid_keys_t));
+                                         sizeof(tBTM_LE_PID_KEYS));
     }
 
 
@@ -3061,7 +2983,7 @@
         btif_storage_add_ble_bonding_key(&bd_addr,
                                          (char *) &pairing_cb.ble.pcsrk_key,
                                          BTIF_DM_LE_KEY_PCSRK,
-                                         sizeof(btif_dm_ble_pcsrk_keys_t));
+                                         sizeof(tBTM_LE_PCSRK_KEYS));
     }
 
 
@@ -3070,7 +2992,7 @@
         btif_storage_add_ble_bonding_key(&bd_addr,
                                          (char *) &pairing_cb.ble.lenc_key,
                                          BTIF_DM_LE_KEY_LENC,
-                                         sizeof(btif_dm_ble_lenc_keys_t));
+                                         sizeof(tBTM_LE_LENC_KEYS));
     }
 
     if (pairing_cb.ble.is_lcsrk_key_rcvd)
@@ -3078,7 +3000,7 @@
         btif_storage_add_ble_bonding_key(&bd_addr,
                                          (char *) &pairing_cb.ble.lcsrk_key,
                                          BTIF_DM_LE_KEY_LCSRK,
-                                         sizeof(btif_dm_ble_lcsrk_keys_t));
+                                         sizeof(tBTM_LE_LCSRK_KEYS));
     }
 
     if (pairing_cb.ble.is_lidk_key_rcvd)
diff --git a/btif/src/btif_gatt_util.c b/btif/src/btif_gatt_util.c
index da3d712..3e1ae23 100644
--- a/btif/src/btif_gatt_util.c
+++ b/btif/src/btif_gatt_util.c
@@ -313,7 +313,7 @@
 
 #if (!defined(BLE_DELAY_REQUEST_ENC) || (BLE_DELAY_REQUEST_ENC == FALSE))
     if ((btif_storage_get_ble_bonding_key(&bda, BTIF_DM_LE_KEY_PENC,
-                    buf, sizeof(btif_dm_ble_penc_keys_t)) == BT_STATUS_SUCCESS)
+                    buf, sizeof(tBTM_LE_PENC_KEYS)) == BT_STATUS_SUCCESS)
         && !btif_gatt_is_link_encrypted(bd_addr))
     {
         tBTA_GATT_TRANSPORT transport = BTA_GATT_TRANSPORT_LE;
diff --git a/btif/src/btif_storage.c b/btif/src/btif_storage.c
index eaa9ac9..d0aac7b 100644
--- a/btif/src/btif_storage.c
+++ b/btif/src/btif_storage.c
@@ -1211,22 +1211,22 @@
             btif_storage_set_remote_addr_type(&bd_addr, BLE_ADDR_PUBLIC);
         }
 
-        btif_read_le_key(BTIF_DM_LE_KEY_PENC, sizeof(btif_dm_ble_penc_keys_t),
+        btif_read_le_key(BTIF_DM_LE_KEY_PENC, sizeof(tBTM_LE_PENC_KEYS),
                          bd_addr, addr_type, add, &device_added, &key_found);
 
-        btif_read_le_key(BTIF_DM_LE_KEY_PID, sizeof(btif_dm_ble_pid_keys_t),
+        btif_read_le_key(BTIF_DM_LE_KEY_PID, sizeof(tBTM_LE_PID_KEYS),
                          bd_addr, addr_type, add, &device_added, &key_found);
 
-        btif_read_le_key(BTIF_DM_LE_KEY_LID, sizeof(btif_dm_ble_pid_keys_t),
+        btif_read_le_key(BTIF_DM_LE_KEY_LID, sizeof(tBTM_LE_PID_KEYS),
                          bd_addr, addr_type, add, &device_added, &key_found);
 
-        btif_read_le_key(BTIF_DM_LE_KEY_PCSRK, sizeof(btif_dm_ble_pcsrk_keys_t),
+        btif_read_le_key(BTIF_DM_LE_KEY_PCSRK, sizeof(tBTM_LE_PCSRK_KEYS),
                          bd_addr, addr_type, add, &device_added, &key_found);
 
-        btif_read_le_key(BTIF_DM_LE_KEY_LENC, sizeof(btif_dm_ble_lenc_keys_t),
+        btif_read_le_key(BTIF_DM_LE_KEY_LENC, sizeof(tBTM_LE_LENC_KEYS),
                          bd_addr, addr_type, add, &device_added, &key_found);
 
-        btif_read_le_key(BTIF_DM_LE_KEY_LCSRK, sizeof(btif_dm_ble_lcsrk_keys_t),
+        btif_read_le_key(BTIF_DM_LE_KEY_LCSRK, sizeof(tBTM_LE_LCSRK_KEYS),
                          bd_addr, addr_type, add, &device_added, &key_found);
 
         // Fill in the bonded devices
