Index: trunk/src/org/openstreetmap/josm/Main.java
===================================================================
--- trunk/src/org/openstreetmap/josm/Main.java	(revision 5956)
+++ trunk/src/org/openstreetmap/josm/Main.java	(revision 5957)
@@ -65,4 +65,5 @@
 import org.openstreetmap.josm.gui.MainMenu;
 import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.gui.MapFrameListener;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.NavigatableComponent.ViewportData;
@@ -81,5 +82,4 @@
 import org.openstreetmap.josm.gui.util.RedirectInputMap;
 import org.openstreetmap.josm.io.OsmApi;
-import org.openstreetmap.josm.plugins.PluginHandler;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.I18n;
@@ -189,4 +189,6 @@
     private GettingStarted gettingStarted = new GettingStarted();
 
+    private static final Collection<MapFrameListener> mapFrameListeners = new ArrayList<MapFrameListener>();
+
     /**
      * Logging level (3 = debug, 2 = info, 1 = warn, 0 = none).
@@ -281,5 +283,7 @@
         Main.map = map;
 
-        PluginHandler.notifyMapFrameChanged(old, map);
+        for (MapFrameListener listener : mapFrameListeners ) {
+            listener.mapFrameInitialized(old, map);
+        }
         if (map == null && currentProgressMonitor != null) {
             currentProgressMonitor.showForegroundDialog();
@@ -1208,3 +1212,22 @@
     }
 
+    /**
+     * Registers a new {@code MapFrameListener} that will be notified of MapFrame changes
+     * @param listener The MapFrameListener
+     * @return {@code true} if the listeners collection changed as a result of the call
+     * @since 5957
+     */
+    public static boolean addMapFrameListener(MapFrameListener listener) {
+        return listener != null ? mapFrameListeners.add(listener) : false;
+    }
+
+    /**
+     * Unregisters the given {@code MapFrameListener} from MapFrame changes
+     * @param listener The MapFrameListener
+     * @return {@code true} if the listeners collection changed as a result of the call
+     * @since 5957
+     */
+    public static boolean removeMapFrameListener(MapFrameListener listener) {
+        return listener != null ? mapFrameListeners.remove(listener) : false;
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/MapFrameListener.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapFrameListener.java	(revision 5957)
+++ trunk/src/org/openstreetmap/josm/gui/MapFrameListener.java	(revision 5957)
@@ -0,0 +1,18 @@
+// License: GPL. See LICENSE file for details.
+package org.openstreetmap.josm.gui;
+
+/**
+ * Listener notified of MapFrame changes.
+ * @since 5957
+ */
+public interface MapFrameListener {
+
+    /**
+     * Called after Main.mapFrame is initalized. (After the first data is loaded).
+     * You can use this callback to tweak the newFrame to your needs, as example install
+     * an alternative Painter.
+     * @param oldFrame The old MapFrame
+     * @param newFrame The new MapFrame
+     */
+    public abstract void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame);
+}
Index: trunk/src/org/openstreetmap/josm/plugins/Plugin.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/Plugin.java	(revision 5956)
+++ trunk/src/org/openstreetmap/josm/plugins/Plugin.java	(revision 5957)
@@ -13,4 +13,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.gui.MapFrameListener;
 import org.openstreetmap.josm.gui.download.DownloadSelection;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
@@ -38,5 +39,5 @@
  * @author Immanuel.Scholz
  */
-public abstract class Plugin {
+public abstract class Plugin implements MapFrameListener {
 
     /**
@@ -83,9 +84,5 @@
     }
 
-    /**
-     * Called after Main.mapFrame is initalized. (After the first data is loaded).
-     * You can use this callback to tweak the newFrame to your needs, as example install
-     * an alternative Painter.
-     */
+    @Override
     public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {}
 
Index: trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 5956)
+++ trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 5957)
@@ -508,5 +508,7 @@
             if (klass != null) {
                 System.out.println(tr("loading plugin ''{0}'' (version {1})", plugin.name, plugin.localversion));
-                pluginList.add(plugin.load(klass));
+                PluginProxy pluginProxy = plugin.load(klass);
+                pluginList.add(pluginProxy);
+                Main.addMapFrameListener(pluginProxy);
             }
             msg = null;
@@ -919,16 +921,4 @@
     }
 
-    /**
-     * Notified loaded plugins about a new map frame
-     *
-     * @param old the old map frame
-     * @param map the new map frame
-     */
-    public static void notifyMapFrameChanged(MapFrame old, MapFrame map) {
-        for (PluginProxy plugin : pluginList) {
-            plugin.mapFrameInitialized(old, map);
-        }
-    }
-
     public static Object getPlugin(String name) {
         for (PluginProxy plugin : pluginList)
