Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java	(revision 3783)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java	(revision 3784)
@@ -85,4 +85,5 @@
     protected static int DUPLICATE_NODE_MIXED = 2;
     protected static int DUPLICATE_NODE_OTHER = 3;
+    protected static int DUPLICATE_NODE_UNCLOSED = 4;
     protected static int DUPLICATE_NODE_BUILDING = 10;
     protected static int DUPLICATE_NODE_BOUNDARY = 11;
@@ -155,4 +156,6 @@
             if (mm.get(tagSet).size() > 1) {
 
+                boolean oneWayClosed = false;
+
                 for (String type: types) {
                     typeMap.put(type, false);
@@ -167,4 +170,5 @@
                                 boolean typed = false;
                                 Way w=(Way) sp;
+                                oneWayClosed = oneWayClosed || w.isClosed();
                                 Map<String, String> keys = w.getKeys();
                                 for (String type: typeMap.keySet()) {
@@ -190,5 +194,16 @@
                 }
 
-                if (nbType>1) {
+                if (!oneWayClosed) {
+                    String msg = marktr("Duplicate nodes in two un-closed ways");
+                    errors.add(new TestError(
+                            parentTest,
+                            Severity.WARNING,
+                            tr("Duplicated nodes"),
+                            tr(msg),
+                            msg,
+                            DUPLICATE_NODE_UNCLOSED,
+                            mm.get(tagSet)
+                    ));
+                } else if (nbType>1) {
                     String msg = marktr("Mixed type duplicated nodes");
                     errors.add(new TestError(
@@ -384,5 +399,11 @@
     @Override
     public boolean isFixable(TestError testError) {
-        return (testError.getTester() instanceof DuplicateNode && testError.getSeverity() == Severity.ERROR);
+        if (!(testError.getTester() instanceof DuplicateNode)) return false;
+        // never merge nodes with different tags.
+        if (testError.getCode() == DUPLICATE_NODE) return false;
+        // never merge nodes from two different non-closed geometries
+        if (testError.getCode() == DUPLICATE_NODE_UNCLOSED) return false;
+        // everything else is ok to merge
+        return true;
     }
 
