anchor.diff:  retract(User, Id, {NodeAddr, NodeName}, ItemId) ->
       Elements = [retract_item(NodeName, ItemId)],
       pubsub_iq(<<"set">>, User, Id, NodeAddr, Elements).
  +
  +-spec get_items(escalus_utils:jid_spec(), binary(), pubsub_node_id(), pos_integer()) -> exml:element().
  +get_items(User, Id, {NodeAddr, NodeName}, MaxItems) when is_integer(MaxItems), MaxItems > 0 ->
  +    Elements = [items_element(NodeName, MaxItems)],
  +    pubsub_iq(<<"get">>, User, Id, NodeAddr, Elements).
   
   -spec get_all_items(escalus_utils:jid_spec(), binary(), pubsub_node_id()) -> exml:element().
   get_all_items(User, Id, {NodeAddr, NodeName}) ->
  
positive.code:     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}) ->
  
negative.code:     #xmlel{name = <<"items">>,
             attrs = [{<<"node">>, NodeName}]}.
  
  items_element(NodeName, MaxItems) ->
      #xmlel{name = <<"items">>,
             attrs = [{<<"node">>, NodeName},
                      {<<"max_items">>, integer_to_binary(MaxItems)}]}.
  
  item_element(ContentElement) ->
      #xmlel{name = <<"item">>,
             children = skip_undefined([ContentElement])}.
  
  item_element(ItemId, ContentElement) ->
      #xmlel{name = <<"item">>,
             attrs = [{<<"id">>, ItemId}],
  