anchor.diff:  
   
   { TTCustomMapsScanner }
  -constructor TTCustomMapsScanner.Create(aMapFolders: TMapFolderSet);
  +constructor TTCustomMapsScanner.Create(aMapFolders: TMapFolderSet; aOnComplete: TNotifyEvent = nil);
   begin
     //Thread isn't started until all constructors have run to completion
     //so Create(False) may be put in front as well
     inherited Create(False);
   
     fMapFolders := aMapFolders;
  +  fOnComplete := aOnComplete;
     FreeOnTerminate := False;
   end;
   
  
positive.code:     fScanning := False;
      if Assigned(fOnComplete) then
        fOnComplete(Self);
    finally
      Unlock;
    end;
  
negative.code:   PathToMaps: string;
    MF: TMapFolder;
  begin
    try
      for MF in fMapFolders do
      begin
        PathToMaps := ExeDir + MAP_FOLDER[MF] + PathDelim;
  
        if not DirectoryExists(PathToMaps) then Exit;
  
        FindFirst(PathToMaps + '*', faDirectory, SearchRec);
        repeat
          if (SearchRec.Name <> '.') and (SearchRec.Name <> '..')
          and FileExists(TKMapsCollection.FullPath(SearchRec.Name, '.dat', MF))
          and FileExists(TKMapsCollection.FullPath(SearchRec.Name, '.map', MF)) then
          begin
            ProcessMap(SearchRec.Name, MF);
          end;
        until (FindNext(SearchRec) <> 0) or Terminated;
        FindClose(SearchRec);
      end;
    finally
      if not Terminated and Assigned(fOnComplete) then
        fOnComplete(Self);
    end;
  end;
  
  