Index: trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 12873)
+++ trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 12876)
@@ -667,4 +667,18 @@
         return false;
     }
+    
+    /**
+     * Replies true if all nodes of the way are drawable, false otherwise.
+     * @return true if all nodes of the way are drawable, false otherwise.
+     * @since 12876
+     */
+    public boolean hasOnlyDrawableNodes() {
+        Node[] nodes = this.nodes;
+        for (Node node : nodes) {
+            if (!node.isDrawable())
+                return false;
+        }
+        return true;
+    }
 
     @Override
@@ -675,5 +689,5 @@
     @Override
     public boolean isDrawable() {
-        return super.isDrawable() && !hasIncompleteNodes();
+        return super.isDrawable() && hasOnlyDrawableNodes();
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 12873)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 12876)
@@ -1662,5 +1662,5 @@
         try {
             record.paintPrimitive(paintSettings, this);
-        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException | NullPointerException e) {
             throw BugReport.intercept(e).put("record", record);
         }
