anchor.diff:  print({wildcard, Parameters}) ->
       "*" ++ print_parameters(Parameters);
   
  -print({none, none, Host, Port, Parameters}) ->
  -    "sip:" ++ print_hostport(Host, Port) ++ print_parameters(Parameters);
  +print(URL) when record(URL, sipurl), URL#sipurl.proto == undefined ->
  +    print(URL#sipurl{proto="sip"});
   
  -print({User, Pass, Host, Port, Parameters}) ->
  -    "sip:" ++ print_userinfo(User, Pass) ++ "@" ++
  -	print_hostport(Host, Port) ++
  -	print_parameters(Parameters).
  +print(URL) when record(URL, sipurl), URL#sipurl.user == none, URL#sipurl.pass == none ->
  +    URL#sipurl.proto ++ ":" ++ print_hostport(URL#sipurl.host, URL#sipurl.port) ++ print_parameters(URL#sipurl.param);
  +
  +print(URL) when record(URL, sipurl) ->
  +    URL#sipurl.proto ++ ":" ++ print_userinfo(URL#sipurl.user, URL#sipurl.pass) ++ "@" ++
  +	print_hostport(URL#sipurl.host, URL#sipurl.port) ++
  +	print_parameters(URL#sipurl.param).
   
   print_userinfo(User, none) ->
  -    User;
  +    escape_user(User);
   
   print_userinfo(User, Pass) ->
  -    User ++ ":" ++ Pass.
  +    escape_user(User) ++ ":" ++ Pass.
   
   print_hostport(Host, none) ->
       Host;
  
positive.code: 	[Userinfo, Hostport] ->
  	    {User, Pass} = parse_userinfo(Userinfo),
  	    {Host, Port} = parse_hostport(Hostport),
  	    {User, Pass, Host, Port, Parameters};
  	[Hostport] ->
  	    {Host, Port} = parse_hostport(Hostport),
  	    {none, none, Host, Port, Parameters}
      end;
  parse(URL) ->
      {unparseable, URL}.
  
negative.code: -module(sipurl).
  -export([parse/1, parse_hostport/1, print/1, print_hostport/2, unescape_user/1, cleanup_hostname/1,
  	url_is_equal/2, url_is_equal/3, parse_url_with_default_protocol/2]).
  
  -include("siprecords.hrl").
  
  parse("sip:" ++ URL) ->
  %    logger:log(debug, "url: ~p", [URL]),
  