Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 1443)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 1444)
@@ -9,4 +9,5 @@
 import java.awt.Color;
 import java.awt.Cursor;
+import java.awt.EventQueue;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
@@ -59,5 +60,10 @@
  */
 public class DrawAction extends MapMode implements MapViewPaintable, SelectionChangedListener, AWTEventListener {
-
+    final private Cursor cursorCrosshair;
+    final private Cursor cursorJoinNode;
+    final private Cursor cursorJoinWay;
+    enum Cursors { crosshair, node, way } 
+    private Cursors currCursor = Cursors.crosshair;
+    
     private static Node lastUsedNode = null;
     private double PHI=Math.toRadians(90);
@@ -88,4 +94,8 @@
         Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
             Shortcut.registerShortcut("mapmode:drawfocus", tr("Mode: Draw Focus"), KeyEvent.VK_N, Shortcut.GROUP_EDIT).getKeyStroke(), tr("Draw"));
+        
+        cursorCrosshair = getCursor();
+        cursorJoinNode = ImageProvider.getCursor("crosshair", "joinnode");
+        cursorJoinWay = ImageProvider.getCursor("crosshair", "joinway");
     }
 
@@ -99,30 +109,34 @@
 
     /**
-     * Sets a special cursor to indicate that the next click will automatically join into
-     * an existing node or way (if feature is enabled)
-     *
-     * @param way If true, the cursor will indicate it is joined into a way; node otherwise
-     */
-    private void setJoinCursor(boolean way) {
-        if(!drawTargetCursor) {
-            resetCursor();
-            return;
-        }
+     * Displays the given cursor instead of the normal one
+     * @param Cursors One of the available cursors
+     */
+    private void setCursor(final Cursors c) {
+        if(currCursor.equals(c) || (!drawTargetCursor && currCursor.equals(Cursors.crosshair)))
+            return;
         try {
-            Main.map.mapView.setCursor(
-                    ImageProvider.getCursor("crosshair", (way ? "joinway" : "joinnode"))
-            );
-            return;
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        resetCursor();
-    }
-
-    /**
-     * Resets the cursor to the default cursor for drawing mode (i.e. crosshair)
-     */
-    private void resetCursor() {
-        Main.map.mapView.setCursor(getCursor());
+            // We invoke this to prevent strange things from happening
+            EventQueue.invokeLater(new Runnable() {
+                public void run() {
+                    switch(c) {
+                        case way:
+                            Main.map.mapView.setCursor(cursorJoinWay);
+                            break;
+                        case node:
+                            Main.map.mapView.setCursor(cursorJoinNode);
+                            break;
+                        default:
+                            Main.map.mapView.setCursor(cursorCrosshair);
+                            break;    
+                    }
+                }
+            });
+            currCursor = c;
+        } catch(Exception e) {}
+    }
+    
+    private void redrawIfRequired() {
+        if ((!drawHelperLine || wayIsFinished) && !drawTargetHighlight) return;
+        Main.map.mapView.repaint();
     }
 
@@ -135,5 +149,5 @@
         // if ctrl key is held ("no join"), don't highlight anything
         if (ctrl) {
-            resetCursor();
+            setCursor(Cursors.crosshair);
             return;
         }
@@ -144,5 +158,5 @@
 
         if (mouseOnExistingNode != null) {
-            setJoinCursor(false);
+            setCursor(Cursors.node);
             // We also need this list for the statusbar help text
             oldHighlights.add(mouseOnExistingNode);
@@ -154,9 +168,9 @@
         // Insert the node into all the nearby way segments
         if(mouseOnExistingWays.size() == 0) {
-            resetCursor();
-            return;
-        }
-
-        setJoinCursor(true);
+            setCursor(Cursors.crosshair);
+            return;
+        }
+
+        setCursor(Cursors.way);
 
         // We also need this list for the statusbar help text
@@ -219,6 +233,7 @@
             return;
         updateKeyModifiers((InputEvent) event);
+        computeHelperLine();
         addHighlighting();
-        computeHelperLine();
+        redrawIfRequired();
     }
     /**
@@ -229,4 +244,6 @@
             return;
         computeHelperLine();
+        addHighlighting();
+        redrawIfRequired();
     }
 
@@ -247,7 +264,7 @@
 
         // Redraw to remove the helper line stub
+        computeHelperLine();
         removeHighlighting();
-        computeHelperLine();
-        Main.map.mapView.repaint();
+        redrawIfRequired();
     }
 
@@ -477,5 +494,5 @@
         computeHelperLine();
         removeHighlighting();
-        Main.map.mapView.repaint();
+        redrawIfRequired();
     }
 
@@ -550,6 +567,7 @@
         mousePos = e.getPoint();
 
+        computeHelperLine();
         addHighlighting();
-        computeHelperLine();
+        redrawIfRequired();
     }
 
@@ -663,7 +681,4 @@
         Main.map.statusLine.setDist(distance);
         updateStatusLine();
-
-        if ((!drawHelperLine || wayIsFinished) && !drawTargetHighlight) return;
-        Main.map.mapView.repaint();
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/ColorPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/ColorPreference.java	(revision 1443)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/ColorPreference.java	(revision 1444)
@@ -65,6 +65,9 @@
         Map<String, String> colorKeyList = new TreeMap<String, String>();
         Map<String, String> colorKeyList_mappaint = new TreeMap<String, String>();
+        Map<String, String> colorKeyList_layer = new TreeMap<String, String>();
         for(String key : colorMap.keySet()) {
-            if(key.startsWith("mappaint."))
+            if(key.startsWith("layer "))
+                colorKeyList_layer.put(getName(key), key);
+            else if(key.startsWith("mappaint."))
                 colorKeyList_mappaint.put(getName(key), key);
             else
@@ -78,4 +81,10 @@
         }
         for (Entry<String, String> k : colorKeyList_mappaint.entrySet()) {
+            Vector<Object> row = new Vector<Object>(2);
+            row.add(k.getValue());
+            row.add(ColorHelper.html2color(colorMap.get(k.getValue())));
+            tableModel.addRow(row);
+        }
+        for (Entry<String, String> k : colorKeyList_layer.entrySet()) {
             Vector<Object> row = new Vector<Object>(2);
             row.add(k.getValue());
@@ -113,4 +122,11 @@
         }
         catch (Exception e) {}
+        try
+        {
+            Matcher m = Pattern.compile("layer (.+)").matcher(o);
+            m.matches();
+            return tr("Layer: {0}", tr(m.group(1)));
+        }
+        catch (Exception e) {}
         return tr(o);
     }
Index: /trunk/src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 1443)
+++ /trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 1444)
@@ -75,4 +75,5 @@
       */
      private String parseNotes = new String();
+     private int parseNotesCount = 0;
      public String getParseNotes() {
          return parseNotes;
@@ -373,5 +374,10 @@
                     Node n = findNode(id);
                     if (n == null) {
-                         parseNotes += tr("Skipping a way because it includes a node that doesn''t exist: {0}\n", id);
+                         /* don't report ALL of them, just a few */
+                         if (parseNotesCount++ < 6) {
+                             parseNotes += tr("Skipping a way because it includes a node that doesn''t exist: {0}\n", id);
+                         } else if (parseNotesCount == 6) {
+                             parseNotes += "...\n";
+                         }
                          failed = true;
                          break;
Index: /trunk/src/org/openstreetmap/josm/io/OsmServerObjectReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmServerObjectReader.java	(revision 1443)
+++ /trunk/src/org/openstreetmap/josm/io/OsmServerObjectReader.java	(revision 1444)
@@ -10,4 +10,6 @@
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.xml.sax.SAXException;
+
+import javax.swing.JOptionPane;
 
 public class OsmServerObjectReader extends OsmServerReader {
@@ -47,9 +49,14 @@
                 return null;
             Main.pleaseWaitDlg.currentAction.setText(tr("Downloading OSM data..."));
-            final DataSet data = OsmReader.parseDataSet(in, null, Main.pleaseWaitDlg);
+            final OsmReader osm = OsmReader.parseDataSetOsm(in, null, Main.pleaseWaitDlg);
+            final DataSet data = osm.getDs();
+
 //          String origin = Main.pref.get("osm-server.url")+"/"+Main.pref.get("osm-server.version", "0.5");
 //          Bounds bounds = new Bounds(new LatLon(lat1, lon1), new LatLon(lat2, lon2));
 //          DataSource src = new DataSource(bounds, origin);
 //          data.dataSources.add(src);
+            if (osm.getParseNotes().length() != 0) {
+                JOptionPane.showMessageDialog(Main.parent, osm.getParseNotes());
+            }
             in.close();
             activeConnection = null;
Index: /trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 1443)
+++ /trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 1444)
@@ -107,5 +107,5 @@
                     p.put(info.stage, new LinkedList<PluginInformation>());
                 p.get(info.stage).add(info);
-            } else {
+            } else if(early) {
                 JOptionPane.showMessageDialog(Main.parent, tr("Plugin not found: {0}.", pluginName));
             }
