Index: core/src/org/openstreetmap/josm/actions/ZoomToAction.java
===================================================================
--- core/src/org/openstreetmap/josm/actions/ZoomToAction.java	(revision 6014)
+++ core/src/org/openstreetmap/josm/actions/ZoomToAction.java	(working copy)
@@ -19,6 +19,7 @@
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTable;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.ImageProvider;
 
 public class ZoomToAction extends AbstractAction implements LayerChangeListener, ListSelectionListener {
 
@@ -29,12 +30,12 @@
     private final String descriptionNoSelection;
     
     public ZoomToAction(OsmPrimitivesTable table, String descriptionNominal, String descriptionInactiveLayer, String descriptionNoSelection) {
+        super(tr("Zoom to"), ImageProvider.get("dialogs/autoscale/selection"));
         CheckParameterUtil.ensureParameterNotNull(table);
         this.table = table;
         this.descriptionNominal = descriptionNominal;
         this.descriptionInactiveLayer = descriptionInactiveLayer;
         this.descriptionNoSelection = descriptionNoSelection;
-        putValue(NAME, tr("Zoom to"));
         putValue(SHORT_DESCRIPTION, descriptionNominal);
         updateEnabledState();
     }
Index: core/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- core/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 6014)
+++ core/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(working copy)
@@ -529,7 +529,10 @@
         inputMap.put((KeyStroke) moveUpAction.getValue(AbstractAction.ACCELERATOR_KEY),"moveUp");
         inputMap.put((KeyStroke) moveDownAction.getValue(AbstractAction.ACCELERATOR_KEY),"moveDown");
         inputMap.put((KeyStroke) downloadIncompleteMembersAction.getValue(AbstractAction.ACCELERATOR_KEY),"downloadIncomplete");
-        
+
+        tb.addSeparator();
+        tb.add(memberTable.getZoomToAction());
+
         return tb;
     }
 
Index: core/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
===================================================================
--- core/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java	(revision 6014)
+++ core/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java	(working copy)
@@ -5,10 +5,9 @@
 
 import java.awt.Container;
 import java.awt.Dimension;
+import java.awt.Rectangle;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
-import java.util.Arrays;
-import java.util.Collection;
 
 import javax.swing.AbstractAction;
 import javax.swing.JComponent;
@@ -17,26 +16,13 @@
 import javax.swing.JViewport;
 import javax.swing.KeyStroke;
 import javax.swing.ListSelectionModel;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
 
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.actions.ZoomToAction;
-import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.gui.MapView;
-import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
-import org.openstreetmap.josm.gui.dialogs.relation.sort.WayConnectionType;
-import org.openstreetmap.josm.gui.dialogs.relation.sort.WayConnectionType.Direction;
-import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTable;
 
 public class MemberTable extends OsmPrimitivesTable implements IMemberModelListener {
 
-    /** the additional actions in popup menu */
-    private ZoomToGapAction zoomToGap;
-
     /**
      * constructor for relation member table
      *
@@ -79,10 +65,6 @@
     @Override
     protected JPopupMenu buildPopupMenu() {
         JPopupMenu menu = super.buildPopupMenu();
-        zoomToGap = new ZoomToGapAction();
-        MapView.addLayerChangeListener(zoomToGap);
-        getSelectionModel().addListSelectionListener(zoomToGap);
-        menu.add(zoomToGap);
         menu.addSeparator();
         menu.add(new SelectPreviousGapAction());
         menu.add(new SelectNextGapAction());
@@ -161,12 +143,6 @@
         }
     }
 
-    @Override
-    public void unlinkAsListener() {
-        super.unlinkAsListener();
-        MapView.removeLayerChangeListener(zoomToGap);
-    }
-
     private class SelectPreviousGapAction extends AbstractAction {
 
         public SelectPreviousGapAction() {
@@ -180,9 +156,7 @@
             while (i >= 0 && getMemberTableModel().getWayConnection(i).linkPrev) {
                 i--;
             }
-            if (i >= 0) {
-                getSelectionModel().setSelectionInterval(i, i);
-            }
+            selectRow(i);
         }
     }
 
@@ -199,73 +173,18 @@
             while (i < getRowCount() && getMemberTableModel().getWayConnection(i).linkNext) {
                 i++;
             }
-            if (i < getRowCount()) {
-                getSelectionModel().setSelectionInterval(i, i);
-            }
+            selectRow(i);
         }
     }
-
-    private class ZoomToGapAction extends AbstractAction implements LayerChangeListener, ListSelectionListener {
-
-        public ZoomToGapAction() {
-            putValue(NAME, tr("Zoom to Gap"));
-            putValue(SHORT_DESCRIPTION, tr("Zoom to the gap in the way sequence"));
-            updateEnabledState();
-        }
-
-        private WayConnectionType getConnectionType() {
-            return getMemberTableModel().getWayConnection(getSelectedRows()[0]);
-        }
-
-        private final Collection<Direction> connectionTypesOfInterest = Arrays.asList(WayConnectionType.Direction.FORWARD, WayConnectionType.Direction.BACKWARD);
-
-        private boolean hasGap() {
-            WayConnectionType connectionType = getConnectionType();
-            return connectionTypesOfInterest.contains(connectionType.direction)
-                    && !(connectionType.linkNext && connectionType.linkPrev);
-        }
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            WayConnectionType connectionType = getConnectionType();
-            Way way = (Way) getMemberTableModel().getReferredPrimitive(getSelectedRows()[0]);
-            if (!connectionType.linkPrev) {
-                getLayer().data.setSelected(WayConnectionType.Direction.FORWARD.equals(connectionType.direction)
-                        ? way.firstNode() : way.lastNode());
-                AutoScaleAction.autoScale("selection");
-            } else if (!connectionType.linkNext) {
-                getLayer().data.setSelected(WayConnectionType.Direction.FORWARD.equals(connectionType.direction)
-                        ? way.lastNode() : way.firstNode());
-                AutoScaleAction.autoScale("selection");
+    
+    private void selectRow(int i) {
+        if (i >+ 0 && i < getRowCount()) {
+            getSelectionModel().setSelectionInterval(i, i);
+            Rectangle cellBounds = getCellRect(i, 1, true);
+            if (cellBounds != null) {
+                scrollRectToVisible(cellBounds);
             }
         }
-
-        private void updateEnabledState() {
-            setEnabled(Main.main != null
-                    && Main.main.getEditLayer() == getLayer()
-                    && getSelectedRowCount() == 1
-                    && hasGap());
-        }
-
-        @Override
-        public void valueChanged(ListSelectionEvent e) {
-            updateEnabledState();
-        }
-
-        @Override
-        public void activeLayerChange(Layer oldLayer, Layer newLayer) {
-            updateEnabledState();
-        }
-
-        @Override
-        public void layerAdded(Layer newLayer) {
-            updateEnabledState();
-        }
-
-        @Override
-        public void layerRemoved(Layer oldLayer) {
-            updateEnabledState();
-        }
     }
 
     protected MemberTableModel getMemberTableModel() {
Index: core/src/org/openstreetmap/josm/gui/widgets/OsmPrimitivesTable.java
===================================================================
--- core/src/org/openstreetmap/josm/gui/widgets/OsmPrimitivesTable.java	(revision 6014)
+++ core/src/org/openstreetmap/josm/gui/widgets/OsmPrimitivesTable.java	(working copy)
@@ -56,6 +56,14 @@
         return popupMenu;
     }
     
+    /**
+     * Replies the "Zoom to" action
+     * @return the "Zoom to" action
+     */
+    public final ZoomToAction getZoomToAction() {
+        return zoomToAction;
+    }
+
     protected abstract ZoomToAction buildZoomToAction();
 
     protected JPopupMenu buildPopupMenu() {
