anchor.diff:  comma(Parsed, [Char | Rest], false, false) ->
       comma([Char | Parsed], Rest, false, false);
   
  -%% end of string, clean up last comma separated entry (it's a error
  +%% end of string, clean up last comma separated entry (it's an error
   %% if Inquote or InUriQuote = true, the quotes are then unbalanced)
   comma(Parsed, [], false, false) ->
       [lists:reverse(string:strip(Parsed, both))].
  
positive.code: %%--------------------------------------------------------------------
  %% Function: from([String])
  %%           from(Header)
  %%           String = string(), the contens of a FROM header (usually 
  %%           the result of keylist:fetch("From", Header))
  %%           Header = keylist record()
  %% Descrip.: parse header data
  %% Returns : {Displayname, URI} (see name_header/1)
  %%--------------------------------------------------------------------
  from(Header) when is_record(Header, keylist) -> 
      from(keylist:fetch("From", Header));
  
  from([String]) ->
  
negative.code: %% InUriQuote = keep track if currently inside a quoted sipurl segment
  %%              where special chars like "," should be ignored
  
  %% Note: Parsed stores it's chars in reverse order during
  %% scanning - to improve performance, "Parsed ++ [C]" which is easier
  %% to understand is considerably more costly, code becomes O(N^2)
  %% instead of O(N)
  %% Note: quote URIs (<...>) can't contain quoted strings.
  %% Quoted strings on the other hand, can contain "<" and ">" - this
  %% means that comma doesn't have to deal with nested quotes.
  
  
  %% start of quoted uri
  