diff --git a/src/org/openstreetmap/josm/data/osm/Node.java b/src/org/openstreetmap/josm/data/osm/Node.java
index cefa750..2da03cd 100644
--- a/src/org/openstreetmap/josm/data/osm/Node.java
+++ b/src/org/openstreetmap/josm/data/osm/Node.java
@@ -177,7 +177,7 @@ public final class Node extends OsmPrimitive implements INode {
     @Override
     void setDataset(DataSet dataSet) {
         super.setDataset(dataSet);
-        if (!isIncomplete() && (getCoor() == null || getEastNorth() == null))
+        if (!isIncomplete() && isVisible() && (getCoor() == null || getEastNorth() == null))
             throw new DataIntegrityProblemException("Complete node with null coordinates: " + toString() + get3892DebugInfo());
     }
 
diff --git a/src/org/openstreetmap/josm/io/OsmReader.java b/src/org/openstreetmap/josm/io/OsmReader.java
index 16ba365..24977c6 100644
--- a/src/org/openstreetmap/josm/io/OsmReader.java
+++ b/src/org/openstreetmap/josm/io/OsmReader.java
@@ -177,7 +177,11 @@ public class OsmReader extends AbstractReader {
 
     protected Node parseNode() throws XMLStreamException {
         NodeData nd = new NodeData();
-        nd.setCoor(new LatLon(Double.parseDouble(parser.getAttributeValue(null, "lat")), Double.parseDouble(parser.getAttributeValue(null, "lon"))));
+        String lat = parser.getAttributeValue(null, "lat");
+        String lon = parser.getAttributeValue(null, "lon");
+        if (lat != null && lon != null) {
+            nd.setCoor(new LatLon(Double.parseDouble(lat), Double.parseDouble(lon)));
+        }
         readCommon(nd);
         Node n = new Node(nd.getId(), nd.getVersion());
         n.setVisible(nd.isVisible());
diff --git a/src/org/openstreetmap/josm/io/OsmWriter.java b/src/org/openstreetmap/josm/io/OsmWriter.java
index b2fecde..0f9b097 100644
--- a/src/org/openstreetmap/josm/io/OsmWriter.java
+++ b/src/org/openstreetmap/josm/io/OsmWriter.java
@@ -135,7 +135,9 @@ public class OsmWriter extends XmlWriter implements PrimitiveVisitor {
     public void visit(INode n) {
         if (n.isIncomplete()) return;
         addCommon(n, "node");
-        out.print(" lat='"+n.getCoor().lat()+"' lon='"+n.getCoor().lon()+"'");
+        if (n.getCoor() != null) {
+            out.print(" lat='"+n.getCoor().lat()+"' lon='"+n.getCoor().lon()+"'");
+        }
         if (!withBody) {
             out.println("/>");
         } else {
