Index: trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 13734)
+++ trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 13736)
@@ -63,4 +63,5 @@
     private DataSet ds;
     private final transient List<Relation> addedRelations = new LinkedList<>();
+    private final boolean addUndoRedo;
 
     /**
@@ -457,5 +458,6 @@
     /**
      * Constructs a new {@code JoinAreasAction} with optional shortcut and adapters.
-     * @param addShortcutToolbarAdapters controls whether the shortcut should be registered or not, as for toolbar registration and adapters
+     * @param addShortcutToolbarAdapters controls whether the shortcut should be registered or not,
+     * as for toolbar registration, adapters creation and undo/redo integration
      * @since 11611
      */
@@ -464,4 +466,5 @@
         Shortcut.registerShortcut("tools:joinareas", tr("Tool: {0}", tr("Join overlapping Areas")), KeyEvent.VK_J, Shortcut.SHIFT)
         : null, addShortcutToolbarAdapters, null, addShortcutToolbarAdapters);
+        addUndoRedo = addShortcutToolbarAdapters;
     }
 
@@ -566,6 +569,8 @@
             //FIXME: this is dirty hack
             makeCommitsOneAction(tr("Reverting changes"));
-            MainApplication.undoRedo.undo();
-            MainApplication.undoRedo.redoCommands.clear();
+            if (addUndoRedo) {
+                MainApplication.undoRedo.undo();
+                MainApplication.undoRedo.redoCommands.clear();
+            }
         }
     }
@@ -828,6 +833,6 @@
     }
 
-    private static void commitCommand(Command c) {
-        if (Main.main != null) {
+    private void commitCommand(Command c) {
+        if (Main.main != null && addUndoRedo) {
             MainApplication.undoRedo.add(c);
         } else {
@@ -1596,5 +1601,5 @@
     private void makeCommitsOneAction(String message) {
         cmds.clear();
-        if (Main.main != null) {
+        if (Main.main != null && addUndoRedo) {
             UndoRedoHandler ur = MainApplication.undoRedo;
             int i = Math.max(ur.commands.size() - cmdsCount, 0);
Index: trunk/src/org/openstreetmap/josm/data/UndoRedoHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/UndoRedoHandler.java	(revision 13734)
+++ trunk/src/org/openstreetmap/josm/data/UndoRedoHandler.java	(revision 13736)
@@ -107,5 +107,5 @@
     /**
      * Event fired after a command has been added to the command queue.
-     * @since xxx
+     * @since 13729
      */
     public static final class CommandAddedEvent extends CommandQueueEvent {
@@ -134,5 +134,5 @@
     /**
      * Event fired after the command queue has been cleaned.
-     * @since xxx
+     * @since 13729
      */
     public static final class CommandQueueCleanedEvent extends CommandQueueEvent {
@@ -161,5 +161,5 @@
     /**
      * Event fired after a command has been undone.
-     * @since xxx
+     * @since 13729
      */
     public static final class CommandUndoneEvent extends CommandQueueEvent {
@@ -188,5 +188,5 @@
     /**
      * Event fired after a command has been redone.
-     * @since xxx
+     * @since 13729
      */
     public static final class CommandRedoneEvent extends CommandQueueEvent {
Index: trunk/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java	(revision 13734)
+++ trunk/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java	(revision 13736)
@@ -30,5 +30,4 @@
 import org.openstreetmap.josm.data.osm.UploadPolicy;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.io.IllegalDataException;
 import org.openstreetmap.josm.io.OsmReader;
@@ -136,6 +135,4 @@
             optimizedWays.addAll(ways);
         }
-        // Clean command stack
-        MainApplication.undoRedo.clean(data);
         return optimizedWays;
     }
