anchor.diff:      procedure AddHelpLink;
       procedure AddPlatformSupport;
       procedure CheckOrAddVersion;
  +    procedure AddSubtagNames(id: String; var o: TJSONObject);
       function CheckOrMigrateLanguages: Boolean;
       function SaveJsonFile: Boolean;
       procedure CheckPackageKeyboardFilenames;
  
positive.code: 
    Keyman.System.RegExGroupHelperRSP19902,
  
    JsonUtil,
    Keyman.System.KeyboardInfoFile,
    utilfiletypes,
    VersionInfo;
  
  
negative.code:     json.AddPair('id', FID);
  end;
  
  procedure TMergeKeyboardInfo.AddSubtagNames(id: String; var o: TJSONObject);
  var
    displayName, languageName, scriptName, regionName: String;
    v: TJSONValue;
  begin
    if id = '' then
      Exit;
    with TBCP47Tag.Create(id) do
      try
        TLanguageCodeUtils.BCP47Languages.TryGetValue(Language, languageName);
        TLanguageCodeUtils.BCP47Scripts.TryGetValue(Script, scriptName);
        TLanguageCodeUtils.BCP47Regions.TryGetValue(Region, regionName);
              
        displayName := TLanguageCodeUtils.LanguageName(languageName, scriptName, regionName);
  
        v := o.Values[TKeyboardInfoFile.SDisplayName];
        if not Assigned(v) then
          o.AddPair(TKeyboardInfoFile.SDisplayName, displayName);
  
        v := o.Values[TKeyboardInfoFile.SLanguageName];
        if not Assigned(v) then
          o.AddPair(TKeyboardInfoFile.SLanguageName, languageName);
  
        v := o.Values[TKeyboardInfoFile.SScriptName];
        if not Assigned(v) and (Script <> '') then
          o.AddPair(TKeyboardInfoFile.SScriptName, scriptName);
  
        v := o.Values[TKeyboardInfoFile.SRegionName];
        if not Assigned(v) and (Region <> '') then
          o.AddPair(TKeyboardInfoFile.SRegionName, regionName);
  
      finally
        Free;
    end;
  
  end;
  
  function TMergeKeyboardInfo.CheckOrMigrateLanguages: Boolean;
  var
    v: TJSONValue;
    alangs: TJSONArray;
    olangs: TJSONObject; 
    o: TJSONObject;
    nameAdded: Boolean;
    i: Integer;
    id: string;
  begin
    Result := True;
    
    v := json.GetValue(TKeyboardInfoFile.SLanguages);
  
    // Migrate languages[] array to Object
  