Index: /trunk/src/org/openstreetmap/josm/gui/io/UploadPrimitivesTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/io/UploadPrimitivesTask.java	(revision 13439)
+++ /trunk/src/org/openstreetmap/josm/gui/io/UploadPrimitivesTask.java	(revision 13440)
@@ -220,7 +220,17 @@
         // partially uploaded. Better run on EDT.
         Runnable r = () -> {
-            layer.cleanupAfterUpload(processedPrimitives);
-            layer.onPostUploadToServer();
-            ChangesetCache.getInstance().update(changeset);
+            boolean readOnly = layer.isReadOnly();
+            if (readOnly) {
+                layer.unsetReadOnly();
+            }
+            try {
+                layer.cleanupAfterUpload(processedPrimitives);
+                layer.onPostUploadToServer();
+                ChangesetCache.getInstance().update(changeset);
+            } finally {
+                if (readOnly) {
+                    layer.setReadOnly();
+                }
+            }
         };
 
Index: /trunk/src/org/openstreetmap/josm/io/DiffResultProcessor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/DiffResultProcessor.java	(revision 13439)
+++ /trunk/src/org/openstreetmap/josm/io/DiffResultProcessor.java	(revision 13440)
@@ -121,5 +121,10 @@
             ds = primitives.iterator().next().getDataSet();
         }
+        boolean readOnly = false;
         if (ds != null) {
+            readOnly = ds.isReadOnly();
+            if (readOnly) {
+                ds.unsetReadOnly();
+            }
             ds.beginUpdate();
         }
@@ -152,4 +157,7 @@
             if (ds != null) {
                 ds.endUpdate();
+                if (readOnly) {
+                    ds.setReadOnly();
+                }
             }
             monitor.finishTask();
