anchor.diff:  			 true
   		 end,
       if NeedUpdate ->
  -	    NewVal = case UpdateFun() of
  -			 ok -> Val;
  -			 {ok, Val1} -> {ok, Val1};
  -			 error -> error;
  -			 {error, notfound} -> error;
  -			 Other -> {error, Other}
  -		     end,
  -	    case NewVal of
  -		{error, Reason} ->
  -		    Reason;
  -		_ ->
  +	    case case UpdateFun() of
  +		     ok -> {cache, Val};
  +		     {ok, _} = Ret -> {cache, Ret};
  +		     error -> {cache, error};
  +		     {error, notfound} -> {cache, error};
  +		     {cache, _} = Ret -> Ret;
  +		     {nocache, _} = Ret -> Ret;
  +		     Other -> {nocache, Other}
  +		 end of
  +		{nocache, NewVal} ->
  +		    NewVal;
  +		{cache, NewVal} ->
   		    lists:foreach(
   		      fun(Node) when Node /= node() ->
   			      send({Name, Node}, {delete, Key});
  
positive.code: %% API
  -export([new/1, new/2, start_link/2, delete/1, delete/2, delete/3,
  	 lookup/2, lookup/3, insert/3, insert/4, insert_new/3, insert_new/4,
  	 update/4, update/5, setopts/2, clear/1, clear/2,
  	 clean/1, clean/2, filter/2, fold/3, all/0, info/1, info/2]).
  %% gen_server callbacks
  -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
  
negative.code: 	{_, Value} -> Value;
  	_ -> erlang:error(badarg)
      end.
  
  -spec untag(term()) -> term().
  untag({cache, Val}) -> Val;
  untag({nocache, Val}) -> Val;
  untag(Val) -> Val.
  
  load_nif() ->
      Path = p1_nif_utils:get_so_path(?MODULE, [?MODULE], atom_to_list(?MODULE)),
  