Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/IMemberModelListener.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/IMemberModelListener.java	(revision 1792)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/IMemberModelListener.java	(revision 1792)
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.dialogs.relation;
+
+public interface IMemberModelListener {
+    void makeMemberVisible(int index);
+}
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java	(revision 1791)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java	(revision 1792)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.gui.dialogs.relation;
 
+import java.awt.Rectangle;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
@@ -12,5 +13,5 @@
 import javax.swing.table.TableColumnModel;
 
-public class MemberTable extends JTable {
+public class MemberTable extends JTable implements IMemberModelListener {
 
     /**
@@ -22,4 +23,5 @@
     public MemberTable(MemberTableModel model) {
         super(model, new MemberTableColumnModel(), model.getSelectionModel());
+        model.addMemberModelListener(this);
         init();
     }
@@ -65,4 +67,10 @@
 
         }
+    }
+
+    public void makeMemberVisible(int index) {
+        scrollRectToVisible(
+                getCellRect(index, 0, true)
+        );
     }
 
@@ -126,3 +134,5 @@
         }
     }
+
+
 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 1791)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 1792)
@@ -7,4 +7,5 @@
 import java.util.Iterator;
 import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.swing.DefaultListSelectionModel;
@@ -23,4 +24,5 @@
     private ArrayList<String> memberLinkingInfo;
     private DefaultListSelectionModel listSelectionModel;
+    private CopyOnWriteArrayList<IMemberModelListener> listeners;
 
     /**
@@ -30,4 +32,29 @@
         members = new ArrayList<RelationMember>();
         memberLinkingInfo = new ArrayList<String>();
+        listeners = new CopyOnWriteArrayList<IMemberModelListener>();
+    }
+
+    public void addMemberModelListener(IMemberModelListener listener) {
+        synchronized(listeners) {
+            if (listener != null && ! listeners.contains(listener)) {
+                listeners.add(listener);
+            }
+        }
+    }
+
+    public void removeMemberModelListener(IMemberModelListener listener) {
+        synchronized(listeners) {
+            if (listener != null && listeners.contains(listener)) {
+                listeners.remove(listener);
+            }
+        }
+    }
+
+    protected void fireMakeMemberVisible(int index) {
+        synchronized(listeners) {
+            for (IMemberModelListener listener: listeners) {
+                listener.makeMemberVisible(index);
+            }
+        }
     }
 
@@ -91,4 +118,5 @@
             listSelectionModel.addSelectionInterval(row, row);
         }
+        fireMakeMemberVisible(selectedRows[0] -1);
     }
 
@@ -110,4 +138,5 @@
             listSelectionModel.addSelectionInterval(row, row);
         }
+        fireMakeMemberVisible(selectedRows[0] + 1);
     }
 
@@ -185,5 +214,5 @@
         }
         if (min < Integer.MAX_VALUE) {
-            //FIXME: scroll to min
+            fireMakeMemberVisible(min);
         }
     }
@@ -233,4 +262,5 @@
             getSelectionModel().addSelectionInterval(i,i);
         }
+        fireMakeMemberVisible(0);
     }
 
@@ -247,4 +277,5 @@
             getSelectionModel().addSelectionInterval(members.size()-1-i,members.size()-1-i);
         }
+        fireMakeMemberVisible(members.size() -1);
     }
 
@@ -261,4 +292,5 @@
             getSelectionModel().addSelectionInterval(idx+i,idx+i);
         }
+        fireMakeMemberVisible(idx);
     }
 
@@ -276,4 +308,5 @@
             getSelectionModel().addSelectionInterval(idx+1 + i,idx+1 +i);
         }
+        fireMakeMemberVisible(idx+1);
     }
 }
