anchor.diff:      Config.
   
   cache_find(Kind, Name, Commit, #cstate{table=Cache}) ->
  -    ok.
  -
  -generic_find(Kind, Name, Commit, #cstate{table=Cache}) ->
       case ets:match(Cache, {{Kind, Name, Commit}, '$1'}) of
   	[[Config]] ->
  -	    Config;
  +	    {value, Config};
   	 _ ->
   	    find_failed
       end.
  +
  +cache_fetch(Kind, Name, Commit, State) ->
  +    {value, Result} = cache_find(Kind, Name, Commit, State),
  +    Result.
  +
  +generic_find(Kind, Name, Commit, State) ->
  +    case cache_find(Kind, Name, Commit, State) of
  +	{value, Config} ->
  +	    {value, Config};
  +	 find_failed ->
  +	    calc_configs(Commit, State),
  +	    cache_fetch(Kind, Name, Commit, State)
  +    end.
  
positive.code:     %% get feature object from tree
      {value, EntityObj} = wallaroo_tree:get_path([path_for_kind(Kind), Name], Tree, StoreMod),
      %% apply included feature configs to empty config; these should already be in the cache
      BaseConfig = lists:foldl(apply_factory(true, State), [], [cache_find(Kind, Included, Commit, State) || Included <- lists:reverse(wallaby_feature:includes(EntityObj))]),
      %% resolve "defaulted" parameters
      MyConfig = orddict:map(fun(Param, 0) ->
  				   {value, PObj} = wallaroo_tree:get_path([path_for_kind(parameter), Param], Tree, StoreMod),
  
negative.code:     {stop, normal, State}.
  
  handle_call({config_for, Kind, Name, Commit}, _From, #cstate{re=RE, table=Cache, storage=StoreMod}=State) ->
      {reply, generic_find(Kind, Name, Commit, State), State}.
  
  handle_info(_X, State) ->
      {noreply, State}.
  