anchor.diff:  
   procedure TThreadGetNewBlockChainFromClient.BCExecute;
   Var i,j : Integer;
  -  maxWork : UInt64;
  +  LMaxAggregatedTarget : UInt64;
     candidates : TList<TNetConnection>;
     lop : TOperationBlock;
     nc : TNetConnection;
  +  LMaxAggregatedHashrate : TBigNum;
   begin
     if Not TNode.Node.UpdateBlockchain then Exit;
   
     // Search better candidates:
     candidates := TList<TNetConnection>.Create;
  +  LMaxAggregatedHashrate := TBigNum.Create(0);
     try
       lop := CT_OperationBlock_NUL;
       TNetData.NetData.FMaxRemoteOperationBlock := CT_OperationBlock_NUL;
       // First round: Find by most work
  -    maxWork := 0;
  +    LMaxAggregatedTarget := 0;
       j := TNetData.NetData.ConnectionsCountAll;
       nc := Nil;
       for i := 0 to j - 1 do begin
         if TNetData.NetData.GetConnection(i,nc) then begin
  -        if (nc.FRemoteAccumulatedWork>maxWork) And (nc.FRemoteAccumulatedWork>TNode.Node.Bank.SafeBox.WorkSum) then begin
  -          maxWork := nc.FRemoteAccumulatedWork;
  -        end;
           // Preventing downloading
           if nc.FIsDownloadingBlocks then exit;
  -      end;
  -    end;
  -    if (maxWork>0) then begin
  +        //
  +        if (nc.FRemoteAggregatedHashrate.CompareTo( LMaxAggregatedHashrate )>0) and (nc.FRemoteAggregatedHashrate.CompareTo( TNode.Node.Bank.SafeBox.AggregatedHashrate )>0) then begin
  +          LMaxAggregatedHashrate.RawValue := nc.FRemoteAggregatedHashrate.RawValue;
  +        end;
  +        if (nc.FRemoteAccumulatedWork>LMaxAggregatedTarget) And (nc.FRemoteAccumulatedWork>TNode.Node.Bank.SafeBox.WorkSum) then begin
  +          LMaxAggregatedTarget := nc.FRemoteAccumulatedWork;
  +        end;
  +      end;
  +    end;
  +    if (LMaxAggregatedHashrate.CompareTo( 1 ) > 0) then begin
  +      // Search by Aggregated Hashrate
         for i := 0 to j - 1 do begin
           If TNetData.NetData.GetConnection(i,nc) then begin
  -          if (nc.FRemoteAccumulatedWork>=maxWork) then begin
  +          if (nc.FRemoteAggregatedHashrate.CompareTo(LMaxAggregatedHashrate)>=0) then begin
               candidates.Add(nc);
               lop := nc.FRemoteOperationBlock;
             end;
           end;
         end;
  -    end;
  -    // Second round: Find by most height
  -    if candidates.Count=0 then begin
  +    end else if (LMaxAggregatedTarget>0) then begin
  +      // Not found searching by Aggregated Hashrate, searching by Aggregated Target
         for i := 0 to j - 1 do begin
  -        if (TNetData.NetData.GetConnection(i,nc)) then begin
  -          if (nc.FRemoteOperationBlock.block>=TNode.Node.Bank.BlocksCount) And
  -             (nc.FRemoteOperationBlock.block>=lop.block) then begin
  -             lop := nc.FRemoteOperationBlock;
  -          end;
  -        end;
  -      end;
  -      if (lop.block>0) then begin
  -        for i := 0 to j - 1 do begin
  -          If (TNetData.NetData.GetConnection(i,nc)) then begin
  -            if (nc.FRemoteOperationBlock.block>=lop.block) then begin
  -               candidates.Add(nc);
  -            end;
  +        If TNetData.NetData.GetConnection(i,nc) then begin
  +          if (nc.FRemoteAccumulatedWork>=LMaxAggregatedTarget) then begin
  +            candidates.Add(nc);
  +            lop := nc.FRemoteOperationBlock;
             end;
           end;
         end;
  
positive.code:         finally
            oldBlockchainOperations.Free;
          end;
        end else begin
          if (Not IsAScam) And (Connection.FRemoteAccumulatedWork > TNode.Node.Bank.SafeBox.WorkSum) then begin
            // Possible scammer!
            Connection.DisconnectInvalidClient(false,Format('Possible scammer! Says blocks:%d Work:%d - Obtained blocks:%d work:%d',
              [Connection.FRemoteOperationBlock.block+1,Connection.FRemoteAccumulatedWork,
               Bank.BlocksCount,Bank.SafeBox.WorkSum]));
          end;
        end;
      finally
  
negative.code:   nsarr : TNodeServerAddressArray;
    w : Word;
    currunixtimestamp : Cardinal;
    LRawAggregatedHashrate : TRawBytes;
    LUInt64 : UInt64;
  begin
    Result := false;
    if Not Connected then exit;
  