Index: /applications/editors/josm/plugins/livegps/livegps/LiveGpsAcquirer.java
===================================================================
--- /applications/editors/josm/plugins/livegps/livegps/LiveGpsAcquirer.java	(revision 3336)
+++ /applications/editors/josm/plugins/livegps/livegps/LiveGpsAcquirer.java	(revision 3337)
@@ -22,4 +22,6 @@
 	boolean shutdownFlag = false;
     private List<PropertyChangeListener> propertyChangeListener = new ArrayList<PropertyChangeListener>();
+    private PropertyChangeEvent lastStatusEvent;
+    private PropertyChangeEvent lastDataEvent;
 	
 	public LiveGpsAcquirer() {
@@ -45,5 +47,8 @@
     public void fireGpsStatusChangeEvent(LiveGpsStatus.GpsStatus status, String statusMessage) {
         PropertyChangeEvent event = new PropertyChangeEvent(this, "gpsstatus", null, new LiveGpsStatus(status, statusMessage));
-        firePropertyChangeEvent(event);
+        if(!event.equals(lastStatusEvent)) {
+            firePropertyChangeEvent(event);
+            lastStatusEvent = event;
+        }
     }
 
@@ -56,5 +61,8 @@
     public void fireGpsDataChangeEvent(LiveGpsData oldData, LiveGpsData newData) {
         PropertyChangeEvent event = new PropertyChangeEvent(this, "gpsdata", oldData, newData);
-        firePropertyChangeEvent(event);
+        if(!event.equals(lastDataEvent)) {
+            firePropertyChangeEvent(event);
+            lastDataEvent = event;
+        }
     }
     
@@ -84,4 +92,5 @@
 				if (!connected)
 				{
+				    System.out.println("LiveGps try to connect to gpsd");
                     fireGpsStatusChangeEvent(LiveGpsStatus.GpsStatus.CONNECTING, tr("Connecting"));
 					InetAddress[] addrs = InetAddress.getAllByName(gpsdHost);
@@ -99,5 +108,5 @@
 						gpsdReader = new BufferedReader(new InputStreamReader(gpsdSocket.getInputStream()));
 						gpsdSocket.getOutputStream().write(new byte[] { 'w', 13, 10 });
-                        fireGpsStatusChangeEvent(LiveGpsStatus.GpsStatus.CONNECTED, tr("Connected"));
+                        fireGpsStatusChangeEvent(LiveGpsStatus.GpsStatus.CONNECTING, tr("Connecting"));
 						connected = true;
 					}
@@ -106,5 +115,8 @@
 
                 if(connected) {
+                    // <FIXXME date="23.06.2007" author="cdaller">
+                    // TODO this read is blocking if gps is connected but has no fix, so gpsd does not send positions
                     String line = gpsdReader.readLine();
+                    // </FIXXME> 
                     if (line == null) break;
                     String words[] = line.split(",");
@@ -155,4 +167,5 @@
                             // not interested
                         }
+                        fireGpsStatusChangeEvent(LiveGpsStatus.GpsStatus.CONNECTED, tr("Connected"));
                         gpsData.setFix(haveFix);
                         if (haveFix) {
@@ -166,10 +179,13 @@
                 } else {
                     // not connected:
+                    fireGpsStatusChangeEvent(LiveGpsStatus.GpsStatus.DISCONNECTED, tr("Not connected"));
                     try { Thread.sleep(1000); } catch (InterruptedException ignore) {};
                 }
 			} catch(IOException iox) {
 				connected = false;
-                gpsData.setFix(false);
-                fireGpsDataChangeEvent(oldGpsData, gpsData);
+				if(gpsData != null) {
+				    gpsData.setFix(false);
+				    fireGpsDataChangeEvent(oldGpsData, gpsData);
+				}
                 fireGpsStatusChangeEvent(LiveGpsStatus.GpsStatus.CONNECTION_FAILED, tr("Connection Failed"));
 				try { Thread.sleep(1000); } catch (InterruptedException ignore) {};
@@ -178,5 +194,5 @@
 			}
 		}
-        fireGpsStatusChangeEvent(LiveGpsStatus.GpsStatus.DISCONNECTED, tr("Disconnected"));
+        fireGpsStatusChangeEvent(LiveGpsStatus.GpsStatus.DISCONNECTED, tr("Not connected"));
 		if (gpsdSocket != null) try { gpsdSocket.close(); } catch (Exception ignore) {};
 	}
