Index: /trunk/src/org/openstreetmap/josm/data/osm/BBox.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/BBox.java	(revision 15482)
+++ /trunk/src/org/openstreetmap/josm/data/osm/BBox.java	(revision 15483)
@@ -337,4 +337,34 @@
 
     /**
+     * Check if bboxes are functionally equal
+     * @param other The other bbox to compare with
+     * @param maxDifference The maximum difference (in degrees) between the bboxes. May be null.
+     * @return true if they are functionally equivalent
+     * @since 15483
+     */
+    public boolean bboxesAreFunctionallyEqual(BBox other, Double maxDifference) {
+        return bboxesAreFunctionallyEqual(this, other, maxDifference);
+    }
+
+    /**
+     * Check if bboxes are functionally equal
+     * @param bbox1 A bbox to compare with another bbox
+     * @param bbox2 The other bbox to compare with
+     * @param maxDifference The maximum difference (in degrees) between the bboxes. May be null.
+     * @return true if they are functionally equivalent
+     * @since 15483
+     */
+    public static boolean bboxesAreFunctionallyEqual(BBox bbox1, BBox bbox2, Double maxDifference) {
+        if (maxDifference == null) {
+            maxDifference = LatLon.MAX_SERVER_PRECISION;
+        }
+        return (bbox1 != null && bbox2 != null)
+                && (Math.abs(bbox1.getBottomRightLat() - bbox2.getBottomRightLat()) <= maxDifference
+                        && Math.abs(bbox1.getBottomRightLon() - bbox2.getBottomRightLon()) <= maxDifference
+                        && Math.abs(bbox1.getTopLeftLat() - bbox2.getTopLeftLat()) <= maxDifference
+                        && Math.abs(bbox1.getTopLeftLon() - bbox2.getTopLeftLon()) <= maxDifference);
+    }
+
+    /**
      * @return true if the bbox covers a part of the planets surface
      * Height and width must be non-negative, but may (both) be 0.
Index: /trunk/test/unit/org/openstreetmap/josm/data/osm/BBoxTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/osm/BBoxTest.java	(revision 15482)
+++ /trunk/test/unit/org/openstreetmap/josm/data/osm/BBoxTest.java	(revision 15483)
@@ -37,4 +37,24 @@
             .suppress(Warning.NONFINAL_FIELDS)
             .verify();
+    }
+
+    /**
+     * Unit test of method {@link BBox#bboxesAreFunctionallyEqual}
+     */
+    @Test
+    public void testBboxesAreFunctionallyEqual() {
+        BBox bbox1 = new BBox(0, 1, 1, 0);
+        BBox bbox2 = new BBox(0.1, 0.9, 0.9, 0.1);
+
+        assertFalse(BBox.bboxesAreFunctionallyEqual(bbox1, null, null));
+        assertFalse(BBox.bboxesAreFunctionallyEqual(null, bbox2, null));
+        assertFalse(BBox.bboxesAreFunctionallyEqual(null, null, null));
+
+        assertFalse(bbox1.bboxesAreFunctionallyEqual(bbox2, null));
+        assertTrue(bbox1.bboxesAreFunctionallyEqual(bbox2, 0.1));
+        bbox1.add(0, 1.1);
+        assertFalse(bbox1.bboxesAreFunctionallyEqual(bbox2, 0.1));
+        bbox1.add(2, 0);
+        assertFalse(bbox1.bboxesAreFunctionallyEqual(bbox2, 0.1));
     }
 
