Index: trunk/src/org/openstreetmap/josm/io/OsmWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmWriter.java	(revision 13483)
+++ trunk/src/org/openstreetmap/josm/io/OsmWriter.java	(revision 13485)
@@ -18,4 +18,5 @@
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.DataSet.DownloadPolicy;
 import org.openstreetmap.josm.data.osm.DataSet.UploadPolicy;
 import org.openstreetmap.josm.data.osm.INode;
@@ -90,19 +91,52 @@
     }
 
+    /**
+     * Writes OSM header with normal download and upload policies.
+     */
     public void header() {
-        header(UploadPolicy.NORMAL);
-    }
-
+        header(DownloadPolicy.NORMAL, UploadPolicy.NORMAL);
+    }
+
+    /**
+     * Writes OSM header with normal download policy and given upload policy.
+     * @deprecated Use {@link #header(DownloadPolicy, UploadPolicy)} instead
+     * @param upload upload policy
+     */
+    @Deprecated
     public void header(UploadPolicy upload) {
+        header(DownloadPolicy.NORMAL, upload);
+    }
+
+    /**
+     * Writes OSM header with given download upload policies.
+     * @param download download policy
+     * @param upload upload policy
+     * @since 13485
+     */
+    public void header(DownloadPolicy download, UploadPolicy upload) {
+        header(download, upload, false);
+    }
+
+    private void header(DownloadPolicy download, UploadPolicy upload, boolean locked) {
         out.println("<?xml version='1.0' encoding='UTF-8'?>");
         out.print("<osm version='");
         out.print(version);
+        if (download != null && download != DownloadPolicy.NORMAL) {
+            out.print("' download='");
+            out.print(download.getXmlFlag());
+        }
         if (upload != null && upload != UploadPolicy.NORMAL) {
             out.print("' upload='");
             out.print(upload.getXmlFlag());
         }
+        if (locked) {
+            out.print("' locked=true");
+        }
         out.println("' generator='JOSM'>");
     }
 
+    /**
+     * Writes OSM footer.
+     */
     public void footer() {
         out.println("</osm>");
@@ -135,5 +169,5 @@
      */
     public void write(DataSet data) {
-        header(data.getUploadPolicy());
+        header(data.getDownloadPolicy(), data.getUploadPolicy(), data.isLocked());
         writeDataSources(data);
         writeContent(data);
Index: trunk/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java	(revision 13483)
+++ trunk/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java	(revision 13485)
@@ -24,4 +24,6 @@
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.DataSet.DownloadPolicy;
+import org.openstreetmap.josm.data.osm.DataSet.UploadPolicy;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
@@ -158,5 +160,5 @@
              OsmWriter w = OsmWriterFactory.createOsmWriter(new PrintWriter(writer), false, ds.getVersion())
             ) {
-            w.header(DataSet.UploadPolicy.DISCOURAGED);
+            w.header(DownloadPolicy.NORMAL, UploadPolicy.DISCOURAGED);
             w.writeContent(ds);
             w.footer();
