Index: /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsAcquirer.java
===================================================================
--- /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsAcquirer.java	(revision 32951)
+++ /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsAcquirer.java	(revision 32952)
@@ -11,4 +11,5 @@
 import java.net.InetAddress;
 import java.net.Socket;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
@@ -208,5 +209,5 @@
         gpsdSocket.getOutputStream().write(new byte[] { 'w', 13, 10 });
 
-        gpsdReader = new BufferedReader(new InputStreamReader(gpsdSocket.getInputStream()));
+        gpsdReader = new BufferedReader(new InputStreamReader(gpsdSocket.getInputStream(), StandardCharsets.UTF_8));
         line = gpsdReader.readLine();
         if (line == null)
@@ -231,11 +232,11 @@
 
         if (JSONProtocol == true) {
-            JsonObject Watch = Json.createObjectBuilder()
+            JsonObject watch = Json.createObjectBuilder()
                     .add("enable", true)
                     .add("json", true)
                     .build();
 
-            String Request = "?WATCH=" + Watch.toString() + ";\n";
-            gpsdSocket.getOutputStream().write(Request.getBytes());
+            String request = "?WATCH=" + watch.toString() + ";\n";
+            gpsdSocket.getOutputStream().write(request.getBytes(StandardCharsets.UTF_8));
 
             connected = true;
Index: /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsData.java
===================================================================
--- /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsData.java	(revision 32951)
+++ /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsData.java	(revision 32952)
@@ -138,7 +138,8 @@
     }
 
+    @Override
     public String toString() {
         return getClass().getSimpleName() + "[fix=" + fix + ", lat=" + latLon.lat()
-        + ", long=" + latLon.lon() + ", speed=" + speed + ", course=" + course + "]";
+        + ", long=" + latLon.lon() + ", speed=" + speed + ", course=" + course + ']';
     }
 
@@ -195,6 +196,5 @@
         if(way == null && Main.map != null && Main.map.mapView != null) {
             Point xy = Main.map.mapView.getPoint(getLatLon());
-            way = Main.map.mapView.getNearestWay(xy,
-                OsmPrimitive.isUsablePredicate);
+            way = Main.map.mapView.getNearestWay(xy, OsmPrimitive::isUsable);
         }
         return way;
Index: /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsDialog.java
===================================================================
--- /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsDialog.java	(revision 32951)
+++ /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsDialog.java	(revision 32952)
@@ -64,4 +64,5 @@
     }
 
+    @Override
     public void propertyChange(PropertyChangeEvent evt) {
         if (!isVisible())
Index: /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsLayer.java
===================================================================
--- /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsLayer.java	(revision 32951)
+++ /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsLayer.java	(revision 32952)
@@ -21,4 +21,6 @@
 import org.openstreetmap.josm.data.gpx.GpxTrack;
 import org.openstreetmap.josm.data.gpx.WayPoint;
+import org.openstreetmap.josm.data.preferences.CachingProperty;
+import org.openstreetmap.josm.data.preferences.ColorProperty;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
@@ -28,4 +30,7 @@
     public static final String C_LIVEGPS_COLOR_POSITION = "color.livegps.position";
     public static final String C_LIVEGPS_COLOR_POSITION_ESTIMATE = "color.livegps.position_estimate";
+
+    private static final CachingProperty<Color> COLOR_POSITION = new ColorProperty(C_LIVEGPS_COLOR_POSITION_ESTIMATE, Color.RED).cached();
+    private static final CachingProperty<Color> COLOR_POSITION_ESTIMATE = new ColorProperty(C_LIVEGPS_COLOR_POSITION_ESTIMATE, Color.CYAN).cached();
 
     private static final int DEFAULT_REFRESH_INTERVAL = 250;
@@ -122,5 +127,5 @@
          */
     
-        g.setColor(Main.pref.getColor(C_LIVEGPS_COLOR_POSITION_ESTIMATE, Color.CYAN));
+        g.setColor(COLOR_POSITION_ESTIMATE.get());
         int w, h;
         double ppm = 100 / mv.getDist100Pixel();    /* pixels per metre */
@@ -148,5 +153,5 @@
         float ccos240 = (float )Math.cos(Math.toRadians(course + 240));
     
-        g.setColor(Main.pref.getColor(C_LIVEGPS_COLOR_POSITION, Color.RED));
+        g.setColor(COLOR_POSITION.get());
     
         for (int i = 0; i < TriaThick; i++, TriaHeight--, TriaWidth--) {
@@ -166,4 +171,5 @@
     }
 
+    @Override
     public void propertyChange(PropertyChangeEvent evt) {
         if (!isVisible()) {
