anchor.diff:      is_password(Str);
   is_password("+" ++ Str) ->
       is_password(Str);
  -is_password("$" ++ Str) ->
  +is_password("\$" ++ Str) ->
       is_password(Str);
   is_password("," ++ Str) ->
       is_password(Str);
   is_password([$%, C2, C3 | Str]) ->
  -	     is_escaped([$%, C2, C3]) andalso is_password(Str);
  -			 is_password([Char | Str]) ->
  -				is_unreserved(Char) andalso is_password(Str);
  -			 is_password(_) ->
  -				false.
  +    is_escaped([$%, C2, C3]) andalso is_password(Str);
  +is_password([Char | Str]) ->
  +    is_unreserved(Char) andalso is_password(Str);
  +is_password(_) ->
  +    false.
   
   %%--------------------------------------------------------------------
   %% Function: is_user(Str)
  
positive.code: is_mark($*) -> true;
  is_mark($') -> true;
  is_mark($() -> true;
  	is_mark($)) -> true;
  	is_mark(_) -> false.
  
  is_unreserved(Char) ->
      sipparse_util:is_alphanum(Char) or is_mark(Char).
  
  is_param_unreserved($[) -> true;
  		    is_param_unreserved($]) -> true;
  is_param_unreserved($/) -> true;
  is_param_unreserved($:) -> true;
  is_param_unreserved($&) -> true;
  
negative.code:     Match = "==",
      %% string:tokens/2 below will consume several "==" in sucession
      %% and consider it as one separator, as sequences like
      %% "==" are illegal, this is checked for here instead
      case regexp:first_match(Str, Match) of
  	{match, _, _} -> false;
  	_ ->
  