anchor.diff:      transactionlayer:send_proxy_response_handler(State#state.serverhandler, Response),
       State.
   
  +default_process_received_response(430, _Reason, _Response, State) when is_record(State, state) ->
  +    %% Outbound, flow gone. Try next destination with the same Instance-ID.
  +    start_next_client_transaction(430, State);
   default_process_received_response(503, _Reason, _Response, State) when is_record(State, state) ->
  -    start_next_client_transaction(State);
  +    start_next_client_transaction(503, State);
   default_process_received_response(Status, Reason, Response, State) when is_record(State, state) ->
       logger:log(debug, "sippipe: Piping final response '~p ~s' to server transaction ~p",
   	       [Status, Reason, State#state.serverhandler]),
  
positive.code: %%
  %% Response = {Status, Reason}
  %%
  process_received_response({Status, Reason}=Response, State) when is_integer(Status), is_list(Reason),
  								 is_record(State, state) ->
      final_response_event(Status, Reason, created, State),
      process_received_response2(Status, Reason, Response, State).
  
  %% part of process_received_response/2
  final_response_event(Status, Reason, Origin, State) when Status >= 200 ->
      %% Make event out of final response
      [CurDst | _] = State#state.dstlist,
      L = [{method, (State#state.request)#request.method},
  	 {uri, sipurl:print((State#state.request)#request.uri)},
  	 {response, lists:concat([Status, " ", Reason])},
  	 {origin, Origin},
  	 {peer, sipdst:dst2str(CurDst)}],
      event_handler:request_info(normal, State#state.branch, L);
  final_response_event(_Status, _Reason, _Origin, _State) ->
      %% non-final response
      ok.
  
  
negative.code:     State.
  
  %%--------------------------------------------------------------------
  %% Function: start_next_client_transaction(Status, State)
  %%           Status = integer(), SIP status code of last branch result
  %%           State  = state record()
  %% Descrip.: When this function is called, any previous client
  %%           transactions will have received a final response. Start
  %%           the next client transaction from State#state.dstlist, or
  %%           send a 500 response in case we have no destinations left.
  %% Returns : NewState = state record()
  %%--------------------------------------------------------------------
  start_next_client_transaction(Status, #state{cancelled = false} = State) ->
      case get_next_client_transaction_params(Status, State) of
  	{ok, NewRequest, FirstDst, BranchTimeout, NewState} ->
  	    case State#state.testing of
  		true ->
  		    self() ! {start_client_transaction, NewRequest, FirstDst, BranchTimeout, NewState},
  		    NewState;
  		false ->
  		    case local:start_client_transaction(NewRequest, FirstDst, NewState#state.branch, BranchTimeout) of
  			BranchPid when is_pid(BranchPid) ->
  			    NewState#state{clienttransaction_pid = BranchPid};
  			{error, E} ->
  			    logger:log(error, "sippipe: Failed starting client transaction : ~p", [E]),
  			    erlang:exit(failed_starting_client_transaction)
  		    end
  	    end;
  	{siperror, Status1, Reason1, ExtraHeaders} ->
  	    transactionlayer:send_response_handler(State#state.serverhandler, Status1, Reason1, ExtraHeaders),
  	    State#state{clienttransaction_pid	= none,
  			branch			= none,
  			dstlist			= []
  		       }
      end.
  
  %% part of start_next_client_transaction/2
  %% Returns : {ok, NewRequest, FirstDst, BranchTimeout, NewState} |
  %%           {siperror, Status, Reason, ExtraHeaders}
  get_next_client_transaction_params(Status, State) when is_record(State, state) ->
      case State#state.dstlist of
  	[_LastDst] ->
  	    logger:log(debug, "sippipe: There are no more destinations to try for this target - "
  		       "telling server transaction to answer 500 No reachable destination"),
  	    %% RFC3261 #16.7 bullet 6 says we SHOULD generate a 500 if a 503 is the best we've got
  	    {siperror, 500, "No reachable destination", []};
  	[_FailedDst | DstList] ->
  	    case get_next_client_transaction_sipdst(DstList, State#state.approxmsgsize, Status) of
  		[FirstDst | _] = NewDstList when is_record(FirstDst, sipdst) ->
  		    NewBranch = get_next_target_branch(State#state.branch),
  		    Request = State#state.request,
  