anchor.diff:                     format('record-route', address(<<>>, <<"sip:p1.example.com;lr">>, []))),
   
        % Via
  -     ?_assertEqual(via(udp, {{8193,3512,0,0,0,0,44577,44306}, undefined}, [{branch, <<"z9hG4bK776asdhds">>}]),
  +     ?_assertEqual([via(udp, {{8193,3512,0,0,0,0,44577,44306}, undefined}, [{branch, <<"z9hG4bK776asdhds">>}])],
                      parse('via', <<"SIP/2.0/UDP [2001:0db8:0000:0000:0000:0000:ae21:ad12];branch=z9hG4bK776asdhds">>)),
  -     ?_assertEqual(via(udp, {"pc33.atlanta.com", undefined}, [{branch, <<"z9hG4bK776asdhds">>}]),
  +     ?_assertEqual([via(udp, {"pc33.atlanta.com", undefined}, [{branch, <<"z9hG4bK776asdhds">>}])],
                      parse('via', <<"SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds">>)),
  -     ?_assertEqual(via(udp, {"pc33.atlanta.com", undefined}, [{branch, <<"z9hG4bK776asdhds">>}]),
  +     ?_assertEqual([via(udp, {"pc33.atlanta.com", undefined}, [{branch, <<"z9hG4bK776asdhds">>}])],
                      parse('via', <<"SIP/2.0/UDP pc33.atlanta.com ; branch=z9hG4bK776asdhds">>)),
        ?_assertEqual([via(udp, {{127, 0, 0, 1}, 15060}, [{param, <<"value">>}, flag]),
                       via(tcp, {"pc33.atlanta.com", undefined}, [{branch, <<"z9hG4bK776asdhds">>}])],
  
positive.code:                    parse('allow', <<"INVITE, ACK, CANCEL, OPTIONS, BYE">>)),
       ?_assertEqual(<<"INVITE, ACK, CANCEL, OPTIONS, BYE">>,
                     format('allow', ['INVITE', 'ACK', 'CANCEL', 'OPTIONS', 'BYE'])),
  
       % Subject (FIXME: implement proper tests)
       ?_assertEqual(<<"I know you're there, pick up the phone and talk to me!">>,
  
negative.code: %% Allow   = "Allow" HCOLON [Method *(COMMA Method)]
  %% Require = "Require" HCOLON option-tag *(COMMA option-tag)
  parse(Name, Bin) when
    Name =:= 'allow'; Name =:= 'require'; Name =:= 'proxy-require';
    Name =:= 'supported'; Name =:= 'unsupported' ->
  
      {MethodBin, Bin2} = sip_binary:parse_token(Bin),
      % by convention, method names are upper-case atoms
      % all other are in lower case
      MethodBin2 =
          if Name =:= 'allow' -> sip_binary:to_upper(MethodBin);
             Name =/= 'allow' -> sip_binary:to_lower(MethodBin)
          end,
      Method = sip_binary:binary_to_existing_atom(MethodBin2),
      case Bin2 of
          <<?COMMA, Bin3/binary>> ->
              % Parse the rest of the Allow
              % *(COMMA Method)
              [Method | parse(Name, Bin3)];
  
          <<>> -> [Method]
      end;
  