anchor.diff:  %% Returns: Does not matter
   %%--------------------------------------------------------------------
   
  -start(ServerHandler, ClientPid, Request, URI, Timeout) when record(URI, sipurl) ->
  +start(ServerHandler, ClientPid, Request, URI, Timeout) when record(Request, request) ->
  +    case catch guarded_start(ServerHandler, ClientPid, Request, URI, Timeout) of
  +	{'EXIT', Reason} ->
  +	    logger:log(error, "=ERROR REPORT==== from sippipe :~n~p", [Reason]),
  +	    transactionlayer:send_response_handler(ServerHandler, 500, "Server Internal Error");
  +	Res ->
  +	    Res
  +    end.
  +
  +%%
  +%% Dst is an URI
  +%%
  +guarded_start(ServerHandler, ClientPid, Request, URI, Timeout) when record(URI, sipurl) ->
       %% URI input
       Dst = #sipdst{uri=URI},
       logger:log(debug, "sippipe: Made sipdst record out of URI input : ~s", [sipurl:print(URI)]),
  -    start(ServerHandler, ClientPid, Request, [Dst], Timeout);
  -
  -start(ServerHandler, ClientPid, Request, route, Timeout) ->
  +    guarded_start(ServerHandler, ClientPid, Request, [Dst], Timeout);
  +
  +%%
  +%% Dst == route
  +%%
  +guarded_start(ServerHandler, ClientPid, Request, route, Timeout) ->
       %% Request should have a Route header
       %% URI passed to process_route_header is foo here
       case siprequest:process_route_header(Request#request.header, Request#request.uri) of
   	nomatch ->
   	    logger:log(error, "sippipe: No destination given, and request has no Route header"),
  -	    transactionlayer:send_response_handler(ServerHandler, 500, "Server Internal Error"),
  -	    error;
  +	    erlang:fault("no destination and no route", [ServerHandler, ClientPid, Request, route, Timeout]);
   	{ok, NewHeader, DstURI, ReqURI} when record(DstURI, sipurl), record(ReqURI, sipurl) ->
   	    {ok, _, ApproxMsgSize} = siprequest:check_proxy_request(Request),
   	    logger:log(debug, "sippipe: Routing request as per the Route header, Destination ~p, Request-URI ~p",
  
positive.code: 		    transactionlayer:send_response_handler(ServerHandler, 500, "Server Internal Error"),
  		    error;
  		Branch ->
  		    start2(Branch, ServerHandler, ClientPid, Request, DstList, Timeout)
  	    end;
  	false ->
  	    %% Either dead transaction handler, or none supplied. Try to find a valid handler
  
negative.code: 	    DstList = [FirstDst | DstT],
  	    case transactionlayer:start_client_transaction(Request, none, FirstDst, Branch, Timeout, self()) of
  		BranchPid when pid(BranchPid) ->
  		    final_start(Branch, ServerHandler, BranchPid, Request, DstList, Timeout);
  		{error, E} ->
  		    logger:log(error, "sippipe: Failed starting client transaction : ~p", [E]),
  		    transactionlayer:send_response_handler(ServerHandler, 500, "Failed resolving destination"),
  