anchor.diff:      case Initiator of
           true ->
               SigSize = 160,
  -            P1E = Params#merkle_params.p1e,
  +            P1E = merkle_next_p1e(Params#merkle_params.branch_factor,
  +                                  Params#merkle_params.p1e),
               Req = merkle_compress_hashlist([merkle_tree:get_root(MySyncStruct)],
                                              <<>>, SigSize, SigSize),
               send(DestReconPid, {?check_nodes, comm:this(), Req, SigSize}),
  
positive.code: on({?check_nodes_response, FlagsBin, OtherMaxLeafCount, MaxLeafItemsCountDiff},
     State = #rr_recon_state{stage = reconciliation,        initiator = true,
                             method = merkle_tree,          merkle_sync = MerkleSync,
                             params = #merkle_params{branch_factor = BranchFactor,
                                                     bucket_size = BucketSize},
                             struct = Tree,                 stats = Stats,
                             dest_recon_pid = DestReconPid,
                             misc = [{signature_size, {SigSizeI, SigSizeL}},
                                     {p1e, P1ETotal}]}) ->
      % current node can make a mistake or any of its BranchFactor children
      % => current node's probability of 0 errors = P0E(child)^(BranchFactor+1)
      % however, we cannot use P0E=(1-P1E) since it is near 1 and its floating
      % point representation is sub-optimal!
      % => use Taylor expansion of P1E_next = 1 - (1-P1E)^(1/BranchFactor)
      BF = BranchFactor + 1,
      P1E = P1ETotal / BF +
                (BF - 1) * P1ETotal * P1ETotal / (2 * BF * BF), % +O[p^3]
      case process_tree_cmp_result(FlagsBin, Tree, SigSizeI, SigSizeL, MerkleSync, Stats) of
          {[] = RTree, [] = MerkleSyncNew, NStats, _MyMaxLeafCount, _MyMaxItemsCount} ->
              NStage = reconciliation,
              NextSigSizeI = SigSizeI,
              NextSigSizeL = SigSizeL,
              ok;
          {[] = RTree, [_|_] = MerkleSyncNew, NStats, _MyMaxLeafCount, _MyMaxItemsCount} ->
              NStage = resolve,
              NextSigSizeI = SigSizeI,
              NextSigSizeL = SigSizeL,
              % note: we will get a resolve_req message from the other node
  
negative.code:         {[_|_] = RTree, MerkleSyncNew, NStats, MyMaxLeafCount, MyMaxItemsCount} ->
              NStage = reconciliation,
              OtherMaxItemsCount = OtherMaxLeafCount * BucketSize - MaxLeafItemsCountDiff,
              {P1E, NextSigSizeI, NextSigSizeL} =
                  merkle_next_signature_sizes(Params, P1ETotal, MyMaxLeafCount, MyMaxItemsCount,
                                              OtherMaxLeafCount, OtherMaxItemsCount),
              Req = merkle_compress_hashlist(RTree, <<>>, NextSigSizeI, NextSigSizeL),
              send(DestReconPid, {?check_nodes, Req, NextSigSizeI, NextSigSizeL - NextSigSizeI})
      end,
  