Index: trunk/src/org/openstreetmap/josm/io/GeoJSONWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/GeoJSONWriter.java	(revision 6484)
+++ trunk/src/org/openstreetmap/josm/io/GeoJSONWriter.java	(revision 6485)
@@ -2,8 +2,10 @@
 package org.openstreetmap.josm.io;
 
+import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
 
 import org.json.JSONStringer;
+import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Changeset;
@@ -28,4 +30,6 @@
         out = new JSONStringer();
         out.object().key("type").value("FeatureCollection");
+        out.key("generator").value("JOSM");
+        appendLayerBounds();
         out.key("features").array();
         for (Node n : layer.data.getNodes()) {
@@ -62,8 +66,4 @@
     }
 
-    protected String escape(String s) {
-        return s.replace("\"", "\\\"").replace("\\", "\\\\").replace("\n", "\\n");
-    }
-
     protected void appendPrimitive(OsmPrimitive p) {
         if (p.isIncomplete()) {
@@ -91,3 +91,22 @@
         }
     }
+
+    protected void appendLayerBounds() {
+        Iterator<Bounds> it = layer.data.getDataSourceBounds().iterator();
+        if (it.hasNext()) {
+            Bounds b = new Bounds(it.next());
+            while (it.hasNext()) {
+                b.extend(it.next());
+            }
+            appendBounds(b);
+        }
+    }
+
+    protected void appendBounds(Bounds b) {
+        if (b != null) {
+            out.key("bbox").array()
+            .value(b.getMinLon()).value(b.getMinLat())
+            .value(b.getMaxLon()).value(b.getMaxLat()).endArray();
+        }
+    }
 }
