anchor.diff:                           exml:element().
   subscribe(User, Id, {NodeAddr, NodeName}, ConfigFields) ->
       Elements = [subscribe_element(NodeName, User) | subscribe_options_form(ConfigFields)],
  -    PubSubElement = pubsub_element(Elements, ?NS_PUBSUB),
  -    iq(<<"set">>, User, Id, NodeAddr, [PubSubElement]).
  +    pubsub_iq(<<"set">>, User, Id, NodeAddr, Elements).
   
   -spec unsubscribe(escalus_utils:jid_spec(), binary(), pubsub_node_id()) -> exml:element().
   unsubscribe(User, Id, {NodeAddr, NodeName}) ->
       Elements = [unsubscribe_element(NodeName, User)],
  -    PubSubElement = pubsub_element(Elements, ?NS_PUBSUB),
  -    iq(<<"set">>, User, Id, NodeAddr, [PubSubElement]).
  +    pubsub_iq(<<"set">>, User, Id, NodeAddr, Elements).
   
   -spec submit_subscription_response(escalus_utils:jid_spec(), binary(), pubsub_node_id(), form()) ->
       exml:element().
  
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().
  