anchor.diff:      #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}],
  
positive.code:          get_node_subscriptions/3,
           set_subscriptions/4,
  
           publish/3, publish/5,
           retract/4,
           get_all_items/3,
           get_item/4,
           purge_all_items/3
  
negative.code: 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}) ->
  