Index: applications/editors/josm/plugins/seachart/.settings/org.eclipse.jdt.ui.prefs
===================================================================
--- applications/editors/josm/plugins/seachart/.settings/org.eclipse.jdt.ui.prefs	(revision 32906)
+++ applications/editors/josm/plugins/seachart/.settings/org.eclipse.jdt.ui.prefs	(revision 32907)
@@ -16,5 +16,5 @@
 sp_cleanup.convert_functional_interfaces=false
 sp_cleanup.convert_to_enhanced_for_loop=false
-sp_cleanup.correct_indentation=true
+sp_cleanup.correct_indentation=false
 sp_cleanup.format_source_code=false
 sp_cleanup.format_source_code_changes_only=false
Index: applications/editors/josm/plugins/seachart/jbasemap/src/jbasemap/Jbasemap.java
===================================================================
--- applications/editors/josm/plugins/seachart/jbasemap/src/jbasemap/Jbasemap.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/jbasemap/src/jbasemap/Jbasemap.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package jbasemap;
 
@@ -22,12 +14,22 @@
 import org.w3c.dom.Document;
 
+import render.ChartContext;
+import render.Renderer;
 import s57.S57map;
+import s57.S57map.Feature;
+import s57.S57map.GeomIterator;
+import s57.S57map.Pflag;
+import s57.S57map.Snode;
 import s57.S57obj.Obj;
 import s57.S57osm;
-import s57.S57map.*;
-import symbols.*;
-import render.*;
+import symbols.Symbols;
 
-public class Jbasemap {
+/**
+ * @author Malcolm Herring
+ */
+public final class Jbasemap {
+    private Jbasemap() {
+        // Hide default constructor for utilities classes
+    }
 
     static String src;
@@ -39,13 +41,14 @@
 
     static class Context implements ChartContext {
-        
-      static double top = 0;
-      static double mile = 0;
-      
-      public Context () {
+
+        static double top = 0;
+        static double mile = 0;
+
+        Context() {
             top = (1.0 - Math.log(Math.tan(map.bounds.maxlat) + 1.0 / Math.cos(map.bounds.maxlat)) / Math.PI) / 2.0 * 256.0 * z2;
             mile = 256 / ((Math.toDegrees(map.bounds.maxlat) - Math.toDegrees(map.bounds.minlat)) * 60);
-      }
-      
+        }
+
+        @Override
         public Point2D getPoint(Snode coord) {
             double x = (Math.toDegrees(coord.lon) - Math.toDegrees(map.bounds.minlon)) * 256.0 * (z2 / 2) / 180.0;
@@ -54,12 +57,15 @@
         }
 
+        @Override
         public double mile(Feature feature) {
             return mile;
         }
 
+        @Override
         public boolean clip() {
             return true;
         }
 
+        @Override
         public Color background(S57map map) {
             if (map.features.containsKey(Obj.COALNE)) {
@@ -76,5 +82,6 @@
                             if (node == null)
                                 continue;
-                            if ((node.lat >= map.bounds.minlat) && (node.lat <= map.bounds.maxlat) && (node.lon >= map.bounds.minlon) && (node.lon <= map.bounds.maxlon)) {
+                            if ((node.lat >= map.bounds.minlat) && (node.lat <= map.bounds.maxlat)
+                             && (node.lon >= map.bounds.minlon) && (node.lon <= map.bounds.maxlon)) {
                                 return Symbols.Bwater;
                             }
@@ -84,5 +91,6 @@
                 return Symbols.Yland;
             } else {
-                if (map.features.containsKey(Obj.ROADWY) || map.features.containsKey(Obj.RAILWY) || map.features.containsKey(Obj.LAKARE) || map.features.containsKey(Obj.RIVERS) || map.features.containsKey(Obj.CANALS)) {
+                if (map.features.containsKey(Obj.ROADWY) || map.features.containsKey(Obj.RAILWY) || map.features.containsKey(Obj.LAKARE) ||
+                    map.features.containsKey(Obj.RIVERS) || map.features.containsKey(Obj.CANALS)) {
                     return Symbols.Yland;
                 } else {
@@ -92,9 +100,10 @@
         }
 
+        @Override
         public RuleSet ruleset() {
             return RuleSet.BASE;
         }
     }
-    
+
     public static void main(String[] args) throws IOException {
         if (args.length < 5) {
Index: applications/editors/josm/plugins/seachart/jicons/src/jicons/Jicons.java
===================================================================
--- applications/editors/josm/plugins/seachart/jicons/src/jicons/Jicons.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/jicons/src/jicons/Jicons.java	(revision 32907)
@@ -1,13 +1,11 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package jicons;
 
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
 import java.io.BufferedReader;
 import java.io.File;
@@ -17,25 +15,27 @@
 import java.io.OutputStreamWriter;
 import java.io.Writer;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Graphics2D;
-import java.awt.Rectangle;
-import java.awt.geom.Point2D;
-import java.awt.image.BufferedImage;
 
 import javax.imageio.ImageIO;
 
+import org.apache.batik.dom.GenericDOMImplementation;
 import org.apache.batik.svggen.SVGGraphics2D;
 import org.apache.batik.svggen.SVGGraphics2DIOException;
-import org.apache.batik.dom.GenericDOMImplementation;
+import org.w3c.dom.DOMImplementation;
 import org.w3c.dom.Document;
-import org.w3c.dom.DOMImplementation;
-
+
+import render.ChartContext;
+import render.Renderer;
 import s57.S57map;
-import s57.S57map.*;
-import render.*;
-
-public class Jicons {
-    
+import s57.S57map.Feature;
+import s57.S57map.Snode;
+
+/**
+ * @author Malcolm Herring
+ */
+public final class Jicons {
+    private Jicons() {
+        // Hide default constructor for utilities classes
+    }
+
     static int x = 0;
     static int y = 0;
@@ -58,5 +58,5 @@
         boolean inIcons = false;
         boolean inIcon = false;
-        
+
         if (args.length < 2) {
             System.err.println("Usage: java -jar jicons.jar icon_definition_file icons_directory");
@@ -64,5 +64,5 @@
         }
         in = new BufferedReader(new FileReader(args[0]));
-        
+
         context = new Context();
         String ln;
@@ -188,23 +188,28 @@
         System.exit(0);
     }
-    
+
     static class Context implements ChartContext {
-        
+
+        @Override
         public Point2D getPoint(Snode coord) {
             return new Point2D.Double(x, y);
         }
 
+        @Override
         public double mile(Feature feature) {
             return Math.min(w, h);
         }
 
+        @Override
         public boolean clip() {
             return false;
         }
 
+        @Override
         public Color background(S57map map) {
             return new Color(0, true);
         }
 
+        @Override
         public RuleSet ruleset() {
             return RuleSet.ALL;
Index: applications/editors/josm/plugins/seachart/josmtos57/src/josmtos57/Josmtos57.java
===================================================================
--- applications/editors/josm/plugins/seachart/josmtos57/src/josmtos57/Josmtos57.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/josmtos57/src/josmtos57/Josmtos57.java	(revision 32907)
@@ -1,32 +1,40 @@
-/* Copyright 2015 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package josmtos57;
 
-import java.io.*;
-import java.util.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Scanner;
 import java.util.zip.CRC32;
 
 import s57.S57dat;
+import s57.S57dat.Fparams;
+import s57.S57dat.S57field;
 import s57.S57enc;
 import s57.S57map;
 import s57.S57osm;
-import s57.S57dat.*;
 
-public class Josmtos57 {
+/**
+ * @author Malcolm Herring
+ */
+public final class Josmtos57 {
+    private Josmtos57() {
+        // Hide default constructor for utilities classes
+    }
 
     // http://opendatacommons.org/licenses/odbl/1-0/
-    
+
     /*
     URL website = new URL("http://www.website.com/information.asp");
     try (InputStream in = website.openStream()) { Files.copy(in, target, StandardCopyOption.REPLACE_EXISTING); }
      */
-    
+
     /*
      * To do:
@@ -37,19 +45,21 @@
 
     static byte[] header = {
-        '0', '0', '2', '6', '2', '3', 'L', 'E', '1', ' ', '0', '9', '0', '0', '0', '7', '3', ' ', ' ', ' ', '6', '6', '0', '4', '0', '0', '0', '0', '0', '0', '0', '0',
-        '1', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '4', '8', '0', '0', '0', '0', '1', '9', 'C', 'A', 'T', 'D', '0', '0', '0', '1',
-        '2', '2', '0', '0', '0', '0', '6', '7', 0x1e, '0', '0', '0', '0', ';', '&', ' ', ' ', ' ', 0x1f, '0', '0', '0', '1', 'C', 'A', 'T', 'D', 0x1e, '0', '1', '0', '0',
-        ';', '&', ' ', ' ', ' ', 'I', 'S', 'O', '/', 'I', 'E', 'C', ' ', '8', '2', '1', '1', ' ', 'R', 'e', 'c', 'o', 'r', 'd', ' ', 'I', 'd', 'e', 'n', 't', 'i', 'f',
-        'i', 'e', 'r', 0x1f, 0x1f, '(', 'I', '(', '5', ')', ')', 0x1e, '1', '6', '0', '0', ';', '&', ' ', ' ', ' ', 'C', 'a', 't', 'a', 'l', 'o', 'g', 'u', 'e', ' ', 'D',
-        'i', 'r', 'e', 'c', 't', 'o', 'r', 'y', ' ', 'F', 'i', 'e', 'l', 'd', 0x1f, 'R', 'C', 'N', 'M', '!', 'R', 'C', 'I', 'D', '!', 'F', 'I', 'L', 'E', '!', 'L', 'F',
-        'I', 'L', '!', 'V', 'O', 'L', 'M', '!', 'I', 'M', 'P', 'L', '!', 'S', 'L', 'A', 'T', '!', 'W', 'L', 'O', 'N', '!', 'N', 'L', 'A', 'T', '!', 'E', 'L', 'O', 'N',
-        '!', 'C', 'R', 'C', 'S', '!', 'C', 'O', 'M', 'T', 0x1f, '(', 'A', '(', '2', ')', ',', 'I', '(', '1', '0', ')', ',', '3', 'A', ',', 'A', '(', '3', ')', ',', '4',
-        'R', ',', '2', 'A', ')', 0x1e, 
-        '0', '0', '1', '0', '1', ' ', 'D', ' ', ' ', ' ', ' ', ' ', '0', '0', '0', '5', '3', ' ', ' ', ' ', '5', '5', '0', '4',
-        '0', '0', '0', '1', '0', '0', '0', '0', '6', '0', '0', '0', '0', '0',   'C', 'A', 'T', 'D', '0', '0', '0', '4', '2', '0', '0', '0', '0', '6', 0x1e,
-        '0', '0', '0', '0', '0', 0x1e, 'C', 'D', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', 'C', 'A', 'T', 'A', 'L', 'O', 'G', '.', '0', '3', '1', 0x1f,
-        0x1f, 'V', '0', '1', 'X', '0', '1', 0x1f, 'A', 'S', 'C', 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1e
+            // CHECKSTYLE.OFF: LineLength
+            '0', '0', '2', '6', '2', '3', 'L', 'E', '1', ' ', '0', '9', '0', '0', '0', '7', '3', ' ', ' ', ' ', '6', '6', '0', '4', '0', '0', '0', '0', '0', '0', '0', '0',
+            '1', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '4', '8', '0', '0', '0', '0', '1', '9', 'C', 'A', 'T', 'D', '0', '0', '0', '1',
+            '2', '2', '0', '0', '0', '0', '6', '7', 0x1e, '0', '0', '0', '0', ';', '&', ' ', ' ', ' ', 0x1f, '0', '0', '0', '1', 'C', 'A', 'T', 'D', 0x1e, '0', '1', '0', '0',
+            ';', '&', ' ', ' ', ' ', 'I', 'S', 'O', '/', 'I', 'E', 'C', ' ', '8', '2', '1', '1', ' ', 'R', 'e', 'c', 'o', 'r', 'd', ' ', 'I', 'd', 'e', 'n', 't', 'i', 'f',
+            'i', 'e', 'r', 0x1f, 0x1f, '(', 'I', '(', '5', ')', ')', 0x1e, '1', '6', '0', '0', ';', '&', ' ', ' ', ' ', 'C', 'a', 't', 'a', 'l', 'o', 'g', 'u', 'e', ' ', 'D',
+            'i', 'r', 'e', 'c', 't', 'o', 'r', 'y', ' ', 'F', 'i', 'e', 'l', 'd', 0x1f, 'R', 'C', 'N', 'M', '!', 'R', 'C', 'I', 'D', '!', 'F', 'I', 'L', 'E', '!', 'L', 'F',
+            'I', 'L', '!', 'V', 'O', 'L', 'M', '!', 'I', 'M', 'P', 'L', '!', 'S', 'L', 'A', 'T', '!', 'W', 'L', 'O', 'N', '!', 'N', 'L', 'A', 'T', '!', 'E', 'L', 'O', 'N',
+            '!', 'C', 'R', 'C', 'S', '!', 'C', 'O', 'M', 'T', 0x1f, '(', 'A', '(', '2', ')', ',', 'I', '(', '1', '0', ')', ',', '3', 'A', ',', 'A', '(', '3', ')', ',', '4',
+            'R', ',', '2', 'A', ')', 0x1e,
+            '0', '0', '1', '0', '1', ' ', 'D', ' ', ' ', ' ', ' ', ' ', '0', '0', '0', '5', '3', ' ', ' ', ' ', '5', '5', '0', '4',
+            '0', '0', '0', '1', '0', '0', '0', '0', '6', '0', '0', '0', '0', '0', 'C', 'A', 'T', 'D', '0', '0', '0', '4', '2', '0', '0', '0', '0', '6', 0x1e,
+            '0', '0', '0', '0', '0', 0x1e, 'C', 'D', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', 'C', 'A', 'T', 'A', 'L', 'O', 'G', '.', '0', '3', '1', 0x1f,
+            0x1f, 'V', '0', '1', 'X', '0', '1', 0x1f, 'A', 'S', 'C', 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1e
+            // CHECKSTYLE.ON: LineLength
     };
-    
+
     static BufferedReader in;
     static FileOutputStream out;
@@ -59,10 +69,10 @@
     static ArrayList<Fparams> fields;
     static byte[] record;
-    
+
     public static void main(String[] args) throws IOException {
 
         map = new S57map(false);
         int idx = 0;
-        
+
         if (args.length < 4) {
             System.err.println("Usage: java -jar josmtos57.jar OSM_filename meta_data_filename S57_ENC_ROOT_directory S57_filename");
@@ -96,5 +106,5 @@
             System.exit(-1);
         }
-        
+
         try {
             buf = new byte[5242880];
@@ -107,5 +117,5 @@
             System.exit(-1);
         }
-        
+
         CRC32 crc = new CRC32();
         crc.update(buf, 0, idx);
@@ -120,5 +130,5 @@
         }
         out.close();
-        
+
         buf = new byte[header.length];
         System.arraycopy(header, 0, buf, 0, header.length);
@@ -126,6 +136,7 @@
         int recs = 2;
         fields = new ArrayList<>();
-        fields.add(new Fparams(S57field.CATD, new Object[]{ "CD", recs, args[3], "", "V01X01", "BIN", Math.toDegrees(map.bounds.minlat),
-                Math.toDegrees(map.bounds.minlon), Math.toDegrees(map.bounds.maxlat), Math.toDegrees(map.bounds.maxlon), String.format("%08X", crc.getValue()), "" }));
+        fields.add(new Fparams(S57field.CATD, new Object[]{"CD", recs, args[3], "", "V01X01", "BIN", Math.toDegrees(map.bounds.minlat),
+                Math.toDegrees(map.bounds.minlon), Math.toDegrees(map.bounds.maxlat), Math.toDegrees(map.bounds.maxlon),
+                String.format("%08X", crc.getValue()), ""}));
         record = S57dat.encRecord(String.valueOf(recs++), fields);
         buf = Arrays.copyOf(buf, (buf.length + record.length));
@@ -144,9 +155,9 @@
         out.close();
 
-//        String[] dir = (new File(args[2]).list());
-//        for (String item : dir) {
-//            System.err.println(item);
-//        }
-        
+        //        String[] dir = (new File(args[2]).list());
+        //        for (String item : dir) {
+        //            System.err.println(item);
+        //        }
+
         System.err.println("Finished");
     }
Index: applications/editors/josm/plugins/seachart/jplotter/src/jplotter/Jplotter.java
===================================================================
--- applications/editors/josm/plugins/seachart/jplotter/src/jplotter/Jplotter.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/jplotter/src/jplotter/Jplotter.java	(revision 32907)
@@ -1,8 +1,19 @@
+// License: GPL. For details, see LICENSE file.
 package jplotter;
 
-import java.awt.*;
-import javax.swing.*;
+import java.awt.BorderLayout;
+import java.awt.Container;
 
-public class Jplotter {
+import javax.swing.BorderFactory;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+/**
+ * @author Malcolm Herring
+ */
+public final class Jplotter {
+    private Jplotter() {
+        // Hide default constructor for utilities classes
+    }
 
     public static void main(String[] args) {
Index: applications/editors/josm/plugins/seachart/jrender/src/jrender/Jrender.java
===================================================================
--- applications/editors/josm/plugins/seachart/jrender/src/jrender/Jrender.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/jrender/src/jrender/Jrender.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package jrender;
 
@@ -27,10 +19,18 @@
 import javax.imageio.ImageIO;
 
+import render.ChartContext;
+import render.Renderer;
 import s57.S57map;
+import s57.S57map.Feature;
+import s57.S57map.Snode;
 import s57.S57osm;
-import s57.S57map.*;
-import render.*;
 
-public class Jrender {
+/**
+ * @author Malcolm Herring
+ */
+public final class Jrender {
+    private Jrender() {
+        // Hide default constructor for utilities classes
+    }
 
     static String srcdir;
@@ -46,39 +46,47 @@
 
     static class Context implements ChartContext {
-        
-      static double top;
-      static double mile;
-      
-      public Context () {
-            top = (1.0 - Math.log(Math.tan(map.bounds.maxlat) + 1.0 / Math.cos(map.bounds.maxlat)) / Math.PI) / 2.0 * 256.0 * 4096.0 * Math.pow(2, (zoom - 12));
-            mile = (2 * ((zoom < 12) ? (256 / (int)(Math.pow(2, (11 - zoom)))) : 256) + 256) / ((Math.toDegrees(map.bounds.maxlat) - Math.toDegrees(map.bounds.minlat)) * 60);
-      }
-      
+
+        static double top;
+        static double mile;
+
+        Context() {
+            top = (1.0 - Math.log(Math.tan(map.bounds.maxlat) + 1.0 / Math.cos(map.bounds.maxlat)) / Math.PI)
+                    / 2.0 * 256.0 * 4096.0 * Math.pow(2, (zoom - 12));
+            mile = (2 * ((zoom < 12) ? (256 / (int) (Math.pow(2, (11 - zoom)))) : 256) + 256)
+                    / ((Math.toDegrees(map.bounds.maxlat) - Math.toDegrees(map.bounds.minlat)) * 60);
+        }
+
+        @Override
         public Point2D getPoint(Snode coord) {
             double x = (Math.toDegrees(coord.lon) - Math.toDegrees(map.bounds.minlon)) * 256.0 * 2048.0 * Math.pow(2, (zoom - 12)) / 180.0;
-            double y = ((1.0 - Math.log(Math.tan(coord.lat) + 1.0 / Math.cos(coord.lat)) / Math.PI) / 2.0 * 256.0 * 4096.0 * Math.pow(2, (zoom - 12))) - top;
+            double y = ((1.0 - Math.log(Math.tan(coord.lat) + 1.0 / Math.cos(coord.lat)) / Math.PI)
+                    / 2.0 * 256.0 * 4096.0 * Math.pow(2, (zoom - 12))) - top;
             return new Point2D.Double(x, y);
         }
 
+        @Override
         public double mile(Feature feature) {
             return mile;
         }
 
+        @Override
         public boolean clip() {
             return false;
         }
 
+        @Override
         public Color background(S57map map) {
             return new Color(0, true);
         }
 
+        @Override
         public RuleSet ruleset() {
             return RuleSet.SEAMARK;
         }
     }
-    
+
     static void tile(int z, int s, int xn, int yn) throws IOException {
-        int border = (z < 12) ? (256 / (int)(Math.pow(2, (11 - zoom)))) : 256;
-        int scale = (int)Math.pow(2, z - 12);
+        int border = (z < 12) ? (256 / (int) (Math.pow(2, (11 - zoom)))) : 256;
+        int scale = (int) Math.pow(2, z - 12);
         int xdir = (scale > 0) ? (scale * xtile) + xn : xtile;
         int ynam = (scale > 0) ? (scale * ytile) + yn : ytile;
@@ -116,5 +124,5 @@
         }
     }
-    
+
     static void clean(int z, int xn, int yn) throws Exception {
         int scale = (int) Math.pow(2, z - 12);
@@ -135,5 +143,5 @@
         }
     }
-    
+
     public static void main(String[] args) throws Exception {
         if (args.length < 5) {
Index: applications/editors/josm/plugins/seachart/js57toosm/src/js57toosm/Js57toosm.java
===================================================================
--- applications/editors/josm/plugins/seachart/js57toosm/src/js57toosm/Js57toosm.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/js57toosm/src/js57toosm/Js57toosm.java	(revision 32907)
@@ -1,30 +1,39 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
+// License: GPL. For details, see LICENSE file.
+package js57toosm;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.Scanner;
+
+import org.apache.commons.lang3.StringEscapeUtils;
+
+import s57.S57att;
+import s57.S57att.Att;
+import s57.S57dec;
+import s57.S57map;
+import s57.S57map.AttMap;
+import s57.S57map.Feature;
+import s57.S57map.GeomIterator;
+import s57.S57map.ObjTab;
+import s57.S57map.Pflag;
+import s57.S57map.Prim;
+import s57.S57map.Rflag;
+import s57.S57map.Snode;
+import s57.S57obj;
+import s57.S57obj.Obj;
+import s57.S57val;
+import s57.S57val.AttVal;
+
+/**
+ * @author Malcolm Herring
  */
-
-package js57toosm;
-
-import java.io.*;
-import java.util.*;
-
-import org.apache.commons.lang3.StringEscapeUtils;
-
-import s57.S57obj;
-import s57.S57obj.*;
-import s57.S57att;
-import s57.S57att.*;
-import s57.S57val;
-import s57.S57val.*;
-import s57.S57map;
-import s57.S57map.*;
-import s57.S57dec;
-
-public class Js57toosm {
-    
+public final class Js57toosm {
+    private Js57toosm() {
+        // Hide default constructor for utilities classes
+    }
+
     static FileInputStream in;
     static PrintStream out;
@@ -34,5 +43,5 @@
         typatts.add(Att.PEREND); typatts.add(Att.PERSTA); typatts.add(Att.CONDTN); typatts.add(Att.CONRAD); typatts.add(Att.CONVIS);
     }
-    
+
     public static void main(String[] args) throws IOException {
 
@@ -71,5 +80,5 @@
             System.exit(-1);
         }
-        
+
         map = new S57map(true);
         S57dec.decodeChart(in, map);
@@ -78,5 +87,6 @@
         out.format("<osm version='0.6' upload='false' generator='js57toosm'>%n");
         out.format("<bounds minlat='%.8f' minlon='%.8f' maxlat='%.8f' maxlon='%.8f'/>%n",
-                Math.toDegrees(map.bounds.minlat), Math.toDegrees(map.bounds.minlon), Math.toDegrees(map.bounds.maxlat), Math.toDegrees(map.bounds.maxlon));
+                Math.toDegrees(map.bounds.minlat), Math.toDegrees(map.bounds.minlon),
+                Math.toDegrees(map.bounds.maxlat), Math.toDegrees(map.bounds.maxlon));
 
         for (long id : map.index.keySet()) {
@@ -91,8 +101,9 @@
                             while ((node = map.nodes.get(ref)) != null) {
                                 if (!done.contains(ref)) {
-                                    out.format("  <node id='%d' lat='%.8f' lon='%.8f' version='1'>%n", -ref, Math.toDegrees(node.lat), Math.toDegrees(node.lon));
+                                    out.format("  <node id='%d' lat='%.8f' lon='%.8f' version='1'>%n",
+                                            -ref, Math.toDegrees(node.lat), Math.toDegrees(node.lon));
                                     out.format("    <tag k='seamark:type' v=\"%s\"/>%n", type);
                                     if ((feature.type == Obj.SOUNDG) && (node.flg == S57map.Nflag.DPTH))
-                                        out.format("    <tag k='seamark:sounding:depth' v='%.1f'/>%n", ((Snode) node).val);
+                                        out.format("    <tag k='seamark:sounding:depth' v='%.1f'/>%n", node.val);
                                     writeAtts(feature);
                                     out.format("  </node>%n");
@@ -111,5 +122,6 @@
             if (!type.isEmpty() && (types.isEmpty() || types.contains(feature.type))) {
                 if (feature.reln == Rflag.MASTER) {
-                    if ((feature.geom.prim == Pflag.LINE) || ((feature.geom.prim == Pflag.AREA) && (feature.geom.outers == 1) && (feature.geom.inners == 0))) {
+                    if ((feature.geom.prim == Pflag.LINE) ||
+                       ((feature.geom.prim == Pflag.AREA) && (feature.geom.outers == 1) && (feature.geom.inners == 0))) {
                         GeomIterator git = map.new GeomIterator(feature.geom);
                         while (git.hasComp()) {
@@ -121,5 +133,6 @@
                                     Snode node = map.nodes.get(ref);
                                     if (!done.contains(ref)) {
-                                        out.format("  <node id='%d' lat='%.8f' lon='%.8f' version='1'/>%n", -ref, Math.toDegrees(node.lat), Math.toDegrees(node.lon));
+                                        out.format("  <node id='%d' lat='%.8f' lon='%.8f' version='1'/>%n",
+                                                -ref, Math.toDegrees(node.lat), Math.toDegrees(node.lon));
                                         done.add(ref);
                                     }
@@ -152,5 +165,6 @@
                                     Snode node = map.nodes.get(ref);
                                     if (!done.contains(ref)) {
-                                        out.format("  <node id='%d' lat='%.8f' lon='%.8f' version='1'/>%n", -ref, Math.toDegrees(node.lat), Math.toDegrees(node.lon));
+                                        out.format("  <node id='%d' lat='%.8f' lon='%.8f' version='1'/>%n",
+                                                -ref, Math.toDegrees(node.lat), Math.toDegrees(node.lon));
                                         done.add(ref);
                                     }
@@ -194,5 +208,5 @@
         System.err.println("Finished");
     }
-    
+
     static void writeAtts(Feature feature) {
         for (Map.Entry<Att, AttVal<?>> item : feature.atts.entrySet()) {
@@ -203,5 +217,6 @@
                     out.format("    <tag k='seamark:%s' v='%s'/>%n", attstr, StringEscapeUtils.escapeXml10(valstr));
                 } else {
-                    out.format("    <tag k='seamark:%s:%s' v='%s'/>%n", S57obj.stringType(feature.type), attstr, StringEscapeUtils.escapeXml10(valstr));
+                    out.format("    <tag k='seamark:%s:%s' v='%s'/>%n",
+                            S57obj.stringType(feature.type), attstr, StringEscapeUtils.escapeXml10(valstr));
                 }
             }
@@ -216,7 +231,9 @@
                     if (!attstr.isEmpty() && !valstr.isEmpty()) {
                         if ((ix == 0) && (tab.size() == 1)) {
-                            out.format("    <tag k='seamark:%s:%s' v='%s'/>%n", S57obj.stringType(obj), attstr, StringEscapeUtils.escapeXml10(valstr));
+                            out.format("    <tag k='seamark:%s:%s' v='%s'/>%n",
+                                    S57obj.stringType(obj), attstr, StringEscapeUtils.escapeXml10(valstr));
                         } else {
-                            out.format("    <tag k='seamark:%s:%d:%s' v='%s'/>%n", S57obj.stringType(obj), ix + 1, attstr, StringEscapeUtils.escapeXml10(valstr));
+                            out.format("    <tag k='seamark:%s:%d:%s' v='%s'/>%n",
+                                    S57obj.stringType(obj), ix + 1, attstr, StringEscapeUtils.escapeXml10(valstr));
                         }
                     }
Index: applications/editors/josm/plugins/seachart/src/render/ChartContext.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/render/ChartContext.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/render/ChartContext.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package render;
 
@@ -17,4 +9,7 @@
 import s57.S57map.Snode;
 
+/**
+ * @author Malcolm Herring
+ */
 public interface ChartContext {
     enum RuleSet { ALL, BASE, SEAMARK }
Index: applications/editors/josm/plugins/seachart/src/render/Renderer.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/render/Renderer.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/render/Renderer.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package render;
 
@@ -49,7 +41,14 @@
 import symbols.Symbols.Symbol;
 
-public class Renderer {
-
-    public static final double[] symbolScale = {256.0, 128.0, 64.0, 32.0, 16.0, 8.0, 4.0, 2.0, 1.0, 0.61, 0.372, 0.227, 0.138, 0.0843, 0.0514, 0.0313, 0.0191, 0.0117, 0.007 };
+/**
+ * @author Malcolm Herring
+ */
+public final class Renderer {
+    private Renderer() {
+        // Hide default constructor for utilities classes
+    }
+
+    public static final double[] symbolScale = {
+            256.0, 128.0, 64.0, 32.0, 16.0, 8.0, 4.0, 2.0, 1.0, 0.61, 0.372, 0.227, 0.138, 0.0843, 0.0514, 0.0313, 0.0191, 0.0117, 0.007};
 
     public enum LabelStyle { NONE, RRCT, RECT, ELPS, CIRC, VCLR, PCLR, HCLR }
@@ -260,5 +259,6 @@
                                 if (!gap) {
                                     Symbols.drawSymbol(g2, symbol, sScale, curr.getX(), curr.getY(), new Scheme(col),
-                                            new Delta(Handle.BC, AffineTransform.getRotateInstance(Math.atan2((succ.getY() - curr.getY()), (succ.getX() - curr.getX())) + Math.toRadians(90))));
+                                            new Delta(Handle.BC, AffineTransform.getRotateInstance(
+                                                    Math.atan2((succ.getY() - curr.getY()), (succ.getX() - curr.getX())) + Math.toRadians(90))));
                                 }
                                 if (space > 0)
@@ -462,5 +462,6 @@
             double po = sw / 2;
             label.add(new Instr(Form.STRK, new BasicStroke(sw, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-            Path2D.Double p = new Path2D.Double(); p.moveTo(-height*0.2, -ly-po); p.lineTo(height*0.2, -ly-po); p.moveTo(0, -ly-po); p.lineTo(0, -ly-po-(height*0.15));
+            Path2D.Double p = new Path2D.Double(); p.moveTo(-height*0.2, -ly-po);
+            p.lineTo(height*0.2, -ly-po); p.moveTo(0, -ly-po); p.lineTo(0, -ly-po-(height*0.15));
             p.moveTo(-height*0.2, ly+po); p.lineTo((height*0.2), ly+po); p.moveTo(0, ly+po); p.lineTo(0, ly+po+(height*0.15));
             label.add(new Instr(Form.PLIN, p));
@@ -481,9 +482,18 @@
             po = sw / 2;
             label.add(new Instr(Form.STRK, new BasicStroke(sw, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-            p = new Path2D.Double(); p.moveTo(-height*0.2, -ly-po); p.lineTo(height*0.2, -ly-po); p.moveTo(0, -ly-po); p.lineTo(0, -ly-po-(height*0.15));
-            p.moveTo(-height*0.2, ly+po); p.lineTo((height*0.2), ly+po); p.moveTo(0, ly+po); p.lineTo(0, ly+po+(height*0.15));
+            p = new Path2D.Double();
+            p.moveTo(-height*0.2, -ly-po);
+            p.lineTo(height*0.2, -ly-po);
+            p.moveTo(0, -ly-po);
+            p.lineTo(0, -ly-po-(height*0.15));
+            p.moveTo(-height*0.2, ly+po);
+            p.lineTo((height*0.2), ly+po);
+            p.moveTo(0, ly+po);
+            p.lineTo(0, ly+po+(height*0.15));
             label.add(new Instr(Form.PLIN, p));
-            label.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Areas.CableFlash, 1, 0, 0, null, new Delta(Handle.CC, new AffineTransform(0, -1, 1, 0, -width/2, 0)))));
-            label.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Areas.CableFlash, 1, 0, 0, null, new Delta(Handle.CC, new AffineTransform(0, -1, 1, 0, width/2, 0)))));
+            label.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Areas.CableFlash, 1, 0, 0, null,
+                    new Delta(Handle.CC, new AffineTransform(0, -1, 1, 0, -width/2, 0)))));
+            label.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Areas.CableFlash, 1, 0, 0, null,
+                    new Delta(Handle.CC, new AffineTransform(0, -1, 1, 0, width/2, 0)))));
             break;
         case HCLR:
@@ -502,6 +512,13 @@
             double vo = height / 4;
             label.add(new Instr(Form.STRK, new BasicStroke(sw, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-            p = new Path2D.Double(); p.moveTo(-width*0.4-sw, -ly-vo); p.lineTo(-width*0.4-sw, ly+vo); p.moveTo(-width*0.4-sw, 0); p.lineTo(-width*0.4+sw, 0);
-            p.moveTo(width*0.4+sw, -ly-vo); p.lineTo(width*0.4+sw, ly+vo); p.moveTo(width*0.4-sw, 0); p.lineTo(width*0.4+sw, 0);
+            p = new Path2D.Double();
+            p.moveTo(-width*0.4-sw, -ly-vo);
+            p.lineTo(-width*0.4-sw, ly+vo);
+            p.moveTo(-width*0.4-sw, 0);
+            p.lineTo(-width*0.4+sw, 0);
+            p.moveTo(width*0.4+sw, -ly-vo);
+            p.lineTo(width*0.4+sw, ly+vo);
+            p.moveTo(width*0.4-sw, 0);
+            p.lineTo(width*0.4+sw, 0);
             label.add(new Instr(Form.PLIN, p));
             break;
@@ -589,14 +606,18 @@
         }
         double mid = (((s1 + s2) / 2) + (s1 > s2 ? 180 : 0)) % 360;
-        g2.setStroke(new BasicStroke((float) (3.0 * sScale), BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1, new float[] {20 * (float) sScale, 20 * (float) sScale}, 0));
+        g2.setStroke(new BasicStroke((float) (3.0 * sScale), BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1,
+                new float[] {20 * (float) sScale, 20 * (float) sScale}, 0));
         g2.setPaint(Color.black);
         Point2D.Double centre = (Point2D.Double) context.getPoint(Rules.feature.geom.centre);
         double radial = radius * context.mile(Rules.feature);
         if (dir != null) {
-            g2.draw(new Line2D.Double(centre.x, centre.y, centre.x - radial * Math.sin(Math.toRadians(dir)), centre.y + radial * Math.cos(Math.toRadians(dir))));
+            g2.draw(new Line2D.Double(centre.x, centre.y, centre.x - radial * Math.sin(Math.toRadians(dir)),
+                    centre.y + radial * Math.cos(Math.toRadians(dir))));
         } else {
             if ((s1 != 0.0) || (s2 != 360.0)) {
-                g2.draw(new Line2D.Double(centre.x, centre.y, centre.x - radial * Math.sin(Math.toRadians(s1)), centre.y + radial * Math.cos(Math.toRadians(s1))));
-                g2.draw(new Line2D.Double(centre.x, centre.y, centre.x - radial * Math.sin(Math.toRadians(s2)), centre.y + radial * Math.cos(Math.toRadians(s2))));
+                g2.draw(new Line2D.Double(centre.x, centre.y, centre.x - radial * Math.sin(Math.toRadians(s1)),
+                        centre.y + radial * Math.cos(Math.toRadians(s1))));
+                g2.draw(new Line2D.Double(centre.x, centre.y, centre.x - radial * Math.sin(Math.toRadians(s2)),
+                        centre.y + radial * Math.cos(Math.toRadians(s2))));
             }
         }
@@ -604,8 +625,10 @@
         g2.setStroke(new BasicStroke((float) arcWidth, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1));
         g2.setPaint(col1);
-        g2.draw(new Arc2D.Double(centre.x - radial, centre.y - radial, 2 * radial, 2 * radial, -(s1 + 90), ((s1 < s2) ? (s1 - s2) : (s1 - s2 - 360)), Arc2D.OPEN));
+        g2.draw(new Arc2D.Double(centre.x - radial, centre.y - radial, 2 * radial, 2 * radial, -(s1 + 90),
+                ((s1 < s2) ? (s1 - s2) : (s1 - s2 - 360)), Arc2D.OPEN));
         if (col2 != null) {
             g2.setPaint(col2);
-            g2.draw(new Arc2D.Double(centre.x - radial + arcWidth, centre.y - radial + arcWidth, 2 * (radial - arcWidth), 2 * (radial - arcWidth), -(s1 + 90), ((s1 < s2) ? (s1 - s2) : (s1 - s2 - 360)), Arc2D.OPEN));
+            g2.draw(new Arc2D.Double(centre.x - radial + arcWidth, centre.y - radial + arcWidth, 2 * (radial - arcWidth),
+                    2 * (radial - arcWidth), -(s1 + 90), ((s1 < s2) ? (s1 - s2) : (s1 - s2 - 360)), Arc2D.OPEN));
         }
         if ((str != null) && (!str.isEmpty())) {
Index: applications/editors/josm/plugins/seachart/src/render/Rules.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/render/Rules.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/render/Rules.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package render;
 
@@ -81,4 +73,7 @@
 import symbols.Topmarks;
 
+/**
+ * @author Malcolm Herring
+ */
 public class Rules {
 
@@ -257,4 +252,5 @@
 
     public static void rules() {
+        // CHECKSTYLE.OFF: NeedBraces
         if ((Renderer.context.ruleset() == RuleSet.ALL) || (Renderer.context.ruleset() == RuleSet.BASE)) {
             if (testObject(Obj.LNDARE)) for (Feature f : objects) if (testFeature(f)) areas();
@@ -351,4 +347,5 @@
             if (testObject(Obj.BCNSPP)) for (Feature f : objects) if (testFeature(f)) beacons();
         }
+        // CHECKSTYLE.ON: NeedBraces
     }
 
@@ -417,5 +414,6 @@
                     Renderer.symbol(Areas.MarineFarm);
                 }
-                if ((feature.geom.area > 0.2) || ((feature.geom.area > 0.05) && (Renderer.zoom >= 14)) || ((feature.geom.area > 0.005) && (Renderer.zoom >= 16))) {
+                if ((feature.geom.area > 0.2) || ((feature.geom.area > 0.05) && (Renderer.zoom >= 14)) ||
+                   ((feature.geom.area > 0.005) && (Renderer.zoom >= 16))) {
                     Renderer.lineVector(new LineStyle(Color.black, 4, new float[] {10, 10}));
                 }
@@ -450,5 +448,6 @@
                         Renderer.lineText(name, new Font("Arial", Font.PLAIN, 150), Color.black, -40);
                     } else {
-                        Renderer.labelText(name, new Font("Arial", Font.PLAIN, 150), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -40)));
+                        Renderer.labelText(name, new Font("Arial", Font.PLAIN, 150), Color.black,
+                                new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -40)));
                     }
                 break;
@@ -458,5 +457,6 @@
                         Renderer.lineText(name, new Font("Arial", Font.PLAIN, 150), Color.black, -40);
                     } else {
-                        Renderer.labelText(name, new Font("Arial", Font.PLAIN, 150), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -40)));
+                        Renderer.labelText(name, new Font("Arial", Font.PLAIN, 150), Color.black,
+                                new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -40)));
                     }
                 break;
@@ -466,5 +466,6 @@
                         Renderer.lineVector(new LineStyle(new Color(0xc480ff), 4, new float[] {25, 25}));
                         if (name != null) {
-                            Renderer.labelText(name, new Font("Arial", Font.ITALIC, 75), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -40)));
+                            Renderer.labelText(name, new Font("Arial", Font.ITALIC, 75), Color.black,
+                                    new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -40)));
                             Renderer.labelText("(Shoal)", new Font("Arial", Font.PLAIN, 60), Color.black, new Delta(Handle.BC));
                         }
@@ -476,5 +477,6 @@
                     } else {
                         if (name != null) {
-                            Renderer.labelText(name, new Font("Arial", Font.ITALIC, 75), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -40)));
+                            Renderer.labelText(name, new Font("Arial", Font.ITALIC, 75), Color.black,
+                                    new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -40)));
                             Renderer.labelText("(Shoal)", new Font("Arial", Font.PLAIN, 60), Color.black, new Delta(Handle.BC));
                         }
@@ -554,10 +556,12 @@
                     AttMap topmap = feature.objs.get(Obj.TOPMAR).get(0);
                     if (topmap.containsKey(Att.TOPSHP)) {
-                        Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)), getScheme(Obj.TOPMAR), Topmarks.BeaconDelta);
+                        Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)),
+                                getScheme(Obj.TOPMAR), Topmarks.BeaconDelta);
                     }
                 } else if (feature.objs.containsKey(Obj.DAYMAR)) {
                     AttMap topmap = feature.objs.get(Obj.DAYMAR).get(0);
                     if (topmap.containsKey(Att.TOPSHP)) {
-                        Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)), getScheme(Obj.DAYMAR), Topmarks.BeaconDelta);
+                        Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)),
+                                getScheme(Obj.DAYMAR), Topmarks.BeaconDelta);
                     }
                 }
@@ -580,10 +584,12 @@
                 AttMap topmap = feature.objs.get(Obj.TOPMAR).get(0);
                 if (topmap.containsKey(Att.TOPSHP)) {
-                    Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)), getScheme(Obj.TOPMAR), Topmarks.BuoyDeltas.get(shape));
+                    Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)),
+                            getScheme(Obj.TOPMAR), Topmarks.BuoyDeltas.get(shape));
                 }
             } else if (feature.objs.containsKey(Obj.DAYMAR)) {
                 AttMap topmap = feature.objs.get(Obj.DAYMAR).get(0);
                 if (topmap.containsKey(Att.TOPSHP)) {
-                    Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)), getScheme(Obj.DAYMAR), Topmarks.BuoyDeltas.get(shape));
+                    Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)),
+                            getScheme(Obj.DAYMAR), Topmarks.BuoyDeltas.get(shape));
                 }
             }
@@ -621,10 +627,14 @@
                 }
                 if (hstr.isEmpty() && !vstr.isEmpty()) {
-                    Renderer.labelText(vstr, new Font("Arial", Font.PLAIN, 30), Color.black, LabelStyle.VCLR, Color.black, Color.white, new Delta(Handle.CC));
+                    Renderer.labelText(vstr, new Font("Arial", Font.PLAIN, 30), Color.black, LabelStyle.VCLR, Color.black, Color.white,
+                            new Delta(Handle.CC));
                 } else if (!hstr.isEmpty() && !vstr.isEmpty()) {
-                    Renderer.labelText(vstr, new Font("Arial", Font.PLAIN, 30), Color.black, LabelStyle.VCLR, Color.black, Color.white, new Delta(Handle.BC));
-                    Renderer.labelText(hstr, new Font("Arial", Font.PLAIN, 30), Color.black, LabelStyle.HCLR, Color.black, Color.white, new Delta(Handle.TC));
+                    Renderer.labelText(vstr, new Font("Arial", Font.PLAIN, 30), Color.black, LabelStyle.VCLR, Color.black, Color.white,
+                            new Delta(Handle.BC));
+                    Renderer.labelText(hstr, new Font("Arial", Font.PLAIN, 30), Color.black, LabelStyle.HCLR, Color.black, Color.white,
+                            new Delta(Handle.TC));
                 } else if (!hstr.isEmpty() && vstr.isEmpty()) {
-                    Renderer.labelText(hstr, new Font("Arial", Font.PLAIN, 30), Color.black, LabelStyle.HCLR, Color.black, Color.white, new Delta(Handle.CC));
+                    Renderer.labelText(hstr, new Font("Arial", Font.PLAIN, 30), Color.black, LabelStyle.HCLR, Color.black, Color.white,
+                            new Delta(Handle.CC));
                 }
             }
@@ -645,7 +655,9 @@
                 if (atts != null) {
                     if (atts.containsKey(Att.VERCLR)) {
-                        Renderer.labelText(String.valueOf(atts.get(Att.VERCLR).val), new Font("Arial", Font.PLAIN, 50), Color.black, LabelStyle.VCLR, Color.black, new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 25)));
+                        Renderer.labelText(String.valueOf(atts.get(Att.VERCLR).val), new Font("Arial", Font.PLAIN, 50),
+                                Color.black, LabelStyle.VCLR, Color.black, new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 25)));
                     } else if (atts.containsKey(Att.VERCSA)) {
-                        Renderer.labelText(String.valueOf(atts.get(Att.VERCSA).val), new Font("Arial", Font.PLAIN, 50), Color.black, LabelStyle.PCLR, Color.black, new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 25)));
+                        Renderer.labelText(String.valueOf(atts.get(Att.VERCSA).val), new Font("Arial", Font.PLAIN, 50),
+                                Color.black, LabelStyle.PCLR, Color.black, new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 25)));
                     }
                 }
@@ -668,5 +680,6 @@
             String chn;
             if (!(chn = getAttStr(feature.type, Att.COMCHA)).isEmpty()) {
-                Renderer.labelText(("Ch." + chn), new Font("Arial", Font.PLAIN, 50), Color.black, new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 50)));
+                Renderer.labelText(("Ch." + chn), new Font("Arial", Font.PLAIN, 50), Color.black,
+                        new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 50)));
             }
         }
@@ -692,7 +705,10 @@
                     dd = (tok.length == 2) ? tok[1] : "";
                 }
-                Renderer.labelText(ul, new Font("Arial", Font.PLAIN, 30), Color.black, new Delta(Handle.RC, AffineTransform.getTranslateInstance(10, 15)));
-                Renderer.labelText(id, new Font("Arial", Font.PLAIN, 30), Color.black, new Delta(Handle.RC, AffineTransform.getTranslateInstance(10, 0)));
-                Renderer.labelText(dd, new Font("Arial", Font.PLAIN, 20), Color.black, new Delta(Handle.LC, AffineTransform.getTranslateInstance(15, 10)));
+                Renderer.labelText(ul, new Font("Arial", Font.PLAIN, 30), Color.black,
+                        new Delta(Handle.RC, AffineTransform.getTranslateInstance(10, 15)));
+                Renderer.labelText(id, new Font("Arial", Font.PLAIN, 30), Color.black,
+                        new Delta(Handle.RC, AffineTransform.getTranslateInstance(10, 0)));
+                Renderer.labelText(dd, new Font("Arial", Font.PLAIN, 20), Color.black,
+                        new Delta(Handle.LC, AffineTransform.getTranslateInstance(15, 10)));
             }
             break;
@@ -741,5 +757,6 @@
                     }
                     str += String.format("%1.0f", dist);
-                    Renderer.labelText(str, new Font("Arial", Font.PLAIN, 40), Color.black, new Delta(Handle.CC, AffineTransform.getTranslateInstance(0, 45)));
+                    Renderer.labelText(str, new Font("Arial", Font.PLAIN, 40), Color.black,
+                            new Delta(Handle.CC, AffineTransform.getTranslateInstance(0, 45)));
                 }
             }
@@ -749,5 +766,6 @@
     @SuppressWarnings("unchecked")
     private static void floats() {
-        if ((Renderer.zoom >= 12) || ((Renderer.zoom >= 11) && ((feature.type == Obj.LITVES) || (feature.type == Obj.BOYINB) || hasObject(Obj.RTPBCN)))) {
+        if ((Renderer.zoom >= 12) || ((Renderer.zoom >= 11) && ((feature.type == Obj.LITVES) ||
+                (feature.type == Obj.BOYINB) || hasObject(Obj.RTPBCN)))) {
             switch (feature.type) {
             case LITVES:
@@ -766,10 +784,12 @@
                 AttMap topmap = feature.objs.get(Obj.TOPMAR).get(0);
                 if (topmap.containsKey(Att.TOPSHP)) {
-                    Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)), getScheme(Obj.TOPMAR), Topmarks.FloatDelta);
+                    Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)),
+                            getScheme(Obj.TOPMAR), Topmarks.FloatDelta);
                 }
             } else if (feature.objs.containsKey(Obj.DAYMAR)) {
                 AttMap topmap = feature.objs.get(Obj.DAYMAR).get(0);
                 if (topmap.containsKey(Att.TOPSHP)) {
-                    Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)), getScheme(Obj.DAYMAR), Topmarks.FloatDelta);
+                    Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)),
+                            getScheme(Obj.DAYMAR), Topmarks.FloatDelta);
                 }
             }
@@ -795,5 +815,6 @@
                 Renderer.symbol(Harbours.Anchor, new Scheme(Symbols.Msymb));
                 if (Renderer.zoom >= 15) {
-                    Renderer.labelText(name == null ? "" : name, new Font("Arial", Font.PLAIN, 30), Symbols.Msymb, LabelStyle.RRCT, Symbols.Msymb, Color.white, new Delta(Handle.BC));
+                    Renderer.labelText(name == null ? "" : name,
+                            new Font("Arial", Font.PLAIN, 30), Symbols.Msymb, LabelStyle.RRCT, Symbols.Msymb, Color.white, new Delta(Handle.BC));
                 }
             }
@@ -820,5 +841,6 @@
                 ArrayList<StsSTS> sts = (ArrayList<StsSTS>) getAttList(Obj.ACHARE, Att.STATUS);
                 if ((Renderer.zoom >= 15) && (sts.contains(StsSTS.STS_RESV))) {
-                    Renderer.labelText("Reserved", new Font("Arial", Font.PLAIN, 50), Symbols.Mline, new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 60)));
+                    Renderer.labelText("Reserved",
+                            new Font("Arial", Font.PLAIN, 50), Symbols.Mline, new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 60)));
                 }
                 ArrayList<CatACH> cats = (ArrayList<CatACH>) getAttList(Obj.ACHARE, Att.CATACH);
@@ -827,25 +849,31 @@
                     switch (cat) {
                     case ACH_DEEP:
-                        Renderer.labelText("DW", new Font("Arial", Font.BOLD, 50), Symbols.Msymb, new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
+                        Renderer.labelText("DW", new Font("Arial", Font.BOLD, 50), Symbols.Msymb,
+                                new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
                         dy += 60;
                         break;
                     case ACH_TANK:
-                        Renderer.labelText("Tanker", new Font("Arial", Font.BOLD, 50), Symbols.Msymb, new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
+                        Renderer.labelText("Tanker", new Font("Arial", Font.BOLD, 50), Symbols.Msymb,
+                                new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
                         dy += 60;
                         break;
                     case ACH_H24P:
-                        Renderer.labelText("24h", new Font("Arial", Font.BOLD, 50), Symbols.Msymb, new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
+                        Renderer.labelText("24h", new Font("Arial", Font.BOLD, 50), Symbols.Msymb,
+                                new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
                         dy += 60;
                         break;
                     case ACH_EXPL:
-                        Renderer.symbol(Harbours.Explosives, new Scheme(Symbols.Msymb), new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
+                        Renderer.symbol(Harbours.Explosives, new Scheme(Symbols.Msymb),
+                                new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
                         dy += 60;
                         break;
                     case ACH_QUAR:
-                        Renderer.symbol(Harbours.Hospital, new Scheme(Symbols.Msymb), new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
+                        Renderer.symbol(Harbours.Hospital, new Scheme(Symbols.Msymb),
+                                new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
                         dy += 60;
                         break;
                     case ACH_SEAP:
-                        Renderer.symbol(Areas.Seaplane, new Scheme(Symbols.Msymb), new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
+                        Renderer.symbol(Areas.Seaplane, new Scheme(Symbols.Msymb),
+                                new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
                         dy += 60;
                         break;
@@ -858,5 +886,6 @@
             if (Renderer.zoom >= 14) {
                 Renderer.lineVector(new LineStyle(Symbols.Mline, 6, new float[] {20, 20}));
-                Renderer.labelText(name == null ? " " : name, new Font("Arial", Font.PLAIN, 40), Symbols.Msymb, LabelStyle.RRCT, Symbols.Mline, Color.white);
+                Renderer.labelText(name == null ? " " : name,
+                        new Font("Arial", Font.PLAIN, 40), Symbols.Msymb, LabelStyle.RRCT, Symbols.Mline, Color.white);
             }
             break;
@@ -1034,10 +1063,12 @@
                 AttMap topmap = feature.objs.get(Obj.TOPMAR).get(0);
                 if (topmap.containsKey(Att.TOPSHP)) {
-                    Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)), getScheme(Obj.TOPMAR), Topmarks.LightDelta);
+                    Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)),
+                            getScheme(Obj.TOPMAR), Topmarks.LightDelta);
                 }
             } else if (feature.objs.containsKey(Obj.DAYMAR)) {
                 AttMap topmap = feature.objs.get(Obj.DAYMAR).get(0);
                 if (topmap.containsKey(Att.TOPSHP)) {
-                    Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)), getScheme(Obj.DAYMAR), Topmarks.LightDelta);
+                    Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)),
+                            getScheme(Obj.DAYMAR), Topmarks.LightDelta);
                 }
             }
@@ -1215,5 +1246,6 @@
                     }
                     if (verclr > 0) {
-                        Renderer.labelText(String.valueOf(verclr), new Font("Arial", Font.PLAIN, 50), Color.black, LabelStyle.VCLR, Color.black, new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 25)));
+                        Renderer.labelText(String.valueOf(verclr), new Font("Arial", Font.PLAIN, 50), Color.black, LabelStyle.VCLR,
+                                Color.black, new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 25)));
                     }
                 }
@@ -1400,12 +1432,15 @@
                 Renderer.symbol(Harbours.SignalStation);
                 Renderer.symbol(Beacons.RadarStation);
-                Renderer.labelText("Ra", new Font("Arial", Font.PLAIN, 40), Symbols.Msymb, new Delta(Handle.TR, AffineTransform.getTranslateInstance(-30, -70)));
+                Renderer.labelText("Ra", new Font("Arial", Font.PLAIN, 40), Symbols.Msymb,
+                        new Delta(Handle.TR, AffineTransform.getTranslateInstance(-30, -70)));
                 break;
             case PILBOP:
                 Renderer.symbol(Harbours.Pilot);
-                addName(15, new Font("Arial", Font.BOLD, 40), Symbols.Msymb, new Delta(Handle.LC, AffineTransform.getTranslateInstance(70, -40)));
+                addName(15, new Font("Arial", Font.BOLD, 40), Symbols.Msymb,
+                        new Delta(Handle.LC, AffineTransform.getTranslateInstance(70, -40)));
                 CatPIL cat = (CatPIL) getAttEnum(feature.type, Att.CATPIL);
                 if (cat == CatPIL.PIL_HELI) {
-                    Renderer.labelText("H", new Font("Arial", Font.PLAIN, 40), Symbols.Msymb, new Delta(Handle.LC, AffineTransform.getTranslateInstance(70, 0)));
+                    Renderer.labelText("H", new Font("Arial", Font.PLAIN, 40), Symbols.Msymb,
+                            new Delta(Handle.LC, AffineTransform.getTranslateInstance(70, 0)));
                 }
                 break;
@@ -1413,5 +1448,6 @@
                 Renderer.symbol(Harbours.SignalStation);
                 str = "CG";
-                if (feature.objs.containsKey(Obj.RSCSTA)) Renderer.symbol(Harbours.Rescue, new Delta(Handle.CC, AffineTransform.getTranslateInstance(130, 0)));
+                if (feature.objs.containsKey(Obj.RSCSTA)) Renderer.symbol(Harbours.Rescue,
+                        new Delta(Handle.CC, AffineTransform.getTranslateInstance(130, 0)));
                 break;
             case RSCSTA:
@@ -1422,5 +1458,6 @@
             }
             if ((Renderer.zoom >= 15) && !str.isEmpty()) {
-                Renderer.labelText(str, new Font("Arial", Font.PLAIN, 40), Color.black, new Delta(Handle.LC, AffineTransform.getTranslateInstance(40, 0)));
+                Renderer.labelText(str, new Font("Arial", Font.PLAIN, 40), Color.black,
+                        new Delta(Handle.LC, AffineTransform.getTranslateInstance(40, 0)));
             }
             Signals.addSignals();
Index: applications/editors/josm/plugins/seachart/src/render/Signals.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/render/Signals.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/render/Signals.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package render;
 
@@ -35,4 +27,7 @@
 import symbols.Topmarks;
 
+/**
+ * @author Malcolm Herring
+ */
 public class Signals extends Rules {
 
@@ -194,5 +189,6 @@
                 }
                 if (!str.isEmpty()) {
-                    Renderer.labelText(str, new Font("Arial", Font.PLAIN, 40), Color.black, new Delta(Handle.TR, AffineTransform.getTranslateInstance(-60, -30)));
+                    Renderer.labelText(str, new Font("Arial", Font.PLAIN, 40), Color.black,
+                            new Delta(Handle.TR, AffineTransform.getTranslateInstance(-60, -30)));
                 }
             }
@@ -241,5 +237,6 @@
             }
             if (!bstr.isEmpty()) {
-                Renderer.labelText(bstr, new Font("Arial", Font.PLAIN, 40), Symbols.Msymb, new Delta(Handle.TR, AffineTransform.getTranslateInstance(-30, -70)));
+                Renderer.labelText(bstr, new Font("Arial", Font.PLAIN, 40), Symbols.Msymb,
+                        new Delta(Handle.TR, AffineTransform.getTranslateInstance(-30, -70)));
             }
         }
@@ -358,8 +355,10 @@
         if (Renderer.zoom >= 15) {
             if (vais) {
-                Renderer.labelText("V-AIS", new Font("Arial", Font.PLAIN, 40), Symbols.Msymb, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 70)));
+                Renderer.labelText("V-AIS", new Font("Arial", Font.PLAIN, 40), Symbols.Msymb,
+                        new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 70)));
             }
             if (!bstr.isEmpty()) {
-                Renderer.labelText(bstr, new Font("Arial", Font.PLAIN, 40), Symbols.Msymb, new Delta(Handle.TR, AffineTransform.getTranslateInstance(-30, -110)));
+                Renderer.labelText(bstr, new Font("Arial", Font.PLAIN, 40), Symbols.Msymb,
+                        new Delta(Handle.TR, AffineTransform.getTranslateInstance(-30, -110)));
             }
         }
@@ -398,5 +397,6 @@
             }
         }
-        Renderer.symbol(Beacons.LightFlare, new Scheme(LightColours.get(col)), new Delta(Handle.BC, AffineTransform.getRotateInstance(Math.toRadians(120))));
+        Renderer.symbol(Beacons.LightFlare, new Scheme(LightColours.get(col)),
+                new Delta(Handle.BC, AffineTransform.getRotateInstance(Math.toRadians(120))));
         if (Renderer.zoom >= 12) {
             String str = "";
@@ -438,5 +438,6 @@
                                     }
                                     if (srad == radius) {
-                                        ArrayList<CatLIT> scats = (satts.containsKey(Att.CATLIT)) ? (ArrayList<CatLIT>) satts.get(Att.CATLIT).val : new ArrayList<CatLIT>();
+                                        ArrayList<CatLIT> scats = (satts.containsKey(Att.CATLIT)) ?
+                                                (ArrayList<CatLIT>) satts.get(Att.CATLIT).val : new ArrayList<>();
                                         if (scats.contains(CatLIT.LIT_DIR)) {
                                             if (satts.containsKey(Att.ORIENT)) {
@@ -504,5 +505,6 @@
                     }
                     if ((s1 <= 360) && (s2 <= 360) && (s1 != s2))
-                        Renderer.lightSector(LightColours.get(col1), LightColours.get(col2), radius, s1, s2, dir, (Renderer.zoom >= 15) ? str : "");
+                        Renderer.lightSector(LightColours.get(col1), LightColours.get(col2), radius, s1, s2, dir,
+                                (Renderer.zoom >= 15) ? str : "");
                 }
                 if (Renderer.zoom >= 15) {
@@ -545,5 +547,6 @@
                         sect.rng = atts.containsKey(Att.VALNMR) ? (Double) atts.get(Att.VALNMR).val : 0.0;
                         sect.hgt = atts.containsKey(Att.HEIGHT) ? (Double) atts.get(Att.HEIGHT).val : 0.0;
-                        ArrayList<ColCOL> cols = (ArrayList<ColCOL>) (atts.containsKey(Att.COLOUR) ? atts.get(Att.COLOUR).val : new ArrayList<>());
+                        ArrayList<ColCOL> cols = (ArrayList<ColCOL>)
+                                (atts.containsKey(Att.COLOUR) ? atts.get(Att.COLOUR).val : new ArrayList<>());
                         sect.col = cols.size() > 0 ? cols.get(0) : ColCOL.COL_UNK;
                         if ((sect.chr != LitCHR.CHR_UNKN) && (sect.col != null))
@@ -555,5 +558,6 @@
                         for (ArrayList<LitSect> group : groupings) {
                             LitSect mem = group.get(0);
-                            if ((lit.dir == mem.dir) && (lit.chr == mem.chr) && (lit.grp.equals(mem.grp)) && (lit.per == mem.per) && (lit.hgt == mem.hgt)) {
+                            if ((lit.dir == mem.dir) && (lit.chr == mem.chr) && (lit.grp.equals(mem.grp)) &&
+                                (lit.per == mem.per) && (lit.hgt == mem.hgt)) {
                                 group.add(lit);
                                 found = true;
@@ -630,6 +634,8 @@
                             str += df.format(tmp.hgt) + "m";
                         if (colrng.get(0).rng > 0)
-                            str += df.format(colrng.get(0).rng) + ((colrng.size() > 1) ? ((colrng.size() > 2) ? ("-" + df.format(colrng.get(colrng.size() - 1).rng)) : ("/" + df.format(colrng.get(1).rng))) : "") + "M";
-                        Renderer.labelText(str, new Font("Arial", Font.PLAIN, 40), Color.black, new Delta(Handle.TL, AffineTransform.getTranslateInstance(60, y)));
+                            str += df.format(colrng.get(0).rng) + ((colrng.size() > 1) ? ((colrng.size() > 2) ?
+                                    ("-" + df.format(colrng.get(colrng.size() - 1).rng)) : ("/" + df.format(colrng.get(1).rng))) : "") + "M";
+                        Renderer.labelText(str, new Font("Arial", Font.PLAIN, 40), Color.black,
+                                new Delta(Handle.TL, AffineTransform.getTranslateInstance(60, y)));
                         y += 40;
                         str = "";
@@ -680,5 +686,6 @@
                     str += (cats.contains(CatLIT.LIT_VERT)) ? "(vert)" : "";
                     str += (cats.contains(CatLIT.LIT_HORI)) ? "(hor)" : "";
-                    str += (!str.isEmpty() && (atts.containsKey(Att.SIGPER) || atts.containsKey(Att.HEIGHT) || atts.containsKey(Att.VALMXR)) && !str.endsWith(")")) ? "." : "";
+                    str += (!str.isEmpty() && (atts.containsKey(Att.SIGPER) || atts.containsKey(Att.HEIGHT) || atts.containsKey(Att.VALMXR))
+                            && !str.endsWith(")")) ? "." : "";
                     str += (atts.containsKey(Att.SIGPER)) ? df.format(atts.get(Att.SIGPER).val) + "s" : "";
                     str += (atts.containsKey(Att.HEIGHT)) ? df.format(atts.get(Att.HEIGHT).val) + "m" : "";
@@ -688,5 +695,6 @@
                     str += (cats.contains(CatLIT.LIT_UPPR)) ? "(Upper)" : "";
                     str += (cats.contains(CatLIT.LIT_LOWR)) ? "(Lower)" : "";
-                    Renderer.labelText(str, new Font("Arial", Font.PLAIN, 40), Color.black, new Delta(Handle.TL, AffineTransform.getTranslateInstance(60, -30)));
+                    Renderer.labelText(str, new Font("Arial", Font.PLAIN, 40), Color.black,
+                            new Delta(Handle.TL, AffineTransform.getTranslateInstance(60, -30)));
                 }
             }
Index: applications/editors/josm/plugins/seachart/src/s57/S57att.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/s57/S57att.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/s57/S57att.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package s57;
 
@@ -15,5 +7,11 @@
 import s57.S57obj.Obj;
 
-public class S57att { // S57 Attribute lookup tables & methods
+/**
+ * @author Malcolm Herring
+ */
+public final class S57att { // S57 Attribute lookup tables & methods
+    private S57att() {
+        // Hide default constructor for utilities classes
+    }
     // CHECKSTYLE.OFF: LineLength
 
Index: applications/editors/josm/plugins/seachart/src/s57/S57box.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/s57/S57box.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/s57/S57box.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package s57;
 
@@ -19,5 +11,11 @@
 import s57.S57obj.Obj;
 
-public class S57box { //S57 bounding box truncation
+/**
+ * @author Malcolm Herring
+ */
+public final class S57box { //S57 bounding box truncation
+    private S57box() {
+        // Hide default constructor for utilities classes
+    }
     // CHECKSTYLE.OFF: LineLength
 
Index: applications/editors/josm/plugins/seachart/src/s57/S57dat.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/s57/S57dat.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/s57/S57dat.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package s57;
 
@@ -19,5 +11,11 @@
 import s57.S57obj.Obj;
 
-public class S57dat { // S57 ENC file fields lookup tables & methods
+/**
+ * @author Malcolm Herring
+ */
+public final class S57dat { // S57 ENC file fields lookup tables & methods
+    private S57dat() {
+        // Hide default constructor for utilities classes
+    }
     // CHECKSTYLE.OFF: LineLength
 
Index: applications/editors/josm/plugins/seachart/src/s57/S57dec.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/s57/S57dec.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/s57/S57dec.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package s57;
 
@@ -17,5 +9,11 @@
 import s57.S57map.Nflag;
 
-public class S57dec { // S57 ENC file input & map conversion
+/**
+ * @author Malcolm Herring
+ */
+public final class S57dec { // S57 ENC file input & map conversion
+    private S57dec() {
+        // Hide default constructor for utilities classes
+    }
     // CHECKSTYLE.OFF: LineLength
 
Index: applications/editors/josm/plugins/seachart/src/s57/S57enc.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/s57/S57enc.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/s57/S57enc.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2015 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package s57;
 
@@ -33,5 +25,11 @@
 import s57.S57val.AttVal;
 
-public class S57enc { // S57 ENC file generation
+/**
+ * @author Malcolm Herring
+ */
+public final class S57enc { // S57 ENC file generation
+    private S57enc() {
+        // Hide default constructor for utilities classes
+    }
     // CHECKSTYLE.OFF: LineLength
 
Index: applications/editors/josm/plugins/seachart/src/s57/S57map.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/s57/S57map.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/s57/S57map.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package s57;
 
@@ -20,4 +12,7 @@
 import s57.S57val.AttVal;
 
+/**
+ * @author Malcolm Herring
+ */
 public class S57map { // S57/OSM map generation methods
     // CHECKSTYLE.OFF: LineLength
Index: applications/editors/josm/plugins/seachart/src/s57/S57obj.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/s57/S57obj.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/s57/S57obj.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package s57;
 
@@ -14,5 +6,11 @@
 import java.util.Map;
 
-public class S57obj { // S57 Object lookup tables & methods
+/**
+ * @author Malcolm Herring
+ */
+public final class S57obj { // S57 Object lookup tables & methods
+    private S57obj() {
+        // Hide default constructor for utilities classes
+    }
     // CHECKSTYLE.OFF: LineLength
 
Index: applications/editors/josm/plugins/seachart/src/s57/S57osm.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/s57/S57osm.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/s57/S57osm.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2015 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package s57;
 
@@ -20,5 +12,12 @@
 import s57.S57val.Conv;
 
-public class S57osm { // OSM to S57 Object/Attribute and Object/Primitive conversions
+/**
+ * @author Malcolm Herring
+ */
+public final class S57osm { // OSM to S57 Object/Attribute and Object/Primitive conversions
+    private S57osm() {
+        // Hide default constructor for utilities classes
+    }
+
     // CHECKSTYLE.OFF: LineLength
 
Index: applications/editors/josm/plugins/seachart/src/s57/S57val.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/s57/S57val.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/s57/S57val.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package s57;
 
@@ -15,5 +7,12 @@
 import s57.S57att.Att;
 
-public class S57val { // S57 Attribute values lookup tables & methods
+/**
+ * @author Malcolm Herring
+ */
+public final class S57val { // S57 Attribute values lookup tables & methods
+    private S57val() {
+        // Hide default constructor for utilities classes
+    }
+
     // CHECKSTYLE.OFF: LineLength
 
Index: applications/editors/josm/plugins/seachart/src/seachart/ChartImage.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/seachart/ChartImage.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/seachart/ChartImage.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package seachart;
 
@@ -38,4 +30,7 @@
 import symbols.Symbols;
 
+/**
+ * @author Malcolm Herring
+ */
 public class ChartImage extends ImageryLayer implements ZoomChangeListener, ChartContext {
 
Index: applications/editors/josm/plugins/seachart/src/seachart/Seachart.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/seachart/Seachart.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/seachart/Seachart.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package seachart;
 
@@ -15,4 +7,7 @@
 import org.openstreetmap.josm.plugins.PluginInformation;
 
+/**
+ * @author Malcolm Herring
+ */
 public class Seachart extends Plugin {
 
Index: applications/editors/josm/plugins/seachart/src/seachart/SeachartAction.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/seachart/SeachartAction.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/seachart/SeachartAction.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package seachart;
 
@@ -45,4 +37,7 @@
 import s57.S57map;
 
+/**
+ * @author Malcolm Herring
+ */
 public class SeachartAction extends JosmAction implements ActiveLayerChangeListener, LayerChangeListener {
     private static String title = "SeaChart";
@@ -117,4 +112,5 @@
     public void actionPerformed(ActionEvent arg0) {
         SwingUtilities.invokeLater(new Runnable() {
+            @Override
             public void run() {
                 if (!isOpen)
Index: applications/editors/josm/plugins/seachart/src/symbols/Areas.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/symbols/Areas.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/symbols/Areas.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package symbols;
 
@@ -26,5 +18,12 @@
 import symbols.Symbols.Symbol;
 
-public class Areas {
+/**
+ * @author Malcolm Herring
+ */
+public final class Areas {
+    private Areas() {
+        // Hide default constructor for utilities classes
+    }
+
     // CHECKSTYLE.OFF: LineLength
     public static final Symbol Plane = new Symbol();
Index: applications/editors/josm/plugins/seachart/src/symbols/Beacons.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/symbols/Beacons.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/symbols/Beacons.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package symbols;
 
@@ -25,5 +17,12 @@
 import symbols.Symbols.Symbol;
 
-public class Beacons {
+/**
+ * @author Malcolm Herring
+ */
+public final class Beacons {
+    private Beacons() {
+        // Hide default constructor for utilities classes
+    }
+
     // CHECKSTYLE.OFF: LineLength
     public static final Symbol Beacon = new Symbol();
Index: applications/editors/josm/plugins/seachart/src/symbols/Buoys.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/symbols/Buoys.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/symbols/Buoys.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package symbols;
 
@@ -23,5 +15,12 @@
 import symbols.Symbols.Symbol;
 
-public class Buoys {
+/**
+ * @author Malcolm Herring
+ */
+public final class Buoys {
+    private Buoys() {
+        // Hide default constructor for utilities classes
+    }
+
     // CHECKSTYLE.OFF: LineLength
     public static final Symbol Barrel = new Symbol();
Index: applications/editors/josm/plugins/seachart/src/symbols/Facilities.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/symbols/Facilities.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/symbols/Facilities.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package symbols;
 
@@ -26,5 +18,12 @@
 import symbols.Symbols.Symbol;
 
-public class Facilities {
+/**
+ * @author Malcolm Herring
+ */
+public final class Facilities {
+    private Facilities() {
+        // Hide default constructor for utilities classes
+    }
+
     // CHECKSTYLE.OFF: LineLength
     private static final Symbol Facility = new Symbol();
Index: applications/editors/josm/plugins/seachart/src/symbols/Harbours.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/symbols/Harbours.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/symbols/Harbours.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package symbols;
 
@@ -24,5 +16,12 @@
 import symbols.Symbols.Symbol;
 
-public class Harbours {
+/**
+ * @author Malcolm Herring
+ */
+public final class Harbours {
+    private Harbours() {
+        // Hide default constructor for utilities classes
+    }
+
     // CHECKSTYLE.OFF: LineLength
     public static final Symbol Anchor = new Symbol();
Index: applications/editors/josm/plugins/seachart/src/symbols/Landmarks.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/symbols/Landmarks.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/symbols/Landmarks.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package symbols;
 
@@ -24,5 +16,12 @@
 import symbols.Symbols.Symbol;
 
-public class Landmarks {
+/**
+ * @author Malcolm Herring
+ */
+public final class Landmarks {
+    private Landmarks() {
+        // Hide default constructor for utilities classes
+    }
+
     // CHECKSTYLE.OFF: LineLength
     private static final Symbol Base = new Symbol();
Index: applications/editors/josm/plugins/seachart/src/symbols/Notices.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/symbols/Notices.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/symbols/Notices.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package symbols;
 
@@ -35,5 +27,12 @@
 import symbols.Symbols.Symbol;
 
-public class Notices {
+/**
+ * @author Malcolm Herring
+ */
+public final class Notices {
+    private Notices() {
+        // Hide default constructor for utilities classes
+    }
+
     // CHECKSTYLE.OFF: LineLength
     private static final Symbol Bollard = new Symbol();
Index: applications/editors/josm/plugins/seachart/src/symbols/Symbols.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/symbols/Symbols.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/symbols/Symbols.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package symbols;
 
@@ -25,5 +17,12 @@
 import java.util.ArrayList;
 
-public class Symbols {
+/**
+ * @author Malcolm Herring
+ */
+public final class Symbols {
+    private Symbols() {
+        // Hide default constructor for utilities classes
+    }
+
     // CHECKSTYLE.OFF: LineLength
     public static final Color Yland = new Color(0xedbc0c);
Index: applications/editors/josm/plugins/seachart/src/symbols/Topmarks.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/symbols/Topmarks.java	(revision 32906)
+++ applications/editors/josm/plugins/seachart/src/symbols/Topmarks.java	(revision 32907)
@@ -1,11 +1,3 @@
-/* Copyright 2014 Malcolm Herring
- *
- * This is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
- */
-
+// License: GPL. For details, see LICENSE file.
 package symbols;
 
@@ -28,5 +20,13 @@
 import symbols.Symbols.Symbol;
 
-public class Topmarks {
+/**
+ * @author Malcolm Herring
+ */
+public final class Topmarks {
+
+    private Topmarks() {
+        // Hide default constructor for utilities classes
+    }
+
     // CHECKSTYLE.OFF: LineLength
     public static final Symbol RadarReflector = new Symbol();
