anchor.diff:  handle_call({map_from, ClientName, Seq, Fun}, _From, #s{cache=Cache} = State) ->
     {reply, do_map_from(ClientName, Seq, Fun, Cache), State};
   
  -handle_call({takeover_session, ClientName, Session}, _From, #s{cache=Cache} = State) ->
  +handle_call({takeover_session, ClientName, Session, Pid}, _From, State) ->
  +  #s{
  +    cache = Cache,
  +    pids = Pids
  +  } = State,
  +  erlang:monitor(process, Pid),
     {_,T,In,Out,Q} = gb_trees:get(ClientName, Cache),
     {reply, ok, State#s{
  -      cache = gb_trees:update(ClientName, {Session,T,In,Out,Q}, Cache)
  +      cache = gb_trees:update(ClientName, {Session,T,In,Out,Q}, Cache),
  +      pids = gb_trees:insert(Pid, ClientName, Pids)
       }};
   
   handle_call({session_state, ClientName}, _From, #s{cache=Cache} = State) ->
  
positive.code: %% ------------------------------------------------------------------
  
  init([]) ->
    {ok, #s{cache=gb_trees:empty()}}.
  
  handle_call({log_out, ClientName, Payload}, _From, State) ->
    {reply, ok, do_log(ClientName, Payload, State)};
  
negative.code:   gen_server:call(?SERVER, {session_state, ClientName}).
  
  takeover_session(ClientName, Session) ->
    gen_server:call(?SERVER, {takeover_session, ClientName, Session, self()}).
  
  connecting(ClientName) ->
    gen_server:cast(?SERVER, {connecting, ClientName}).
  