Index: /trunk/src/org/openstreetmap/josm/data/osm/PrimitiveData.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/PrimitiveData.java	(revision 10945)
+++ /trunk/src/org/openstreetmap/josm/data/osm/PrimitiveData.java	(revision 10946)
@@ -30,12 +30,24 @@
     }
 
+    /**
+     * Constructs a new {@code PrimitiveData} from an existing one.
+     * @param data the data to copy
+     */
     public PrimitiveData(PrimitiveData data) {
         cloneFrom(data);
     }
 
+    /**
+     * Sets the primitive identifier.
+     * @param id primitive identifier
+     */
     public void setId(long id) {
         this.id = id;
     }
 
+    /**
+     * Sets the primitive version.
+     * @param version primitive version
+     */
     public void setVersion(int version) {
         this.version = version;
@@ -50,4 +62,8 @@
     }
 
+    /**
+     * Returns a copy of this primitive data.
+     * @return a copy of this primitive data
+     */
     public abstract PrimitiveData makeCopy();
 
@@ -82,4 +98,5 @@
         oos.writeInt(timestamp);
         oos.writeObject(keys);
+        oos.writeShort(flags);
         oos.defaultWriteObject();
     }
@@ -94,4 +111,5 @@
         timestamp = ois.readInt();
         keys = (String[]) ois.readObject();
+        flags = ois.readShort();
         ois.defaultReadObject();
     }
Index: /trunk/test/unit/org/openstreetmap/josm/data/osm/NodeDataTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/osm/NodeDataTest.java	(revision 10945)
+++ /trunk/test/unit/org/openstreetmap/josm/data/osm/NodeDataTest.java	(revision 10946)
@@ -2,6 +2,10 @@
 package org.openstreetmap.josm.data.osm;
 
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
@@ -12,4 +16,15 @@
 
 public class NodeDataTest {
+
+    private static NodeData serializeUnserialize(NodeData data) throws IOException, ClassNotFoundException {
+        try (ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+             ObjectOutputStream out = new ObjectOutputStream(bytes)) {
+            out.writeObject(data);
+            try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes.toByteArray()))) {
+                return (NodeData) in.readObject();
+            }
+        }
+    }
+
     @Test
     public void testSerializationForDragAndDrop() throws Exception {
@@ -19,13 +34,26 @@
         data.setVersion(14);
         data.setChangesetId(314159);
-        final Object readData;
-        try (ByteArrayOutputStream bytes = new ByteArrayOutputStream();
-             ObjectOutputStream out = new ObjectOutputStream(bytes)) {
-            out.writeObject(data);
-            try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes.toByteArray()))) {
-                readData = in.readObject();
-            }
-        }
+        final NodeData readData = serializeUnserialize(data);
         Assert.assertEquals(data.toString(), readData.toString());
     }
+
+    /**
+     * Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/13395">#13395</a>.
+     * @throws Exception if an error occurs
+     */
+    @Test
+    public void testTicket13395() throws Exception {
+        Node n = new Node(1925320646, 1);
+        n.setCoor(null);
+        assertNull(n.getCoor());
+        assertTrue(n.isIncomplete());
+
+        NodeData data = n.save();
+        assertNull(data.getCoor());
+        assertTrue(data.isIncomplete());
+
+        NodeData readData = serializeUnserialize(data);
+        assertNull(readData.getCoor());
+        assertTrue(readData.isIncomplete());
+    }
 }
