anchor.diff:  %% Both values match, continue.
   list_match([E|Tail], [E|TailMatch], Binds) ->
   	list_match(Tail, TailMatch, Binds);
  -%% Bind E to the variable name V and continue.
  +%% Bind E to the variable name V and continue,
  +%% unless V was already defined and E isn't identical to the previous value.
   list_match([E|Tail], [V|TailMatch], Binds) when is_atom(V) ->
  -	list_match(Tail, TailMatch, [{V, E}|Binds]);
  +	case lists:keyfind(V, 1, Binds) of
  +		{_, E} ->
  +			list_match(Tail, TailMatch, Binds);
  +		{_, _} ->
  +			false;
  +		false ->
  +			list_match(Tail, TailMatch, [{V, E}|Binds])
  +	end;
   %% Match complete.
   list_match([], [], Binds) ->
   	{true, Binds, undefined};
  
positive.code: 	{ok, Handler, Opts, Bindings, HostInfo, undefined};
  match_path([{PathMatch, Constraints, Handler, Opts}|Tail], HostInfo, Tokens,
  		Bindings) when is_list(Tokens) ->
  	case list_match(Tokens, PathMatch, []) of
  		false ->
  			match_path(Tail, HostInfo, Tokens, Bindings);
  		{true, PathBinds, PathInfo} ->
  			case check_constraints(Constraints, PathBinds) of
  				{ok, PathBinds2} ->
  					{ok, Handler, Opts, Bindings ++ PathBinds2,
  						HostInfo, PathInfo};
  				nomatch ->
  					match_path(Tail, HostInfo, Tokens, Bindings)
  			end
  
negative.code: 		<<"ninenines.eu">>, <<"/path/ESSEN">>),
  	ok.
  
  match_same_bindings_test() ->
  	Dispatch = [{[same, same], [], [{'_', [], match, []}]}],
  	{ok, _, [], [{same, <<"eu">>}], _, _} = match(Dispatch,
  		<<"eu.eu">>, <<"/">>),
  	{error, notfound, host} = match(Dispatch,
  		<<"ninenines.eu">>, <<"/">>),
  	Dispatch2 = [{[<<"eu">>, <<"ninenines">>, user], [],
  		[{[<<"path">>, user], [], match, []}]}],
  	{ok, _, [], [{user, <<"essen">>}], _, _} = match(Dispatch2,
  		<<"essen.ninenines.eu">>, <<"/path/essen">>),
  	{ok, _, [], [{user, <<"essen">>}], _, _} = match(Dispatch2,
  		<<"essen.ninenines.eu">>, <<"/path/essen/">>),
  	{error, notfound, path} = match(Dispatch2,
  		<<"essen.ninenines.eu">>, <<"/path/notessen">>),
  	Dispatch3 = [{'_', [], [{[same, same], [], match, []}]}],
  	{ok, _, [], [{same, <<"path">>}], _, _} = match(Dispatch3,
  		<<"ninenines.eu">>, <<"/path/path">>),
  	{error, notfound, path} = match(Dispatch3,
  		<<"ninenines.eu">>, <<"/path/to">>),
  	ok.
  
  -endif.
  