Index: trunk/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java	(revision 17610)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java	(revision 17612)
@@ -41,12 +41,21 @@
 public class DuplicateNode extends Test {
 
-    private static class NodeHash implements Hash<Object, Object> {
-
-        private final double precision = Config.getPref().getDouble("validator.duplicatenodes.precision", 0.);
-
-        private LatLon roundCoord(LatLon coor) {
+    protected static class NodeHash implements Hash<Object, Object> {
+
+        /**
+         * Rounding on OSM server and via {@link LatLon#roundToOsmPrecision} sometimes differs in the last digit by 1.
+         * Thus, for the duplicate node test, we reduce the precision by one to find errors before uploading.
+         * @see LatLon#MAX_SERVER_INV_PRECISION
+         */
+        private final double precision =
+                1 / Config.getPref().getDouble("validator.duplicatenodes.precision", LatLon.MAX_SERVER_PRECISION * 10);
+
+        /**
+         * @see LatLon#roundToOsmPrecision
+         */
+        protected LatLon roundCoord(LatLon coor) {
             return new LatLon(
-                    Math.round(coor.lat() / precision) * precision,
-                    Math.round(coor.lon() / precision) * precision
+                    Math.round(coor.lat() * precision) / precision,
+                    Math.round(coor.lon() * precision) / precision
                     );
         }
