anchor.diff:      collect_replies(orddict:from_list(Members)).
   
   -spec multi_call_reply(CallerPid :: pid(), Reply :: term()) -> {syn_multi_call_reply, pid(), Reply :: term()}.
  -multi_call_reply(CallerPid, Reply) ->
  -    CallerPid ! {syn_multi_call_reply, self(), Reply}.
  +multi_call_reply({Ref, ClientPid}, Reply) ->
  +    ClientPid ! {syn_multi_call_reply, Ref, Reply}.
   
   %% ===================================================================
   %% Callbacks
  
positive.code:     %% monitor
      MRef = monitor(process, Pid),
      %% send
      Pid ! {syn_multi_call, Message, self(), Meta},
      %% wait for reply
      receive
          {syn_multi_call_reply, Pid, Reply} ->
              CollectorPid ! {reply, Pid, Reply};
  
          {'DOWN', MRef, _, _, _} ->
              CollectorPid ! {bad_pid, Pid}
  
      after Timeout ->
          CollectorPid ! {bad_pid, Pid}
      end.
  
  -spec collect_replies(MembersOD :: orddict:orddict({pid(), Meta :: term()})) ->
  
negative.code: collect_replies([], Replies, BadReplies) -> {Replies, BadReplies};
  collect_replies(MembersOD, Replies, BadReplies) ->
      receive
          {syn_reply, Pid, Reply} ->
              {Meta, MembersOD1} = orddict:take(Pid, MembersOD),
              collect_replies(MembersOD1, [{{Pid, Meta}, Reply} | Replies], BadReplies);
  
          {syn_bad_reply, Pid} ->
              {Meta, MembersOD1} = orddict:take(Pid, MembersOD),
              collect_replies(MembersOD1, Replies, [{Pid, Meta} | BadReplies])
      end.
  