Thank you. I still don't know how to add a new record that. I can, however, copy another record as a new record to the file. Then maybe set the form ID and EDID later. This is one of the functions I've got. Comment above a line of space are codes I need help with implementing. function ProcessCellRecord(e: IInterface): integer;
var
XLCN, XEZN: string; //location and encounter zone element value
newzone: IInterface;
begin
if OverrideCount(e) = 0 then begin
 XLCN := GetElementEditValues(e, 'XLCN');
 XEZN := GetElementEditValues(e, 'XEZN');
 if (XEZN = '') then begin
  if (XLCN <> '') then begin
   npccount := 0;
   CellNPCExists(e);
   if npccount > 0 then begin
    AddMasterIfMissing(Master(e), f_ncz);
    // Element, File, AsNew, DeepCopy
    e := wbCopyElementToFile(e, f_ncz, False, False);
    //check if encounter zone hash set contains word from it's location's name
    XLCN := StringReplace(GetElementEditValues(e, 'FULL - Name'), ' ', '', [rfReplaceAll]);
    XEZN := GetEncounterZone(XLCN);
    if ( XEZN = '') then begin
     //add encounter zone with ref to it's location record
     newzone := wbCopyElementToFile(f_ezn, f_ncz, True, False);
     SetElementEditValues(newzone, 'EDID', Concat(XLCN, 'Zone');
     //add encounter zone to the cell override
     SetElementEditValues(e, 'XEZN', FormID(newzone));
    end
    else begin
    //add that encounter zone directly to the cell
     SetElementEditValues(e, 'XEZN', XEZN);
    end
   end;
  end;
  //else then
    //Add encounter zone without LCN
 end;
end;
end;