anchor.diff:    filteredList : IDLUIXFilteredListAction;
     iTab         : integer;
     navigateToTab: IDLUIXAction;
  +  sPath        : string;
  +  sTab         : string;
   begin
  +  FTabPaths := TCollections.CreateList<string>;
  +  for sTab in context.TabNames do
  +    FTabPaths.Add(sTab);
  +
  +  // terribly inefficient but a) it is called rarely and b) FTabPaths will be really short
  +  FTabPaths.Sort(
  +    TComparer<string>.Construct(
  +      function (const left, right: string): integer
  +      begin
  +        Result := CompareText(ExtractFileName(left), ExtractFileName(right));
  +      end));
  +
     FTabNames := TCollections.CreateList<string>;
  -  for iTab := Low(context.TabNames) to High(context.TabNames) do
  -    FTabNames.Add(ExtractFileName(context.TabNames[iTab]));
  +  for sPath in FTabPaths do
  +    FTabNames.Add(ExtractFileName(sPath));
   
     filteredList := CreateFilteredListAction('', FTabNames, context.Source.UnitName) as IDLUIXFilteredListAction;
     navigateToTab := CreateNavigationAction('&Open', Default(TDLUIXLocation), false);
  
positive.code:   filteredList.FileNameIdxQuery :=
      function (itemIdx: integer; var fileName: string): boolean
      begin
        Result := (itemIdx >= Low(context.TabNames)) and (itemIdx <= High(context.TabNames));
        if Result then
          fileName := context.TabNames[itemIdx];
      end;
  
    frame.CreateAction(filteredList);
  
negative.code:   TDLUIXTabsAnalyzer = class(TInterfacedObject, IDLUIXAnalyzer)
    strict private
      FTabNames: IList<string>;
      FTabPaths: IList<string>;
    public
      procedure BuildFrame(const action: IDLUIXAction; const frame: IDLUIXFrame;
        const context: IDLUIWorkerContext);
  