anchor.diff:  		  {life_time, Val} when is_integer(Val), Val>0 -> Opt;
   		  {life_time, infinity} -> Opt;
   		  {cache_missed, Bool} when is_boolean(Bool) -> Opt;
  +		  {type, Type} when Type == set;
  +				    Type == ordered_set;
  +				    Type == bag;
  +				    Type == duplicate_bag ->
  +		      Opt;
   		  _ -> erlang:error({bad_option, Opt})
  -	      end
  +	      end;
  +	 (cache_missed) -> {cache_missed, true};
  +	 (Opt) -> erlang:error({bad_option, Opt})
         end, Opts).
   
   -spec do_setopts(state(), [{counter, counter()} | option()]) -> state().
  
positive.code: -type milli_seconds() :: pos_integer().
  -type option() :: {max_size, pos_integer() | infinity} |
  		  {life_time, milli_seconds() | infinity} |
  		  {cache_missed, boolean()}.
  -type read_fun() :: fun(() -> {ok, any()} | error).
  -type update_fun() :: fun(() -> ok | {ok, any()} | error).
  -type filter_fun() :: fun((any(), {ok, any()} | error) -> boolean()).
  
negative.code: 	    false
      end.
  
  -spec ets_match_delete(atom(), any()) -> boolean().
  ets_match_delete(Tab, Match) ->
      try
  	incr_counter(Tab),
  	ets:match_delete(Tab, {Match, '_', '_'})
      catch _:badarg ->
  	    false;
  	  _:{badmatch, undefined} ->
  	    false
      end.
  
  -spec ets_delete_object(atom(), any()) -> boolean().
  ets_delete_object(Tab, Obj) ->
      try
  