Index: /trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java	(revision 16509)
@@ -298,4 +298,9 @@
 
     @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
+    @Override
     protected void updateEnabledState() {
         setEnabled(!info.isBlacklisted());
Index: /trunk/src/org/openstreetmap/josm/actions/AddNodeAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/AddNodeAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/AddNodeAction.java	(revision 16509)
@@ -82,4 +82,9 @@
 
     @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
+    @Override
     protected void updateEnabledState() {
         setEnabled(getLayerManager().getEditLayer() != null);
Index: /trunk/src/org/openstreetmap/josm/actions/ChangesetManagerToggleAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/ChangesetManagerToggleAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/ChangesetManagerToggleAction.java	(revision 16509)
@@ -12,4 +12,5 @@
 
 import org.openstreetmap.josm.gui.dialogs.changeset.ChangesetCacheManager;
+import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -26,19 +27,14 @@
     public ChangesetManagerToggleAction() {
         super(tr("Changeset Manager"),
-              "dialogs/changeset/changesetmanager",
+                new ImageProvider("dialogs/changeset/changesetmanager").setOptional(true),
               tr("Toggle visibility of Changeset Manager window"),
               Shortcut.registerShortcut("menu:windows:changesetdialog",
                       tr("Toggle visibility of Changeset Manager window"),
                       KeyEvent.VK_C, Shortcut.ALT_CTRL),
-              true /* register shortcut */
+              true /* register shortcut */, null, false
         );
         notifySelectedState();
         changesetCacheManagerClosedHandler = new ChangesetCacheManagerClosedHandler();
         setHelpId(ht("/Dialog/ChangesetManager"));
-    }
-
-    @Override
-    protected void installAdapters() {
-        // do nothing
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/DeleteLayerAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/DeleteLayerAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/DeleteLayerAction.java	(revision 16509)
@@ -41,4 +41,9 @@
 
     @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
+    @Override
     protected void updateEnabledState() {
         setEnabled(getLayerManager().getActiveLayer() != null);
Index: /trunk/src/org/openstreetmap/josm/actions/DownloadAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/DownloadAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/DownloadAction.java	(revision 16509)
@@ -27,5 +27,5 @@
         super(tr("Download data..."), "download", tr("Download map data from a server of your choice"),
               Shortcut.registerShortcut("file:download", tr("File: {0}", tr("Download data")), KeyEvent.VK_DOWN, Shortcut.CTRL_SHIFT),
-              true);
+              true, false);
         setHelpId(ht("/Action/Download"));
     }
Index: /trunk/src/org/openstreetmap/josm/actions/DownloadNotesInViewAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/DownloadNotesInViewAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/DownloadNotesInViewAction.java	(revision 16509)
@@ -53,4 +53,9 @@
 
     @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
+    @Override
     protected void updateEnabledState() {
         setEnabled(getLayerManager().getActiveLayer() != null
Index: /trunk/src/org/openstreetmap/josm/actions/DownloadOsmInViewAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/DownloadOsmInViewAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/DownloadOsmInViewAction.java	(revision 16509)
@@ -41,4 +41,9 @@
 
     @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
+    @Override
     protected void updateEnabledState() {
         setEnabled(getLayerManager().getActiveLayer() != null
Index: /trunk/src/org/openstreetmap/josm/actions/DrawBoundariesOfDownloadedDataAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/DrawBoundariesOfDownloadedDataAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/DrawBoundariesOfDownloadedDataAction.java	(revision 16509)
@@ -28,4 +28,9 @@
 
     @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
+    @Override
     protected void updateEnabledState() {
         setEnabled(MainApplication.getLayerManager().getEditLayer() != null);
Index: /trunk/src/org/openstreetmap/josm/actions/ExpertToggleAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/ExpertToggleAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/ExpertToggleAction.java	(revision 16509)
@@ -9,4 +9,5 @@
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.ListenerList;
 
@@ -110,8 +111,8 @@
     public ExpertToggleAction() {
         super(tr("Expert Mode"),
-              "expert",
+                new ImageProvider("expert").setOptional(true),
               tr("Enable/disable expert mode"),
               null,
-              false /* register toolbar */
+              false /* register toolbar */, null, false
         );
         setToolbarId("expertmode");
Index: /trunk/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java	(revision 16509)
@@ -41,5 +41,5 @@
               tr("Toggle fullscreen view"),
               Shortcut.registerShortcut("menu:view:fullscreen", tr("Toggle fullscreen view"), KeyEvent.VK_F11, Shortcut.DIRECT),
-              false /* register */
+              false /* register */, null, false
         );
         setHelpId(ht("/Action/FullscreenView"));
@@ -49,9 +49,4 @@
         setSelected(Config.getPref().getBoolean("draw.fullscreen", false));
         notifySelectedState();
-    }
-
-    @Override
-    protected void installAdapters() {
-        // not needed
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/GpxExportAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/GpxExportAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/GpxExportAction.java	(revision 16509)
@@ -115,4 +115,9 @@
     }
 
+    @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
     /**
      * Refreshes the enabled state
Index: /trunk/src/org/openstreetmap/josm/actions/HelpAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/HelpAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/HelpAction.java	(revision 16509)
@@ -35,5 +35,5 @@
         super(tr("Help"), "help", null,
                 shortcut ? Shortcut.registerShortcut("system:help", tr("Help"), KeyEvent.VK_F1, Shortcut.DIRECT) : null,
-                true);
+                true, false);
         setEnabled(!NetworkManager.isOffline(OnlineResource.JOSM_WEBSITE));
     }
Index: /trunk/src/org/openstreetmap/josm/actions/JosmAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/JosmAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/JosmAction.java	(revision 16509)
@@ -154,5 +154,5 @@
 
     /**
-     * Constructs a new {@code JosmAction}.
+     * Constructs a new {@code JosmAction} and installs layer changed and selection changed adapters.
      *
      * Use this super constructor to setup your action.
Index: /trunk/src/org/openstreetmap/josm/actions/JumpToAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/JumpToAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/JumpToAction.java	(revision 16509)
@@ -56,5 +56,8 @@
         super(tr("Jump to Position"), (ImageProvider) null, tr("Opens a dialog that allows to jump to a specific location"),
                 Shortcut.registerShortcut("tools:jumpto", tr("Tool: {0}", tr("Jump to Position")),
-                        KeyEvent.VK_J, Shortcut.CTRL), true, "action/jumpto", true);
+                        KeyEvent.VK_J, Shortcut.CTRL), true, "action/jumpto", false);
+        // make this action listen to mapframe change events
+        MainApplication.addMapFrameListener((o, n) -> updateEnabledState());
+
         setHelpId(ht("/Action/JumpToPosition"));
     }
@@ -242,10 +245,3 @@
         setEnabled(MainApplication.isDisplayingMapView());
     }
-
-    @Override
-    protected void installAdapters() {
-        super.installAdapters();
-        // make this action listen to mapframe change events
-        MainApplication.addMapFrameListener((o, n) -> updateEnabledState());
-    }
 }
Index: /trunk/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java	(revision 16509)
@@ -261,4 +261,9 @@
 
     @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
+    @Override
     protected void updateEnabledState() {
         setEnabled(!getLayerManager().getLayers().isEmpty());
Index: /trunk/src/org/openstreetmap/josm/actions/MergeLayerAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/MergeLayerAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/MergeLayerAction.java	(revision 16509)
@@ -149,4 +149,9 @@
     public void actionPerformed(ActionEvent e) {
         merge(getSourceLayer());
+    }
+
+    @Override
+    protected boolean listenToSelectionChange() {
+        return false;
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/ReorderImageryLayersAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/ReorderImageryLayersAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/ReorderImageryLayersAction.java	(revision 16509)
@@ -40,4 +40,9 @@
 
     @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
+    @Override
     protected void updateEnabledState() {
         setEnabled(getNonOverlayImageryLayers().count() > 1);
Index: /trunk/src/org/openstreetmap/josm/actions/ReportBugAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/ReportBugAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/ReportBugAction.java	(revision 16509)
@@ -32,5 +32,5 @@
         super(tr("Report bug"), "bug", tr("Report a ticket to JOSM bugtracker"),
                 Shortcut.registerShortcut("reportbug", tr("Report a ticket to JOSM bugtracker"),
-                        KeyEvent.CHAR_UNDEFINED, Shortcut.NONE), true);
+                        KeyEvent.CHAR_UNDEFINED, Shortcut.NONE), true, false);
         this.text = text;
     }
Index: /trunk/src/org/openstreetmap/josm/actions/SaveAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/SaveAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/SaveAction.java	(revision 16509)
@@ -93,4 +93,9 @@
 
     @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
+    @Override
     protected void updateEnabledState() {
         Layer activeLayer = getLayerManager().getActiveLayer();
Index: /trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java	(revision 16509)
@@ -175,4 +175,9 @@
 
     @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
+    @Override
     protected void updateEnabledState() {
         Layer activeLayer = getLayerManager().getActiveLayer();
Index: /trunk/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java	(revision 16509)
@@ -35,5 +35,5 @@
     /** Constructs a new note search action */
     public SearchNotesDownloadAction() {
-        super(tr("Search Notes..."), "note_search", tr("Download notes from the note search API"), null, false);
+        super(tr("Search Notes..."), "note_search", tr("Download notes from the note search API"), null, false, false);
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/SelectAllAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/SelectAllAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/SelectAllAction.java	(revision 16509)
@@ -38,4 +38,9 @@
     }
 
+    @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
     /**
      * Refreshes the enabled state
Index: /trunk/src/org/openstreetmap/josm/actions/SelectNonBranchingWaySequencesAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/SelectNonBranchingWaySequencesAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/SelectNonBranchingWaySequencesAction.java	(revision 16509)
@@ -35,4 +35,9 @@
     }
 
+    @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
     /**
      * Update the enabled state of the action when something in
Index: /trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java	(revision 16509)
@@ -63,5 +63,6 @@
      */
     public SessionSaveAsAction() {
-        this(true, true);
+        this(true, false);
+        updateEnabledState();
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java	(revision 16509)
@@ -64,9 +64,7 @@
                 tr("Show status report with useful information that can be attached to bugs"),
                 Shortcut.registerShortcut("help:showstatusreport", tr("Help: {0}",
-                        tr("Show Status Report")), KeyEvent.CHAR_UNDEFINED, Shortcut.NONE), false);
+                        tr("Show Status Report")), KeyEvent.CHAR_UNDEFINED, Shortcut.NONE), true, "help/showstatusreport", false);
 
         setHelpId(ht("/Action/ShowStatusReport"));
-        setToolbarId("help/showstatusreport");
-        MainApplication.getToolbar().register(this);
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/TaggingPresetSearchAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/TaggingPresetSearchAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/TaggingPresetSearchAction.java	(revision 16509)
@@ -36,4 +36,9 @@
 
     @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
+    @Override
     protected void updateEnabledState() {
         setEnabled(hasActiveDataLayer());
Index: /trunk/src/org/openstreetmap/josm/actions/UnselectAllAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UnselectAllAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/UnselectAllAction.java	(revision 16509)
@@ -33,4 +33,9 @@
     }
 
+    @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
     /**
      * Refreshes the enabled state
Index: /trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java	(revision 16509)
@@ -40,4 +40,9 @@
                 true);
         setHelpId(ht("/Action/UpdateData"));
+    }
+
+    @Override
+    protected boolean listenToSelectionChange() {
+        return false;
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/UploadAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UploadAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/UploadAction.java	(revision 16509)
@@ -147,4 +147,9 @@
 
     @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
+    @Override
     protected void updateEnabledState() {
         OsmDataLayer editLayer = getLayerManager().getEditLayer();
Index: /trunk/src/org/openstreetmap/josm/actions/ViewportFollowToggleAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/ViewportFollowToggleAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/ViewportFollowToggleAction.java	(revision 16509)
@@ -55,4 +55,9 @@
 
     @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
+    @Override
     protected void updateEnabledState() {
         setEnabled(getLayerManager().getEditDataSet() != null);
Index: /trunk/src/org/openstreetmap/josm/actions/WireframeToggleAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/WireframeToggleAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/WireframeToggleAction.java	(revision 16509)
@@ -37,4 +37,9 @@
 
     @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
+    @Override
     protected void updateEnabledState() {
         setEnabled(getLayerManager().getActiveData() != null);
Index: /trunk/src/org/openstreetmap/josm/actions/ZoomInAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/ZoomInAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/ZoomInAction.java	(revision 16509)
@@ -51,4 +51,9 @@
 
     @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
+    @Override
     protected void updateEnabledState() {
         setEnabled(!getLayerManager().getLayers().isEmpty());
Index: /trunk/src/org/openstreetmap/josm/actions/ZoomOutAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/ZoomOutAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/ZoomOutAction.java	(revision 16509)
@@ -37,4 +37,9 @@
 
     @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
+   @Override
     protected void updateEnabledState() {
         setEnabled(!getLayerManager().getLayers().isEmpty());
Index: /trunk/src/org/openstreetmap/josm/actions/audio/AbstractAudioAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/audio/AbstractAudioAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/audio/AbstractAudioAction.java	(revision 16509)
@@ -39,4 +39,9 @@
 
     @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
+    @Override
     protected void updateEnabledState() {
         setEnabled(isAudioMarkerPresent());
Index: /trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 16509)
@@ -483,4 +483,9 @@
     }
 
+    @Override
+    protected boolean listenToSelectionChange() {
+        return false;
+    }
+
     /**
      * Refreshes the enabled state
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java	(revision 16508)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java	(revision 16509)
@@ -64,4 +64,9 @@
 
         @Override
+        protected boolean listenToSelectionChange() {
+            return false;
+        }
+
+        @Override
         public void updateEnabledState() {
             setEnabled(MainApplication.isDisplayingMapView()
