anchor.diff:  demonitor(MonitorRefs) ->
       lists:foreach(fun erlang:demonitor/1, MonitorRefs).
   
  -send(Addr, Op, NotifyPid, ResponseFun, CmdModule, Cmd, CmdArgs) ->
  +send(Addr, Op, NotifyPid, NotifyData, ResponseFun,
  +     CmdModule, Cmd, CmdArgs) ->
       gen_server:call(?MODULE,
  -                    {send, Addr, Op, NotifyPid,
  +                    {send, Addr, Op, NotifyPid, NotifyData,
                        ResponseFun, CmdModule, Cmd, CmdArgs}).
   
   forward(Addr, Out, Cmd, CmdArgs, ResponseFilter, ResponseModule) ->
  +    forward(Addr, Out, Cmd, CmdArgs, ResponseFilter, ResponseModule,
  +            self(), undefined).
  +
  +forward(Addr, Out, Cmd, CmdArgs, ResponseFilter, ResponseModule,
  +        NotifyPid, NotifyData) ->
       Kind = mc_addr:kind(Addr),
       ResponseFun =
           fun (Head, Body) ->
  
positive.code:             end
          end,
      {ok, Monitor} = monitor(Addr),
      case send(Addr, fwd, self(), ResponseFun,
                kind_to_module(Kind), Cmd, CmdArgs) of
          ok -> {ok, Monitor};
          _  -> {error, Monitor}
  
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.
  
  