Index: applications/editors/josm/plugins/seachart/jicons/src/jicons/Jicons.java
===================================================================
--- applications/editors/josm/plugins/seachart/jicons/src/jicons/Jicons.java	(revision 36266)
+++ applications/editors/josm/plugins/seachart/jicons/src/jicons/Jicons.java	(revision 36267)
@@ -220,4 +220,10 @@
             return RuleSet.ALL;
         }
+
+		@Override
+		public Chart chart() {
+			// TODO Auto-generated method stub
+			return null;
+		}
     }
 }
Index: applications/editors/josm/plugins/seachart/jrender/src/jrender/Jrender.java
===================================================================
--- applications/editors/josm/plugins/seachart/jrender/src/jrender/Jrender.java	(revision 36266)
+++ applications/editors/josm/plugins/seachart/jrender/src/jrender/Jrender.java	(revision 36267)
@@ -125,5 +125,5 @@
             }
         }
-        if ((z >= 12) && (z < 18) && ((z < 16) || (bos.size() > empty))) {
+        if ((z >= 12) && (z < 19) && ((z < 16) || (bos.size() > empty))) {
             for (int x = 0; x < 2; x++) {
                 for (int y = 0; y < 2; y++) {
@@ -144,5 +144,5 @@
             delfile.delete();
         }
-        if ((z < 18)) {
+        if ((z < 19)) {
             for (int x = 0; x < 2; x++) {
                 for (int y = 0; y < 2; y++) {
Index: applications/editors/josm/plugins/seachart/src/render/Renderer.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/render/Renderer.java	(revision 36266)
+++ applications/editors/josm/plugins/seachart/src/render/Renderer.java	(revision 36267)
@@ -559,5 +559,5 @@
             point = context.getPoint(Rules.feature.geom.centre);
             g2.drawImage(image, new AffineTransformOp(AffineTransform.getScaleInstance(sScale, sScale), AffineTransformOp.TYPE_NEAREST_NEIGHBOR),
-                    (int) (point.getX() - (50 * sScale)), (int) (point.getY() - (50 * sScale)));
+                    (int) (point.getX() - (sScale * image.getWidth() / 2)), (int) (point.getY() - (sScale * image.getHeight() / 2)));
             break;
         case AREA:
@@ -583,5 +583,5 @@
                 }
             }
-            g2.setPaint(new TexturePaint(image, new Rectangle(0, 0, 1 + (int) (300 * sScale), 1 + (int) (300 * sScale))));
+            g2.setPaint(new TexturePaint(image, new Rectangle(0, 0, (1 + (int) (150 * sScale)), (1 + (int) (150 * sScale)))));
             g2.fill(p);
             break;
Index: applications/editors/josm/plugins/seachart/src/render/Rules.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/render/Rules.java	(revision 36266)
+++ applications/editors/josm/plugins/seachart/src/render/Rules.java	(revision 36267)
@@ -43,5 +43,4 @@
 import s57.S57val.CatREA;
 import s57.S57val.CatROD;
-import s57.S57val.CatROS;
 import s57.S57val.CatSCF;
 import s57.S57val.CatSEA;
@@ -50,4 +49,5 @@
 import s57.S57val.CatSIW;
 import s57.S57val.CatSLC;
+import s57.S57val.CatVAN;
 import s57.S57val.CatWED;
 import s57.S57val.CatWRK;
@@ -56,6 +56,6 @@
 import s57.S57val.FncFNC;
 import s57.S57val.MarSYS;
+import s57.S57val.NatQUA;
 import s57.S57val.NatSUR;
-import s57.S57val.NatQUA;
 import s57.S57val.StsSTS;
 import s57.S57val.TecSOU;
@@ -64,5 +64,4 @@
 import s57.S57val.UniHLU;
 import s57.S57val.WatLEV;
-import s57.S57val.CatVAN;
 import symbols.Areas;
 import symbols.Beacons;
@@ -551,5 +550,5 @@
 			break;
 		case SNDWAV:
-			if (Renderer.zoom >= 12)
+			if (Renderer.zoom >= 14)
 				Renderer.fillPattern(Areas.Sandwaves);
 			break;
@@ -560,5 +559,5 @@
 				if (hasAttribute(feature.type, Att.NATSUR)) {
 					ArrayList<NatSUR> surs = (ArrayList<NatSUR>) getAttList(feature.type, Att.NATSUR);
-					ArrayList<NatQUA> quas = new ArrayList<NatQUA>();
+					ArrayList<NatQUA> quas = new ArrayList<>();
 					if (hasAttribute(feature.type, Att.NATQUA)) {
 						quas = (ArrayList<NatQUA>) getAttList(feature.type, Att.NATQUA);
@@ -608,4 +607,5 @@
 						case SUR_MUD:
 							str += "M";
+
 							break;
 						case SUR_CLAY:
@@ -617,10 +617,13 @@
 						case SUR_SAND:
 							str += "S";
+
 							break;
 						case SUR_STON:
 							str += "St";
+
 							break;
 						case SUR_GRVL:
 							str += "G";
+
 							break;
 						case SUR_PBBL:
@@ -632,4 +635,7 @@
 						case SUR_ROCK:
 							str += "R";
+							if (feature.geom.prim != Pflag.POINT) {
+								Renderer.lineSymbols(Areas.Rocks, 1, null, null, 0, Color.black);
+							}
 							break;
 						case SUR_LAVA:
@@ -638,4 +644,7 @@
 						case SUR_CORL:
 							str += "Co";
+							if (feature.geom.prim != Pflag.POINT) {
+								Renderer.lineSymbols(Areas.Coral, 1, null, null, 0, Color.black);
+							}
 							break;
 						case SUR_SHEL:
@@ -661,8 +670,8 @@
 				switch ((CatWED) getAttEnum(feature.type, Att.CATWED)) {
 				case WED_KELP:
-					if (feature.geom.prim == Pflag.AREA) {
-						Renderer.fillPattern(Areas.KelpA);
+					if (feature.geom.prim == Pflag.POINT) {
+						Renderer.symbol(Areas.KelpP);
 					} else {
-						Renderer.symbol(Areas.KelpS);
+						Renderer.fillPattern(Areas.Kelp);
 					}
 					break;
@@ -671,5 +680,9 @@
 					break;
 				case WED_SGRS:
-					Renderer.labelText("Sg", new Font("Arial", Font.ITALIC, 40), Color.black, new Delta(Handle.CC));
+					if (feature.geom.prim == Pflag.POINT) {
+						Renderer.symbol(Areas.SeagrassP);
+					} else {
+						Renderer.fillPattern(Areas.Seagrass);
+					}
 					break;
 				case WED_SGSO:
@@ -681,8 +694,16 @@
 			break;
 		case SEGRAS:
-			Renderer.labelText("Sg", new Font("Arial", Font.ITALIC, 40), Color.black, new Delta(Handle.CC));
+			if (Renderer.zoom >= 14) {
+				if (feature.geom.prim == Pflag.POINT) {
+					Renderer.symbol(Areas.SeagrassP);
+				} else {
+					Renderer.fillPattern(Areas.Seagrass);
+				}
+			}
 			break;
 		case SPRING:
-			Renderer.symbol(Areas.Spring);
+			if (Renderer.zoom >= 14) {
+				Renderer.symbol(Areas.Spring);
+			}
 			break;
 		case SPLARE:
@@ -1273,9 +1294,7 @@
 			        Renderer.symbol(Harbours.Dolphin);
 			    }
-	            Signals.addSignals();
 				break;
 			case MOR_DDPN:
 				Renderer.symbol(Harbours.DeviationDolphin);
-	            Signals.addSignals();
 				break;
 			case MOR_BLRD:
@@ -1291,11 +1310,12 @@
 			        Renderer.symbol(Buoys.Shapes.get(shape), (1.0 / (1.0 + (0.25 * (18 - Renderer.zoom)))), getScheme(feature.type));
 			        Renderer.symbol(Topmarks.TopMooring, (1.0 / (1.0 + (0.25 * (18 - Renderer.zoom)))), Topmarks.BuoyDeltas.get(shape));
-		            Signals.addSignals();
 		            addName(15, new Font("Arial", Font.BOLD, 40), new Delta(Handle.BL, AffineTransform.getTranslateInstance(60, -50)));
 			    }
 				break;
 			default:
-				break;
-			}
+				Renderer.symbol(Harbours.Post);
+				break;
+			}
+            Signals.addSignals();
 		}
 	}
@@ -1425,5 +1445,5 @@
 
 	private static void pipelines() {
-		if ((Renderer.zoom >= 14)  && (feature.geom.length < 20)) {
+		if ((Renderer.zoom >= 14) && (feature.geom.length < 20) || (Renderer.zoom < 12) && (feature.geom.length >= 20)) {
 			if (feature.type == Obj.PIPSOL) {
 				switch ((CatPIP) getAttEnum(feature.type, Att.CATPIP)) {
@@ -1776,5 +1796,5 @@
         }
     }
-        
+
 	private static void waterways() {
 		Renderer.lineVector(new LineStyle(Symbols.Bwater, 20, (feature.geom.prim == Pflag.AREA) ? Symbols.Bwater : null));
Index: applications/editors/josm/plugins/seachart/src/s57/S57obj.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/s57/S57obj.java	(revision 36266)
+++ applications/editors/josm/plugins/seachart/src/s57/S57obj.java	(revision 36267)
@@ -115,5 +115,5 @@
         ObjStr.put(Obj.RCTLPT, "recommended_traffic_lane"); ObjStr.put(Obj.RSCSTA, "rescue_station"); ObjStr.put(Obj.RESARE, "restricted_area");
         ObjStr.put(Obj.RETRFL, "retro_reflector"); ObjStr.put(Obj.RIVERS, "river"); ObjStr.put(Obj.ROADWY, "road"); ObjStr.put(Obj.RUNWAY, "runway");
-        ObjStr.put(Obj.SNDWAV, "sandwaves"); ObjStr.put(Obj.SEAARE, "sea_area"); ObjStr.put(Obj.SPLARE, "seaplane_landing_area"); ObjStr.put(Obj.SBDARE, "seabed_area");
+        ObjStr.put(Obj.SNDWAV, "sand_waves"); ObjStr.put(Obj.SEAARE, "sea_area"); ObjStr.put(Obj.SPLARE, "seaplane_landing_area"); ObjStr.put(Obj.SBDARE, "seabed_area");
         ObjStr.put(Obj.SLCONS, "shoreline_construction"); ObjStr.put(Obj.SISTAT, "signal_station_traffic"); ObjStr.put(Obj.SISTAW, "signal_station_warning");
         ObjStr.put(Obj.SILTNK, "tank"); ObjStr.put(Obj.SLOTOP, "slope_topline"); ObjStr.put(Obj.SLOGRD, "sloping_ground"); ObjStr.put(Obj.SMCFAC, "small_craft_facility");
Index: applications/editors/josm/plugins/seachart/src/symbols/Areas.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/symbols/Areas.java	(revision 36266)
+++ applications/editors/josm/plugins/seachart/src/symbols/Areas.java	(revision 36267)
@@ -281,34 +281,95 @@
     static {
         Spring.add(new Instr(Form.FILL, Color.black));
-        Spring.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
-        Spring.add(new Instr(Form.ELPS, new Ellipse2D.Double(0, 0, 7.5, 7.5)));
-        Spring.add(new Instr(Form.ELPS, new Ellipse2D.Double(-20, 0, 7.5, 7.5)));
-        Spring.add(new Instr(Form.ELPS, new Ellipse2D.Double(-40, 0, 7.5, 7.5)));
-        Spring.add(new Instr(Form.ELPS, new Ellipse2D.Double(20, 0, 7.5, 7.5)));
-        Spring.add(new Instr(Form.ELPS, new Ellipse2D.Double(40, 0, 7.5, 7.5)));
-        Spring.add(new Instr(Form.ELPS, new Ellipse2D.Double(0, -20, 7.5, 7.5)));
-        Spring.add(new Instr(Form.ELPS, new Ellipse2D.Double(0, -40, 7.5, 7.5)));
-        Spring.add(new Instr(Form.ELPS, new Ellipse2D.Double(0, -60, 7.5, 7.5)));
-        Spring.add(new Instr(Form.ELPS, new Ellipse2D.Double(0, -80, 7.5, 7.5)));
-        Spring.add(new Instr(Form.ELPS, new Ellipse2D.Double(-15, -90, 7.5, 7.5)));
-        Spring.add(new Instr(Form.ELPS, new Ellipse2D.Double(15, -90, 7.5, 7.5)));
-        Spring.add(new Instr(Form.ELPS, new Ellipse2D.Double(-35, -85, 7.5, 7.5)));
-        Spring.add(new Instr(Form.ELPS, new Ellipse2D.Double(35, -85, 7.5, 7.5)));
-        Spring.add(new Instr(Form.ELPS, new Ellipse2D.Double(-50, -70, 7.5, 7.5)));
-        Spring.add(new Instr(Form.ELPS, new Ellipse2D.Double(50, -70, 7.5, 7.5)));
-    }
-
-    public static final Symbol KelpS = new Symbol();
-    static {
-        KelpS.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
-        Path2D.Double p = new Path2D.Double(); p.moveTo(-60, 0); p.curveTo(-20, -20, -24, 40, 24, 20); p.moveTo(-60, 0); p.quadTo(-48, 20, -32, 12);
-        p.moveTo(-36, -4); p.quadTo(-24, -24, -4, -16); p.quadTo(8, -32, 20, -24); p.moveTo(-4, -16); p.quadTo(8, 0, 20, -8);
-        p.moveTo(-8, 20); p.quadTo(12, 0, 36, 8); p.quadTo(48, 24, 60, 16); p.moveTo(36, 8); p.quadTo(48, -8, 60, 0);
-        KelpS.add(new Instr(Form.PLIN, p));
-    }
-
-    public static final BufferedImage KelpA = new BufferedImage(240, 240, BufferedImage.TYPE_INT_ARGB);
-    static {
-        Graphics2D g2 = KelpA.createGraphics();
+        Spring.add(new Instr(Form.STRK, new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+        Spring.add(new Instr(Form.RSHP, new Ellipse2D.Double(0, 0, 10, 10)));
+        Spring.add(new Instr(Form.RSHP, new Ellipse2D.Double(-20, 0, 10, 10)));
+        Spring.add(new Instr(Form.RSHP, new Ellipse2D.Double(-40, 0, 10, 10)));
+        Spring.add(new Instr(Form.RSHP, new Ellipse2D.Double(20, 0, 10, 10)));
+        Spring.add(new Instr(Form.RSHP, new Ellipse2D.Double(40, 0, 10, 10)));
+        Spring.add(new Instr(Form.RSHP, new Ellipse2D.Double(0, -20, 10, 10)));
+        Spring.add(new Instr(Form.RSHP, new Ellipse2D.Double(0, -40, 10, 10)));
+        Spring.add(new Instr(Form.RSHP, new Ellipse2D.Double(0, -60, 10, 10)));
+        Spring.add(new Instr(Form.RSHP, new Ellipse2D.Double(0, -80, 10, 10)));
+        Spring.add(new Instr(Form.RSHP, new Ellipse2D.Double(-15, -90, 10, 10)));
+        Spring.add(new Instr(Form.RSHP, new Ellipse2D.Double(15, -90, 10, 10)));
+        Spring.add(new Instr(Form.RSHP, new Ellipse2D.Double(-35, -85, 10, 10)));
+        Spring.add(new Instr(Form.RSHP, new Ellipse2D.Double(35, -85, 10, 10)));
+        Spring.add(new Instr(Form.RSHP, new Ellipse2D.Double(-50, -70, 10, 10)));
+        Spring.add(new Instr(Form.RSHP, new Ellipse2D.Double(50, -70, 10, 10)));
+    }
+
+    public static final BufferedImage Seagrass = new BufferedImage(240, 240, BufferedImage.TYPE_INT_ARGB);
+    static {
+        Graphics2D g2 = Seagrass.createGraphics();
+        g2.setStroke(new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
+        g2.setBackground(new Color(0, true));
+        g2.clearRect(0, 0, 240, 240);
+        g2.setPaint(new Color(0x2E8E20));
+        Path2D.Double p = new Path2D.Double();
+        p.moveTo(90, 100); p.quadTo(50, 93, 29, 110);
+        p.moveTo(78, 98); p.quadTo(120, 75, 115, 50);
+        p.moveTo(45, 100); p.quadTo(65, 80, 55, 60); p.quadTo(50, 35, 60, 10);
+        p.moveTo(32, 108); p.quadTo(50, 90, 43, 70); p.quadTo(35, 40, 41, 18);
+        p.moveTo(32, 108); p.quadTo(0, 70, 16, 46);
+        p.moveTo(42, 103); p.quadTo(13, 75, 32, 31);
+        p.moveTo(23, 95); p.quadTo(35, 90, 34, 63);
+        p.moveTo(59, 99); p.quadTo(75, 75, 71, 22);
+        p.moveTo(66, 98); p.quadTo(85, 75, 82, 27);
+        p.moveTo(55, 97); p.quadTo(110, 50, 106, 30);
+        p.moveTo(90+120, 100+120); p.quadTo(50+120, 93+120, 29+120, 110+120);
+        p.moveTo(78+120, 98+120); p.quadTo(120+120, 75+120, 115+120, 50+120);
+        p.moveTo(45+120, 100+120); p.quadTo(65+120, 80+120, 55+120, 60+120); p.quadTo(50+120, 35+120, 60+120, 10+120);
+        p.moveTo(32+120, 108+120); p.quadTo(50+120, 90+120, 43+120, 70+120); p.quadTo(35+120, 40+120, 41+120, 18+120);
+        p.moveTo(32+120, 108+120); p.quadTo(0+120, 70+120, 16+120, 46+120);
+        p.moveTo(42+120, 103+120); p.quadTo(13+120, 75+120, 32+120, 31+120);
+        p.moveTo(23+120, 95+120); p.quadTo(35+120, 90+120, 34+120, 63+120);
+        p.moveTo(59+120, 99+120); p.quadTo(75+120, 75+120, 71+120, 22+120);
+        p.moveTo(66+120, 98+120); p.quadTo(85+120, 75+120, 82+120, 27+120);
+        p.moveTo(55+120, 97+120); p.quadTo(110+120, 50+120, 106+120, 30+120);
+        g2.draw(p);
+    }
+
+    public static final Symbol SeagrassP = new Symbol();
+    static {
+    	SeagrassP.add(new Instr(Form.BBOX, new Rectangle2D.Double(-60, -60, 120, 120)));
+    	SeagrassP.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+        SeagrassP.add(new Instr(Form.FILL, new Color(0x2E8E20)));
+        Path2D.Double p = new Path2D.Double();
+        p.moveTo(30, 40); p.quadTo(-10, 33, -31, 50);
+        p.moveTo(18, 38); p.quadTo(60, 15, 55, -10);
+        p.moveTo(-15, 40); p.quadTo(5, 20, -5, 0); p.quadTo(-10, -25, 0, -50);
+        p.moveTo(-28, 48); p.quadTo(-10, 30, -17, 10); p.quadTo(-25, -20, -19, -42);
+        p.moveTo(-28, 48); p.quadTo(-60, 10, -44, -14);
+        p.moveTo(-18, 43); p.quadTo(-47, 15, -28, -29);
+        p.moveTo(-37, 35); p.quadTo(-25, 30, -26, 3);
+        p.moveTo(-1, 39); p.quadTo(15, 15, 11, -38);
+        p.moveTo(6, 38); p.quadTo(25, 15, 22, -33);
+        SeagrassP.add(new Instr(Form.PLIN, p));
+    }
+
+    public static final Symbol Rocks = new Symbol();
+    static {
+        Rocks.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -60, 60, 120)));
+        Rocks.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+        Path2D.Double p = new Path2D.Double(); 
+        p.moveTo(8, -50); p.quadTo(5, -58, 0, -60); p.quadTo(-15, -50, -8, -30); p.quadTo(-10, -20, 0, -15); p.quadTo(10, -10, 15, -25);
+        p.moveTo(0, -15); p.quadTo(-18, -6, -12, 10); p.quadTo(-9, 20, 0, 20); p.quadTo(8, 16, 12, 25);
+        p.moveTo(0, 20); p.quadTo(-15, 26, -10, 44); p.quadTo(-12, 55, 0, 60);
+        Rocks.add(new Instr(Form.PLIN, p));
+    }
+
+    public static final Symbol Coral = new Symbol();
+    static {
+        Coral.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -60, 40, 120)));
+        Coral.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+        Path2D.Double p = new Path2D.Double(); p.moveTo(0, -60); p.lineTo(0, -50); p.moveTo(15, -48); p.lineTo(-20, -50); 
+        p.lineTo(0, -30); p.lineTo(-20, -20); p.lineTo(10, 0); p.lineTo(-20, 20); p.lineTo(0, 30); p.lineTo(-20, 50); 
+        p.lineTo(20, 45); p.moveTo(0, 49); p.lineTo(0, 60);
+        Coral.add(new Instr(Form.PLIN, p));
+    }
+
+    public static final BufferedImage Kelp = new BufferedImage(240, 240, BufferedImage.TYPE_INT_ARGB);
+    static {
+        Graphics2D g2 = Kelp.createGraphics();
         g2.setStroke(new BasicStroke(6, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
         g2.setBackground(new Color(0, true));
@@ -322,3 +383,13 @@
         g2.draw(p);
     }
+    
+    public static final Symbol KelpP = new Symbol();
+    static {
+    	KelpP.add(new Instr(Form.BBOX, new Rectangle2D.Double(-60, -60, 120, 120)));
+    	KelpP.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+        Path2D.Double p = new Path2D.Double();
+        p.moveTo(-60, 0); p.curveTo(-20, -20, -16, 40, 24, 20); p.moveTo(-60, 0); p.quadTo(-48, 20, -32, 12); p.moveTo(-36, -4); p.quadTo(-24, -24, -4, -16); p.quadTo(8, -32, 20, -24);
+        p.moveTo(-4, -16); p.quadTo(8, 0, 20, -8); p.moveTo(-8, 16); p.quadTo(12, 0, 36, 8); p.quadTo(48, 24, 60, 16); p.moveTo(36, 8); p.quadTo(48, -8, 60, 0);
+        KelpP.add(new Instr(Form.PLIN, p));
+    }
 }
Index: applications/editors/josm/plugins/seachart/src/symbols/Symbols.java
===================================================================
--- applications/editors/josm/plugins/seachart/src/symbols/Symbols.java	(revision 36266)
+++ applications/editors/josm/plugins/seachart/src/symbols/Symbols.java	(revision 36267)
@@ -153,6 +153,6 @@
     }
 
-    public static class Symbol extends ArrayList<Instr> {
-
+    @SuppressWarnings("serial")
+	public static class Symbol extends ArrayList<Instr> {
         public Symbol() {
             super();
