Index: src/org/openstreetmap/josm/actions/ReorderAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/ReorderAction.java	(revision 234)
+++ src/org/openstreetmap/josm/actions/ReorderAction.java	(revision 235)
@@ -77,5 +77,5 @@
      */
     public static Command reorderWay(Way way) {
-	    final LinkedList<Segment> sel = new LinkedList<Segment>(sortSegments(new LinkedList<Segment>(way.segments)));   	
+	    final LinkedList<Segment> sel = new LinkedList<Segment>(sortSegments(new LinkedList<Segment>(way.segments), false));   	
 
 	    Collection<Command> c = new LinkedList<Command>();
@@ -160,9 +160,12 @@
 
 	/**
-	 * This sort is based on the sort in the old ReorderAction, but it works 
+	 * This sort is based on the sort in the old ReorderAction, but it can work 
 	 * irresepective of the direction of the segments. This produces a sort 
 	 * that can be useful even if the segments are facing the wrong direction.
+	 * 
+	 * @param segments list of segments to be sorted
+	 * @param strict true if segment direction should be observed, false if not
 	 */
-	public static LinkedList<Segment> sortSegments(LinkedList<Segment> segments) {
+	public static LinkedList<Segment> sortSegments(LinkedList<Segment> segments, boolean strict) {
 		
 		LinkedList<Segment> sortedSegments = new LinkedList<Segment>();
@@ -179,9 +182,9 @@
 					if (ls.incomplete)
 						continue; // incomplete segments are never added to a new way
-					if (ls.from == pivotList.getLast().to || ls.to == pivotList.getLast().to || ls.from == pivotList.getLast().from || ls.to == pivotList.getLast().from) {
+					if (ls.from == pivotList.getLast().to || (!strict && (ls.to == pivotList.getLast().to || ls.from == pivotList.getLast().from || ls.to == pivotList.getLast().from))) {
 						pivotList.addLast(ls);
 						it.remove();
 						found = true;
-					} else if (ls.to == pivotList.getFirst().from || ls.from == pivotList.getFirst().from || ls.to == pivotList.getFirst().to || ls.from == pivotList.getFirst().to) {
+					} else if (ls.to == pivotList.getFirst().from || (!strict && (ls.from == pivotList.getFirst().from || ls.to == pivotList.getFirst().to || ls.from == pivotList.getFirst().to))) {
 						pivotList.addFirst(ls);
 						it.remove(); 
Index: src/org/openstreetmap/josm/actions/mapmode/AddWayAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/AddWayAction.java	(revision 234)
+++ src/org/openstreetmap/josm/actions/mapmode/AddWayAction.java	(revision 235)
@@ -189,5 +189,5 @@
 
 		LinkedList<Segment> rawSegments = new LinkedList<Segment>(segmentSet);
-		LinkedList<Segment> sortedSegments = ReorderAction.sortSegments(rawSegments);
+		LinkedList<Segment> sortedSegments = ReorderAction.sortSegments(rawSegments, true);
 
 		if (wayToAdd != null) {
