Index: /applications/editors/josm/plugins/seachart/jicons/src/jicons/Jicons.java
===================================================================
--- /applications/editors/josm/plugins/seachart/jicons/src/jicons/Jicons.java	(revision 31531)
+++ /applications/editors/josm/plugins/seachart/jicons/src/jicons/Jicons.java	(revision 31532)
@@ -35,5 +35,4 @@
 import s57.S57map.*;
 import render.*;
-import render.Rules.RuleSet;
 
 public class Jicons {
@@ -80,5 +79,5 @@
 							img = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
 							g2 = img.createGraphics();
-							Renderer.reRender(g2, RuleSet.SEAMARK, new Rectangle(x, y, w, h), 16, s / Renderer.symbolScale[16], map, context);
+							Renderer.reRender(g2, new Rectangle(x, y, w, h), 16, s / Renderer.symbolScale[16], map, context);
 							try {
 								ImageIO.write(img, "png", new File(args[1] + file + ".png"));
@@ -94,5 +93,5 @@
 							SVGGraphics2D svgGenerator = new SVGGraphics2D(document);
 							svgGenerator.setSVGCanvasSize(new Dimension(w, h));
-							Renderer.reRender(svgGenerator, RuleSet.SEAMARK, new Rectangle(x, y, w, h), 16, s / Renderer.symbolScale[16], map, context);
+							Renderer.reRender(svgGenerator, new Rectangle(x, y, w, h), 16, s / Renderer.symbolScale[16], map, context);
 							boolean useCSS = true;
 							Writer out = null;
@@ -192,23 +191,23 @@
 	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() {
 			return new Color(0, true);
 		}
+
+		public RuleSet ruleset() {
+			return RuleSet.SEAMARK;
+		}
 	}
 }
Index: /applications/editors/josm/plugins/seachart/jrender/src/jrender/Jrender.java
===================================================================
--- /applications/editors/josm/plugins/seachart/jrender/src/jrender/Jrender.java	(revision 31531)
+++ /applications/editors/josm/plugins/seachart/jrender/src/jrender/Jrender.java	(revision 31532)
@@ -10,4 +10,5 @@
 package jrender;
 
+import java.awt.Color;
 import java.awt.Graphics2D;
 import java.awt.Rectangle;
@@ -36,5 +37,5 @@
 import symbols.*;
 import render.*;
-import render.Rules.RuleSet;
+import render.ChartContext.RuleSet;
 
 public class Jrender {
@@ -66,5 +67,4 @@
 	  }
 	  
-		@Override
 		public Point2D getPoint(Snode coord) {
 			double x = (Math.toDegrees(coord.lon) - minlon) * 256.0 * 2048.0 / 180.0;
@@ -73,7 +73,18 @@
 		}
 
-		@Override
 		public double mile(Feature feature) {
 			return mile;
+		}
+
+		public boolean clip() {
+			return false;
+		}
+
+		public Color background() {
+			return new Color(0, true);
+		}
+
+		public RuleSet ruleset() {
+			return RuleSet.ALL;
 		}
 	}
@@ -197,5 +208,5 @@
 			} else if (ln.contains("<osm")) {
 				inOsm = true;
-				map = new S57map();
+				map = new S57map(context.ruleset() == RuleSet.SEAMARK);
 				map.addNode(1, maxlat, minlon);
 				map.addNode(2, minlat, minlon);
@@ -213,5 +224,5 @@
 		Rectangle rect = new Rectangle(size, size);
 		img = new BufferedImage(rect.width, rect.height, BufferedImage.TYPE_INT_ARGB);
-		Renderer.reRender(img.createGraphics(), RuleSet.BASE, rect, zoom, 0.05, map, context);
+		Renderer.reRender(img.createGraphics(), rect, zoom, 0.05, map, context);
 		ByteArrayOutputStream bos = new ByteArrayOutputStream();
 		ImageIO.write(img, "png", bos);
@@ -231,5 +242,5 @@
 			svgGenerator.setClip(rect.x, rect.y, rect.width, rect.height);
 //			svgGenerator.translate(-256, -256);
-			Renderer.reRender(svgGenerator, RuleSet.BASE, rect, zoom, 0.05, map, context);
+			Renderer.reRender(svgGenerator, rect, zoom, 0.05, map, context);
 			svgGenerator.stream(dstdir + "tst_" + zoom + "-" + xtile + "-" + ytile + ".svg");
 //		}
@@ -244,5 +255,5 @@
 		g2.scale(s, s);
 		g2.translate(-(256 + (xn * 256 / s)), -(256 + (yn * 256 / s)));
-		Renderer.reRender(g2, RuleSet.BASE, new Rectangle(256, 256), zoom, 1, map, context);
+		Renderer.reRender(g2, new Rectangle(256, 256), zoom, 1, map, context);
 		ByteArrayOutputStream bos = new ByteArrayOutputStream();
 		ImageIO.write(img, "png", bos);
Index: /applications/editors/josm/plugins/seachart/src/render/ChartContext.java
===================================================================
--- /applications/editors/josm/plugins/seachart/src/render/ChartContext.java	(revision 31531)
+++ /applications/editors/josm/plugins/seachart/src/render/ChartContext.java	(revision 31532)
@@ -16,7 +16,10 @@
 
 public interface ChartContext {
+	public enum RuleSet { ALL, BASE, SEAMARK }
+
 	Point2D getPoint(Snode coord);
 	double mile(Feature feature);
 	boolean clip();
 	Color background();
+	RuleSet ruleset();
 }
Index: /applications/editors/josm/plugins/seachart/src/render/Renderer.java
===================================================================
--- /applications/editors/josm/plugins/seachart/src/render/Renderer.java	(revision 31531)
+++ /applications/editors/josm/plugins/seachart/src/render/Renderer.java	(revision 31532)
@@ -16,5 +16,4 @@
 import java.util.*;
 
-import render.Rules.*;
 import s57.S57val.*;
 import s57.S57map;
@@ -36,5 +35,5 @@
 	static int zoom;
 
-	public static void reRender(Graphics2D g, RuleSet set, Rectangle rect, int z, double factor, S57map m, ChartContext c) {
+	public static void reRender(Graphics2D g, Rectangle rect, int z, double factor, S57map m, ChartContext c) {
 		g2 = g;
 		zoom = z;
@@ -53,5 +52,5 @@
 			g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
 			g2.setStroke(new BasicStroke(0, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER));
-			Rules.rules(set);
+			Rules.rules();
 		}
 	}
Index: /applications/editors/josm/plugins/seachart/src/render/Rules.java
===================================================================
--- /applications/editors/josm/plugins/seachart/src/render/Rules.java	(revision 31531)
+++ /applications/editors/josm/plugins/seachart/src/render/Rules.java	(revision 31532)
@@ -22,4 +22,5 @@
 import s57.S57obj.*;
 import s57.S57map.*;
+import render.ChartContext.RuleSet;
 import render.Renderer.*;
 import symbols.*;
@@ -28,6 +29,4 @@
 public class Rules {
 	
-	public enum RuleSet { ALL, BASE, SEAMARK }
-
 	static final EnumMap<ColCOL, Color> bodyColours = new EnumMap<ColCOL, Color>(ColCOL.class);
 	static {
@@ -173,5 +172,4 @@
 	static Feature feature;
 	static ArrayList<Feature> objects;
-	static RuleSet ruleset;
 	
 	static boolean testObject(Obj obj) {
@@ -183,7 +181,6 @@
 	}
 	
-	public static void rules (RuleSet set) {
-		ruleset = set;
-		if ((set == RuleSet.ALL) || (set == RuleSet.BASE)) {
+	public static void rules () {
+		if ((Renderer.context.ruleset() == RuleSet.ALL) || (Renderer.context.ruleset() == RuleSet.BASE)) {
 			if (testObject(Obj.LNDARE)) for (Feature f : objects) if (testFeature(f)) areas();
 			if (testObject(Obj.BUAARE)) for (Feature f : objects) if (testFeature(f)) areas();
@@ -202,5 +199,5 @@
 		}
 		if (testObject(Obj.SLCONS)) for (Feature f : objects) if (testFeature(f)) shoreline();
-		if ((set == RuleSet.ALL) || (set == RuleSet.SEAMARK)) {
+		if ((Renderer.context.ruleset() == RuleSet.ALL) || (Renderer.context.ruleset() == RuleSet.SEAMARK)) {
 			if (testObject(Obj.PIPSOL)) for (Feature f : objects) if (testFeature(f)) pipelines();
 			if (testObject(Obj.CBLSUB)) for (Feature f : objects) if (testFeature(f)) cables();
@@ -443,14 +440,10 @@
 					AttMap topmap = feature.objs.get(Obj.TOPMAR).get(0);
 					if (topmap.containsKey(Att.TOPSHP)) {
-						Symbol topmark = Topmarks.Shapes.get(((ArrayList<TopSHP>)(topmap.get(Att.TOPSHP).val)).get(0));
-						if (topmark != null)
-							Renderer.symbol(feature, topmark, getScheme(feature, Obj.TOPMAR), Topmarks.BeaconDelta);
+						Renderer.symbol(feature, Topmarks.Shapes.get(((ArrayList<TopSHP>)(topmap.get(Att.TOPSHP).val)).get(0)), getScheme(feature, 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)) {
-						Symbol topmark = Topmarks.Shapes.get(((ArrayList<TopSHP>)(topmap.get(Att.TOPSHP).val)).get(0));
-						if (topmark != null)
-							Renderer.symbol(feature, topmark, getScheme(feature, Obj.DAYMAR), Topmarks.BeaconDelta);
+						Renderer.symbol(feature, Topmarks.Shapes.get(((ArrayList<TopSHP>)(topmap.get(Att.TOPSHP).val)).get(0)), getScheme(feature, Obj.DAYMAR), Topmarks.BeaconDelta);
 					}
 				}
@@ -468,14 +461,10 @@
 				AttMap topmap = feature.objs.get(Obj.TOPMAR).get(0);
 				if (topmap.containsKey(Att.TOPSHP)) {
-					Symbol topmark = Topmarks.Shapes.get(((ArrayList<TopSHP>)(topmap.get(Att.TOPSHP).val)).get(0));
-					if (topmark != null)
-						Renderer.symbol(feature, topmark, getScheme(feature, Obj.TOPMAR), Topmarks.BuoyDeltas.get(shape));
+					Renderer.symbol(feature, Topmarks.Shapes.get(((ArrayList<TopSHP>)(topmap.get(Att.TOPSHP).val)).get(0)), getScheme(feature, 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)) {
-					Symbol topmark = Topmarks.Shapes.get(((ArrayList<TopSHP>)(topmap.get(Att.TOPSHP).val)).get(0));
-					if (topmark != null)
-						Renderer.symbol(feature, topmark, getScheme(feature, Obj.DAYMAR), Topmarks.BuoyDeltas.get(shape));
+					Renderer.symbol(feature, Topmarks.Shapes.get(((ArrayList<TopSHP>)(topmap.get(Att.TOPSHP).val)).get(0)), getScheme(feature, Obj.DAYMAR), Topmarks.BuoyDeltas.get(shape));
 				}
 			}
@@ -1035,10 +1024,10 @@
 	private static void shoreline() {
 		CatSLC cat = (CatSLC) getAttEnum(feature, feature.type, 0, Att.CATSLC);
-		if ((ruleset == RuleSet.ALL) || (ruleset == RuleSet.BASE)) {
+		if ((Renderer.context.ruleset() == RuleSet.ALL) || (Renderer.context.ruleset() == RuleSet.BASE)) {
 			if ((cat != CatSLC.SLC_SWAY) && (cat != CatSLC.SLC_TWAL)) {
 				Renderer.lineVector(feature, new LineStyle(Color.black, 10, Symbols.Yland));
 			}
 		}
-		if ((ruleset == RuleSet.ALL) || (ruleset == RuleSet.SEAMARK)) {
+		if ((Renderer.context.ruleset() == RuleSet.ALL) || (Renderer.context.ruleset() == RuleSet.SEAMARK)) {
 			if (Renderer.zoom >= 12) {
 				switch (cat) {
Index: /applications/editors/josm/plugins/seachart/src/s57/S57osm.java
===================================================================
--- /applications/editors/josm/plugins/seachart/src/s57/S57osm.java	(revision 31531)
+++ /applications/editors/josm/plugins/seachart/src/s57/S57osm.java	(revision 31532)
@@ -37,5 +37,5 @@
 		OSMtags.put("waterway=riverbank", new KeyVal<>(Obj.RIVBNK, Att.UNKATT, null, null)); OSMtags.put("waterway=river", new KeyVal<>(Obj.RIVERS, Att.UNKATT, null, null));
 		OSMtags.put("waterway=canal", new KeyVal<>(Obj.CANALS, Att.UNKATT, null, null)); OSMtags.put("waterway=dock", new KeyVal<>(Obj.HRBBSN, Att.UNKATT, null, null));
-		OSMtags.put("waterway=lock", new KeyVal<>(Obj.HRBBSN, Att.UNKATT, null, null)); 
+		OSMtags.put("waterway=lock", new KeyVal<>(Obj.HRBBSN, Att.UNKATT, null, null)); OSMtags.put("landuse=basin", new KeyVal<>(Obj.LAKARE, Att.UNKATT, null, null));
 		OSMtags.put("wetland=tidalflat", new KeyVal<Double>(Obj.DEPARE, Att.DRVAL2, Conv.F, (Double)0.0)); OSMtags.put("tidal=yes", new KeyVal<Double>(Obj.DEPARE, Att.DRVAL2, Conv.F, (Double)0.0));
 		OSMtags.put("natural=mud", new KeyVal<>(Obj.DEPARE, Att.UNKATT, null, null)); OSMtags.put("natural=sand", new KeyVal<>(Obj.DEPARE, Att.UNKATT, null, null));
Index: /applications/editors/josm/plugins/seachart/src/seachart/ChartImage.java
===================================================================
--- /applications/editors/josm/plugins/seachart/src/seachart/ChartImage.java	(revision 31531)
+++ /applications/editors/josm/plugins/seachart/src/seachart/ChartImage.java	(revision 31532)
@@ -30,5 +30,4 @@
 import render.ChartContext;
 import render.Renderer;
-import render.Rules.RuleSet;
 import s57.S57map.*;
 import symbols.Symbols;
@@ -67,5 +66,5 @@
 	public void paint(Graphics2D g2, MapView mv, Bounds bb) {
 		Rectangle rect = Main.map.mapView.getBounds();
-		Renderer.reRender(g2, RuleSet.ALL, rect, zoom, Math.pow(2, (zoom-12)), SeachartAction.map, this);
+		Renderer.reRender(g2, rect, zoom, Math.pow(2, (zoom-12)), SeachartAction.map, this);
 		g2.setPaint(Color.black);
 		g2.setFont(new Font("Arial", Font.BOLD, 20));
@@ -102,3 +101,7 @@
 		return (Symbols.Bwater);
 	}
+
+	public RuleSet ruleset() {
+		return RuleSet.ALL;
+	}
 }
