Index: trunk/src/org/openstreetmap/josm/gui/history/DiffTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/DiffTableModel.java	(revision 16489)
+++ trunk/src/org/openstreetmap/josm/gui/history/DiffTableModel.java	(revision 16490)
@@ -16,4 +16,5 @@
 class DiffTableModel extends AbstractTableModel {
     private transient List<TwoColumnDiff.Item> rows = new ArrayList<>();
+    private transient int[] rowNumbers;
     private boolean reversed;
 
@@ -21,4 +22,5 @@
         this.rows = rows;
         this.reversed = reversed;
+        computeRowNumbers();
         fireTableDataChanged();
     }
@@ -48,3 +50,23 @@
                 .findFirst().orElse(-1);
     }
+
+    void computeRowNumbers() {
+        rowNumbers = new int[rows.size()];
+        int rowNumber = reversed ? rows.size() : 1;
+        int i = 0;
+        for (TwoColumnDiff.Item item : rows) {
+            if (item.state == DiffItemType.EMPTY) {
+                rowNumbers[i] = -1;
+            } else if (reversed) {
+                rowNumbers[i] = rowNumber--;
+            } else {
+                rowNumbers[i] = rowNumber++;
+            }
+            i++;
+        }
+    }
+
+    public int getRowNumber(int rowIndex) {
+        return rowNumbers[rowIndex];
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/history/NodeListTableCellRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/NodeListTableCellRenderer.java	(revision 16489)
+++ trunk/src/org/openstreetmap/josm/gui/history/NodeListTableCellRenderer.java	(revision 16490)
@@ -37,5 +37,13 @@
     }
 
-    protected void renderNode(TwoColumnDiff.Item item, boolean isSelected, boolean hasFocus) {
+    protected void renderIndex(DiffTableModel model, int row) {
+        int rowNumber = model.getRowNumber(row);
+        setText(rowNumber > 0 ? Integer.toString(rowNumber) : "");
+        setToolTipText(null);
+        setHorizontalAlignment(CENTER);
+        setIcon(null);
+    }
+
+    protected void renderNode(TwoColumnDiff.Item item) {
         String text = "";
         setIcon(nodeIcon);
@@ -48,5 +56,5 @@
         }
         setText(text);
-        GuiHelper.setBackgroundReadable(this, item.state.getColor(isSelected, hasFocus));
+        setHorizontalAlignment(LEFT);
     }
 
@@ -56,6 +64,14 @@
             int row, int column) {
 
-        if (value != null) {
-            renderNode((TwoColumnDiff.Item) value, isSelected, hasFocus);
+        if (value == null) return this;
+        TwoColumnDiff.Item item = (TwoColumnDiff.Item) value;
+        GuiHelper.setBackgroundReadable(this, item.state.getColor(isSelected, hasFocus));
+        switch(column) {
+        case NodeListTableColumnModel.INDEX_COLUMN:
+            renderIndex((DiffTableModel) table.getModel(), row);
+            break;
+        case NodeListTableColumnModel.NODE_COLUMN:
+            renderNode(item);
+            break;
         }
         return this;
Index: trunk/src/org/openstreetmap/josm/gui/history/NodeListTableColumnModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/NodeListTableColumnModel.java	(revision 16489)
+++ trunk/src/org/openstreetmap/josm/gui/history/NodeListTableColumnModel.java	(revision 16490)
@@ -13,4 +13,7 @@
 public class NodeListTableColumnModel extends DefaultTableColumnModel {
 
+    static final int INDEX_COLUMN = 0;
+    static final int NODE_COLUMN = 1;
+
     /**
      * Constructs a new {@code NodeListTableColumnModel}.
@@ -23,6 +26,10 @@
         NodeListTableCellRenderer renderer = new NodeListTableCellRenderer();
 
-        // column 0 - Nodes
-        TableColumn col = new TableColumn(0);
+        TableColumn col = new TableColumn(INDEX_COLUMN, 0);
+        col.setHeaderValue(tr("\u2116"));
+        col.setCellRenderer(renderer);
+        addColumn(col);
+
+        col = new TableColumn(NODE_COLUMN);
         col.setHeaderValue(tr("Nodes"));
         col.setCellRenderer(renderer);
Index: trunk/src/org/openstreetmap/josm/gui/history/RelationMemberListTableCellRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/RelationMemberListTableCellRenderer.java	(revision 16489)
+++ trunk/src/org/openstreetmap/josm/gui/history/RelationMemberListTableCellRenderer.java	(revision 16490)
@@ -36,4 +36,12 @@
     }
 
+    protected void renderIndex(DiffTableModel model, int row) {
+        int rowNumber = model.getRowNumber(row);
+        setText(rowNumber > 0 ? Integer.toString(rowNumber) : "");
+        setToolTipText(null);
+        setHorizontalAlignment(CENTER);
+        renderIcon(null);
+    }
+
     protected void renderRole(Item diffItem) {
         RelationMemberData member = (RelationMemberData) diffItem.value;
@@ -41,4 +49,6 @@
         setText(text);
         setToolTipText(text);
+        setHorizontalAlignment(LEFT);
+        renderIcon(null);
     }
 
@@ -56,4 +66,6 @@
         setText(text);
         setToolTipText(text);
+        setHorizontalAlignment(LEFT);
+        renderIcon((RelationMemberData) diffItem.value);
     }
 
@@ -65,10 +77,14 @@
         if (value == null) return this;
         Item member = (TwoColumnDiff.Item) value;
-        renderIcon((RelationMemberData) member.value);
+        Item.DiffItemType type = member.state;
         switch(column) {
-        case 0:
+        case RelationMemberTableColumnModel.INDEX_COLUMN:
+            type = Item.DiffItemType.EMPTY;
+            renderIndex(((DiffTableModel) table.getModel()), row);
+            break;
+        case RelationMemberTableColumnModel.ROLE_COLUMN:
             renderRole(member);
             break;
-        case 1:
+        case RelationMemberTableColumnModel.OBJECT_COLUMN:
             renderPrimitive(member);
             break;
@@ -76,5 +92,5 @@
         }
 
-        GuiHelper.setBackgroundReadable(this, member.state.getColor(isSelected, hasFocus));
+        GuiHelper.setBackgroundReadable(this, type.getColor(isSelected, hasFocus));
         return this;
     }
Index: trunk/src/org/openstreetmap/josm/gui/history/RelationMemberTableColumnModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/RelationMemberTableColumnModel.java	(revision 16489)
+++ trunk/src/org/openstreetmap/josm/gui/history/RelationMemberTableColumnModel.java	(revision 16490)
@@ -13,4 +13,8 @@
 public class RelationMemberTableColumnModel extends DefaultTableColumnModel {
 
+    static final int INDEX_COLUMN = 0;
+    static final int ROLE_COLUMN = 1;
+    static final int OBJECT_COLUMN = 2;
+
     /**
      * Constructs a new {@code RelationMemberTableColumnModel}.
@@ -23,12 +27,15 @@
         RelationMemberListTableCellRenderer renderer = new RelationMemberListTableCellRenderer();
 
-        // column 0 - Role
-        TableColumn col = new TableColumn(0);
+        TableColumn col = new TableColumn(INDEX_COLUMN, 0);
+        col.setHeaderValue(tr("\u2116"));
+        col.setCellRenderer(renderer);
+        addColumn(col);
+
+        col = new TableColumn(ROLE_COLUMN);
         col.setHeaderValue(tr("Role"));
         col.setCellRenderer(renderer);
         addColumn(col);
 
-        // column 1 - Object
-        col = new TableColumn(1);
+        col = new TableColumn(OBJECT_COLUMN);
         col.setHeaderValue(tr("Object"));
         col.setCellRenderer(renderer);
