Index: /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 10890)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 10891)
@@ -1161,24 +1161,25 @@
         if (updateCount > 0) {
             updateCount--;
+            List<AbstractDatasetChangedEvent> eventsToFire = Collections.emptyList();
             if (updateCount == 0) {
-                List<AbstractDatasetChangedEvent> eventsCopy = new ArrayList<>(cachedEvents);
+                eventsToFire = new ArrayList<>(cachedEvents);
                 cachedEvents.clear();
+            }
+
+            if (!eventsToFire.isEmpty()) {
+                lock.readLock().lock();
                 lock.writeLock().unlock();
-
-                if (!eventsCopy.isEmpty()) {
-                    lock.readLock().lock();
-                    try {
-                        if (eventsCopy.size() < MAX_SINGLE_EVENTS) {
-                            for (AbstractDatasetChangedEvent event: eventsCopy) {
-                                fireEventToListeners(event);
-                            }
-                        } else if (eventsCopy.size() == MAX_EVENTS) {
-                            fireEventToListeners(new DataChangedEvent(this));
-                        } else {
-                            fireEventToListeners(new DataChangedEvent(this, eventsCopy));
+                try {
+                    if (eventsToFire.size() < MAX_SINGLE_EVENTS) {
+                        for (AbstractDatasetChangedEvent event: eventsToFire) {
+                            fireEventToListeners(event);
                         }
-                    } finally {
-                        lock.readLock().unlock();
+                    } else if (eventsToFire.size() == MAX_EVENTS) {
+                        fireEventToListeners(new DataChangedEvent(this));
+                    } else {
+                        fireEventToListeners(new DataChangedEvent(this, eventsToFire));
                     }
+                } finally {
+                    lock.readLock().unlock();
                 }
             } else {
