diff --git a/epicardium/ble/bondings.c b/epicardium/ble/bondings.c
index 425dc710acb0db120767e1a91f53b53ab0fa56e4..6dcc917b9b771bec9002964931b4aa141bd7ec4e 100644
--- a/epicardium/ble/bondings.c
+++ b/epicardium/ble/bondings.c
@@ -70,6 +70,8 @@
 #define APP_DB_NVM_HDL_LIST_ID                19
 #define APP_DB_NVM_DISC_STATUS_ID             20
 
+#define APP_DB_NVM_SEQUENCE_NUMBER_ID         100
+
 /**************************************************************************************************
   Data Types
 **************************************************************************************************/
@@ -104,6 +106,8 @@ typedef struct
   /*! for ATT client */
   uint16_t    hdlList[APP_DB_HDL_LIST_LEN]; /*! Cached handle list */
   uint8_t     discStatus;                   /*! Service discovery and configuration status */
+
+  uint32_t    sequenceNumber;
 } appDbRec_t;
 
 
@@ -114,9 +118,6 @@ typedef struct
 /*! Database */
 static appDbRec_t records[APP_DB_NUM_RECS];
 
-/*! When all records are allocated use this index to determine which to overwrite */
-static appDbRec_t *pAppDbNewRec = records;
-
 /* clang-format on */
 /* Translate a pointer to a record into the filename to be used for it. */
 static int record_to_filename(appDbRec_t *record, char *buf, size_t buf_size)
@@ -129,6 +130,28 @@ static int record_to_filename(appDbRec_t *record, char *buf, size_t buf_size)
 	return ret;
 }
 
+static appDbRec_t *record_with_highest_seq_number()
+{
+	appDbRec_t *r = &records[0];
+	for (int i = 0; i < APP_DB_NUM_RECS; i++) {
+		if (records[i].sequenceNumber > r->sequenceNumber) {
+			r = &records[i];
+		}
+	}
+	return r;
+}
+
+static appDbRec_t *record_with_lowest_seq_number()
+{
+	appDbRec_t *r = &records[0];
+	for (int i = 0; i < APP_DB_NUM_RECS; i++) {
+		if (records[i].sequenceNumber < r->sequenceNumber) {
+			r = &records[i];
+		}
+	}
+	return r;
+}
+
 /* Write a TLV to a file. */
 static int write_tlv(int fd, uint32_t t, uint32_t l, void *v)
 {
@@ -218,6 +241,7 @@ static int write_bond_to_file(appDbRec_t *r, char *filename)
 	write_element(APP_DB_NVM_PEER_SIGN_CTR_ID, peerSignCounter);
 	write_element(APP_DB_NVM_HDL_LIST_ID, hdlList);
 	write_element(APP_DB_NVM_DISC_STATUS_ID, discStatus);
+	write_element(APP_DB_NVM_SEQUENCE_NUMBER_ID, sequenceNumber);
 	write_element(APP_DB_NVM_VALID_ID, valid);
 
 #undef write_element
@@ -265,6 +289,7 @@ static int read_bond_from_file(appDbRec_t *r, char *filename)
 	read_element(APP_DB_NVM_PEER_SIGN_CTR_ID, peerSignCounter);
 	read_element(APP_DB_NVM_HDL_LIST_ID, hdlList);
 	read_element(APP_DB_NVM_DISC_STATUS_ID, discStatus);
+	read_element(APP_DB_NVM_SEQUENCE_NUMBER_ID, sequenceNumber);
 	read_element(APP_DB_NVM_VALID_ID, valid);
 
 #undef read_element
@@ -337,15 +362,8 @@ appDbHdl_t AppDbNewRecord(uint8_t addrType, uint8_t *pAddr)
   /* if all records were allocated */
   if (i == 0)
   {
-    /* overwrite a record */
-    pRec = pAppDbNewRec;
-
-    /* get next record to overwrite */
-    pAppDbNewRec++;
-    if (pAppDbNewRec == &records[APP_DB_NUM_RECS])
-    {
-      pAppDbNewRec = records;
-    }
+    /* overwrite the oldest record */
+    pRec = record_with_lowest_seq_number();
   }
 
   /* initialize record */
@@ -355,6 +373,7 @@ appDbHdl_t AppDbNewRecord(uint8_t addrType, uint8_t *pAddr)
   BdaCpy(pRec->peerAddr, pAddr);
   pRec->peerAddedToRl = FALSE;
   pRec->peerRpao = FALSE;
+  pRec->sequenceNumber = record_with_highest_seq_number()->sequenceNumber + 1;
 
   return (appDbHdl_t) pRec;
 }