anchor.diff:  enable_plugin(Plugin, Path) when is_atom(Plugin) ->
       gen_server:call(?MODULE, {enable_plugin, Plugin, Path}, infinity).
   
  -disable_plugin(Plugin) when is_atom(Plugin) ->
  +enable_module_plugin(Module, Fun, Arity) ->
  +    enable_module_plugin(Fun, Module, Fun, Arity).
  +enable_module_plugin(HookName, Module, Fun, Arity) when
  +      is_atom(HookName) and is_atom(Module)
  +      and is_atom(Fun) and is_integer(Arity) ->
  +    gen_server:call(?MODULE, {enable_module_plugin, HookName, Module, Fun, Arity}, infinity).
  +
  +disable_module_plugin(Module, Fun, Arity) ->
  +    disable_module_plugin(Fun, Module, Fun, Arity).
  +disable_module_plugin(HookName, Module, Fun, Arity) when
  +      is_atom(HookName) and is_atom(Module)
  +      and is_atom(Fun) and is_integer(Arity) ->
  +    disable_plugin({HookName, Module, Fun, Arity}).
  +
  +disable_plugin(Plugin) when is_atom(Plugin) or is_tuple(Plugin) ->
       gen_server:call(?MODULE, {disable_plugin, Plugin}, infinity).
   %%%===================================================================
   %%% gen_server callbacks
  
positive.code:     io:format(user, "info all ~p~n", [vmq_plugin:info(all)]),
      io:format(user, "info only ~p~n", [vmq_plugin:info(only)]),
      %% no plugin is registered
      ?assertEqual({error, no_matching_hook_found},
                   vmq_plugin:only(sample_hook, [])),
      ?assertEqual({error, no_matching_hook_found},
  
negative.code: %% @end
  %%--------------------------------------------------------------------
  handle_call({enable_plugin, Plugin, Path}, _From,
              #state{plugin_dir=PluginDir} = State) ->
      AppDir =
      case Path of
          undefined ->
  