anchor.diff:  %%              client transaction and then enter loop/1.
   %% Returns: Does not matter
   %%--------------------------------------------------------------------
  -
  -start(ServerHandler, ClientPid, Request, URI, Timeout) when record(Request, request) ->
  -    case catch guarded_start(ServerHandler, ClientPid, Request, URI, Timeout) of
  +start(ServerHandler, ClientPid, Request, Dst, Timeout) when is_record(Request, request) ->
  +    case catch guarded_start(ServerHandler, ClientPid, Request, Dst, Timeout) of
   	{'EXIT', Reason} ->
   	    logger:log(error, "=ERROR REPORT==== from sippipe :~n~p", [Reason]),
   	    transactionlayer:send_response_handler(ServerHandler, 500, "Server Internal Error"),
  
positive.code: 	    %% It makes more sense to try to connect to Proxy B over TCP/UDP than to
  	    %% try Proxy A over UDP when Proxy A over TCP has just failed.
  	    NewState = case transactionlayer:start_client_transaction(NewRequest, none, FirstDst, NewBranch, Timeout, self()) of
  			   BranchPid when pid(BranchPid) ->
  			       State#state{clienthandler=BranchPid, branch=NewBranch, dstlist=NewDstList};
  			   {error, E} ->
  			       logger:log(error, "sippipe: Failed starting client transaction : ~p", [E]),
  
negative.code: 	    Res
      end.
  
  %% First, we want to get the branch base from an existing ServerHandler
  guarded_start(ServerHandler, ClientPid, RequestIn, DstIn, Timeout) when is_record(RequestIn, request) ->
      %% call check_proxy_request to get sanity of proxying this request verified (Max-Forwards checked etc)
      {ok, NewHeader1, ApproxMsgSize} = siprequest:check_proxy_request(RequestIn),
      Request1 = RequestIn#request{header=NewHeader1},
      %% now make sure we know some destinations of this request
      {ok, DstList, Request} = start_get_dstlist(ServerHandler, Request1, ApproxMsgSize, DstIn),
      case start_get_servertransaction(ServerHandler, Request) of
  	{ok, STHandler, Branch} ->
  	    guarded_start2(Branch, STHandler, ClientPid, Request, DstList, Timeout, ApproxMsgSize);
  	ok ->
  	    ok;
  	error ->
  	    error
      end.
  
  %%
  %% ClientPid /= none
  %%
  guarded_start2(Branch, ServerHandler, ClientPid, Request, DstListIn, Timeout, ApproxMsgSize) 
    when is_record(Request, request), ClientPid /= none ->
      %% A client pid was supplied to us, go to work
      final_start(Branch, ServerHandler, ClientPid, Request, DstListIn, Timeout, ApproxMsgSize);
  
  %%
  %% ClientPid == none
  %%
  guarded_start2(Branch, ServerHandler, none, Request, Dst, Timeout, ApproxMsgSize) when is_record(Request, request) ->
      %% No client transaction handler is specified, start a client transaction on the first
      %% element from the destination list, after making sure it is complete.
      case resolve_if_necessary(Dst, ApproxMsgSize) of
  	[] ->
  	    logger:log(error, "sippipe: Failed starting sippipe, no valid destination(s) found"),
  	    transactionlayer:send_response_handler(ServerHandler, 500, "Failed resolving destination"),
  	    error;
  	[FirstDst | _] = DstList when is_record(FirstDst, sipdst) ->
  	    NewRequest = Request#request{uri=FirstDst#sipdst.uri},
  	    case transactionlayer:start_client_transaction(NewRequest, none, FirstDst, Branch, Timeout, self()) of
  		BranchPid when is_pid(BranchPid) ->
  		    final_start(Branch, ServerHandler, BranchPid, Request, DstList, Timeout, ApproxMsgSize);
  		{error, E} ->
  		    logger:log(error, "sippipe: Failed starting client transaction : ~p", [E]),
  