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: begin
    inherited Create;
    FItems := TDictionary<string, TMARSEngine>.Create;
  end;
  
  destructor TMARSEngineRegistry.Destroy;
  begin
    FItems.Free;
    inherited;
  end;
  
  function TMARSEngineRegistry.GetCount: Integer;
  
negative.code:       LParametersSliceName := AName;
      Result.Parameters.CopyFrom(Parameters, LParametersSliceName);
  
      FCriticalSection.Enter;
      try
        Applications.Add(
          TMARSURL.CombinePath([BasePath, ABasePath]).ToLower
          , Result
        );
      finally
        FCriticalSection.Leave;
      end;
    except
      Result.Free;
      raise
  