anchor.diff:  procedure TMARSEngineRegistry.RegisterEngine(const AEngine: TMARSEngine);
   begin
     Assert(Assigned(AEngine));
  -  FItems.AddOrSetValue(AEngine.Name, AEngine);
  +
  +  FCriticalSection.Enter;
  +  try
  +    FItems.AddOrSetValue(AEngine.Name, AEngine);
  +  finally
  +    FCriticalSection.Leave;
  +  end;
   end;
   
   procedure TMARSEngineRegistry.UnregisterEngine(const AEngine: TMARSEngine);
   begin
     Assert(Assigned(AEngine));
  +
     UnregisterEngine(AEngine.Name);
   end;
   
   procedure TMARSEngineRegistry.UnregisterEngine(const AEngineName: string);
   begin
  -  FItems.Remove(AEngineName);
  +  FCriticalSection.Enter;
  +  try
  +    FItems.Remove(AEngineName);
  +  finally
  +    FCriticalSection.Leave;
  +  end;
   end;
   
   end.
  
positive.code:       LParametersSliceName := AName;
      Result.Parameters.CopyFrom(Parameters, LParametersSliceName);
  
      Applications.Add(
        TMARSURL.CombinePath([BasePath, ABasePath]).ToLower
        , Result
      );
    except
      Result.Free;
      raise
  
negative.code:   TMARSEngineRegistry=class
    private
      FItems: TDictionary<string, TMARSEngine>;
      FCriticalSection: TCriticalSection;
    protected
      class var _Instance: TMARSEngineRegistry;
      class function GetInstance: TMARSEngineRegistry; static;
      function GetCount: Integer; virtual;
      function GetEngine(const AName: string): TMARSEngine; virtual;
      class function GetDefaultEngine: TMARSEngine; static;
    public
      constructor Create; virtual;
      destructor Destroy; override;
  
      procedure RegisterEngine(const AEngine: TMARSEngine); virtual;
      procedure UnregisterEngine(const AEngine: TMARSEngine); overload; virtual;
      procedure UnregisterEngine(const AEngineName: string); overload; virtual;
  
      procedure EnumerateEngines(const ADoSomething: TProc<string, TMARSEngine>); virtual;
  
      property Engine[const AName: string]: TMARSEngine read GetEngine; default;
  
  