anchor.diff:              MerkleV = merkle_tree:get_branch_factor(MySyncStruct),
               MerkleB = merkle_tree:get_bucket_size(MySyncStruct),
               P1ETotal = get_p1e(),
  -            {P1E_I, P1E_L} = merkle_next_p1e(MerkleV, P1ETotal),
   
               LeafCount = merkle_tree:get_leaf_count(MySyncStruct),
               ItemCount = merkle_tree:get_item_count(MySyncStruct),
  
positive.code: %% merkle tree sync messages
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  on({?check_nodes, SenderPid, ToCheck, SigSize}, State)
    when is_bitstring(ToCheck) andalso is_integer(SigSize) ->
      NewState = State#rr_recon_state{dest_recon_pid = SenderPid},
      on({?check_nodes, ToCheck, SigSize, 0}, NewState);
  
  on({?check_nodes, ToCheck0, SigSizeI, SigSizeILeafDiff},
     State = #rr_recon_state{stage = reconciliation,    initiator = false,
                             method = merkle_tree,      merkle_sync = MerkleSync,
                             params = #merkle_params{branch_factor = BranchFactor,
                                                     bucket_size = BucketSize} = Params,
                             struct = Tree,             ownerPid = OwnerL,
                             dest_rr_pid = DestNodePid, stats = Stats,
                             dest_recon_pid = DestReconPid,
                             misc = [{p1e, {P1ETotal_I, P1ETotal_L, LastP1ETotal}}]})
    when is_bitstring(ToCheck0) andalso is_integer(SigSizeI) andalso is_integer(SigSizeILeafDiff) ->
      ?DBG_ASSERT(comm:is_valid(DestReconPid)),
      SigSizeL = SigSizeI + SigSizeILeafDiff,
      ToCheck = merkle_decompress_hashlist(ToCheck0, [], SigSizeI, SigSizeL),
      % note: we get the new P1E values one round earlier than the
      %       ?check_nodes_response handler on the initiator
      {FlagsBin, RTree, MerkleSyncNew, MaxLeafCount, MaxItemsCount} =
          check_node(ToCheck, Tree, SigSizeI, SigSizeL, LastP1ETotal, P1ETotal_L, MerkleSync),
      ?DBG_ASSERT(MaxLeafCount * BucketSize >= MaxItemsCount),
      MaxLeafItemsCountDiff = MaxLeafCount * BucketSize - MaxItemsCount,
      send(DestReconPid, {?check_nodes_response, FlagsBin, MaxLeafCount, MaxLeafItemsCountDiff}),
      {P1E_I, P1E_L} = merkle_next_p1e(BranchFactor, P1ETotal_I),
      NewState = State#rr_recon_state{struct = RTree, merkle_sync = MerkleSyncNew,
                                      misc = [{p1e, {P1E_I, P1E_L, P1ETotal_I}}]},
      if RTree =:= [] andalso MerkleSyncNew =:= [] ->
             shutdown(sync_finished, NewState);
         RTree =:= [] ->
  
negative.code:                              comm:make_global(OwnerL), SID,
                               {start_recon, merkle_tree, SyncParams}}),
              State#rr_recon_state{stats = Stats1, params = MySyncParams,
                                   misc = [{p1e, P1ETotal},
                                           {lcount, LeafCount},
                                           {icount, ItemCount}],
                                   kv_list = []}
      end;
  begin_sync(MySyncStruct, OtherSyncStruct,
  