Index: trunk/src/org/openstreetmap/josm/data/osm/Node.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 3652)
+++ trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 3653)
@@ -234,5 +234,5 @@
 
     public boolean isConnectionNode() {
-        return (OsmPrimitive.getFilteredList(getReferrers(), Way.class)).size() > 1;
+        return isReferredByWays(2);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 3652)
+++ trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 3653)
@@ -1286,4 +1286,29 @@
     }
 
+    /**
+      Return true, if this primitive is referred by at least n ways
+      @param n Minimal number of ways to return true. Must be positive
+     */
+    public final boolean isReferredByWays(int n) {
+        // Count only referrers that are members of the same dataset (primitive can have some fake references, for example
+        // when way is cloned
+        Object referrers = this.referrers;
+        if (referrers == null) return false;
+        checkDataset();
+        if (referrers instanceof OsmPrimitive) {
+          return n<=1 && referrers instanceof Way && ((OsmPrimitive)referrers).dataSet == dataSet;
+        } else {
+          int counter=0;
+          for (OsmPrimitive o : (OsmPrimitive[])referrers) {
+            if (dataSet == o.dataSet && o instanceof Way) {
+              if (++counter >= n) 
+                return true;
+            }
+          }
+          return false;
+        }
+    }
+
+
     /*-----------------
      * OTHER METHODS
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintVisitor.java	(revision 3652)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintVisitor.java	(revision 3653)
@@ -111,8 +111,9 @@
     public void drawNode(Node n) {
         /* check, if the node is visible at all */
-        if((n.getEastNorth().east()  > maxEN.east() ) ||
-                (n.getEastNorth().north() > maxEN.north()) ||
-                (n.getEastNorth().east()  < minEN.east() ) ||
-                (n.getEastNorth().north() < minEN.north()))
+        EastNorth en = n.getEastNorth();
+        if((en.east()  > maxEN.east() ) ||
+                (en.north() > maxEN.north()) ||
+                (en.east()  < minEN.east() ) ||
+                (en.north() < minEN.north()))
             return;
 
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPainter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPainter.java	(revision 3652)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPainter.java	(revision 3653)
@@ -216,9 +216,7 @@
     public void drawNode(Node n, Color color, int size, boolean fill, String name) {
         if (size > 1) {
+            Point p = nc.getPoint(n);
+            if ((p.x < 0) || (p.y < 0) || (p.x > nc.getWidth()) || (p.y > nc.getHeight())) return;
             int radius = size / 2;
-            Point p = nc.getPoint(n);
-            if ((p.x < 0) || (p.y < 0) || (p.x > nc.getWidth())
-                    || (p.y > nc.getHeight()))
-                return;
 
             if (inactive || n.isDisabled()) {
@@ -228,6 +226,5 @@
             }
             if (fill) {
-                g.fillRect(p.x - radius, p.y - radius, size, size);
-                g.drawRect(p.x - radius, p.y - radius, size, size);
+                g.fillRect(p.x - radius, p.y - radius, size + 1, size + 1);
             } else {
                 g.drawRect(p.x - radius, p.y - radius, size, size);
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/SimpleNodeElemStyle.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/SimpleNodeElemStyle.java	(revision 3652)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/SimpleNodeElemStyle.java	(revision 3653)
@@ -33,4 +33,5 @@
 
             Color color;
+            boolean isConnection = n.isConnectionNode();
 
             if (painter.isInactive() || n.isDisabled()) {
@@ -38,5 +39,5 @@
             } else if (selected) {
                 color = member ? settings.getRelationSelectedColor() : settings.getSelectedColor();
-            } else if (n.isConnectionNode()) {
+            } else if (isConnection) {
                 if (n.isTagged()) {
                     color = settings.getTaggedConnectionColor();
@@ -54,10 +55,10 @@
             final int size = max((selected ? settings.getSelectedNodeSize() : 0),
                                     (n.isTagged() ? settings.getTaggedNodeSize() : 0),
-                                    (n.isConnectionNode() ? settings.getConnectionNodeSize() : 0),
+                                    (isConnection ? settings.getConnectionNodeSize() : 0),
                                     settings.getUnselectedNodeSize());
 
             final boolean fill = (selected && settings.isFillSelectedNode()) ||
                                     (n.isTagged() && settings.isFillTaggedNode()) ||
-                                    (n.isConnectionNode() && settings.isFillConnectionNode()) ||
+                                    (isConnection && settings.isFillConnectionNode()) ||
                                     settings.isFillUnselectedNode();
 
