Index: src/org/openstreetmap/josm/actions/SelectAllAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/SelectAllAction.java	(revision 181)
+++ src/org/openstreetmap/josm/actions/SelectAllAction.java	(revision 181)
@@ -0,0 +1,19 @@
+package org.openstreetmap.josm.actions;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+
+import org.openstreetmap.josm.Main;
+
+public class SelectAllAction extends JosmAction {
+
+	public SelectAllAction() {
+		super(tr("Select All"),"selectall", tr("Select all undeleted objects in the data layer. This selects incomplete objects too."), KeyEvent.VK_A, KeyEvent.CTRL_DOWN_MASK, true);
+    }
+
+	public void actionPerformed(ActionEvent e) {
+		Main.ds.setSelected(Main.ds.allNonDeletedPrimitives());
+	}
+}
Index: src/org/openstreetmap/josm/actions/UnselectAllAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/UnselectAllAction.java	(revision 181)
+++ src/org/openstreetmap/josm/actions/UnselectAllAction.java	(revision 181)
@@ -0,0 +1,19 @@
+package org.openstreetmap.josm.actions;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+
+import org.openstreetmap.josm.Main;
+
+public class UnselectAllAction extends JosmAction {
+
+	public UnselectAllAction() {
+		super(tr("Unselect All"),"unselectall", tr("Unselect all objects."), KeyEvent.VK_A, KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK, true);
+    }
+
+	public void actionPerformed(ActionEvent e) {
+		Main.ds.clearSelection();
+	}
+}
Index: src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 180)
+++ src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 181)
@@ -85,8 +85,29 @@
 		}
 
-		for (Segment ls : w.segments)
+		int orderNumber = 0;
+		for (Segment ls : w.segments) {
+			orderNumber++;
 			if (!ls.selected) // selected already in good color
 				drawSegment(ls, w.selected ? getPreferencesColor("selected", Color.WHITE) : wayColor);
+			if (Main.pref.getBoolean("draw.segment.order_number"))
+				drawOrderNumber(ls, orderNumber);
+		}
 	}
+
+	/**
+	 * Draw an number of the order of the segment within the parents way
+	 */
+	private void drawOrderNumber(Segment ls, int orderNumber) {
+		int strlen = (""+orderNumber).length();
+		Point p1 = nc.getPoint(ls.from.eastNorth);
+		Point p2 = nc.getPoint(ls.to.eastNorth);
+		int x = (p1.x+p2.x)/2 - 4*strlen;
+		int y = (p1.y+p2.y)/2 + 4;
+		Color c = g.getColor();
+		g.setColor(Color.black);
+		g.fillRect(x-1,y-12,8*strlen+1,14);
+		g.setColor(c);
+		g.drawString(""+orderNumber,x,y);
+    }
 
 	/**
Index: src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- src/org/openstreetmap/josm/gui/MainMenu.java	(revision 180)
+++ src/org/openstreetmap/josm/gui/MainMenu.java	(revision 181)
@@ -23,5 +23,7 @@
 import org.openstreetmap.josm.actions.SaveAction;
 import org.openstreetmap.josm.actions.SaveAsAction;
+import org.openstreetmap.josm.actions.SelectAllAction;
 import org.openstreetmap.josm.actions.UndoAction;
+import org.openstreetmap.josm.actions.UnselectAllAction;
 import org.openstreetmap.josm.actions.UploadAction;
 
@@ -38,4 +40,6 @@
 	public final UndoAction undo = new UndoAction();
 	public final RedoAction redo = new RedoAction();
+	public final Action selectAll = new SelectAllAction();
+	public final Action unselectAll = new UnselectAllAction();
 	public final NewAction newAction = new NewAction();
 	public final OpenAction open = new OpenAction();
@@ -77,4 +81,7 @@
 		editMenu.add(redo);
 		editMenu.addSeparator();
+		editMenu.add(selectAll);
+		editMenu.add(unselectAll);
+		editMenu.addSeparator();
 		editMenu.add(reverseSegment);
 		editMenu.add(alignInCircle);
Index: src/org/openstreetmap/josm/gui/MapStatus.java
===================================================================
--- src/org/openstreetmap/josm/gui/MapStatus.java	(revision 180)
+++ src/org/openstreetmap/josm/gui/MapStatus.java	(revision 181)
@@ -5,4 +5,5 @@
 import java.awt.AWTEvent;
 import java.awt.Cursor;
+import java.awt.EventQueue;
 import java.awt.Font;
 import java.awt.GridBagLayout;
@@ -14,4 +15,5 @@
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseMotionListener;
+import java.lang.reflect.InvocationTargetException;
 import java.util.Collection;
 import java.util.ConcurrentModificationException;
@@ -133,6 +135,16 @@
 					// Popup Information
 					if ((ms.modifiers & MouseEvent.BUTTON2_DOWN_MASK) != 0 && osms != null) {
-						if (popup != null)
-							popup.hide();
+						if (popup != null) {
+							try {
+	                            EventQueue.invokeAndWait(new Runnable() {
+	                                public void run() {
+	                                	popup.hide();
+	                                }
+	                            });
+                            } catch (InterruptedException e) {
+                            } catch (InvocationTargetException e) {
+                            	throw new RuntimeException(e);
+                            }
+						}
 
 						JPanel c = new JPanel(new GridBagLayout());
@@ -169,8 +181,18 @@
 						Point p = mv.getLocationOnScreen();
 						popup = PopupFactory.getSharedInstance().getPopup(mv, c, p.x+ms.mousePos.x+16, p.y+ms.mousePos.y+16);
-						popup.show();
+						final Popup staticPopup = popup;
+						EventQueue.invokeLater(new Runnable(){
+							public void run() {
+								staticPopup.show();
+                            }
+						});
 					} else if (popup != null) {
-						popup.hide();
+						final Popup staticPopup = popup;
 						popup = null;
+						EventQueue.invokeLater(new Runnable(){
+							public void run() {
+								staticPopup.hide();
+                            }
+						});
 					}
 				} catch (ConcurrentModificationException x) {
Index: src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 180)
+++ src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 181)
@@ -34,4 +34,6 @@
 import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
 import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.tools.DontShowAgainInfo;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.ImageProvider.OverlayPosition;
@@ -65,8 +67,8 @@
 		public void actionPerformed(ActionEvent e) {
 			int sel = instance.getSelectedIndex();
-			if (layer != null)
-				Main.main.removeLayer(layer);
-			else
-				Main.main.removeLayer((Layer)instance.getSelectedValue());
+			Layer l = layer != null ? layer : (Layer)instance.getSelectedValue();
+			if (l instanceof OsmDataLayer && !DontShowAgainInfo.show("delete_layer", tr("Do you really want to delete the whole layer?")))
+				return;
+			Main.main.removeLayer(l);
 			if (sel >= instance.getModel().getSize())
 				sel = instance.getModel().getSize()-1;
Index: src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java
===================================================================
--- src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java	(revision 180)
+++ src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java	(revision 181)
@@ -17,4 +17,5 @@
 	private JCheckBox largeGpsPoints = new JCheckBox(tr("Draw large GPS points."));
 	private JCheckBox directionHint = new JCheckBox(tr("Draw Direction Arrows"));
+	private JCheckBox segmentOrderNumber = new JCheckBox(tr("Draw segment order numbers"));
 
 	public void addGui(PreferenceDialog gui) {
@@ -46,4 +47,9 @@
 		directionHint.setSelected(Main.pref.getBoolean("draw.segment.direction"));
 		gui.display.add(directionHint, GBC.eop().insets(20,0,0,0));
+		
+		// segment order number
+		segmentOrderNumber.setToolTipText(tr("Draw the order numbers of all segments within their way."));
+		segmentOrderNumber.setSelected(Main.pref.getBoolean("draw.segment.order_number"));
+		gui.display.add(segmentOrderNumber, GBC.eop().insets(20,0,0,0));
 	}
 
@@ -53,4 +59,5 @@
 		Main.pref.put("draw.rawgps.large", largeGpsPoints.isSelected());
 		Main.pref.put("draw.segment.direction", directionHint.isSelected());
+		Main.pref.put("draw.segment.order_number", segmentOrderNumber.isSelected());
     }
 }
Index: src/org/openstreetmap/josm/gui/preferences/PluginPreference.java
===================================================================
--- src/org/openstreetmap/josm/gui/preferences/PluginPreference.java	(revision 180)
+++ src/org/openstreetmap/josm/gui/preferences/PluginPreference.java	(revision 181)
@@ -27,7 +27,8 @@
 public class PluginPreference implements PreferenceSetting {
 
-	private Map<PluginInformation, Boolean> pluginMap = new HashMap<PluginInformation, Boolean>();
+	private Map<PluginInformation, Boolean> pluginMap;
 
 	public void addGui(final PreferenceDialog gui) {
+		pluginMap = new HashMap<PluginInformation, Boolean>();
 		Box pluginPanel = Box.createVerticalBox();
 		Collection<PluginInformation> availablePlugins = new LinkedList<PluginInformation>();
Index: src/org/openstreetmap/josm/tools/DontShowAgainInfo.java
===================================================================
--- src/org/openstreetmap/josm/tools/DontShowAgainInfo.java	(revision 180)
+++ src/org/openstreetmap/josm/tools/DontShowAgainInfo.java	(revision 181)
@@ -7,4 +7,5 @@
 
 import javax.swing.JCheckBox;
+import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
@@ -13,4 +14,8 @@
 
 public class DontShowAgainInfo {
+
+	public static boolean show(String prefKey, String msg) {
+		return show(prefKey, new JLabel(msg));
+	}
 
 	public static boolean show(String prefKey, Container msg) {
