Index: /trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 11610)
+++ /trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 11611)
@@ -449,7 +449,16 @@
      */
     public JoinAreasAction() {
-        super(tr("Join overlapping Areas"), "joinareas", tr("Joins areas that overlap each other"),
-        Shortcut.registerShortcut("tools:joinareas", tr("Tool: {0}", tr("Join overlapping Areas")),
-            KeyEvent.VK_J, Shortcut.SHIFT), true);
+        this(true);
+    }
+
+    /**
+     * Constructs a new {@code JoinAreasAction} with optional shortcut.
+     * @param addShortcut controls whether the shortcut should be registered or not
+     * @since 11611
+     */
+    public JoinAreasAction(boolean addShortcut) {
+        super(tr("Join overlapping Areas"), "joinareas", tr("Joins areas that overlap each other"), addShortcut ?
+        Shortcut.registerShortcut("tools:joinareas", tr("Tool: {0}", tr("Join overlapping Areas")), KeyEvent.VK_J, Shortcut.SHIFT)
+        : null, true);
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/PurgeAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/PurgeAction.java	(revision 11610)
+++ /trunk/src/org/openstreetmap/josm/actions/PurgeAction.java	(revision 11611)
@@ -53,6 +53,7 @@
  *
  * This action is undo-able. In order not to break previous commands in the
- * undo buffer, we must re-add the identical object (and not semantically
- * equal ones).
+ * undo buffer, we must re-add the identical object (and not semantically equal ones).
+ *
+ * @since 3431
  */
 public class PurgeAction extends JosmAction {
@@ -68,6 +69,5 @@
     protected transient Set<OsmPrimitive> toPurgeChecked;
     /**
-     * Subset of toPurgeChecked. Marks primitives that remain in the
-     * dataset, but incomplete.
+     * Subset of toPurgeChecked. Marks primitives that remain in the dataset, but incomplete.
      */
     protected transient Set<OsmPrimitive> makeIncomplete;
@@ -81,9 +81,17 @@
      */
     public PurgeAction() {
+        this(true);
+    }
+
+    /**
+     * Constructs a new {@code PurgeAction} with optional shortcut.
+     * @param addShortcut controls whether the shortcut should be registered or not
+     * @since 11611
+     */
+    public PurgeAction(boolean addShortcut) {
         /* translator note: other expressions for "purge" might be "forget", "clean", "obliterate", "prune" */
-        super(tr("Purge..."), "purge", tr("Forget objects but do not delete them on server when uploading."),
-                Shortcut.registerShortcut("system:purge", tr("Edit: {0}", tr("Purge")),
-                KeyEvent.VK_P, Shortcut.CTRL_SHIFT),
-                true);
+        super(tr("Purge..."), "purge", tr("Forget objects but do not delete them on server when uploading."), addShortcut ?
+                Shortcut.registerShortcut("system:purge", tr("Edit: {0}", tr("Purge")), KeyEvent.VK_P, Shortcut.CTRL_SHIFT)
+                : null, true);
         putValue("help", HelpUtil.ht("/Action/Purge"));
     }
Index: /trunk/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java	(revision 11610)
+++ /trunk/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java	(revision 11611)
@@ -104,5 +104,5 @@
         }
         // Purge all other ways and relations so dataset only contains lefthand traffic data
-        new PurgeAction().getPurgeCommand(toPurge).executeCommand();
+        new PurgeAction(false).getPurgeCommand(toPurge).executeCommand();
         // Combine adjacent countries into a single polygon
         Collection<Way> optimizedWays = new ArrayList<>();
@@ -110,5 +110,5 @@
         if (areas != null) {
             try {
-                JoinAreasResult result = new JoinAreasAction().joinAreas(areas);
+                JoinAreasResult result = new JoinAreasAction(false).joinAreas(areas);
                 if (result.hasChanges()) {
                     for (Multipolygon mp : result.getPolygons()) {
