Index: trunk/src/org/openstreetmap/josm/io/DiffResultProcessor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/DiffResultProcessor.java	(revision 7655)
+++ trunk/src/org/openstreetmap/josm/io/DiffResultProcessor.java	(revision 7656)
@@ -17,5 +17,6 @@
 
 import org.openstreetmap.josm.data.osm.Changeset;
-import org.openstreetmap.josm.data.osm.IPrimitive;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.PrimitiveId;
@@ -44,12 +45,11 @@
     private Map<PrimitiveId, DiffResultEntry> diffResults = new HashMap<>();
     /**
-     * the set of processed primitives *after* the new id, the new version and the new changeset id
-     * is set
+     * the set of processed primitives *after* the new id, the new version and the new changeset id is set
      */
-    private Set<IPrimitive> processed;
+    private Set<OsmPrimitive> processed;
     /**
      * the collection of primitives being uploaded
      */
-    private Collection<? extends IPrimitive> primitives;
+    private Collection<? extends OsmPrimitive> primitives;
 
     /**
@@ -59,5 +59,5 @@
      * assumes an empty collection.
      */
-    public DiffResultProcessor(Collection<? extends IPrimitive> primitives) {
+    public DiffResultProcessor(Collection<? extends OsmPrimitive> primitives) {
         if (primitives == null) {
             primitives = Collections.emptyList();
@@ -105,13 +105,15 @@
      * @return the collection of processed primitives
      */
-    protected Set<IPrimitive> postProcess(Changeset cs, ProgressMonitor monitor) {
+    protected Set<OsmPrimitive> postProcess(Changeset cs, ProgressMonitor monitor) {
         if (monitor == null) {
             monitor = NullProgressMonitor.INSTANCE;
         }
+        DataSet ds = primitives.iterator().next().getDataSet();
+        ds.beginUpdate();
         try {
             monitor.beginTask("Postprocessing uploaded data ...");
             monitor.setTicksCount(primitives.size());
             monitor.setTicks(0);
-            for (IPrimitive p : primitives) {
+            for (OsmPrimitive p : primitives) {
                 monitor.worked(1);
                 DiffResultEntry entry = diffResults.get(p.getPrimitiveId());
@@ -132,4 +134,5 @@
             return processed;
         } finally {
+            ds.endUpdate();
             monitor.finishTask();
         }
Index: trunk/src/org/openstreetmap/josm/io/OsmApi.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmApi.java	(revision 7655)
+++ trunk/src/org/openstreetmap/josm/io/OsmApi.java	(revision 7656)
@@ -31,4 +31,5 @@
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.IPrimitive;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.gui.layer.ImageryLayer;
@@ -387,5 +388,5 @@
      * @throws OsmTransferException if something goes wrong
      */
-    public void deletePrimitive(IPrimitive osm, ProgressMonitor monitor) throws OsmTransferException {
+    public void deletePrimitive(OsmPrimitive osm, ProgressMonitor monitor) throws OsmTransferException {
         ensureValidChangeset();
         initialize(monitor);
@@ -506,5 +507,5 @@
      * @throws OsmTransferException if something is wrong
      */
-    public Collection<IPrimitive> uploadDiff(Collection<? extends IPrimitive> list, ProgressMonitor monitor) throws OsmTransferException {
+    public Collection<OsmPrimitive> uploadDiff(Collection<? extends OsmPrimitive> list, ProgressMonitor monitor) throws OsmTransferException {
         try {
             monitor.beginTask("", list.size() * 2);
Index: trunk/src/org/openstreetmap/josm/io/OsmServerWritePostprocessor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmServerWritePostprocessor.java	(revision 7655)
+++ trunk/src/org/openstreetmap/josm/io/OsmServerWritePostprocessor.java	(revision 7656)
@@ -4,10 +4,10 @@
 import java.util.Collection;
 
-import org.openstreetmap.josm.data.osm.IPrimitive;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 
 public interface OsmServerWritePostprocessor {
 
-    public void postprocessUploadedPrimitives(Collection<IPrimitive> p, ProgressMonitor progress);
+    public void postprocessUploadedPrimitives(Collection<OsmPrimitive> p, ProgressMonitor progress);
 
 }
Index: trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 7655)
+++ trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 7656)
@@ -13,5 +13,5 @@
 
 import org.openstreetmap.josm.data.osm.Changeset;
-import org.openstreetmap.josm.data.osm.IPrimitive;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.gui.io.UploadStrategySpecification;
@@ -35,5 +35,5 @@
      * than where passed in the list to upload*.
      */
-    private Collection<IPrimitive> processed;
+    private Collection<OsmPrimitive> processed;
 
     private static List<OsmServerWritePostprocessor> postprocessors;
@@ -85,10 +85,10 @@
      * @throws OsmTransferException thrown if an exception occurs
      */
-    protected void uploadChangesIndividually(Collection<? extends IPrimitive> primitives, ProgressMonitor progressMonitor) throws OsmTransferException {
+    protected void uploadChangesIndividually(Collection<? extends OsmPrimitive> primitives, ProgressMonitor progressMonitor) throws OsmTransferException {
         try {
             progressMonitor.beginTask(tr("Starting to upload with one request per primitive ..."));
             progressMonitor.setTicksCount(primitives.size());
             uploadStartTime = System.currentTimeMillis();
-            for (IPrimitive osm : primitives) {
+            for (OsmPrimitive osm : primitives) {
                 int progress = progressMonitor.getTicks();
                 String time_left_str = timeLeft(progress, primitives.size());
@@ -127,5 +127,5 @@
      * @throws OsmTransferException thrown if an exception occurs
      */
-    protected void uploadChangesAsDiffUpload(Collection<? extends IPrimitive> primitives, ProgressMonitor progressMonitor) throws OsmTransferException {
+    protected void uploadChangesAsDiffUpload(Collection<? extends OsmPrimitive> primitives, ProgressMonitor progressMonitor) throws OsmTransferException {
         try {
             progressMonitor.beginTask(tr("Starting to upload in one request ..."));
@@ -147,11 +147,11 @@
      * @throws OsmTransferException thrown if an exception occurs
      */
-    protected void uploadChangesInChunks(Collection<? extends IPrimitive> primitives, ProgressMonitor progressMonitor, int chunkSize) throws OsmTransferException, IllegalArgumentException {
+    protected void uploadChangesInChunks(Collection<? extends OsmPrimitive> primitives, ProgressMonitor progressMonitor, int chunkSize) throws OsmTransferException, IllegalArgumentException {
         if (chunkSize <=0)
             throw new IllegalArgumentException(tr("Value >0 expected for parameter ''{0}'', got {1}", "chunkSize", chunkSize));
         try {
             progressMonitor.beginTask(tr("Starting to upload in chunks..."));
-            List<IPrimitive> chunk = new ArrayList<>(chunkSize);
-            Iterator<? extends IPrimitive> it = primitives.iterator();
+            List<OsmPrimitive> chunk = new ArrayList<>(chunkSize);
+            Iterator<? extends OsmPrimitive> it = primitives.iterator();
             int numChunks = (int)Math.ceil((double)primitives.size() / (double)chunkSize);
             int i= 0;
@@ -190,5 +190,5 @@
      * @throws OsmTransferException thrown if something goes wrong
      */
-    public void uploadOsm(UploadStrategySpecification strategy, Collection<? extends IPrimitive> primitives, Changeset changeset, ProgressMonitor monitor) throws OsmTransferException {
+    public void uploadOsm(UploadStrategySpecification strategy, Collection<? extends OsmPrimitive> primitives, Changeset changeset, ProgressMonitor monitor) throws OsmTransferException {
         CheckParameterUtil.ensureParameterNotNull(changeset, "changeset");
         processed = new LinkedList<>();
@@ -224,5 +224,5 @@
     }
 
-    void makeApiRequest(IPrimitive osm, ProgressMonitor progressMonitor) throws OsmTransferException {
+    void makeApiRequest(OsmPrimitive osm, ProgressMonitor progressMonitor) throws OsmTransferException {
         if (osm.isDeleted()) {
             api.deletePrimitive(osm, progressMonitor);
@@ -246,5 +246,5 @@
      * @return the collection of successfully processed primitives
      */
-    public Collection<IPrimitive> getProcessedPrimitives() {
+    public Collection<OsmPrimitive> getProcessedPrimitives() {
         return processed;
     }
