anchor.diff:              {A, Rq, Dict0, Pkt};
           {timeout = Reason, TRef, _} ->        %% No timely reply
               {error, Req, Reason};
  -        {failover, TRef} ->       %% Service says peer has gone down
  -            retransmit(pick_peer(SvcName, App, Req, Opts),
  -                       Req,
  -                       Opts,
  -                       SvcName,
  -                       Timeout)
  +        {'DOWN', MRef, process, _, _} when false /= MRef -> %% local peer_down
  +            failover(SvcName, App, Req, Opts, Timeout);
  +        {failover, TRef} ->                   %% local or remote peer_down
  +            failover(SvcName, App, Req, Opts, Timeout)
       end.
  +
  +%% failover/5
  +
  +failover(SvcName, App, Req, Opts, Timeout) ->
  +    retransmit(pick_peer(SvcName, App, Req, Opts),
  +               Req,
  +               Opts,
  +               SvcName,
  +               Timeout).
   
   %% handle_answer/3
   
  
positive.code:                    packet = Pkt0},
  
      incr(send, Pkt, TPid, AppDict),
      TRef = send_request(TPid, Pkt, Req, SvcName, Timeout),
      Pid ! Ref,  %% tell caller a send has been attempted
      handle_answer(SvcName,
                    App,
                    recv_A(Timeout, SvcName, App, Opts, {TRef, Req})).
  
  %% recv_A/5
  
  recv_A(Timeout, SvcName, App, Opts, {TRef, #request{ref = Ref} = Req}) ->
      %% Matching on TRef below ensures we ignore messages that pertain
      %% to a previous transport prior to failover. The answer message
      %% includes the #request{} since it's not necessarily Req; that
  
negative.code: %%
  %% Relay an answer from a remote node.
  
  recv(TPid, Pid, TRef, {LocalTRef, MRef}) ->
      receive
          {answer, _, _, _, _} = A ->
              Pid ! A;
          {'DOWN', MRef, process, _, _} ->
              Pid ! {failover, TRef};
          {failover = T, LocalTRef} ->
              Pid ! {T, TRef};
          T ->
  