anchor.diff:         [rempid()],  %% subscribed rem. pids + ref counting
          erlang_timestamp(),  %% local time of last pong arrival
          erlang_timestamp(),  %% remote is crashed if no pong arrives until this
  -       atom(),       %% ets table name
  +       pdb:tableid(),       %% ets table name
          %% locally erlang:monitored() pids for a remote hbs:
          [{comm:mypid(), reference()}]
        }).
  
positive.code:     rempid_set_pending_demonitor(E1, true).
  
  -spec state_new(comm:mypid(), [rempid()],
                  erlang_timestamp(), erlang_timestamp(), atom()) -> state().
  state_new(RemoteHBS, RemotePids, LastPong, CrashedAfter,Table) ->
      {RemoteHBS, RemotePids, LastPong, CrashedAfter, Table, []}.
  
  -spec state_get_rem_hbs(state())    -> comm:mypid().
  
negative.code: start_link(ServiceGroup, RemotePid) ->
      RemoteFDPid = comm:get(fd, RemotePid),
      Name = lists:flatten(io_lib:format("fd <-> ~p", [RemoteFDPid])),
      gen_component:start_link(?MODULE, fun ?MODULE:on/2, RemotePid,
                               [%% {wait_for_init}, %% when using protected ets table
                                {pid_groups_join_as, ServiceGroup, Name}]).
  
  -spec init(pid() | comm:mypid()) -> state().
  init(RemotePid) ->
      ?TRACE("fd_hbs init: RemotePid ~p~n", [RemotePid]),
      TableName = pdb:new(?MODULE, [set]), %% debugging: ++ [protected]),
      RemoteFDPid = comm:get(fd, RemotePid),
  