    msg-type
    msg-body
    (*get-envelope-id*)])
+
+(s/defn maybe-conj
+  "'conj 'new-node-contact-address into 'coll as long as
+  'this-node-contact-address and 'new-node-contact-address are
+  different."
+  [coll :- #{NodeContactAddressSchema}
+   this-node-contact-address :- NodeContactAddressSchema
+   new-node-contact-address :- NodeContactAddressSchema]
+  (if (= this-node-contact-address new-node-contact-address)
+    coll
+    (conj coll new-node-contact-address)))
 
 (s/defn receive-msg-new-subscription :- CommUpdateSchema
   "Forward the 'subscription to every :downstream node, duplicating

               :receive-msg-forwarded-subscription
               :node node
               :subscriber-contact-address subscriber-contact-address)
  (if (and (not= (get-in node [:self :id]) subscriber-contact-address)
           (not (downstream subscriber-contact-address))
           ;; The subscription id is not for this node itself, and
           ;; the subscription id is not already in node's downstream,
           ;; so check the probability that we add it to this node.
           (do-probability (subscription-acceptance-probability downstream)))
    [(update-in node [:downstream] conj subscriber-contact-address)
     [(send-msg-new-upstream-node subscriber-contact-address node)]]

    (let [forwarded-subscription-messages (forward-subscription downstream
                                                                subscriber-contact-address
                                                                envelope-id)]
      (when (empty? forwarded-subscription-messages)
        (throw (ex-info "Failed either to accept or forward subscription"
                        {:node node :subscriber-contact-address subscriber-contact-address})))
      [node forwarded-subscription-messages])))

(def new-world
  "Return a new, pristine world."

               :receive-msg-new-upstream-node
               :node node
               :upstream-node-contact-address upstream-node-contact-address)
  [(update node :upstream maybe-conj (get-in node [:self :id]) upstream-node-contact-address)
   []])

(s/defn send-msg-new-upstream-node :- MessageEnvelopeSchema
