anchor.diff:  
   %%--------------------------------------------------------------------
   %% Function: delete(Key, List)
  -%%           Key = string(), the name of a field in a sip message
  -%%           List = keylist record()
  -%% Descrip.: remove a entry from keylist record() (#keylist.list)
  +%%           Key = string(), the name of a header in a sip message
  +%%           List = keylist record()
  +%% Descrip.: remove an entry from keylist record() (#keylist.list)
   %% Returns : keylist record()
   %%--------------------------------------------------------------------
   delete(Key, List) when record(List, keylist) ->
  
positive.code: 
  %%--------------------------------------------------------------------
  %% Function: to_lower_list(Keys)
  %%           Keys = list() of string(), the name of a field in a sip
  %%           message
  %% Descrip.: convert header key, to a standard format - lowercase and
  %%           verbose string()
  
negative.code: %%           Keys = list() of string()
  %% Descrip.: return Keylist only containing the fields in Keys
  %% Returns : keylist record()
  %% Note    : use of atom() as keys (for well known keys) should
  %%           improve patternmatch speed. When matching a
  %%           E#keyelem.casekey against Casekey in the alternative
  %%           solution below, it may also be worth using one of the OTP
  %%           set modules so that the member check becomes O(log N)
  %%           instead of O(N).
  %%--------------------------------------------------------------------
  %% This code (untested) should do the same thing and should be less
  %% confusing
  %%
  % copy(Keylist, Keys) when record(Keylist, keylist) ->
  %     Casekeys = to_lower_list(Keys),
  %     KeyElems = Keylist#keylist.list,
  %     Copies = [E ||
  % 		 %% determine if E from Keylist should be copied
  % 		 lists:member(E#keyelem.casekey, Casekeys),
  % 		 E <- KeyElems ],
  %     #keylist{list = Copies}.
  %%--------------------------------------------------------------------
  
  %% XXX I can't quite figure out how this works - hsten
  %% XXX but it does work ;) - ft
  
  copy(Keylist, Keys) when record(Keylist, keylist) ->
      Casekeys = to_lower_list(Keys),
      Func = fun(Key, _Item) ->
  		   lists:member(Key, Casekeys)
  	   end,
      filter(Func, Keylist).
  