anchor.diff:      end,
       do_filter(Name, FilterFun, CurrTime, ets:next(Name, Key)).
   
  --spec do_lookup(atom(), any(), read_fun()) -> {ok, any()} | error.
  +-spec do_lookup(atom(), any(), read_fun() | undefined) -> {ok, any()} | error.
  +do_lookup(_Name, _Key, undefined) ->
  +    error;
   do_lookup(Name, Key, ReadFun) ->
       Ref = make_ref(),
       case ets:insert_new(Name, {Key, Ref}) of
   	true ->
   	    try
   		Val = ReadFun(),
  -		send(Name, {insert, Ref, Key, Val}),
  +		case Val of
  +		    {ok, _} ->
  +			send(Name, {insert, Ref, Key, Val});
  +		    error ->
  +			send(Name, {insert, Ref, Key, Val});
  +		    _Other ->
  +			ets:delete_object(Name, {Key, Ref})
  +		end,
   		Val
   	    catch E:R ->
   		    catch ets:delete_object(Name, {Key, Ref}),
  
positive.code: 
  %% API
  -export([new/1, new/2, start_link/2, delete/1, delete/2, delete/3,
  	 lookup/3, clear/1, filter/2, all/0, info/1, info/2]).
  %% gen_server callbacks
  -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
  	 terminate/2, code_change/3]).
  
negative.code: 		life_time = LifeTime,
  		cache_missed = CacheMissed}}.
  
  handle_call({insert, Key, Val}, _From, State) ->
      do_insert(State, Key, Val),
      {reply, ok, State};
  handle_call(_Request, _From, State) ->
      Reply = ok,
      {reply, Reply, State}.
  