Index: applications/editors/josm/plugins/utilsplugin/src/UtilsPlugin/MergeNodesAction.java
===================================================================
--- applications/editors/josm/plugins/utilsplugin/src/UtilsPlugin/MergeNodesAction.java	(revision 5077)
+++ applications/editors/josm/plugins/utilsplugin/src/UtilsPlugin/MergeNodesAction.java	(revision 5080)
@@ -4,4 +4,5 @@
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.Collection;
@@ -36,5 +37,5 @@
 	public void actionPerformed(ActionEvent e) {
 		Collection<OsmPrimitive> sel = Main.ds.getSelected();
-		Collection<Node> nodes = new ArrayList<Node>();
+		HashSet<Node> nodes = new HashSet<Node>();
 
 		for (OsmPrimitive osm : sel)
@@ -59,5 +60,4 @@
 
 		Node newTarget = new Node(target);
-		cmds.add(new ChangeCommand(target, newTarget));
 
 		// Don't place the merged node on one of the former nodes.
@@ -71,7 +71,9 @@
 			x / nodes.size(), y / nodes.size());
 
-		nodes.remove(target);
+		cmds.add(new ChangeCommand(target, newTarget));
 
-		cmds.add(new DeleteCommand(nodes));
+		HashSet<Node> delNodes = new HashSet<Node>(nodes);
+		delNodes.remove(target);
+		cmds.add(new DeleteCommand(delNodes));
 
 		for (Way w : Main.ds.ways) {
@@ -87,9 +89,9 @@
 			if (!affected) continue;
 
-			// Replace the old nodes with the merged ones
+			// Replace the old nodes with the merged one
 			Way wnew = new Way(w);
 			for (int i = 0; i < wnew.nodes.size(); i++) {
 				if (nodes.contains(wnew.nodes.get(i))) {
-					wnew.nodes.set(i, newTarget);
+					wnew.nodes.set(i, target);
 				}
 			}
@@ -98,8 +100,7 @@
 			Node lastN = null;
 			for (int i = wnew.nodes.size() - 1; i >= 0; i--) {
-				if (lastN == wnew.nodes.get(i)) {
-					wnew.nodes.remove(i);
-					if (i < wnew.nodes.size()) i++;
-				}
+				Node n = wnew.nodes.get(i);
+				if (lastN == n) wnew.nodes.remove(i);
+				lastN = n;
 			}
 
@@ -111,5 +112,5 @@
 					JOptionPane.showMessageDialog(Main.parent,
 						tr("Cannot merge nodes: " +
-							"Would have to delete way that is still used."));
+							"Would have to delete a way that is still used."));
 					return;
 				}
@@ -122,4 +123,5 @@
 
 		Main.main.undoRedo.add(new SequenceCommand(tr("Merge Nodes"), cmds));
+		Main.ds.setSelected(newTarget);
 		Main.map.repaint();
 	}
