diff --git a/components/ble/peer_manager/gatt_cache_manager.c b/components/ble/peer_manager/gatt_cache_manager.c
index e20bdc5..b5be461 100644
--- a/components/ble/peer_manager/gatt_cache_manager.c
+++ b/components/ble/peer_manager/gatt_cache_manager.c
@@ -250,6 +250,8 @@ static bool local_db_update_in_evt(uint16_t conn_handle)
             success = true;
             break;
 
+        case NRF_ERROR_INVALID_DATA:
+            /* Fallthrough */
         case BLE_ERROR_INVALID_CONN_HANDLE:
             /* Do nothing */
             break;
diff --git a/components/ble/peer_manager/gatts_cache_manager.c b/components/ble/peer_manager/gatts_cache_manager.c
index d666537..c0919b5 100644
--- a/components/ble/peer_manager/gatts_cache_manager.c
+++ b/components/ble/peer_manager/gatts_cache_manager.c
@@ -228,7 +228,44 @@ ret_code_t gscm_local_db_cache_update(uint16_t conn_handle)
 
                 if (err_code == NRF_SUCCESS)
                 {
-                    err_code = pdb_write_buf_store(peer_id, PM_PEER_DATA_ID_GATT_LOCAL, peer_id);
+                    pm_peer_data_flash_t curr_peer_data;
+
+                    err_code = pdb_peer_data_ptr_get(peer_id,
+                                                PM_PEER_DATA_ID_GATT_LOCAL,
+                                                &curr_peer_data);
+
+                    if ((err_code != NRF_SUCCESS) && (err_code != NRF_ERROR_NOT_FOUND))
+                    {
+                        NRF_LOG_ERROR("pdb_peer_data_ptr_get() returned %s for conn_handle: %d",
+                                        nrf_strerror_get(err_code),
+                                        conn_handle);
+                        return NRF_ERROR_INTERNAL;
+                    }
+
+                    if((err_code == NRF_ERROR_NOT_FOUND)
+                        || (p_local_gatt_db->len != curr_peer_data.p_local_gatt_db->len)
+                        || (memcmp(p_local_gatt_db->data, curr_peer_data.p_local_gatt_db->data,
+                                    p_local_gatt_db->len) != 0))
+                    {
+                        err_code = pdb_write_buf_store(peer_id, PM_PEER_DATA_ID_GATT_LOCAL, peer_id);
+                    }
+                    else
+                    {
+                        NRF_LOG_DEBUG("Local db is already up to date, skipping write.");
+                        ret_code_t err_code_release = pdb_write_buf_release(peer_id, PM_PEER_DATA_ID_GATT_LOCAL);
+                        if (err_code_release == NRF_SUCCESS)
+                        {
+                            err_code = NRF_ERROR_INVALID_DATA;
+                        }
+                        else
+                        {
+                            NRF_LOG_ERROR("Did another thread manipulate PM_PEER_DATA_ID_GATT_LOCAL for "\
+                                          "peer_id %d at the same time? pdb_write_buf_release() returned %s.",
+                                          peer_id,
+                                          nrf_strerror_get(err_code_release));
+                            err_code = NRF_ERROR_INTERNAL;
+                        }
+                    }
                 }
                 else
                 {
diff --git a/components/ble/peer_manager/gatts_cache_manager.h b/components/ble/peer_manager/gatts_cache_manager.h
index c271667..1356eea 100644
--- a/components/ble/peer_manager/gatts_cache_manager.h
+++ b/components/ble/peer_manager/gatts_cache_manager.h
@@ -78,6 +78,8 @@ ret_code_t gscm_init(void);
  * @retval NRF_SUCCESS                    Store operation started.
  * @retval BLE_ERROR_INVALID_CONN_HANDLE  conn_handle does not refer to an active connection with a
  *                                        bonded peer.
+ * @retval NRF_ERROR_INVALID_DATA         Refused to update because the GATT database is already up
+ *                                        to date.
  * @retval NRF_ERROR_BUSY                 Unable to perform operation at this time. Reattempt later.
  * @retval NRF_ERROR_DATA_SIZE            Write buffer not large enough. Call will never work with
  *                                        this GATT database.
