Index: trunk/src/org/openstreetmap/josm/data/osm/Node.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 3179)
+++ trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 3180)
@@ -195,5 +195,5 @@
     }
 
-    public boolean isJunctionNode() {
+    public boolean isConnectionNode() {
         return (OsmPrimitive.getFilteredList(getReferrers(), Way.class)).size() > 1;
     }
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java	(revision 3179)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java	(revision 3180)
@@ -22,9 +22,11 @@
     private int showIconsDistance;
     private int selectedNodeSize;
-    private int junctionNodeSize;
+    private int connectionNodeSize;
     private int unselectedNodeSize;
+    private int taggedNodeSize;
     private boolean fillSelectedNode;
     private boolean fillUnselectedNode;
     private boolean fillTaggedNode;
+    private boolean fillConnectionNode;
     private Color selectedColor;
     private Color highlightColor;
@@ -32,4 +34,6 @@
     private Color nodeColor;
     private Color taggedColor;
+    private Color connectionColor;
+    private Color taggedConnectionColor;
 
     private MapPaintSettings() {
@@ -49,4 +53,11 @@
         nodeColor = PaintColors.NODE.get();
         taggedColor = PaintColors.TAGGED.get();
+        connectionColor = PaintColors.CONNECTION.get();
+        if (taggedColor != nodeColor) {
+            taggedConnectionColor = taggedColor;
+        } else {
+            taggedConnectionColor = connectionColor;
+        }
+
 
         showOrderNumber = Main.pref.getBoolean("draw.segment.order_number", false);
@@ -59,8 +70,10 @@
         selectedNodeSize = Main.pref.getInteger("mappaint.node.selected-size", 5);
         unselectedNodeSize = Main.pref.getInteger("mappaint.node.unselected-size", 3);
-        junctionNodeSize = Main.pref.getInteger("mappaint.node.junction-size", 5);
+        connectionNodeSize = Main.pref.getInteger("mappaint.node.onnection-size", 5);
+        taggedNodeSize = Main.pref.getInteger("mappaint.node.tagged-size", 3);
         fillSelectedNode = Main.pref.getBoolean("mappaint.node.fill-selected", true);
         fillUnselectedNode = Main.pref.getBoolean("mappaint.node.fill-unselected", false);
         fillTaggedNode = Main.pref.getBoolean("mappaint.node.fill-tagged", true);
+        fillConnectionNode = Main.pref.getBoolean("mappaint.node.fill-onnection", false);
     }
 
@@ -105,4 +118,12 @@
     }
 
+    public Color getConnectionColor() {
+        return connectionColor;
+    }
+
+    public Color getTaggedConnectionColor() {
+        return taggedConnectionColor;
+    }
+
     public boolean isShowOrderNumber() {
         return showOrderNumber;
@@ -133,10 +154,14 @@
     }
 
-    public int getJunctionNodeSize() {
-        return junctionNodeSize;
+    public int getConnectionNodeSize() {
+        return connectionNodeSize;
     }
 
     public int getUnselectedNodeSize() {
         return unselectedNodeSize;
+    }
+
+    public int getTaggedNodeSize() {
+        return taggedNodeSize;
     }
 
@@ -149,4 +174,8 @@
     }
 
+    public boolean isFillConnectionNode() {
+        return fillConnectionNode;
+    }
+
     public boolean isFillTaggedNode() {
         return fillTaggedNode;
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/PaintColors.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/PaintColors.java	(revision 3179)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/PaintColors.java	(revision 3180)
@@ -13,6 +13,7 @@
     INACTIVE(marktr("inactive"), Color.darkGray),
     SELECTED(marktr("selected"), Color.red),
-    NODE(marktr("node"), Color.yellow),
-    TAGGED(marktr("tagged"), new Color(204, 255, 255)), // turquoise
+    NODE(marktr("Node: standard"), Color.yellow),
+    CONNECTION(marktr("Node: connection"), Color.yellow),
+    TAGGED(marktr("Node: tagged"), new Color(204, 255, 255)), // light cyan
     DEFAULT_WAY(marktr("way"),  new Color(0,0,128)), // dark blue
     RELATION(marktr("relation"), new Color(0,128,128)), // teal
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/SimplePaintVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/SimplePaintVisitor.java	(revision 3179)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/SimplePaintVisitor.java	(revision 3180)
@@ -62,4 +62,6 @@
     protected Color highlightColor;
     protected Color taggedColor;
+    protected Color connectionColor;
+    protected Color taggedConnectionColor;
     protected boolean showDirectionArrow;
     protected boolean showRelevantDirectionsOnly;
@@ -69,10 +71,9 @@
     protected boolean fillUnselectedNode;
     protected boolean fillTaggedNode;
+    protected boolean fillConnectionNode;
     protected int selectedNodeSize;
-    protected int selectedNodeRadius;
     protected int unselectedNodeSize;
-    protected int unselectedNodeRadius;
-    protected int junctionNodeSize;
-    protected int junctionNodeRadius;
+    protected int connectionNodeSize;
+    protected int taggedNodeSize;
     protected int defaultSegmentWidth;
     protected int virtualNodeSize;
@@ -98,4 +99,11 @@
         highlightColor = PaintColors.HIGHLIGHT.get();
         taggedColor = PaintColors.TAGGED.get();
+        connectionColor = PaintColors.CONNECTION.get();
+
+        if (taggedColor != nodeColor) {
+            taggedConnectionColor = taggedColor;
+        } else {
+            taggedConnectionColor = connectionColor;
+        }
     }
 
@@ -107,12 +115,11 @@
         showOrderNumber = settings.isShowOrderNumber();
         selectedNodeSize = settings.getSelectedNodeSize();
-        selectedNodeRadius = selectedNodeSize / 2;
         unselectedNodeSize = settings.getUnselectedNodeSize();
-        unselectedNodeRadius = unselectedNodeSize / 2;
-        junctionNodeSize = settings.getJunctionNodeSize();
-        junctionNodeRadius = junctionNodeSize / 2;
+        connectionNodeSize = settings.getConnectionNodeSize();
+        taggedNodeSize = settings.getTaggedNodeSize();
         defaultSegmentWidth = settings.getDefaultSegmentWidth();
         fillSelectedNode = settings.isFillSelectedNode();
         fillUnselectedNode = settings.isFillUnselectedNode();
+        fillConnectionNode = settings.isFillConnectionNode();
         fillTaggedNode = settings.isFillTaggedNode();
         virtualNodeSize = virtual ? Main.pref.getInteger("mappaint.node.virtual-size", 8) / 2 : 0;
@@ -224,4 +231,8 @@
     }
 
+    private static final int max(int a, int b, int c, int d) {
+        return Math.max(Math.max(a, b), Math.max(c, d));
+    }
+
     /**
      * Draw a small rectangle.
@@ -234,16 +245,37 @@
 
         if (n.isHighlighted()) {
-            drawNode(n, highlightColor, selectedNodeSize, unselectedNodeRadius, fillSelectedNode);
-        } else if (ds.isSelected(n)) {
-            drawNode(n, selectedColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
+            drawNode(n, highlightColor, selectedNodeSize, fillSelectedNode);
         } else {
-            boolean junction = n.isJunctionNode();
-            drawNode(
-                n,
-                (inactive || n.isDisabled()) ? inactiveColor : 
-                    (n.isTagged() ? taggedColor : nodeColor),
-                junction ? junctionNodeSize : unselectedNodeSize,
-                junction ? junctionNodeRadius : unselectedNodeRadius,
-                n.isTagged() ? fillTaggedNode : fillUnselectedNode);
+            Color color;
+
+            if (inactive || n.isDisabled()) {
+                color = inactiveColor;
+            } else if (ds.isSelected(n)) {
+                color = selectedColor;
+            } else if (n.isConnectionNode()) {
+                if (n.isTagged()) {
+                    color = taggedConnectionColor;
+                } else {
+                    color = connectionColor;
+                }
+            } else {
+                if (n.isTagged()) {
+                    color = taggedColor;
+                } else {
+                    color = nodeColor;
+                }
+            }
+
+            final int size = max((ds.isSelected(n) ? selectedNodeSize : 0),
+                                    (n.isTagged() ? taggedNodeSize : 0),
+                                    (n.isConnectionNode() ? connectionNodeSize : 0),
+                                    unselectedNodeSize);
+
+            final boolean fill = (ds.isSelected(n) && fillSelectedNode) ||
+                                    (n.isTagged() && fillTaggedNode) ||
+                                    (n.isConnectionNode() && fillConnectionNode) ||
+                                    fillUnselectedNode;
+
+            drawNode(n, color, size, fill);
         }
     }
@@ -421,6 +453,7 @@
      * @param color The color of the node.
      */
-    public void drawNode(Node n, Color color, int size, int radius, boolean fill) {
+    public void drawNode(Node n, Color color, int size, boolean fill) {
         if (size > 1) {
+            int radius = size / 2;
             Point p = nc.getPoint(n);
             if ((p.x < 0) || (p.y < 0) || (p.x > nc.getWidth())
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/SimpleNodeElemStyle.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/SimpleNodeElemStyle.java	(revision 3179)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/SimpleNodeElemStyle.java	(revision 3180)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.gui.mappaint;
 
+import java.awt.Color;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -16,4 +17,8 @@
     }
 
+    private static final int max(int a, int b, int c, int d) {
+        return Math.max(Math.max(a, b), Math.max(c, d));
+    }
+
     @Override
     public void paintPrimitive(OsmPrimitive primitive, MapPaintSettings settings, MapPainter painter,
@@ -21,15 +26,41 @@
         Node n = (Node)primitive;
         String name = painter.isShowNames()?painter.getNodeName(n):null;
+
+
         if (n.isHighlighted()) {
             painter.drawNode(n, settings.getHighlightColor(), settings.getSelectedNodeSize(), settings.isFillSelectedNode(), name);
-        } else if (selected) {
-            painter.drawNode(n, settings.getSelectedColor(), settings.getSelectedNodeSize(), settings.isFillSelectedNode(), name);
         } else {
-            painter.drawNode(
-                n,
-                (painter.isInactive() || n.isDisabled()) ? settings.getInactiveColor() : settings.getNodeColor(),
-                n.isJunctionNode() ? settings.getJunctionNodeSize() : settings.getUnselectedNodeSize(),
-                n.isTagged() ? settings.isFillTaggedNode() : settings.isFillUnselectedNode(),
-                name);
+
+            Color color;
+
+            if (painter.isInactive() || n.isDisabled()) {
+                color = settings.getInactiveColor();
+            } else if (selected) {
+                color = settings.getSelectedColor();
+            } else if (n.isConnectionNode()) {
+                if (n.isTagged()) {
+                    color = settings.getTaggedConnectionColor();
+                } else {
+                    color = settings.getConnectionColor();
+                }
+            } else {
+                if (n.isTagged()) {
+                    color = settings.getTaggedColor();
+                } else {
+                    color = settings.getNodeColor();
+                }
+            }
+
+            final int size = max((selected ? settings.getSelectedNodeSize() : 0),
+                                    (n.isTagged() ? settings.getTaggedNodeSize() : 0),
+                                    (n.isConnectionNode() ? settings.getConnectionNodeSize() : 0),
+                                    settings.getUnselectedNodeSize());
+
+            final boolean fill = (selected && settings.isFillSelectedNode()) ||
+                                    (n.isTagged() && settings.isFillTaggedNode()) ||
+                                    (n.isConnectionNode() && settings.isFillConnectionNode()) ||
+                                    settings.isFillUnselectedNode();
+
+            painter.drawNode(n, color, size, fill, name);
         }
     }
