anchor.diff:    if Assigned(FNode) then FNode.FNotifyList.Remove(Self);
     FThreadSafeNodeNotifyEvent.FNodeNotifyEvents := Nil;
     FThreadSafeNodeNotifyEvent.Terminate;
  +  FThreadSafeNodeNotifyEvent.WaitFor;
  +  FreeAndNil(FThreadSafeNodeNotifyEvent);
     FreeAndNil(FPendingNotificationsList);
     FreeAndNil(FMessages);
     inherited;
  
positive.code:   FMessages := TStringList.Create;
    FPendingNotificationsList := TPCThreadList.Create('TNodeNotifyEvents_PendingNotificationsList');
    FThreadSafeNodeNotifyEvent := TThreadSafeNodeNotifyEvent.Create(Self);
    FThreadSafeNodeNotifyEvent.FreeOnTerminate := true; // This is to prevent locking when freeing component
    Node := _Node;
  end;
  
  
negative.code: constructor TThreadSafeNodeNotifyEvent.Create(ANodeNotifyEvents: TNodeNotifyEvents);
  begin
    FNodeNotifyEvents := ANodeNotifyEvents;
    Inherited Create(False);
  end;
  
  procedure TThreadSafeNodeNotifyEvent.SynchronizedProcess;
  