Index: /applications/editors/josm/plugins/seachart/src/render/Renderer.java
===================================================================
--- /applications/editors/josm/plugins/seachart/src/render/Renderer.java	(revision 32083)
+++ /applications/editors/josm/plugins/seachart/src/render/Renderer.java	(revision 32084)
@@ -568,8 +568,8 @@
 		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), 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), 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())) {
@@ -584,5 +584,4 @@
 	    double offset = 0;
 	    Point2D origin;
-			double arc = (s2 - s1);
 			if (dir) {
 				radial += 10 * sScale;
@@ -604,4 +603,5 @@
 		    }
 			} else {
+				double arc = (s2 > s1) ? (s2 - s1) : (s2 - s1 + 360);
 				double awidth = (Math.toRadians(arc) * radial);
 				if (gwidth < awidth) {
Index: /applications/editors/josm/plugins/seachart/src/render/Rules.java
===================================================================
--- /applications/editors/josm/plugins/seachart/src/render/Rules.java	(revision 32083)
+++ /applications/editors/josm/plugins/seachart/src/render/Rules.java	(revision 32084)
@@ -465,4 +465,5 @@
 				}
 			}
+			addName(feature, 15, new Font("Arial", Font.BOLD, 40), new Delta(Handle.BL, AffineTransform.getTranslateInstance(60, -50)));
 			Signals.addSignals(feature);
 		}
@@ -486,4 +487,5 @@
 				}
 			}
+			addName(feature, 15, new Font("Arial", Font.BOLD, 40), new Delta(Handle.BL, AffineTransform.getTranslateInstance(60, -50)));
 			Signals.addSignals(feature);
 		}
@@ -629,4 +631,5 @@
 		if (feature.objs.get(Obj.TOPMAR) != null)
 			Renderer.symbol(feature, Topmarks.Shapes.get(feature.objs.get(Obj.TOPMAR).get(0).get(Att.TOPSHP).val), getScheme(feature, Obj.TOPMAR), Topmarks.FloatDelta);
+		addName(feature, 15, new Font("Arial", Font.BOLD, 40), new Delta(Handle.BL, AffineTransform.getTranslateInstance(20, -50)));
 		Signals.addSignals(feature);
 	}
@@ -635,4 +638,5 @@
 		if (Renderer.zoom >= 14) {
 			Renderer.symbol(feature, Harbours.TideGauge);
+			addName(feature, 15, new Font("Arial", Font.BOLD, 40), new Delta(Handle.BL, AffineTransform.getTranslateInstance(20, -50)));
 			Signals.addSignals(feature);
 		}
@@ -802,5 +806,5 @@
 		Renderer.symbol(feature, catSym);
 		Renderer.symbol(feature, fncSym);
-		addName(feature, 15, new Font("Arial", Font.BOLD, 80), new Delta(Handle.BL, AffineTransform.getTranslateInstance(60, -50)));
+		addName(feature, 15, new Font("Arial", Font.BOLD, 40), new Delta(Handle.BL, AffineTransform.getTranslateInstance(60, -50)));
 		Signals.addSignals(feature);
 	}
@@ -1010,5 +1014,5 @@
 			} else if (feature.type == Obj.HULKES) {
 				Renderer.lineVector(feature, new LineStyle(Color.black, 4, null, new Color(0xffe000)));
-				addName(feature, 15, new Font("Arial", Font.BOLD, 80));
+				addName(feature, 15, new Font("Arial", Font.BOLD, 40));
 			}
 		}
@@ -1169,5 +1173,5 @@
 			case PILBOP:
 				Renderer.symbol(feature, Harbours.Pilot);
-				addName(feature, 15, new Font("Arial", Font.BOLD, 50), Symbols.Msymb , new Delta(Handle.LC, AffineTransform.getTranslateInstance(70, -40)));
+				addName(feature, 15, new Font("Arial", Font.BOLD, 40), Symbols.Msymb , new Delta(Handle.LC, AffineTransform.getTranslateInstance(70, -40)));
 				CatPIL cat = (CatPIL) getAttEnum(feature, feature.type, 0, Att.CATPIL);
 				if (cat == CatPIL.PIL_HELI) {
Index: /applications/editors/josm/plugins/seachart/src/render/Signals.java
===================================================================
--- /applications/editors/josm/plugins/seachart/src/render/Signals.java	(revision 32083)
+++ /applications/editors/josm/plugins/seachart/src/render/Signals.java	(revision 32084)
@@ -323,5 +323,4 @@
 		}
 		Renderer.symbol(feature, Beacons.LightFlare, new Scheme(LightColours.get(col)), new Delta(Handle.BC, AffineTransform.getRotateInstance(Math.toRadians(120))));
-		if (Renderer.zoom >= 15) {
 			String str = "";
 			if (lights.get(1) != null) {
@@ -375,4 +374,7 @@
 							str += LightLetters.get(cols.get(1));
 					}
+					if (atts.containsKey(Att.SIGPER)) {
+						str += "." + df.format(atts.get(Att.SIGPER).val) + "s";
+					}
 					if (dir && atts.containsKey(Att.ORIENT)) {
 						double orient = (Double) atts.get(Att.ORIENT).val;
@@ -390,4 +392,5 @@
 					Renderer.lightSector(feature, LightColours.get(col1), LightColours.get(col2), radius, s1, s2, dir, (Renderer.zoom >= 15) ? str : "");
 				}
+			if (Renderer.zoom >= 15) {
 				class LitSect {
 					boolean dir;
@@ -404,5 +407,4 @@
 				for (AttMap atts : lights.values()) {
 					LitSect sect = new LitSect();
-					litatts.add(sect);
 					sect.dir = (atts.containsKey(Att.CATLIT)) && (atts.get(Att.CATLIT).val == CatLIT.LIT_DIR);
 					sect.chr = atts.containsKey(Att.LITCHR) ? ((ArrayList<LitCHR>) atts.get(Att.LITCHR).val).get(0) : LitCHR.CHR_UNKN;
@@ -433,4 +435,6 @@
 					sect.col = cols.size() > 0 ? cols.get(0) : ColCOL.COL_UNK;
 					sect.alt = cols.size() > 1 ? cols.get(1) : ColCOL.COL_UNK;
+					if ((sect.chr != LitCHR.CHR_UNKN) && (sect.col != null))
+						litatts.add(sect);
 				}
 				ArrayList<ArrayList<LitSect>> groupings = new ArrayList<>();
@@ -507,4 +511,6 @@
 						str += LightLetters.get(cr.col);
 					}
+					if ((tmp.per > 0) || (tmp.hgt > 0) || (colrng.get(0).rng > 0))
+						str += ".";
 					if (tmp.per > 0)
 						str += df.format(tmp.per) + "s";
@@ -517,5 +523,7 @@
 					str = "";
 				}
-			} else {
+			}
+		} else {
+			if (Renderer.zoom >= 15) {
 				AttMap atts = lights.get(0);
 				ArrayList<CatLIT> cats = new ArrayList<>();
