anchor.diff:    var lTID := {$IFDEF ISLAND}RemObjects.Elements.System.Thread.CurrentThreadID{$ELSE}Thread.CurrentThread.ThreadId{$ENDIF};
     var lTI: ThreadInfo;
     locking fLock do begin
  -    lTI := fThreads[lTID];
  +    lTI := fThreads[Integer(lTID)];
       if lTI = nil then begin
         lTI := new ThreadInfo;
  -      fThreads.Add(lTID, lTI);
  +      fThreads.Add(Integer(lTID), lTI);
       end;
     end;
   
  
positive.code:       exit Key.hash xor Int;
      end;
  
      method copyWithZone(aZone: ^Foundation.NSZone): not nullable id;
      begin
        result := new SITuple();
        result.Key := Key;
  
negative.code:   var lTID := {$IFDEF ISLAND}RemObjects.Elements.System.Thread.CurrentThreadID{$ELSE}Thread.CurrentThread.ThreadId{$ENDIF};
    var lTI: ThreadInfo;
    locking fLock do begin
      lTI := fThreads[Integer(lTID)];
      if lTI = nil then begin
        lTI := new ThreadInfo;
        fThreads.Add(Integer(lTID), lTI);
      end;
    end;
    var lLastE := lTI.Items[lTI.Items.Count -1];
  