anchor.diff:          [C | _] -> C
       end.
   
  -config_value(Key, Config) ->
  -    case proplists:get_value(Key, Config) of
  -        undefined -> error({Key, no_config});
  -        Value -> Value
  +config_values(Key, Config) ->
  +    case proplists:get_all_values(Key, Config) of
  +        [] -> error({Key, no_config});
  +        Values -> Values
       end.
   
   find_switch(default) ->
  
positive.code: tapestry_config(Key, Filename) when is_integer(Key); Key == default ->
      do_tapestry_config(Key, find_config(Key, consult_config(Filename))).
  
  try_config({Key, DatapathId, IpAddr, _Version}, Configs) ->
      case do_find_config(DatapathId, IpAddr, Configs) of
          no_config ->
              ok;
  
negative.code: 
  do_tapestry_config(Key, Config) ->
      ?DEBUG("configuring ~p with ~p~n", [Key, Config]),
      Port1List = config_values(dns_port, Config),
      Port2List = config_values(client_port, Config),
      DnsIpsList = config_values(dns_ips, Config),
      [{FirstPort1, FirstPort2, FirstDnsIps} | Rest] = 
                                  lists:zip3(Port1List, Port2List, DnsIpsList),
      tapestry_config(Key, FirstPort1, FirstPort2, FirstDnsIps),
      [tapestry_config_add(Key, Port1, Port2, DnsIps) ||
          {Port1, Port2, DnsIps} <- Rest],
      ok.
  
  consult_config(Filename) ->
      case file:consult(Filename) of
  