anchor.diff:  -spec subscribe(comm:mypid() | [comm:mypid()], cookie()) -> ok.
   subscribe([], _Cookie)         -> ok;
   subscribe(GlobalPids, Cookie) when is_list(GlobalPids) ->
  +    FD = my_fd_pid(),
       _ = [begin
  -             HBPid = get_hbs(Pid),
  -             comm:send_local(HBPid, {add_subscriber, self(), Pid, Cookie})
  +             comm:send_local(FD, {add_subscriber_via_fd, self(), Pid, Cookie})
            end
            || Pid <- GlobalPids],
       ok;
  
positive.code: on({pong, RemHBSSubscriber, RemoteDelay}, State) ->
      ?TRACE("FD: pong, ~p~n", [RemHBSSubscriber]),
      forward_to_hbs(RemHBSSubscriber, {pong_via_fd, RemHBSSubscriber, RemoteDelay}),
      State;
  
  on({add_watching_of_via_fd, Subscriber, Pid}, State) ->
  
negative.code:         PID -> PID
      end.
  
  %% @doc start a new hbs process inside the fd process context (ets owner)
  %%      precond: FDPid points to the fd process at the target node
  -spec start_and_register_hbs(FDPid::comm:mypid()) -> pid().
  start_and_register_hbs(FDPid) ->
      {ok, NewHBS} = fd_hbs:start_link(pid_groups:my_groupname(), FDPid),
      pdb:set({FDPid, NewHBS}, fd_hbs),
      NewHBS.
  
  -spec forward_to_hbs(comm:mypid(), comm:message()) -> ok.
  forward_to_hbs(Pid, Msg) ->
      FDPid = comm:get(fd, Pid),
      HBSPid = case pdb:get(FDPid, fd_hbs) of
                   undefined -> % synchronously create new hb process
                       start_and_register_hbs(FDPid);
                   Entry -> element(2, Entry)
               end,
      comm:send_local(HBSPid, Msg).
  