anchor.diff:  				       end;
   				  ({do_lookup, _, _, _}) ->
   				       true
  -			       end),
  -	    io:format("Filtered~n");
  +			       end);
   
   	{notify_requester, Caller, Name, Addresses} ->
  +	    io:format("Notifying ~p for ~p: ~p~n", [Caller, Name, Addresses]),
   	    Caller ! {lookup, Name, Addresses}
       end,
       ?MODULE:main(LookupQueue, Results).
  
positive.code: %%
  % Perform the actual query
  do_lookup(Name, Family) ->
      io:format("dns:do_lookup(~p, ~p)~n", [Name, Family]),
      Addresses = case inet:getaddrs(Name, Family) of
  		    {ok, A} ->
  			A;
  		    {error, _} ->
  			[]
  		end,
      dns ! {lookup_result, Name, Family, Addresses}.
  
negative.code: 
  
  main(LookupQueue, Results) ->
      receive
  
  	{Caller, lookup, Name} -> % Triggered by lookup/1
  	    case ets:lookup(Results, Name) of
  		[] -> % Haven't looked up yet
  		    timed_queue:add(LookupQueue, {do_lookup, Caller, Name, inet}),
  		    timed_queue:add(LookupQueue, {do_lookup, Caller, Name, inet6});
  		[{Name, Inet, Inet6}] -> % Already looked up
  		    Caller ! {lookup, Name, Inet ++ Inet6}
  	    end;
  
  	{do_lookup, Caller, Name, Family} = T -> % Triggered by LookupQueue
  						% It is impossible to have result already,
  						% because that would mean we're delivering delayed
  						% although the answer is already known
  	    DoSend = case {Family, ets:lookup(Results, Name)} of
  			 {inet, []} -> true;
  			 {inet, [{Name, nil, _}]} -> true;
  