anchor.diff:      gen_server:cast(Notifier, {'detach', Event, Observer}).
   
   %% @doc Return all observers for a particular event
  -get_observers(Msg, #context{notifier=Notifier}) when is_tuple(Msg) ->
  -    gen_server:call(Notifier, {'get_observers', element(1, Msg)});
  -get_observers(Event, #context{notifier=Notifier}) ->
  -    gen_server:call(Notifier, {'get_observers', Event}).
  +get_observers(Msg, Context) when is_tuple(Msg) ->
  +    get_observers(element(1, Msg), Context);
  +get_observers(Event, #context{host=Host}) ->
  +    Table = observer_table_name(Host),
  +    case ets:lookup(Table, Event) of
  +        [] -> [];
  +        [{Event, Observers}] -> Observers
  +    end.
   
   
   %%====================================================================
  
positive.code: %%                                  {stop, Reason, State}
  %% @doc Add an observer to an event
  handle_cast({'observe', Event, Observer, Priority}, State) ->
  	Event1 = case is_tuple(Event) of true -> element(1,Event); false -> Event end,
      Observers1 = case dict:find(Event1, State#state.observers) of
                    {ok, EventObservers} -> 
                          Os1 = lists:sort([{Priority, Observer}|EventObservers]),
                          dict:store(Event1, Os1, State#state.observers);
                    error -> 
                          dict:store(Event1, [{Priority, Observer}], State#state.observers)
                    end,
      {noreply, State#state{observers=Observers1}};
  
  %% @doc Detach an observer from an event
  handle_cast({'detach', Event, Observer}, State) ->
  	Event1 = case is_tuple(Event) of true -> element(1,Event); false -> Event end,
      Observers1 = case dict:find(Event1, State#state.observers) of
                    {ok, Olist} ->
                        Olist1 = lists:filter(fun({_Prio,Obs}) -> Obs /= Observer end, Olist),
                        dict:store(Event1, Olist1, State#state.observers);
                    error ->
                        State#state.observers
                    end,
      {noreply, State#state{observers=Observers1}};
  
  
  %% @doc Detach all observer from an event
  handle_cast({'detach_all', Event}, State) ->
  	Event1 = case is_tuple(Event) of true -> element(1,Event); false -> Event end,
      {noreply, State#state{observers = dict:erase(Event1, State#state.observers)}};
  
  
  %% @doc Trap unknown casts
  
negative.code: %% terminate. It should be the opposite of Module:init/1 and do any necessary
  %% cleaning up. When it returns, the gen_server terminates with Reason.
  %% The return value is ignored.
  terminate(normal, State) ->
      cancel_timers(State#state.timers),
      ets:delete(State#state.observers),
      ok;
  terminate(_Reason, State) ->
      cancel_timers(State#state.timers),
      ok.
  
  
  %% @spec code_change(OldVsn, State, Extra) -> {ok, NewState}
  %% @doc Convert process state when code is changed
  