Index: trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 694)
+++ trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 699)
@@ -148,5 +148,16 @@
 		}
 
-		Way newWay = new Way(selectedWays.get(0));
+		// Find the most appropriate way to modify.
+
+		// Eventually this might want to be the way with the longest
+		// history or the longest selected way but for now just attempt
+		// to reuse an existing id.
+		Way modifyWay = selectedWays.peek();
+		for (Way w : selectedWays) {
+			modifyWay = w;
+			if (w.id != 0) break;
+		}
+		Way newWay = new Way(modifyWay);
+
 		newWay.nodes.clear();
 		newWay.nodes.addAll(nodeList);
@@ -179,6 +190,8 @@
 
 		LinkedList<Command> cmds = new LinkedList<Command>();
-		cmds.add(new DeleteCommand(selectedWays.subList(1, selectedWays.size())));
-		cmds.add(new ChangeCommand(selectedWays.peek(), newWay));
+		LinkedList<Way> deletedWays = new LinkedList<Way>(selectedWays);
+		deletedWays.remove(modifyWay);
+		cmds.add(new DeleteCommand(deletedWays));
+		cmds.add(new ChangeCommand(modifyWay, newWay));
 
 		// modify all relations containing the now-deleted ways
@@ -197,10 +210,10 @@
 			}
 			for (String role : rolesToReAdd) {
-				newRel.members.add(new RelationMember(role, selectedWays.peek()));
+				newRel.members.add(new RelationMember(role, modifyWay));
 			}
 			cmds.add(new ChangeCommand(r, newRel));
 		}
 		Main.main.undoRedo.add(new SequenceCommand(tr("Combine {0} ways", selectedWays.size()), cmds));
-		Main.ds.setSelected(selectedWays.peek());
+		Main.ds.setSelected(modifyWay);
 	}
 
