anchor.diff:  %% ------------------------------------------------------------------
   
   init([]) ->
  +    %% trie and topic tables, will be copied by all nodes.
  +	mnesia:create_table(topic_trie_node, [
  +		{ram_copies, [node()]},
  +		{attributes, record_info(fields, topic_trie_node)}]),
  +	mnesia:add_table_copy(topic_trie_node, node(), ram_copies),
   	mnesia:create_table(topic_trie, [
   		{ram_copies, [node()]},
   		{attributes, record_info(fields, topic_trie)}]),
  -	mnesia:create_table(topic_trie_node, [
  -		{ram_copies, [node()]},
  -		{attributes, record_info(fields, topic_trie_node)}]),
  +	mnesia:add_table_copy(topic_trie, node(), ram_copies),
   	mnesia:create_table(topic, [
   		{type, bag},
   		{record_name, topic},
   		{ram_copies, [node()]}, 
   		{attributes, record_info(fields, topic)}]),
  -	mnesia:add_table_copy(topic_trie, node(), ram_copies),
  -	mnesia:add_table_copy(topic_trie_node, node(), ram_copies),
   	mnesia:add_table_copy(topic, node(), ram_copies),
  -	ets:new(topic_subscriber, [bag, named_table, {keypos, 2}]),
  +
  +    %% local table, not shared with other table
  +    mnesia:create_table(topic_subscriber, [
  +		{type, bag},
  +		{record_name, topic_subscriber},
  +		{ram_copies, [node()]}, 
  +		{attributes, record_info(fields, topic_subscriber)},
  +        {index, [subpid]}, 
  +        {local_content, true}]),
   	{ok, #state{}}.
   
   handle_call(getstats, _From, State = #state{max_subs = Max}) ->
       Stats = [{'topics/count', mnesia:table_info(topic, size)},
  -             {'subscribers/count', ets:info(topic_subscriber, size)},
  +             {'subscribers/count', mnesia:info(topic_subscriber, size)},
                {'subscribers/max', Max}],
       {reply, Stats, State};
  -
  -handle_call({create, Topic}, _From, State) ->
  -	Result = mnesia:transaction(fun trie_add/1, [Topic]),
  -    {reply, Result, setstats(State)};
  -
  -handle_call({subscribe, Topics, SubPid}, _From, State) ->
  -    Result = [subscribe_topic({Topic, Qos}, SubPid) || {Topic, Qos} <- Topics],
  -    Reply = 
  -    case [Err || Err = {error, _} <- Result] of
  -        [] -> {ok, [Qos || {ok, Qos} <- Result]};
  -        Errors -> hd(Errors)
  -    end,
  -    {reply, Reply, setstats(State)};
   
   handle_call(Req, _From, State) ->
   	{stop, {badreq, Req}, State}.
  
positive.code: %% @end
  %%------------------------------------------------------------------------------
  -spec create(binary()) -> {atomic,  Reason :: any()} |  {aborted, Reason :: any()}.
  create(Topic) -> 
      gen_server:call(?SERVER, {create, Topic}).
  
  %%------------------------------------------------------------------------------
  %% @doc
  
negative.code: %%%=============================================================================
  %%% Internal functions
  %%%=============================================================================
  
  try_remove_topic(Name) when is_binary(Name) ->
  	case ets:member(topic_subscriber, Name) of
  