anchor.diff:  
   handle_call(get_neighbors, _From,
           #rnode{prevnode = Prev, nextnode = Next} = R) ->
  -
           {reply, {ok, Prev, Next}, R};
  +
  +% NB get_domainlist and get_infopack 
  +%
  +% In case of heavy IO load or if Home contains a large number of
  +% files, file:list_dir() or file:script() may block for a significant 
  +% amount of time. To make sure that ringo_node server stays responsive,
  +% the request is handled by a separate process.
  +handle_call(get_domainlist, From, #rnode{home = Home} = R) ->
  +        spawn(fun() -> get_domainlist(Home, From) end),
  +        {noreply, R};
  +
  +handle_call({get_infopack, DomainID}, From, #rnode{home = Home} = R) ->
  +        InfoFile = filename:join([Home, lists:flatten(["rdomain-",
  +                integer_to_list(DomainID)]), "info"]),
  +        spawn(fun() -> get_infopack(InfoFile, From) end),
  +        {noreply, R};
  +
   
   %%% Place a node in the ring.
   %%% Consider the following setting: X -> N -> Y
  
positive.code:         end.
  
  
  %%% callback stubs
  
  terminate(_Reason, _State) -> {}.
  
negative.code:                 ets:insert(domain_table, {DomainID, Server})
          end,
          gen_server:cast(Server, Msg).
  
  domain_lookup(DomainID) ->
          case ets:lookup(domain_table, DomainID) of
                  [] -> {false, none};
                  [{_, Pid}] -> {is_process_alive(Pid), Pid}
          end.
  
  kill_domains() ->
          [gen_server:cast(S, {kill_domain, "ring changes"}) || 
  