anchor.diff:  		    NewZone = #zone{labels = ZoneNameLabels, cuts = Cuts - 1},
   		    ets:insert(?TAB_ZONE, NewZone)
   	    end,
  -	    ?SERVER ! {clean_zone, ZoneName, Ref, Serials},
  -	    ok;
  +	    ok = schedule_clean_zone(ZoneRef, Serials);
   	[] -> ok
       end.
   
  -clean_zone(ZoneName, Ref, Serials) ->
  +schedule_clean_zone(#zone_ref{} = ZoneRef, Serials) ->
  +    schedule_clean_zone(ZoneRef, Serials, 0).
  +
  +schedule_clean_zone(ZoneName, Ref, Serials)
  +  when is_binary(ZoneName) andalso is_list(Serials)->
       ZoneRef = #zone_ref{name = ZoneName, ref = Ref},
  -    clean_zone(ZoneRef, Serials).
  +    schedule_clean_zone(ZoneRef, Serials, 0);
  +schedule_clean_zone(#zone_ref{} = ZoneRef, Serials, After)
  +  when is_integer(After) andalso After >= 0 ->
  +    _ = erlang:send_after(After, self(), {clean_zone, ZoneRef, Serials}),
  +    ok.
  +
  +schedule_clean_zone(ZoneName, Ref, Serials, After) ->
  +    ZoneRef = #zone_ref{name = ZoneName, ref = Ref},
  +    schedule_clean_zone(ZoneRef, Serials, After).
   
   clean_zone(ZoneRef, [Serial|Serials]) ->
       SerialRef = #serial_ref{zone_ref = ZoneRef, serial = Serial},
  
positive.code: 
  do_delete_zone(ZoneName) ->
      ZoneNameLabels = dns:dname_to_labels(ZoneName),
      case ets:lookup(?TAB_ZONE, ZoneNameLabels) of
  	[#zone{ref = Ref, serials = Serials, cuts = Cuts}] ->
  	    ok = decrement_zone_entry_cuts(ZoneNameLabels),
  	    case Cuts of
  		0 -> ets:delete(?TAB_ZONE, ZoneNameLabels);
  
negative.code:     ?DNSXD_ERR("Stray cast:~n~p~nState:~n~p~n", [Msg, State]),
      {noreply, State}.
  
  handle_info({clean_zone, #zone_ref{} = ZoneRef, Serials}, State) ->
      ok = clean_zone(ZoneRef, Serials),
      {noreply, State};
  handle_info(reload_zones, #state{reload_pid = undefined} = State) ->
      Now = dns:unix_time(),
  