Index: src/org/openstreetmap/josm/data/osm/BBox.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/BBox.java	(revision 15479)
+++ src/org/openstreetmap/josm/data/osm/BBox.java	(working copy)
@@ -336,6 +336,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
+     */
+    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
+     */
+    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.
      * @since 11269
Index: test/unit/org/openstreetmap/josm/data/osm/BBoxTest.java
===================================================================
--- test/unit/org/openstreetmap/josm/data/osm/BBoxTest.java	(revision 15479)
+++ test/unit/org/openstreetmap/josm/data/osm/BBoxTest.java	(working copy)
@@ -39,6 +39,26 @@
     }
 
     /**
+     * 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));
+    }
+
+    /**
      * Test LatLon constructor which might result in invalid bbox
      */
     @Test
