Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java	(revision 2984)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java	(revision 2985)
@@ -274,5 +274,4 @@
             Main.main.undoRedo.add(cmd);
             RelationDialogManager.getRelationDialogManager().close(layer, toDelete);
-            layer.fireDataChange();
         }
     }
Index: /trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java	(revision 2984)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java	(revision 2985)
@@ -24,5 +24,5 @@
 
     /** the collection of conflicts created during merging */
-    private ConflictCollection conflicts;
+    private final ConflictCollection conflicts;
 
     /** the target dataset for merging */
@@ -35,10 +35,10 @@
      * Key is the primitive id in their dataset, the value is the id in my dataset
      */
-    private Map<Long, Long> mergedMap;
+    private final Map<Long, Long> mergedMap;
     /** a set of primitive ids for which we have to fix references (to nodes and
      * to relation members) after the first phase of merging
      */
-    private Set<PrimitiveId> objectsWithChildrenToMerge;
-    private Set<OsmPrimitive> deletedObjectsToUnlink;
+    private final Set<PrimitiveId> objectsWithChildrenToMerge;
+    private final Set<OsmPrimitive> deletedObjectsToUnlink;
 
     /**
Index: /trunk/src/org/openstreetmap/josm/data/osm/Filters.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Filters.java	(revision 2984)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Filters.java	(revision 2985)
@@ -1,5 +1,4 @@
 package org.openstreetmap.josm.data.osm;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trc;
 
Index: /trunk/src/org/openstreetmap/josm/data/osm/event/DataSetListener.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/event/DataSetListener.java	(revision 2984)
+++ /trunk/src/org/openstreetmap/josm/data/osm/event/DataSetListener.java	(revision 2985)
@@ -24,6 +24,6 @@
 /**
  * A listener listening for all DataSet changes.
- * INCOMPLETE (missing relation-related events)!
  *
+ * @see DataSetListenerAdapter
  * @author nenik
  */
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(revision 2984)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(revision 2985)
@@ -26,9 +26,11 @@
 import org.openstreetmap.josm.data.osm.Filter;
 import org.openstreetmap.josm.data.osm.Filters;
-import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
+import org.openstreetmap.josm.data.osm.event.DataSetListener;
+import org.openstreetmap.josm.data.osm.event.DataSetListenerAdapter;
+import org.openstreetmap.josm.data.osm.event.DatasetEventManager;
+import org.openstreetmap.josm.data.osm.event.DataSetListenerAdapter.Listener;
+import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
 import org.openstreetmap.josm.gui.SideButton;
-import org.openstreetmap.josm.gui.layer.DataChangeListener;
-import org.openstreetmap.josm.gui.layer.Layer;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -37,5 +39,6 @@
  * @author Petr_Dlouhý
  */
-public class FilterDialog extends ToggleDialog implements DataChangeListener, MapView.LayerChangeListener, TableModelListener {
+public class FilterDialog extends ToggleDialog implements Listener , TableModelListener {
+
     private JTable userTable;
     private Filters filters = new Filters();
@@ -46,4 +49,6 @@
     private SideButton downButton;
 
+    private final DataSetListener listenerAdapter = new DataSetListenerAdapter(this);
+
     public FilterDialog(){
         super(tr("Filter"), "filter", tr("Filter objects and hide/disable them."),
@@ -54,10 +59,10 @@
     @Override
     public void showNotify() {
-        MapView.addLayerChangeListener(this);
+        DatasetEventManager.getInstance().addDatasetListener(listenerAdapter, FireMode.IN_EDT_CONSOLIDATED);
     }
 
     @Override
     public void hideNotify() {
-        MapView.removeLayerChangeListener(this);
+        DatasetEventManager.getInstance().removeDatasetListener(listenerAdapter);
     }
 
@@ -182,21 +187,5 @@
     }
 
-    public void layerRemoved(Layer a) {
-        if (a instanceof OsmDataLayer) {
-            ((OsmDataLayer)a).listenerDataChanged.remove(this);
-        }
-    }
-
-    public void layerAdded(Layer a) {
-        if (a instanceof OsmDataLayer) {
-            ((OsmDataLayer)a).listenerDataChanged.add(this);
-        }
-    }
-
-    public void activeLayerChange(Layer oldLayer, Layer newLayer) {
-        filters.filter();
-    }
-
-    public void dataChanged(OsmDataLayer l){
+    public void processDatasetEvent(AbstractDatasetChangedEvent event) {
         filters.filter();
     }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationMemberTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationMemberTask.java	(revision 2984)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationMemberTask.java	(revision 2985)
@@ -100,5 +100,4 @@
                         public void run() {
                             curLayer.mergeFrom(dataSet);
-                            curLayer.fireDataChange();
                             curLayer.onPostDownloadFromServer();
                         }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationTask.java	(revision 2984)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationTask.java	(revision 2985)
@@ -100,5 +100,4 @@
                         public void run() {
                             layer.mergeFrom(allDownloads);
-                            layer.fireDataChange();
                             layer.onPostDownloadFromServer();
                             Main.map.repaint();
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 2984)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 2985)
@@ -115,5 +115,4 @@
         DataSet.selListeners.add(memberTableModel);
         getLayer().data.addDataSetListener(memberTableModel);
-        getLayer().listenerDataChanged.add(memberTableModel);
         selectionTableModel = new SelectionTableModel(getLayer());
         DataSet.selListeners.add(selectionTableModel);
@@ -1031,5 +1030,4 @@
             //
             getLayer().data.fireSelectionChanged();
-            getLayer().fireDataChange();
             GenericRelationEditor.this.setRelation(newRelation);
             RelationDialogManager.getRelationDialogManager().updateContext(
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 2984)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 2985)
@@ -43,8 +43,7 @@
 import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
 import org.openstreetmap.josm.gui.dialogs.relation.WayConnectionType.Direction;
-import org.openstreetmap.josm.gui.layer.DataChangeListener;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 
-public class MemberTableModel extends AbstractTableModel implements TableModelListener, SelectionChangedListener, DataChangeListener, DataSetListener{
+public class MemberTableModel extends AbstractTableModel implements TableModelListener, SelectionChangedListener, DataSetListener {
 
     /**
@@ -83,14 +82,4 @@
     }
 
-    /* --------------------------------------------------------------------------- */
-    /* Interface DataChangeListener                                                */
-    /* --------------------------------------------------------------------------- */
-    public void dataChanged(OsmDataLayer l) {
-        if (l != this.layer) return;
-        // just trigger a repaint
-        Collection<RelationMember> sel = getSelectedMembers();
-        fireTableDataChanged();
-        setSelectedMembers(sel);
-    }
     /* --------------------------------------------------------------------------- */
     /* Interface DataSetListener                                                   */
Index: /trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java	(revision 2984)
+++ /trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java	(revision 2985)
@@ -37,5 +37,4 @@
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
-import org.openstreetmap.josm.gui.layer.DataChangeListener;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
@@ -67,5 +66,5 @@
  * @see HistoryBrowser
  */
-public class HistoryBrowserModel extends Observable implements LayerChangeListener, DataSetListener, DataChangeListener {
+public class HistoryBrowserModel extends Observable implements LayerChangeListener, DataSetListener {
     //private static Logger logger = Logger.getLogger(HistoryBrowserModel.class.getName());
 
@@ -102,5 +101,4 @@
         if (getEditLayer() != null) {
             getEditLayer().data.addDataSetListener(this);
-            getEditLayer().listenerDataChanged.add(this);
         }
         MapView.addLayerChangeListener(this);
@@ -822,17 +820,5 @@
 
     public void dataChanged(DataChangedEvent event) {
-        dataChanged(getEditLayer());
-    }
-
-    public void otherDatasetChange(AbstractDatasetChangedEvent event) {
-        // Irrelevant
-    }
-
-    /* ---------------------------------------------------------------------- */
-    /* DataChangeListener                                                     */
-    /* ---------------------------------------------------------------------- */
-    public void dataChanged(OsmDataLayer l) {
-        if (l != getEditLayer()) return;
-        OsmPrimitive primitive = l.data.getPrimitiveById(history.getId(), history.getType());
+        OsmPrimitive primitive = event.getDataset().getPrimitiveById(history.getId(), history.getType());
         HistoryOsmPrimitive latest;
         if (canShowAsLatest(primitive)) {
@@ -843,4 +829,8 @@
         setLatest(latest);
         fireModelChange();
+    }
+
+    public void otherDatasetChange(AbstractDatasetChangedEvent event) {
+        // Irrelevant
     }
 
@@ -861,5 +851,4 @@
         OsmDataLayer l = (OsmDataLayer)newLayer;
         l.data.addDataSetListener(this);
-        l.listenerDataChanged.add(this);
         OsmPrimitive primitive = l.data.getPrimitiveById(history.getId(), history.getType());
         HistoryOsmPrimitive latest;
Index: /trunk/src/org/openstreetmap/josm/gui/layer/DataChangeListener.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/DataChangeListener.java	(revision 2984)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/DataChangeListener.java	(revision 2985)
@@ -2,6 +2,15 @@
 package org.openstreetmap.josm.gui.layer;
 
+import org.openstreetmap.josm.data.osm.event.DataSetListener;
+
+/**
+ * 
+ * 
+ * @deprecated Use {@link DataSetListener} instead
+ */
+@Deprecated
 public interface DataChangeListener {
 
+    @Deprecated
     public void dataChanged(OsmDataLayer l);
 
Index: /trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 2984)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 2985)
@@ -159,4 +159,9 @@
     private ConflictCollection conflicts;
 
+    /**
+     * @deprecated Use {@link DataSet#addDataSetListener(org.openstreetmap.josm.data.osm.event.DataSetListener)} instead
+     * @see DataSetListener, DatasetEventManager
+     */
+    @Deprecated
     public final LinkedList<DataChangeListener> listenerDataChanged = new LinkedList<DataChangeListener>();
 
