anchor.diff:  handle_info({insert, Ref, Key, Val}, #state{tab = Tab} = State) ->
       case ets:lookup(Tab, Key) of
   	[{_, Ref}] ->
  -	    check_size(Tab, State#state.max_size),
  -	    LifeTime = State#state.life_time,
  -	    ExpireTime = if is_integer(LifeTime) ->
  -				 current_time() + LifeTime;
  -			    true ->
  -				 LifeTime
  -			 end,
  -	    ets:insert(Tab, {Key, Val, ExpireTime});
  +	    do_insert(State, Key, Val);
   	_ ->
   	    ok
       end,
  +    {noreply, State};
  +handle_info({insert, Key, Val}, State) ->
  +    do_insert(State, Key, Val),
       {noreply, State};
   handle_info({delete, Key}, #state{tab = Tab} = State) ->
       ets:delete(Tab, Key),
  
positive.code:     end,
      do_filter(Name, FilterFun, CurrTime, ets:next(Name, Key)).
  
  -spec do_lookup(atom(), any(), read_fun()) -> {ok, any()} | 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}),
  		Val
  	    catch E:R ->
  		    catch ets:delete_object(Name, {Key, Ref}),
  
negative.code: 		cache_missed :: boolean(),
  		life_time :: milli_seconds() | infinity,
  		max_size :: pos_integer() | infinity}).
  
  -define(CALL_TIMEOUT, timer:minutes(1)).
  
  -type milli_seconds() :: pos_integer().
  -type option() :: {max_size, pos_integer() | infinity} |
  