anchor.diff:      pushy_messaging:make_send_message_multi(Socket, proto_v2, Method,
                                               NodeRefs, Message, N2Addr, N2Key),
       State;
  -do_send_multi(#state{addr_node_map = AddrNodeMap,
  -                     command_sock = Socket,
  +do_send_multi(#state{command_sock = Socket,
                        private_key = PrivateKey}=State,
                 rsa2048_sha1 = Method, NodeRefs, Message) ->
       N2Addr = fun(NodeRef) ->
  -                     addr_node_map_lookup_by_node(AddrNodeMap, NodeRef)
  +                     node_to_addr_lookup(NodeRef, State)
                end,
       N2Key = fun(rsa2048_sha1, _) ->
                       PrivateKey
  
positive.code: %% FIX: Take advantage of multiple function heads to make code easier to read
  process_message(State, #pushy_message{address=Address, body=Data}) ->
      {State2, NodeRef} = get_node_ref(State, Address, Data),
      JobId = ej:get({<<"job_id">>}, Data),
      Type = ej:get({<<"type">>}, Data),
      send_node_event(JobId, NodeRef, Type),
  
negative.code: get_node_ref(State, Address, Data) ->
      NodeRef = get_node_ref(Data),
      %% Every time we get a message from a node, we update it's Addr->Name mapping entry
      State2 = node_to_addr_update(NodeRef, Address, State),
      {State2, NodeRef}.
  
  %%
  %% Utility functions; we should generalize these and move elsewhere.
  %%
  
  node_to_addr_new() ->
      dict:new().
  
  node_to_addr_update(Node, Addr, #state{node_to_addr = NodeMap} = State) ->
      NodeMap1 = dict:store(Node, Addr, NodeMap),
      State#state{node_to_addr = NodeMap1}.
  
  node_to_addr_lookup(Node, #state{node_to_addr = NodeMap}) ->
      dict:fetch(Node, NodeMap).
  