anchor.diff:  
   on({l_on_cseq, merge_reply_step4, {L1Id, L1}, ReplyTo,
       {qwrite_deny, _ReqId, Round, L2, {content_check_failed,
  -                                      {Reason, _Current, _Next}}}}, State) ->
  +                                      {Reason, Current, Next}}}}, State) ->
       % @todo if success update lease in State
       ?TRACE_ERROR("merge step4 failed~n~w~n~w~n~w~n", [Reason, L1, L2]),
       % retry?
       case Reason of
  +        unexpected_owner ->
  +            %% give up, there was probably a concurrent merge
  +            comm:send_local(ReplyTo, {merge, fail, unexpected_owner, step4, L1, L2, Current, Next}),
  +            State;
           unexpected_timeout ->
               % retry
               gen_component:post_op({l_on_cseq, merge_reply_step3, {L1Id, L2}, ReplyTo,
  
positive.code: on({l_on_cseq, post_recover_merge, Result}, State) ->
      case Result of
          {merge, success, L2, L1} ->
              log:log("recover: the merge of ~p and ~p was a success", [L2, L1]),
              State;
          _ ->
              log:log("recover: the merge failed: ~p", [Result]),
              State
      end.
  
  
negative.code: 
  on({l_on_cseq, merge_reply_step1, L2, ReplyTo,
      {qwrite_deny, _ReqId, Round, L1, {content_check_failed,
                                        {Reason, Current, Next}}}}, State) ->
      % @todo if success update lease in State
      ?TRACE_ERROR("merge step1 failed~n~w~n~w~n~w~n~w:~w~n", [Reason, L1, L2, _ReqId, Round]),
      % retry?
      case Reason of
          lease_does_not_exist ->
              %% cannot happen
              comm:send_local(ReplyTo, {merge, fail, lease_does_not_exist, step1,
                                        L1, L2, Current, Next}),
              State;
          unexpected_id ->
              %% cannot happen
              comm:send_local(ReplyTo, {merge, fail, unexpected_id, step1, L1, L2,
                                        Current, Next}),
              State;
          unexpected_owner ->
              %% give up, there was probably a concurrent merge
              comm:send_local(ReplyTo, {merge, fail, unexpected_owner, step1, L1, L2,
                                       Current, Next}),
              State;
          unexpected_aux ->
              %% give up, there was probably a concurrent merge
              comm:send_local(ReplyTo, {merge, fail, unexpected_aux, step1, L1, L2,
                                        Current, Next}),
              State;
          unexpected_range ->
              %% give up, there was probably a concurrent merge
              comm:send_local(ReplyTo, {merge, fail, unexpected_range, step1, L1, L2,
                                       Current, Next}),
              State;
          unexpected_timeout ->
              %% retry
  