 
 // address for unsigned long 'frequency'
 const int AddressFreq = 0;
+const int AddressFreqSize = sizeof(AddressFreq);
 
 // address for int 'selected digit'
-const int AddressSelDigit = AddressFreq + sizeof(AddressFreq);
+const int AddressSelDigit = AddressFreq + AddressFreqSize;
+const int AddressSelDigitSize = sizeof(int);
 
 // number of frequency save slots in EEPROM
 const int NumSaveSlots = 10;
-const int SaveSlotBase = AddressSelDigit + sizeof(AddressSelDigit);
-
+
+const int SaveFreqSize = sizeof(long);
+const int SaveFreqBase = AddressSelDigit + AddressSelDigitSize;
+const int SaveFreqBaseSize = NumSaveSlots * SaveFreqSize;
+
+//also save the offset for each frequency
+const int SaveOffsetSize = sizeof(byte);
+const int SaveOffsetBase = SaveFreqBase + SaveFreqBaseSize;
+const int SaveOffsetBaseSize = NumSaveSlots * SaveOffsetSize;
+
+// free slot address
+const int NextFreeAddress = SaveOffsetBase + SaveOffsetBaseSize;
 
 // save VFO state to EEPROM
 void save_to_eeprom(void)

    default:            return "UNKNOWN!";
  }
}

// display a simple banner
void banner(void)

  int old_position = VfoSelectDigit;

  // handle all events in the queue
  while (events_pending() > 0)
  {
    // get next event and handle it
    byte event = pop_event();
