anchor.diff:  
   do_tapestry_config(Key, Config) ->
       ?DEBUG("configuring ~p with ~p~n", [Key, Config]),
  -    Port1 = config_value(dns_port, Config),
  -    Port2 = config_value(client_port, Config),
  -    DnsIps = config_value(dns_ips, Config),
  -    tapestry_config(Key, Port1, Port2, DnsIps).
  +    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
  
positive.code: %% and next matching IP addresses.  The format of the tapestry
  %% config file is:
  %%
  %% {switch, [{dpid, {0,<<8,0,39,197,149,72>>}},
  %%           {dns_port, 1},
  %%           {client_port, 2},
  %%           {dns_ips, [{10,0,2,60}, {10,48,2,5}]}
  
negative.code: %%           {client_port, 2},
  %%           {dns_ips, [{10,0,2,60}, {10,48,2,5}]}
  %% ]}.
  %%
  %% If there is more than one port pair on a single switch:
  %%
  %% {switch, [{ip_addr, {192,168,56,102}},
  %%           {dns_port, 1},
  %%           {client_port, 2},
  %%           {dns_ips, [{10,0,2,60}, {10,48,2,5}]},
  %%           {dns_port, 3},
  %%           {client_port, 4},
  %%           {dns_ips, [{10,0,2,70}, {10,48,2,85}]}
  %% ]}.
  %%
  %% @end
  -spec tapestry_config(all | switch_key(), string()) -> ok.
  tapestry_config(all, Filename) ->
  