anchor.diff:      _ -> {reply, {error, zone_not_found}, State}
     end;
   
  -handle_call({put, Name, Zone}, _From, State) ->
  -  ets:insert(zones, {normalize_name(Name), Zone}),
  -  {reply, ok, State};
  -
  +%% @doc Get authority records (SOA) for a zone.
  +handle_call({get_authority, Name}, _From, State) ->
  +  find_authority(normalize_name(Name), State);
  +
  +%% @doc Get delegation records (NS and associated glue records) for a zone.
   handle_call({get_delegations, Name}, _From, State) ->
     case find_zone_in_cache(Name, State) of
       {ok, Zone} ->
  
positive.code:   gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
  
  find_zone(Qname) ->
    find_zone(normalize_name(Qname), get_authority(Qname)).
  
  find_zone(Qname, {error, _}) -> find_zone(Qname, []);
  find_zone(Qname, {ok, Authority}) -> find_zone(Qname, Authority);
  
negative.code:   end;
  
  handle_call({zone_names_and_versions}, _From, State) ->
    {reply, ets:foldl(fun({_, Zone}, NamesAndShas) -> NamesAndShas ++ [{Zone#zone.name, Zone#zone.version}] end, [], zones), State};
  
  % Write operations
  
  %% @doc Write the zone into the cache.
  handle_call({put, Name, Zone}, _From, State) ->
    ets:insert(zones, {normalize_name(Name), Zone}),
    {reply, ok, State}.
  
  handle_cast({put, Name, Zone}, State) ->
    ets:insert(zones, {normalize_name(Name), Zone}),
  