Index: org/openstreetmap/josm/data/osm/BBox.java
===================================================================
--- org/openstreetmap/josm/data/osm/BBox.java	(revision 10819)
+++ org/openstreetmap/josm/data/osm/BBox.java	(working copy)
@@ -290,4 +290,16 @@
                 LatLon.cDdFormatter.format(xmax),
                 LatLon.cDdFormatter.format(ymax)));
     }
+
+    /**
+     * @return true if the bbox covers a part of the planets surface
+     * Height and width must be non-negative, but may (both) be 0.
+     */
+    public boolean isValid() {
+        if (xmin > xmax || ymin > ymax)
+            return false;
+        if (xmin < -180.0 || xmax > 180.0 || ymin < -90.0 || ymax > 90.0)
+            return false;
+        return true;
+    }
 }
Index: org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- org/openstreetmap/josm/data/osm/Relation.java	(revision 10819)
+++ org/openstreetmap/josm/data/osm/Relation.java	(working copy)
@@ -455,7 +455,18 @@
         else {
             BBox result = null;
             for (RelationMember rm:members) {
-                BBox box = rm.isRelation() ? rm.getRelation().calculateBBox(visitedRelations) : rm.getMember().getBBox();
+                BBox box = null;
+                if (rm.isRelation())
+                    box = rm.getRelation().calculateBBox(visitedRelations);
+                else if (rm.isWay()) {
+                    box = rm.getWay().getBBox();
+                    if (!box.isValid())
+                        box = null;
+                } else if (rm.isNode()) {
+                    Node n = rm.getNode();
+                    if (n.getCoor() != null)
+                        box = n.getBBox();
+                }
                 if (box != null) {
                     if (result == null) {
                         result = box;
