anchor.diff:  
   [source, java]
   ----
  -DataProvider<Person> dataProvider = new BackEndDataProvider<>(
  +DataProvider<Person, Void> dataProvider = new BackEndDataProvider<>(
     query -> {
       List<PersonSort> sortOrders = new ArrayList<>();
       for(SortOrder<String> queryOrder : query.getSortOrders()) {
  
positive.code: 
  Button addPersonButton = new Button("Add person",
    clickEvent -> {
      // Keep track of the index where the person will be added
      int addIndex = persons.size();
  
      persons.add(new Person("James Monroe", 1758));
  
      dataProvider.notifyAdd(addIndex);
  });
  
  Button modifyPersonButton = new Button("Modify person",
  
negative.code: While each listing component has it's own API for configuring exactly how the data is represented and how it can be manipulated, they all share the same mechanisms for receiving data to show.
  
  The items are generally either loaded directly from memory or lazy loaded from some kind of backend.
  Regardless of how the items are loaded, the component is configured with one or several callbacks that define how the item should be displayed.
  
  In the following example, a [classname]#ComboBox# that lists status items is configured to use the [classname]#Status#.[methodname]#getCaption()# method to represent each status.
  There is also a [classname]#Grid#, which is configured with one column from the person's name and another showing the year of birth.
  
  [source, java]
  ----
  ComboBox<Status> comboBox = new ComboBox<>();
  comboBox.setItemCaptionGenerator(Status::getCaption);
  
  Grid<Person> grid = new Grid<>();
  grid.addColumn(Person::getName).setCaption("Name");
  grid.addColumn(Person::getYearOfBirth)
    .setCaption("Year of birth");
  ----
  
  [NOTE]
  In this example, it would not even be necessary to define any item caption provider for the combo box if [classname]#Status#.[methodname]#toString()# would be implemented to return a suitable text. [classname]#ComboBox# is by default configured to use [methodname]#toString()# for finding a caption to show.
  
  [NOTE]
  The `Year of birth` column will use [classname]#Grid#'s default [classname]#TextRenderer# which shows any values as a `String`. We could use a [classname]#NumberRenderer# instead, and then the renderer would take care of converting the the number according to its configuration with a formatting setting of our choice.
  
  After we have told the component how the data should be shown, we only need to give it some data to actually show. The easiest way of doing that is to directly pass the values to show to `setItems`.
  
  [source, java]
  ----
  // Sets items as a collection
  comboBox.setItems(EnumSet.allOf(Status.class));
  
  // Sets items using varargs
  grid.setItems(
    new Person("George Washington", 1732),
    new Person("John Adams", 1735),
    new Person("Thomas Jefferson", 1743),
    new Person("James Madison", 1751)
  );
  ----
  
  Listing components that allow the user to control the display order of the items are automatically able to sort data by any property as long as the property type implements [classname]#Comparable#.
  