anchor.diff:              end
           end,
       {ok, Monitor} = monitor(Addr),
  -    case send(Addr, fwd, self(), ResponseFun,
  +    case send(Addr, fwd, NotifyPid, NotifyData, ResponseFun,
                 kind_to_module(Kind), Cmd, CmdArgs) of
           ok -> {ok, Monitor};
           _  -> {error, Monitor}
  
positive.code: demonitor(MonitorRefs) ->
      lists:foreach(fun erlang:demonitor/1, MonitorRefs).
  
  send(Addr, Op, NotifyPid, ResponseFun, CmdModule, Cmd, CmdArgs) ->
      gen_server:call(?MODULE,
                      {send, Addr, Op, NotifyPid,
                       ResponseFun, CmdModule, Cmd, CmdArgs}).
  
  forward(Addr, Out, Cmd, CmdArgs, ResponseFilter, ResponseModule) ->
      Kind = mc_addr:kind(Addr),
      ResponseFun =
          fun (Head, Body) ->
  
negative.code:         {_,  Monitor} -> {NumOks, [Monitor | Monitors]}
      end.
  
  await_ok(N) -> await_ok(undefined, N, 0).
  await_ok(NotifyData, N, Acc) when N > 0 ->
      % TODO: Decrementing N due to a DOWN might be incorrect
      % during edge/race conditions.
      receive
          {NotifyData, {ok, _}}    -> await_ok(NotifyData, N - 1, Acc + 1);
          {NotifyData, {ok, _, _}} -> await_ok(NotifyData, N - 1, Acc + 1);
          {'DOWN', _MonitorRef, _, _, _}  -> await_ok(NotifyData, N - 1, Acc);
          Unexpected -> ?debugVal(Unexpected),
                        exit({error, Unexpected})
      end;
  await_ok(_, _, Acc) -> Acc.
  
  %% gen_server implementation.
  
  