Index: trunk/src/org/openstreetmap/josm/io/OsmApi.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmApi.java	(revision 10050)
+++ trunk/src/org/openstreetmap/josm/io/OsmApi.java	(revision 10051)
@@ -281,5 +281,5 @@
      * @return XML string
      */
-    private String toXml(IPrimitive o, boolean addBody) {
+    protected final String toXml(IPrimitive o, boolean addBody) {
         StringWriter swriter = new StringWriter();
         try (OsmWriter osmWriter = OsmWriterFactory.createOsmWriter(new PrintWriter(swriter), true, version)) {
@@ -302,5 +302,5 @@
      * @return XML string
      */
-    private String toXml(Changeset s) {
+    protected final String toXml(Changeset s) {
         StringWriter swriter = new StringWriter();
         try (OsmWriter osmWriter = OsmWriterFactory.createOsmWriter(new PrintWriter(swriter), true, version)) {
Index: trunk/src/org/openstreetmap/josm/io/OsmWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmWriter.java	(revision 10050)
+++ trunk/src/org/openstreetmap/josm/io/OsmWriter.java	(revision 10051)
@@ -239,8 +239,7 @@
 
     public void visit(Changeset cs) {
-        out.print("  <changeset ");
-        out.print(" id='"+cs.getId()+'\'');
+        out.print("  <changeset id='"+cs.getId()+'\'');
         if (cs.getUser() != null) {
-            out.print(" user='"+cs.getUser().getName() +'\'');
+            out.print(" user='"+ XmlWriter.encode(cs.getUser().getName()) +'\'');
             out.print(" uid='"+cs.getUser().getId() +'\'');
         }
