diff --git a/src/eeprom.c b/src/eeprom.c
index ad139dfcc25f9e27676bf89379891995bb91f38a..fd7d1f016d4c07e2bef8678d444a430c3e54311f 100755
--- a/src/eeprom.c
+++ b/src/eeprom.c
@@ -773,7 +773,7 @@ static uint16_t EE_PageTransfer(uint16_t VirtAddress, uint16_t Data)
   HAL_StatusTypeDef flashstatus = HAL_OK;
   uint32_t newpageaddress = EEPROM_START_ADDRESS;
   uint32_t oldpageid = 0;
-  uint16_t validpage = PAGE0, varidx = 0;
+  uint16_t validpage = PAGE0, varidx = 0, address=0;
   uint16_t eepromstatus = 0, readstatus = 0;
   uint32_t page_error = 0;
   FLASH_EraseInitTypeDef s_eraseinit;
@@ -821,15 +821,16 @@ static uint16_t EE_PageTransfer(uint16_t VirtAddress, uint16_t Data)
   /* Transfer process: transfer variables from old to the new active page */
   for (varidx = 0; varidx < NB_OF_VAR; varidx++)
   {
-    if (eeprom_data[varidx] != VirtAddress)  /* Check each variable except the one passed as parameter */
+    address=((__IO uint16_t*)oldpageid)[1+varidx*2];
+    if (address != VirtAddress)  /* Check each variable except the one passed as parameter */
     {
       /* Read the other last variable updates */
-      readstatus = EE_ReadVariable(eeprom_data[varidx], &DataVar);
+      readstatus = EE_ReadVariable(address, &DataVar);
       /* In case variable corresponding to the virtual address was found */
       if (readstatus != 0x1)
       {
         /* Transfer the variable to the new active page */
-        eepromstatus = EE_VerifyPageFullWriteVariable(eeprom_data[varidx], DataVar);
+        eepromstatus = EE_VerifyPageFullWriteVariable(address, DataVar);
         /* If program operation was failed, a Flash error code is returned */
         if (eepromstatus != HAL_OK)
         {