Index: trunk/src/org/openstreetmap/josm/data/osm/event/DataSetListener.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/event/DataSetListener.java	(revision 18791)
+++ trunk/src/org/openstreetmap/josm/data/osm/event/DataSetListener.java	(revision 18792)
@@ -64,3 +64,31 @@
      */
     void dataChanged(DataChangedEvent event);
+
+    /**
+     * Call each subevent of a {@link DataChangedEvent}. This should only ever be called from
+     * {@link #dataChanged(DataChangedEvent)}.
+     * @param event The event to call the individual elements from
+     * @implNote Implementors should decide what they want to do with {@code event == null},
+     * {@code event.getEvents() == null}, and {@code event.getEvents().isEmpty()}.
+     * @since 18792
+     */
+    default void dataChangedIndividualEvents(DataChangedEvent event) {
+        for (AbstractDatasetChangedEvent subEvent : event.getEvents()) {
+            if (subEvent instanceof PrimitivesAddedEvent) {
+                this.primitivesAdded((PrimitivesAddedEvent) subEvent);
+            } else if (subEvent instanceof PrimitivesRemovedEvent) {
+                this.primitivesRemoved((PrimitivesRemovedEvent) subEvent);
+            } else if (subEvent instanceof TagsChangedEvent) {
+                this.tagsChanged((TagsChangedEvent) subEvent);
+            } else if (subEvent instanceof NodeMovedEvent) {
+                this.nodeMoved((NodeMovedEvent) subEvent);
+            } else if (subEvent instanceof WayNodesChangedEvent) {
+                this.wayNodesChanged((WayNodesChangedEvent) subEvent);
+            } else if (subEvent instanceof RelationMembersChangedEvent) {
+                this.relationMembersChanged((RelationMembersChangedEvent) subEvent);
+            } else {
+                this.otherDatasetChange(subEvent);
+            }
+        }
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 18791)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 18792)
@@ -736,5 +736,11 @@
     @Override
     public void dataChanged(DataChangedEvent event) {
-        initFromData(MainApplication.getLayerManager().getActiveData());
+        // I have no clue how it would be empty, but just in case use the original code.
+        // {@code null} is used during initialization
+        if (event == null || Utils.isEmpty(event.getEvents())) {
+            initFromData(MainApplication.getLayerManager().getActiveData());
+        } else {
+            dataChangedIndividualEvents(event);
+        }
     }
 
Index: trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 18791)
+++ trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 18792)
@@ -649,5 +649,5 @@
 
     private static void alertJavaUpdateRequired(Component parent, String plugin, int requiredVersion) {
-        final ButtonSpec[] options = new ButtonSpec[] {
+        final ButtonSpec[] options = {
                 new ButtonSpec(tr("OK"), ImageProvider.get("ok"), tr("Click to close the dialog"), null),
                 new ButtonSpec(tr("Update Java"), ImageProvider.get("java"), tr("Update Java"), null)
