Index: src/org/openstreetmap/josm/gui/mappaint/SimpleNodeElemStyle.java
===================================================================
--- src/org/openstreetmap/josm/gui/mappaint/SimpleNodeElemStyle.java	(revision 3652)
+++ src/org/openstreetmap/josm/gui/mappaint/SimpleNodeElemStyle.java	(working copy)
@@ -32,12 +32,13 @@
         } else {
 
             Color color;
+            boolean isConnection = n.isConnectionNode();
 
             if (painter.isInactive() || n.isDisabled()) {
                 color = settings.getInactiveColor();
             } else if (selected) {
                 color = member ? settings.getRelationSelectedColor() : settings.getSelectedColor();
-            } else if (n.isConnectionNode()) {
+            } else if (isConnection) {
                 if (n.isTagged()) {
                     color = settings.getTaggedConnectionColor();
                 } else {
@@ -53,12 +54,12 @@
 
             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();
 
             painter.drawNode(n, color, size, fill, name);
Index: src/org/openstreetmap/josm/data/osm/Node.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/Node.java	(revision 3652)
+++ src/org/openstreetmap/josm/data/osm/Node.java	(working copy)
@@ -233,7 +233,7 @@
     }
 
     public boolean isConnectionNode() {
-        return (OsmPrimitive.getFilteredList(getReferrers(), Way.class)).size() > 1;
+        return isReferredByWays(2);
     }
 
     public String get3892DebugInfo() {
Index: src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 3652)
+++ src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(working copy)
@@ -1285,6 +1285,35 @@
         return result;
     }
 
+    /**
+      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) {
+          if (!(referrers instanceof Way)) return false;
+          OsmPrimitive ref = (OsmPrimitive)referrers;
+          if (ref.dataSet == dataSet) {
+            return (n<=1);
+          }
+          return false;
+        } else {
+          int counter=0;
+          for (OsmPrimitive o:(OsmPrimitive[])referrers) {
+            if (dataSet == o.dataSet && o instanceof Way) {
+              counter++;
+            }
+          }
+          return counter>=n;
+        }
+    }
+
+
     /*-----------------
      * OTHER METHODS
      *----------------/
Index: src/org/openstreetmap/josm/data/osm/visitor/paint/MapPainter.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/visitor/paint/MapPainter.java	(revision 3652)
+++ src/org/openstreetmap/josm/data/osm/visitor/paint/MapPainter.java	(working copy)
@@ -215,11 +215,9 @@
      */
     public void drawNode(Node n, Color color, int size, boolean fill, String name) {
         if (size > 1) {
-            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 ((p.x < 0) || (p.y < 0) || (p.x > nc.getWidth()) || (p.y > nc.getHeight())) return;
+            int radius = size / 2;
 
             if (inactive || n.isDisabled()) {
                 g.setColor(inactiveColor);
@@ -227,8 +225,7 @@
                 g.setColor(color);
             }
             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: src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintVisitor.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintVisitor.java	(revision 3652)
+++ src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintVisitor.java	(working copy)
@@ -110,10 +110,11 @@
 
     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;
 
         ElemStyle nodeStyle = getPrimitiveStyle(n, false);
