Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java	(revision 9519)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java	(revision 9520)
@@ -280,20 +280,11 @@
     }
 
-    class SelectInCurrentLayerAction extends AbstractAction implements ListSelectionListener, EditLayerChangeListener {
-
-        SelectInCurrentLayerAction() {
-            putValue(NAME, tr("Select in layer"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "select"));
-            putValue(SHORT_DESCRIPTION, tr("Select the corresponding primitives in the current data layer"));
-            updateEnabledState();
-        }
-
-        @Override
-        public void actionPerformed(ActionEvent arg0) {
-            if (!isEnabled())
-                return;
-            if (Main.main == null || !Main.main.hasEditLayer()) return;
+    abstract class SelectionBasedAction extends AbstractAction implements ListSelectionListener, EditLayerChangeListener {
+
+        protected Set<OsmPrimitive> getTarget() {
+            if (!isEnabled() || Main.main == null || !Main.main.hasEditLayer()) {
+                return null;
+            }
             OsmDataLayer layer = Main.main.getEditLayer();
-            Set<HistoryOsmPrimitive> selected = model.getSelectedPrimitives();
             Set<OsmPrimitive> target = new HashSet<>();
             for (HistoryOsmPrimitive p : model.getSelectedPrimitives()) {
@@ -303,10 +294,5 @@
                 }
             }
-            if (target.isEmpty()) {
-                alertNoPrimitivesTo(selected, tr("Nothing to select"),
-                        HelpUtil.ht("/Dialog/ChangesetCacheManager#NothingToSelectInLayer"));
-                return;
-            }
-            layer.data.setSelected(target);
+            return target;
         }
 
@@ -328,7 +314,31 @@
             updateEnabledState();
         }
-    }
-
-    class ZoomInCurrentLayerAction extends AbstractAction implements ListSelectionListener, EditLayerChangeListener {
+
+    }
+
+    class SelectInCurrentLayerAction extends SelectionBasedAction {
+
+        SelectInCurrentLayerAction() {
+            putValue(NAME, tr("Select in layer"));
+            putValue(SMALL_ICON, ImageProvider.get("dialogs", "select"));
+            putValue(SHORT_DESCRIPTION, tr("Select the corresponding primitives in the current data layer"));
+            updateEnabledState();
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent arg0) {
+            final Set<OsmPrimitive> target = getTarget();
+            if (target == null) {
+                return;
+            } else if (target.isEmpty()) {
+                alertNoPrimitivesTo(model.getSelectedPrimitives(), tr("Nothing to select"),
+                        HelpUtil.ht("/Dialog/ChangesetCacheManager#NothingToSelectInLayer"));
+                return;
+            }
+            Main.main.getEditLayer().data.setSelected(target);
+        }
+    }
+
+    class ZoomInCurrentLayerAction extends SelectionBasedAction {
 
         ZoomInCurrentLayerAction() {
@@ -341,41 +351,14 @@
         @Override
         public void actionPerformed(ActionEvent arg0) {
-            if (!isEnabled())
+            final Set<OsmPrimitive> target = getTarget();
+            if (target == null) {
                 return;
-            if (Main.main == null || !Main.main.hasEditLayer()) return;
-            OsmDataLayer layer = Main.main.getEditLayer();
-            Set<HistoryOsmPrimitive> selected = model.getSelectedPrimitives();
-            Set<OsmPrimitive> target = new HashSet<>();
-            for (HistoryOsmPrimitive p : model.getSelectedPrimitives()) {
-                OsmPrimitive op = layer.data.getPrimitiveById(p.getPrimitiveId());
-                if (op != null) {
-                    target.add(op);
-                }
-            }
-            if (target.isEmpty()) {
-                alertNoPrimitivesTo(selected, tr("Nothing to zoom to"),
+            } else if (target.isEmpty()) {
+                alertNoPrimitivesTo(model.getSelectedPrimitives(), tr("Nothing to zoom to"),
                         HelpUtil.ht("/Dialog/ChangesetCacheManager#NothingToZoomTo"));
                 return;
             }
-            layer.data.setSelected(target);
+            Main.main.getEditLayer().data.setSelected(target);
             AutoScaleAction.zoomToSelection();
-        }
-
-        public final void updateEnabledState() {
-            if (Main.main == null || !Main.main.hasEditLayer()) {
-                setEnabled(false);
-                return;
-            }
-            setEnabled(model.hasSelectedPrimitives());
-        }
-
-        @Override
-        public void valueChanged(ListSelectionEvent e) {
-            updateEnabledState();
-        }
-
-        @Override
-        public void editLayerChanged(OsmDataLayer oldLayer, OsmDataLayer newLayer) {
-            updateEnabledState();
         }
     }
