Index: src/org/openstreetmap/josm/actions/AbstractShowHistoryAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/AbstractShowHistoryAction.java	(nonexistent)
+++ src/org/openstreetmap/josm/actions/AbstractShowHistoryAction.java	(working copy)
@@ -0,0 +1,23 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.actions;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import javax.swing.AbstractAction;
+
+import org.openstreetmap.josm.tools.ImageProvider;
+
+/**
+ * Superclass of "History" actions in various parts of JOSM.
+ * @since xxx
+ */
+public abstract class AbstractShowHistoryAction extends AbstractAction {
+    /**
+     * Constructs a new {@code AbstractShowHistoryAction}.
+     */
+    public AbstractShowHistoryAction() {
+        putValue(NAME, tr("History"));
+        putValue(SHORT_DESCRIPTION, tr("Download and show the history of the selected objects."));
+        new ImageProvider("dialogs", "history").getResource().attachImageIcon(this, true);
+    }
+}
Index: src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 16493)
+++ src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(working copy)
@@ -37,6 +37,7 @@
 import javax.swing.event.ListSelectionListener;
 import javax.swing.event.PopupMenuEvent;
 
+import org.openstreetmap.josm.actions.AbstractShowHistoryAction;
 import org.openstreetmap.josm.actions.AbstractSelectAction;
 import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.actions.AutoScaleAction.AutoScaleMode;
@@ -347,14 +348,12 @@
     /**
      * The action for showing history information of the current history item.
      */
-    class ShowHistoryAction extends AbstractAction implements ListSelectionListener, DataSelectionListener {
+    class ShowHistoryAction extends AbstractShowHistoryAction implements ListSelectionListener, DataSelectionListener {
         /**
          * Constructs a new {@code ShowHistoryAction}.
          */
         ShowHistoryAction() {
-            putValue(NAME, tr("History"));
-            putValue(SHORT_DESCRIPTION, tr("Display the history of the selected objects."));
-            new ImageProvider("dialogs", "history").getResource().attachImageIcon(this, true);
+            super();
             updateEnabledState(model.getSize());
         }
 
@@ -370,7 +369,7 @@
         }
 
         protected void updateEnabledState(int osmSelectionSize) {
-            // See #10830 - allow to click on history button is a single object is selected, even if not selected again in the list
+            // See #10830 - allow to click on history button if a single object is selected, even if not selected again in the list
             setEnabled(!model.isSelectionEmpty() || osmSelectionSize == 1);
         }
 
Index: src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java	(revision 16493)
+++ src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java	(working copy)
@@ -34,6 +34,7 @@
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
 
+import org.openstreetmap.josm.actions.AbstractShowHistoryAction;
 import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.actions.HistoryInfoAction;
 import org.openstreetmap.josm.actions.downloadtasks.ChangesetContentDownloadTask;
@@ -222,12 +223,10 @@
         }
     }
 
-    class ShowHistoryAction extends AbstractAction implements ListSelectionListener {
+    class ShowHistoryAction extends AbstractShowHistoryAction implements ListSelectionListener {
 
         ShowHistoryAction() {
-            putValue(NAME, tr("Show history"));
-            new ImageProvider("dialogs", "history").getResource().attachImageIcon(this);
-            putValue(SHORT_DESCRIPTION, tr("Download and show the history of the selected objects"));
+            super();
             updateEnabledState();
         }
 
Index: src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java	(revision 16493)
+++ src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java	(working copy)
@@ -21,6 +21,7 @@
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
 
+import org.openstreetmap.josm.actions.AbstractShowHistoryAction;
 import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.actions.AutoScaleAction.AutoScaleMode;
 import org.openstreetmap.josm.actions.HistoryInfoAction;
@@ -105,7 +106,7 @@
         menu.addSeparator();
         menu.add(new SelectPreviousGapAction());
         menu.add(new SelectNextGapAction());
-        menu.add(new HistoryInfoAction() {
+        menu.add(new AbstractShowHistoryAction() {
             @Override
             public void actionPerformed(ActionEvent ae) {
                 Collection<OsmPrimitive> sel = getMemberTableModel().getSelectedChildPrimitives();
Index: src/org/openstreetmap/josm/gui/history/ShowHistoryAction.java
===================================================================
--- src/org/openstreetmap/josm/gui/history/ShowHistoryAction.java	(revision 16493)
+++ src/org/openstreetmap/josm/gui/history/ShowHistoryAction.java	(working copy)
@@ -1,8 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.history;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
-
 import java.awt.event.ActionEvent;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
@@ -9,26 +7,15 @@
 import java.util.Collections;
 import java.util.function.Function;
 
-import javax.swing.AbstractAction;
-
+import org.openstreetmap.josm.actions.AbstractShowHistoryAction;
 import org.openstreetmap.josm.data.osm.PrimitiveId;
-import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
  * Open a history browser with the history of an object.
  */
-class ShowHistoryAction extends AbstractAction {
+class ShowHistoryAction extends AbstractShowHistoryAction {
     private transient PrimitiveId primitiveId;
 
-    /**
-     * Constructs a new {@code ShowHistoryAction}.
-     */
-    ShowHistoryAction() {
-        putValue(NAME, tr("Show history"));
-        putValue(SHORT_DESCRIPTION, tr("Display the history of the selected object."));
-        new ImageProvider("dialogs", "history").getResource().attachImageIcon(this, true);
-    }
-
     @Override
     public void actionPerformed(ActionEvent e) {
         if (isEnabled()) {
