anchor.diff:          end,
       send_response(S, ping, Response),
       S1;
  -handle_ping(S, {ping, _From}, RemotePingObj) ->
  +handle_ping(S, {ping, _From, _TRef}, RemotePingObj) ->
       lager:info("Peer ~p got new ping when waiting for PING_RSP - ~p",
                  [peer_id(S), RemotePingObj]),
       send_response(S, ping, {error, already_pinging}),
  
positive.code:     lager:info("Peer ~p got unexpected ~p response - ~p",
                 [peer_id(S), MsgType, Result]),
      S;
  handle_msg(S, _MsgType, true, {RequestFld, From}, {error, Reason}) ->
      gen_server:reply(From, {error, Reason}),
      remove_request_fld(S, RequestFld);
  handle_msg(S, MsgType, false, Request, {ok, Msg}) ->
  
negative.code: 
  cleanup_requests(State) ->
      Reqs = maps:to_list(maps:get(requests, State, #{})),
      [ begin
          gen_server:reply(From, {error, disconnected}),
          erlang:cancel_timer(TRef)
        end || {_, {_, From, TRef}} <- Reqs ],
      maps:remove(requests, State).
  
  connect_fail(S0) ->
  