anchor.diff:  
   
   %% @doc call the top priority hook for the HookName
  --spec only(HookName::hookname(), Args::list()) -> any() | hooks_not_found.
  +-spec only(HookName::hookname(), Args::list()) -> any() | no_hook.
   only(HookName, Args) ->
  -    case hooks_list:find(HookName) of
  -        {ok, [{Module, Fun} |_]} ->
  -            apply(Module, Fun, Args);
  -        Error ->
  -            Error
  +    case ?find_hook(HookName) of
  +        no_hook -> no_hook;
  +        [{Module, Fun} |_] -> apply(Module, Fun, Args)
  +    end.
  +
  +
  +%% @doc retrieve the lists of registered functions for an hook.
  +-spec find(HookName::hookname()) -> {ok, [{atom(), atom()}]} | error.
  +find(HookName) ->
  +    case ?find_hook(HookName) of
  +        no_hook -> error;
  +        Hooks -> {ok, Hooks}
       end.
   
   %% @hidden
  
positive.code:          all_till_ok/2,
           only/2]).
  
  -export([start_link/0]).
  
  -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2,
  
negative.code: %% @doc execute all hooks for this HookName and return all results
  -spec all(HookName::hookname(), Args::list()) -> [any()].
  all(HookName, Args) ->
      case ?find_hook(HookName) of
          no_hook -> [];
          Hooks -> all1(Hooks, Args, [])
      end.
  
  all1([{Module, Fun} | Rest], Args, Acc) ->
  