anchor.diff:  
   %% @doc Handle failed requests (8.1.3.1, RFC 3261)
   %% @end
  -handle_failure(Reason, TxData, #state{mod = Mod, mod_state = ModState} = State) ->
  +handle_failure(Reason, ReqInfo, #state{mod = Mod, mod_state = ModState} = State) ->
       {Status, Phrase} = reason_phrase(Reason),
  -    Response = sip_message:create_response(TxData#tx_data.request, Status, Phrase),
  -    Result = Mod:handle_response(Response, TxData#tx_data.user_data, ModState),
  +    Response = sip_message:create_response(ReqInfo#req_info.request, Status, Phrase),
  +    Result = Mod:handle_response(Response, ReqInfo#req_info.user_data, ModState),
       wrap_response(Result, State).
   
   reason_phrase({timeout, _Timer}) -> {408, <<"Request Timeout">>};
  
positive.code: %%
  %% If no destinations are provided, report error to the callback module.
  %% @end
  send_internal(#tx_data{request = Request, fallback = [Top | Fallback]} = TxData, State) ->
      % send request to the top destination
      Request2 = sip_message:update_top_header('via', fun generate_branch/1, Request),
      {ok, TxKey} = sip_transaction:start_client_tx(self(), Top, Request2),
  
      % store tx id to {user data, fallback destinations, request} mapping
      TxData2 = TxData#tx_data{fallback = Fallback},
      Dict = dict:store(TxKey, TxData2, State#state.transactions),
      {noreply, State#state{transactions = Dict}}.
  
  generate_branch(Via) ->
  
negative.code: 
  %% @private
  -spec handle_cast(_, #state{}) -> any().
  handle_cast({send, ReqInfo}, State) ->
      next_destination(ReqInfo, State);
  handle_cast(Req, #state{mod = Mod, mod_state = ModState} = State) ->
      Response = Mod:handle_cast(Req, ModState),
      wrap_response(Response, State).
  