anchor.diff:                               MySyncAccDRK, MySyncAccDRLCount, OtherSyncAccDRLCount,
                                SyncIN, AccCmp + 1, AccSkip,
                                NextLvlNodesActOUT, HashCmpI_OUT, HashCmpL_IN);
  -       (not IsLeafNode) andalso IsLeafHash andalso Hash =/= none ->
  +       (not IsLeafNode) andalso NonEmptyLeafHash ->
              % inner node here, non-empty leaf there
  -           % don't compare hashes -> this is an exact process based on the tags
  +           % no need to compare hashes - this is an exact process based on the tags
              {MyKVItems, LeafCount} = merkle_tree:get_items([Node]),
              Sync = {MyMaxItemsCount, MyKVItems, LeafCount},
              merkle_check_node(TK, TN, SigSizeI, SigSizeL,
  
positive.code:                              SyncIN, AccCmp + 1, AccSkip + Skipped,
                               NextLvlNodesActIN, HashCmpI_OUT, HashCmpL_OUT);
         (not IsLeafNode) andalso (not IsLeafHash) ->
             % inner hash on both nodes
             Childs = merkle_tree:get_childs(Node),
             NextLvlNodesActOUT = NextLvlNodesActIN + Params#merkle_params.branch_factor,
             HashCmpI_OUT = HashCmpI_IN + 1,
  
negative.code:                   RestTreeAcc, SyncAccSend, SyncAccRcv,
                    MySyncAccDRK, MySyncAccDRLCount, OtherSyncAccDRLCount,
                    AccCmp, AccSkip, NextLvlNodesActIN, HashCmpI_IN, HashCmpL_IN) ->
      % either cont_inner or stop_empty_leaf4
      case merkle_tree:is_leaf(Node) of
          false -> % cont_inner
              % inner hash on both nodes
              Childs = merkle_tree:get_childs(Node),
              NextLvlNodesActOUT = NextLvlNodesActIN + Params#merkle_params.branch_factor,
              HashCmpI_OUT = HashCmpI_IN + 1,
              RestTreeAcc1 = lists:reverse(Childs, RestTreeAcc),
              MySyncAccDRK1 = MySyncAccDRK,
              MySyncAccDRLCount1 = MySyncAccDRLCount;
          true -> % stop_empty_leaf4
              ?DBG_ASSERT(not merkle_tree:is_empty(Node)),
              % non-empty leaf on this node, empty leaf on the other node
              % -> resolve directly here, i.e. without a trivial sub process
              NextLvlNodesActOUT = NextLvlNodesActIN,
              HashCmpI_OUT = HashCmpI_IN,
              RestTreeAcc1 = RestTreeAcc,
              MyKVItems = merkle_tree:get_bucket(Node),
              MySyncAccDRK1 = [element(1, X) || X <- MyKVItems] ++ MySyncAccDRK,
              MySyncAccDRLCount1 = MySyncAccDRLCount + 1
      end,
      merkle_cmp_result(TR, TN, SigSizeI, SigSizeL,
                        MyMaxItemsCount, OtherMaxItemsCount, SyncIn, Params, Stats,
                        RestTreeAcc1, SyncAccSend, SyncAccRcv,
                        MySyncAccDRK1, MySyncAccDRLCount1, OtherSyncAccDRLCount,
                        AccCmp + 1, AccSkip,
                        NextLvlNodesActOUT, HashCmpI_OUT, HashCmpL_IN);
  merkle_cmp_result(<<?recon_fail_stop_inner:2, TR/bitstring>>, [Node | TN],
                    SigSizeI, SigSizeL,
                    MyMaxItemsCount, OtherMaxItemsCount, SyncIn, Params, Stats,
                    RestTreeAcc, SyncAccSend, SyncAccRcv,
                    MySyncAccDRK, MySyncAccDRLCount, OtherSyncAccDRLCount, AccCmp, AccSkip,
                    NextLvlNodesActIN, HashCmpI_IN, HashCmpL_IN) ->
      % either stop_inner or stop_empty_leaf1 or stop_empty_leaf3
      % NOTE: all these mismatches are exact process based on the tags
      IsLeafNode = merkle_tree:is_leaf(Node),
      EmptyLeafNode = IsLeafNode andalso merkle_tree:is_empty(Node),
      
      if IsLeafNode andalso (not EmptyLeafNode) -> % stop_inner
             SyncAccSend1 = [{OtherMaxItemsCount, merkle_tree:get_bucket(Node),
                              merkle_tree:get_item_count(Node)} | SyncAccSend],
             OtherSyncAccDRLCount1 = OtherSyncAccDRLCount,
             MySyncAccDRK1 = MySyncAccDRK,
             MySyncAccDRLCount1 = MySyncAccDRLCount;
         EmptyLeafNode -> % stop_empty_leaf1
             % -> resolved directly at the other node, i.e. without a trivial sub process
             SyncAccSend1 = SyncAccSend,
             OtherSyncAccDRLCount1 = OtherSyncAccDRLCount + 1, % this will deviate from the other node!
             MySyncAccDRK1 = MySyncAccDRK,
             MySyncAccDRLCount1 = MySyncAccDRLCount;
         not IsLeafNode -> % stop_empty_leaf3
             % -> resolve directly here, i.e. without a trivial sub process
             SyncAccSend1 = SyncAccSend,
             OtherSyncAccDRLCount1 = OtherSyncAccDRLCount,
             {MyKVItems, LeafCount} = merkle_tree:get_items([Node]),
             MySyncAccDRK1 = [element(1, X) || X <- MyKVItems] ++ MySyncAccDRK,
             MySyncAccDRLCount1 = MySyncAccDRLCount + LeafCount
      end,
      merkle_cmp_result(TR, TN, SigSizeI, SigSizeL,
                        MyMaxItemsCount, OtherMaxItemsCount, SyncIn, Params, Stats,
                        RestTreeAcc, SyncAccSend1, SyncAccRcv,
                        MySyncAccDRK1, MySyncAccDRLCount1, OtherSyncAccDRLCount1,
                        AccCmp + 1, AccSkip,
                        NextLvlNodesActIN, HashCmpI_IN, HashCmpL_IN);
  merkle_cmp_result(<<?recon_fail_stop_leaf:2, TR/bitstring>>, [Node | TN],
  