anchor.diff:      Cancel2 = sip_message:with_branch(Branch, Cancel),
   
       Destination = ReqInfo#request_info.last_destination,
  -    {ok, CancelTxPid} = sip_transaction:start_client_tx(Destination, Cancel2, [{tu, none}]),
  -
  -    ok = store(ReqInfo#request_info{cancel = true, cancel_tx = CancelTxPid}).
  -
  +    {ok, _CancelTxPid} = sip_transaction:start_client_tx(Destination, Cancel2, [{tu, none}]),
  +
  +    ok = store(ReqInfo#request_info{cancel = true, cancelled = true}).
  +
  +
  +tx_demonitor(#request_info{tx_monitor = undefined}) -> ok;
  +tx_demonitor(#request_info{tx_monitor = MonitorRef}) ->
  +    true = erlang:demonitor(MonitorRef, [flush]),
  +    ok.
   
   %%-----------------------------------------------------------------
   %% State management (functions that use process dictionary)
  
positive.code:     Branch = sip_idgen:generate_branch(),
      Request2 = sip_message:with_branch(Branch, Request),
  
      % FIXME: We should start monitoring transaction in case of its failure...
      {ok, TxPid} = sip_transaction:start_client_tx(Top, Request2, []),
  
      % Update request information
      ReqInfo2 = ReqInfo#request_info{destinations = Fallback,
                                      last_destination = Top,
                                      current_branch = Branch,
                                      current_tx = TxPid},
      ok = store(ReqInfo2),
  
      % stop processing
      error_m:fail(processed).
  
  %% FIXME: Rewrite...
  collect_redirects(ReqInfo, Response) ->
      % FIXME: handle expires
      CollectFun =
  
negative.code: 
  lookup_by_tx(TxPid) ->
      Requests = erlang:get(?REQUESTS),
      lists:keyfind(TxPid, #request_info.tx_pid, Requests).
  
  
  store(ReqInfo) ->
  