anchor.diff:      {ok, Hostname} = inet:gethostname(),
       Peer = {?PEERNAME,list_to_atom(?PEERSTR ++ "@" ++ Hostname)},
       log:info(self(), "send handshake to: ~p", [Peer]),
  -    send_peer(Peer, handshake),
  +    send_peer(Peer, ?TAG_CALL, ?NERLOMSGPART(call,handshake)),
       Peer.
   
  -send_job(Peer,Spec) ->
  -    send_peer(Peer,{job, Spec}).
  -
  -send_peer(Peer,Msg) ->
  -    Peer ! ?NERLOMSG(Msg).
  +send_peer(Peer,Tag,Msg) ->
  +    log:debug(self(), "send to peer: ~p", [?NERLOMSG(Tag,Msg)]),
  +    Peer ! ?NERLOMSG(Tag,Msg).
   
   start_worker(S) ->
       gen_server:start(?MODULE, S#jsrv{worker=yes}, []).
       
   shutdown(Peer,S) ->
  -    send_peer(Peer, die),
  +    send_peer(Peer, ?TAG_CALL, ?NERLOMSGPART(call,die)),
       lists:map(fun(W) -> W ! {'STOP'} end, S#jsrv.workers).
   
      
  
positive.code:     {W, L} = f:lrot(S#jsrv.workers),
      gen_server:cast(W,{job,From,Spec}),
      {noreply, S#jsrv{workers=L}};
  handle_call({send,Msg},From,S) ->
      {W, L} = f:lrot(S#jsrv.workers),
      gen_server:cast(W,{send,From,Msg}),
      {noreply, S#jsrv{workers=L}};
  handle_call(Msg,From,S) ->
      log:warn(self(), "Cannot understand call from ~p: ~p", [From,Msg]),
      {reply, {error, unknown_msg}, S}.
  
  % @hidden
  handle_cast({job,From,Spec}, S) ->
      Result = send_job(S#jsrv.peer,Spec),
      gen_server:reply(From, Result),
      {noreply, S};
  handle_cast({send,From,Msg}, S) ->
      Result = send_peer(S#jsrv.peer,Msg),
      gen_server:reply(From, Result),
      {noreply, S};
  handle_cast({'STOP'}, S) ->
  
negative.code:         yes -> nop;
          no  -> shutdown(S#jsrv.peer,S)
      end,
      timer:send_after(500,?NERLOMSG(?TAG_OK,?NERLOMSGPART(call,bye))),
      log:info(self(),"stopping with state: ~w", [S]),
      {noreply, S#jsrv{stopping=true}};
  handle_cast(Msg,S) ->
  