Index: /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsPlugin.java
===================================================================
--- /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsPlugin.java	(revision 25789)
+++ /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsPlugin.java	(revision 25790)
@@ -28,11 +28,11 @@
 
 public class LiveGpsPlugin extends Plugin implements LayerChangeListener {
+    private boolean enabled = false;
     private LiveGpsAcquirer acquirer = null;
     private Thread acquirerThread = null;
-    private JMenu lgpsmenu;
+    private JMenu lgpsmenu = null;
     private JCheckBoxMenuItem lgpscapture;
     private JCheckBoxMenuItem lgpsautocenter;
     private LiveGpsDialog lgpsdialog;
-    List<PropertyChangeListener> listenerQueue;
 
     private GpxData data = new GpxData();
@@ -42,5 +42,5 @@
      * The LiveGpsSuppressor is queried, if an event shall be suppressed.
      */
-    private LiveGpsSuppressor suppressor;
+    private LiveGpsSuppressor suppressor = null;
 
     /**
@@ -106,11 +106,10 @@
 
     public void layerRemoved(Layer oldLayer) {
-        if (oldLayer == lgpslayer) {
-            enableTracking(false);
-            lgpscapture.setSelected(false);
-            removePropertyChangeListener(lgpslayer);
-            MapView.removeLayerChangeListener(this);
-            lgpslayer = null;
-        }
+        assert (oldLayer == lgpslayer);
+
+        enableTracking(false);
+        lgpscapture.setSelected(false);
+        MapView.removeLayerChangeListener(this);
+        lgpslayer = null;
     }
 
@@ -134,6 +133,5 @@
         lgpsautocenter = new JCheckBoxMenuItem(autoCenterAction);
         lgpsmenu.add(lgpsautocenter);
-        lgpsautocenter.setAccelerator(autoCenterAction.getShortcut()
-                .getKeyStroke());
+        lgpsautocenter.setAccelerator(autoCenterAction.getShortcut().getKeyStroke());
     }
 
@@ -165,80 +163,52 @@
      */
     public void enableTracking(boolean enable) {
-        if ((acquirer != null) && (!enable)) {
-            acquirer.shutdown();
-            acquirerThread = null;
-
-            // also stop the suppressor
-            if (suppressor != null) {
-                suppressor.shutdown();
-                suppressorThread = null;
-                if (lgpslayer != null) {
-                    lgpslayer.setSuppressor(null);
-                }
-            }
-        } else if (enable) {
-            // also start the suppressor
-            if (suppressor == null) {
-                suppressor = new LiveGpsSuppressor();
-            }
-            if (suppressorThread == null) {
-                suppressorThread = new Thread(suppressor);
-                suppressorThread.start();
-            }
-
-            if (acquirer == null) {
-                acquirer = new LiveGpsAcquirer();
-                if (lgpslayer == null) {
-                    lgpslayer = new LiveGpsLayer(data);
-                    Main.main.addLayer(lgpslayer);
-                    MapView.addLayerChangeListener(this);
-                    lgpslayer.setAutoCenter(isAutoCenter());
-                }
-                // connect layer with acquirer:
-                addPropertyChangeListener(lgpslayer);
-
-                // connect layer with suppressor:
-                lgpslayer.setSuppressor(suppressor);
-                // add all listeners that were added before the acquirer
-                // existed:
-                if (listenerQueue != null) {
-                    for (PropertyChangeListener listener : listenerQueue) {
-                        addPropertyChangeListener(listener);
-                    }
-                    listenerQueue.clear();
-                }
-            }
-            if (acquirerThread == null) {
-                acquirerThread = new Thread(acquirer);
-                acquirerThread.start();
-            }
-
-        }
-    }
-
-    /**
-     * Add a listener for gps events.
-     * @param listener the listener.
-     */
-    public void addPropertyChangeListener(PropertyChangeListener listener) {
-        if (acquirer != null) {
-            acquirer.addPropertyChangeListener(listener);
-        } else {
-            if (listenerQueue == null) {
-                listenerQueue = new ArrayList<PropertyChangeListener>();
-            }
-            listenerQueue.add(listener);
-        }
-    }
-
-    /**
-     * Remove a listener for gps events.
-     * @param listener the listener.
-     */
-    public void removePropertyChangeListener(PropertyChangeListener listener) {
-        if (acquirer != null)
-            acquirer.removePropertyChangeListener(listener);
-        else if (listenerQueue != null && listenerQueue.contains(listener))
-            listenerQueue.remove(listener);
+	
+        if (enable && !enabled) {
+            assert (suppressor == null);
+            assert (suppressorThread == null);
+            assert (acquirer == null);
+            assert (acquirerThread == null);
+
+            suppressor = new LiveGpsSuppressor();
+            suppressorThread = new Thread(suppressor);
+
+            acquirer = new LiveGpsAcquirer();
+            acquirerThread = new Thread(acquirer);
+
+	    if (lgpslayer == null) {
+		lgpslayer = new LiveGpsLayer(data);
+		Main.main.addLayer(lgpslayer);
+		MapView.addLayerChangeListener(this);
+		lgpslayer.setAutoCenter(isAutoCenter());
+	    }
+
+            lgpslayer.setSuppressor(suppressor);
+            acquirer.addPropertyChangeListener(lgpslayer);
+            acquirer.addPropertyChangeListener(lgpsdialog);
+
+            suppressorThread.start();
+            acquirerThread.start();
+
+	    enabled = true;
+
+        } else if (!enable && enabled) {
+	    assert (lgpslayer != null);
+            assert (suppressor != null);
+            assert (suppressorThread != null);
+            assert (acquirer != null);
+            assert (acquirerThread != null);
+
+	    acquirer.shutdown();
+	    acquirer = null;
+	    acquirerThread = null;
+
+            suppressor.shutdown();
+            suppressor = null;
+            suppressorThread = null;
+
+            lgpslayer.setSuppressor(null);
+
+	    enabled = false;
+	}
     }
 
@@ -248,10 +218,6 @@
     @Override
     public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
-        if (newFrame != null) {
-            // add dialog
+        if (newFrame != null)
             newFrame.addToggleDialog(lgpsdialog = new LiveGpsDialog(newFrame));
-            // connect listeners with acquirer:
-            addPropertyChangeListener(lgpsdialog);
-        }
     }
 
@@ -262,4 +228,3 @@
         return this.lgpsmenu;
     }
-
 }
