anchor.diff:                    NextLvlNodesActIN, HashCmpI_IN, HashCmpL_IN) ->
       case merkle_tree:is_leaf(Node) of
           true ->
  -            HashCmpI_OUT = HashCmpI_IN,
  -            HashCmpL_OUT = HashCmpL_IN + 1;
  +            case merkle_tree:is_empty(Node) of
  +                true ->
  +                    % empty leaf hash on both nodes - this was exact!
  +                    HashCmpI_OUT = HashCmpI_IN,
  +                    HashCmpL_OUT = HashCmpL_IN;
  +                false ->
  +                    HashCmpI_OUT = HashCmpI_IN,
  +                    HashCmpL_OUT = HashCmpL_IN + 1
  +            end;
           false ->
               HashCmpI_OUT = HashCmpI_IN + 1,
               HashCmpL_OUT = HashCmpL_IN
  
positive.code:                       RestTreeAcc, SyncAccSend, SyncAccRcv,
                        SyncAccDRK, SyncAccDRLCount, AccCmp + 1, AccSkip + Skipped,
                        NextLvlNodesActIN, HashCmpI_OUT, HashCmpL_OUT);
  merkle_cmp_result(<<?recon_fail_stop_leaf:2, TR/bitstring>>, [Node | TN],
                    SigSizeI, SigSizeL,
                    MyMaxItemsCount, OtherMaxItemsCount, MerkleSyncIn, Params, Stats,
  
negative.code:                              SyncIN, AccCmp + 1, AccSkip,
                               NextLvlNodesActOUT, HashCmpI_OUT, HashCmpL_IN);
         (not IsLeafNode) andalso IsLeafHash ->
             % don't 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,
  