anchor.diff:  
   %% Whole stanzas
   
  -publish_iq(User, PubSubElement, Id, pep) ->
  -    iq(<<"set">>, User, Id, [PubSubElement]);
  -publish_iq(User, PubSubElement, Id, NodeAddr) ->
  -    iq(<<"set">>, User, Id, NodeAddr, [PubSubElement]).
  -
  -iq(Type, From, Id, Elements) ->
  +iq(Type, From, Id, pep, Elements) ->
       Stanza = escalus_stanza:iq(Type, Elements),
       StanzaWithId = escalus_stanza:set_id(Stanza, Id),
  -    escalus_stanza:from(StanzaWithId, escalus_utils:get_jid(From)).
  -
  +    escalus_stanza:from(StanzaWithId, escalus_utils:get_jid(From));
   iq(Type, From, Id, To, Elements) ->
       Stanza = escalus_stanza:iq(To, Type, Elements),
       StanzaWithId = escalus_stanza:set_id(Stanza, Id),
       escalus_stanza:from(StanzaWithId, escalus_utils:get_jid(From)).
  +
  +pubsub_iq(Type, User, Id, NodeAddr, Elements) ->
  +    pubsub_iq(Type, User, Id, NodeAddr, Elements, ?NS_PUBSUB).
  +
  +pubsub_iq(Type, User, Id, NodeAddr, Elements, NS) ->
  +    PubSubElement = pubsub_element(Elements, NS),
  +    iq(Type, User, Id, NodeAddr, [PubSubElement]).
  +
  +pubsub_owner_iq(Type, User, Id, NodeAddr, Elements) ->
  +    pubsub_iq(Type, User, Id, NodeAddr, Elements, ?NS_PUBSUB_OWNER).
  +
   
   %% Form utils
   
  
positive.code: set_subscriptions(User, Id, Subscriptions, {NodeAddr, NodeName}) ->
      SubElements = [subscription_element(Jid, SubState) || {Jid, SubState} <- Subscriptions],
      Elements = [subscriptions_element(NodeName, SubElements)],
      PubSubElement = pubsub_element(Elements, ?NS_PUBSUB_OWNER),
      iq(<<"set">>, User, Id, NodeAddr, [PubSubElement]).
  
  -spec discover_nodes(escalus_utils:jid_spec(), binary(), binary() | pubsub_node_id()) ->
                              exml:element().
  
negative.code: -spec publish(escalus_utils:jid_spec(), binary(), pubsub_node_id()) -> exml:element().
  publish(User, Id, {NodeAddr, NodeName}) ->
      Elements = [publish_element(NodeName, undefined)],
      pubsub_iq(<<"set">>, User, Id, NodeAddr, Elements).
  
  -spec publish(escalus_utils:jid_spec(), binary(), exml:element(), binary(), pubsub_node_id()) ->
                       exml:element().
  publish(User, ItemId, ContentElement, Id, {NodeAddr, NodeName}) ->
      ItemElement = item_element(ItemId, ContentElement),
      Elements = [publish_element(NodeName, ItemElement)],
      pubsub_iq(<<"set">>, User, Id, NodeAddr, Elements).
  
  -spec retract(escalus_utils:jid_spec(), binary(), pubsub_node_id(), binary()) -> exml:element().
  retract(User, Id, {NodeAddr, NodeName}, ItemId) ->
      Elements = [retract_item(NodeName, ItemId)],
      pubsub_iq(<<"set">>, User, Id, NodeAddr, Elements).
  
  -spec request_all_items(escalus_utils:jid_spec(), binary(), pubsub_node_id()) -> exml:element().
  request_all_items(User, Id, {NodeAddr, NodeName}) ->
      Elements = [items_element(NodeName)],
      pubsub_iq(<<"get">>, User, Id, NodeAddr, Elements).
  
  -spec purge_all_items(escalus_utils:jid_spec(), binary(), pubsub_node_id()) -> exml:element().
  purge_all_items(User, Id, {NodeAddr, NodeName}) ->
      Elements = [purge_element(NodeName)],
      pubsub_owner_iq(<<"set">>, User, Id, NodeAddr, Elements).
  
  -spec retrieve_user_subscriptions(escalus_utils:jid_spec(), binary(),
                                    pubsub_node_id() | binary()) -> exml:element().
  