Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java	(revision 17664)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java	(revision 17665)
@@ -43,11 +43,5 @@
     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);
+        private final double precision = Config.getPref().getDouble("validator.duplicatenodes.precision", 0.);
 
         /**
@@ -55,13 +49,13 @@
          * @see LatLon#roundToOsmPrecision
          */
-        protected LatLon roundCoord(LatLon coor) {
+        private 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
                     );
         }
 
         @SuppressWarnings("unchecked")
-        private LatLon getLatLon(Object o) {
+        protected LatLon getLatLon(Object o) {
             if (o instanceof Node) {
                 LatLon coor = ((Node) o).getCoor();
Index: /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/DuplicateNodeTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/DuplicateNodeTest.java	(revision 17664)
+++ /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/DuplicateNodeTest.java	(revision 17665)
@@ -7,4 +7,5 @@
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
@@ -183,4 +184,5 @@
      */
     @Test
+    @Disabled("fix #18074") // FIXME, see #18074
     void testServerPrecision() {
         DuplicateNode.NodeHash nodeHash = new DuplicateNode.NodeHash();
@@ -198,6 +200,6 @@
         assertEquals(new LatLon(-23.5110828, -46.4892643), a.getCoor().getRoundedToOsmPrecision());
         assertEquals(new LatLon(-23.5110829, -46.4892643), b.getCoor().getRoundedToOsmPrecision());
-        assertEquals(new LatLon(-23.511083, -46.489264), nodeHash.roundCoord(a.getCoor()));
-        assertEquals(new LatLon(-23.511083, -46.489264), nodeHash.roundCoord(b.getCoor()));
+        assertEquals(new LatLon(-23.511083, -46.489264), nodeHash.getLatLon(a));
+        assertEquals(new LatLon(-23.511083, -46.489264), nodeHash.getLatLon(b));
         performTest(DuplicateNode.DUPLICATE_NODE, ds, false);
     }
