Index: src/org/openstreetmap/josm/Main.java
===================================================================
--- src/org/openstreetmap/josm/Main.java	(revision 123)
+++ src/org/openstreetmap/josm/Main.java	(revision 124)
@@ -12,4 +12,5 @@
 import java.net.URISyntaxException;
 import java.util.Collection;
+import java.util.LinkedList;
 import java.util.Map;
 import java.util.StringTokenizer;
@@ -40,7 +41,13 @@
 import org.openstreetmap.josm.actions.UploadAction;
 import org.openstreetmap.josm.actions.mapmode.MapMode;
+import org.openstreetmap.josm.command.ChangeCommand;
+import org.openstreetmap.josm.command.Command;
+import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Segment;
 import org.openstreetmap.josm.data.projection.Epsg4326;
 import org.openstreetmap.josm.data.projection.Projection;
@@ -156,6 +163,37 @@
 			}
 		};
-		annotationTesterAction.putValue(Action.NAME, "Annotation Preset Tester");
+		annotationTesterAction.putValue(Action.NAME, tr("Annotation Preset Tester"));
 		annotationTesterAction.putValue(Action.SMALL_ICON, ImageProvider.get("annotation-tester"));
+		final Action reverseSegmentAction = new AbstractAction(){
+			public void actionPerformed(ActionEvent e) {
+				Collection<OsmPrimitive> sel = Main.ds.getSelected();
+				boolean hasSegments = false;
+				for (OsmPrimitive osm : sel) {
+					if (osm instanceof Segment) {
+						hasSegments = true;
+						break;
+					}
+				}
+				if (!hasSegments) {
+					JOptionPane.showMessageDialog(Main.parent, tr("Please select at least one segment."));
+					return;
+				}
+				Collection<Command> c = new LinkedList<Command>();
+				for (OsmPrimitive osm : sel) {
+					if (!(osm instanceof Segment))
+						continue;
+					Segment s = (Segment)osm;
+					Segment snew = new Segment(s);
+					Node n = snew.from;
+					snew.from = snew.to;
+					snew.to = n;
+					c.add(new ChangeCommand(s, snew));
+				}
+				editLayer().add(new SequenceCommand(tr("Reverse Segments"), c));
+				map.repaint();
+			}
+		};
+		reverseSegmentAction.putValue(Action.NAME, tr("Reverse Segments"));
+		reverseSegmentAction.putValue(Action.SMALL_ICON, ImageProvider.get("segmentflip"));
 
 		final Action uploadAction = new UploadAction();
@@ -192,4 +230,6 @@
 		editMenu.add(undoAction);
 		editMenu.add(redoAction);
+		editMenu.addSeparator();
+		editMenu.add(reverseSegmentAction);
 		editMenu.addSeparator();
 		editMenu.add(preferencesAction);
@@ -216,4 +256,6 @@
 		toolBar.add(undoAction);
 		toolBar.add(redoAction);
+		toolBar.addSeparator();
+		toolBar.add(reverseSegmentAction);
 		toolBar.addSeparator();
 		toolBar.add(preferencesAction);
