anchor.diff:  		   }],
       P25 = parse(["<sip:ft@192.0.2.12:5060;user=ip>;+sip.instance=\"<urn:uuid:foo>\""]),
   
  -
  -    %% print/1
  +    %% test parameters containing quoted semi-colon, and ending with semicolons
  +    autotest:mark(?LINE, "parse/1 - 26"),
  +    P26 = [#contact{display_name = none,
  +		    urlstr = "sip:ft@192.0.2.12:5060",
  +		    contact_param = contact_param:to_norm([{"gruu", "\"sip:ft@example.net;opaque=test;gruu\""}])
  +		   }],
  +    P26 = parse(["<sip:ft@192.0.2.12:5060>;gruu=\"sip:ft@example.net;opaque=test;gruu\";;;"]),
  +
  +    %% test parameters with unbalanced quotes
  +    autotest:mark(?LINE, "parse/1 - 27"),
  +    {unparseable, {unparsable_contact_params, unbalanced_quotes}} =
  +	(catch parse(["<sip:ft@192.0.2.12:5060>;foo=\"test"])),
  +
  +    %% test invalid expires parameter
  +    autotest:mark(?LINE, "parse/1 - 28"),
  +    {unparseable, {malformed_expires, "aa"}} =
  +	(catch parse(["<sip:ft@192.0.2.12:5060>;expires=aa"])),
  +
  +    %% test with invalid IPv6 address in parameter
  +    autotest:mark(?LINE, "parse/1 - 29"),
  +    {unparseable, {invalid_contact_param, "test=[2001:6b0:5:987::1234"}} =
  +	(catch parse(["<sip:ft@192.0.2.12:5060>;test=[2001:6b0:5:987::1234"])),
  +
  +    %% test invalid q parameter
  +    autotest:mark(?LINE, "parse/1 - 30"),
  +    {unparseable, {malformed_qvalue, "aa"}} =
  +	(catch parse(["<sip:ft@192.0.2.12:5060>;q=aa"])),
  +
  +
  +    %% print(Contact) / print(Contacts)
       %%--------------------------------------------------------------------
   
       %% test "Contact: *"
  
positive.code: %%--------------------------------------------------------------------
  test() ->
  
      %% parse
      %%--------------------------------------------------------------------
      %% test "Contact: *"
      autotest:mark(?LINE, "parse/1 - 1"),
  
negative.code: 
      %% test display name without quotes, that really should have quotes
      autotest:mark(?LINE, "parse/1 - 20"),
      {unparseable, {unparseable_uri_without_brackets, _}} = (catch parse(["Foo Bar sip:example.org"])),
  
      %% test display name without quotes, that really should have quotes
      autotest:mark(?LINE, "parse/1 - 21"),
      {unparseable, {unquoted_displayname_is_not_a_valid_token, _}} = (catch parse(["Foo|Bar <sip:example.org>"])),
  
  
      %% test with empty quoted display name
      autotest:mark(?LINE, "parse/1 - 22"),
  