Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java	(revision 14825)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java	(revision 14826)
@@ -19,4 +19,5 @@
 
 import javax.swing.AbstractAction;
+import javax.swing.Action;
 import javax.swing.JComponent;
 import javax.swing.JOptionPane;
@@ -126,21 +127,5 @@
         buttons.add(selectButton);
 
-        lookupButton = new SideButton(new AbstractAction() {
-            {
-                putValue(NAME, tr("Lookup"));
-                putValue(SHORT_DESCRIPTION, tr("Looks up the selected primitives in the error list."));
-                new ImageProvider("dialogs", "search").getResource().attachImageIcon(this, true);
-            }
-
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                final DataSet ds = MainApplication.getLayerManager().getActiveDataSet();
-                if (ds == null) {
-                    return;
-                }
-                tree.selectRelatedErrors(ds.getSelected());
-            }
-        });
-
+        lookupButton = new SideButton(new LookupAction());
         buttons.add(lookupButton);
 
@@ -179,4 +164,45 @@
         }
         createLayout(tree, true, buttons);
+    }
+
+    /**
+     * The action to lookup the selection in the error tree.
+     */
+     class LookupAction extends AbstractAction implements DataSelectionListener {
+
+        LookupAction() {
+            putValue(NAME, tr("Lookup"));
+            putValue(SHORT_DESCRIPTION, tr("Looks up the selected primitives in the error list."));
+            new ImageProvider("dialogs", "search").getResource().attachImageIcon(this, true);
+            SelectionEventManager.getInstance().addSelectionListener(this);
+            updateEnabledState();
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            final DataSet ds = MainApplication.getLayerManager().getActiveDataSet();
+            if (ds == null) {
+                return;
+            }
+            tree.selectRelatedErrors(ds.getSelected());
+        }
+
+        protected void updateEnabledState() {
+            boolean found = false;
+            for (TestError e : tree.getErrors()) {
+                for (OsmPrimitive p : e.getPrimitives()) {
+                    if (p.isSelected()) {
+                        found = true;
+                        break;
+                    }
+                }
+            }
+            setEnabled(found);
+        }
+
+        @Override
+        public void selectionChanged(SelectionChangeEvent event) {
+            updateEnabledState();
+        }
     }
 
@@ -610,3 +636,12 @@
         MainApplication.getLayerManager().getLayersOfType(ValidatorLayer.class).forEach(ValidatorLayer::invalidate);
     }
+
+    @Override
+    public void destroy() {
+        if (lookupButton != null && lookupButton.getAction() instanceof DataSelectionListener) {
+            Action a = lookupButton.getAction();
+            SelectionEventManager.getInstance().removeSelectionListener((DataSelectionListener) a);
+        }
+        super.destroy();
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java	(revision 14825)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java	(revision 14826)
@@ -349,5 +349,5 @@
      */
     public void selectRelatedErrors(final Collection<OsmPrimitive> primitives) {
-        final Collection<TreePath> paths = new ArrayList<>();
+        final List<TreePath> paths = new ArrayList<>();
         walkAndSelectRelatedErrors(new TreePath(getRoot()), new HashSet<>(primitives)::contains, paths);
         getSelectionModel().clearSelection();
@@ -355,4 +355,8 @@
             expandPath(path);
             getSelectionModel().addSelectionPath(path);
+        }
+        // make sure that first path is visible
+        if (!paths.isEmpty()) {
+            scrollPathToVisible(paths.get(0));
         }
     }
