Index: /applications/editors/josm/plugins/seachart/jicons/examples.xml
===================================================================
--- /applications/editors/josm/plugins/seachart/jicons/examples.xml	(revision 33942)
+++ /applications/editors/josm/plugins/seachart/jicons/examples.xml	(revision 33943)
@@ -21,3 +21,9 @@
     <tag k="seamark:topmark:orientation" v="45" />
   </icon>
+  <icon width="100" height="100" scale="0.5" file="floodlight" format="PNG" >
+    <tag k="seamark:type" v="light" />
+    <tag k="seamark:light:category" v="floodlight" />
+    <tag k="seamark:topmark:shape" v="arrow" />
+    <tag k="seamark:topmark:orientation" v="45" />
+  </icon>
 </icons>
Index: /applications/editors/josm/plugins/seachart/src/render/Rules.java
===================================================================
--- /applications/editors/josm/plugins/seachart/src/render/Rules.java	(revision 33942)
+++ /applications/editors/josm/plugins/seachart/src/render/Rules.java	(revision 33943)
@@ -555,13 +555,20 @@
 			} else {
 				Renderer.symbol(Beacons.Shapes.get(shape), getScheme(feature.type));
+				AffineTransform tr = new AffineTransform(Topmarks.BeaconDelta.t);
 				if (feature.objs.containsKey(Obj.TOPMAR)) {
 					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);
+						if (topmap.containsKey(Att.ORIENT)) {
+							tr.rotate(Math.toRadians((Double)topmap.get(Att.ORIENT).val));
+						}
+						Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)), getScheme(Obj.TOPMAR), new Delta(Handle.BC, tr));
 					}
 				} 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);
+						if (topmap.containsKey(Att.ORIENT)) {
+							tr.rotate(Math.toRadians((Double)topmap.get(Att.ORIENT).val));
+						}
+						Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)), getScheme(Obj.DAYMAR), new Delta(Handle.BC, tr));
 					}
 				}
@@ -978,43 +985,4 @@
 
 	@SuppressWarnings("unchecked")
-	private static void points() {
-		boolean ok = false;
-		switch (feature.type) {
-		case FOGSIG:
-			if (Renderer.zoom >= 12) {
-				if (feature.objs.containsKey(Obj.LIGHTS))
-					lights();
-				else
-					Renderer.symbol(Harbours.Post);
-				ok = true;
-			}
-			break;
-		default:
-			if (Renderer.zoom >= 14) {
-				if (feature.objs.containsKey(Obj.LIGHTS))
-					lights();
-				else
-					Renderer.symbol(Harbours.Post);
-				ok = true;
-			}
-			break;
-		}
-		if (ok) {
-			if (feature.objs.containsKey(Obj.TOPMAR)) {
-				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), null);
-				}
-			} 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), null);
-				}
-			}
-			Signals.addSignals();
-		}
-	}
-
-	@SuppressWarnings("unchecked")
 	private static void lights() {
 		boolean ok = false;
@@ -1051,8 +1019,8 @@
 				AttMap topmap = feature.objs.get(Obj.TOPMAR).get(0);
 				if (topmap.containsKey(Att.TOPSHP)) {
-					if (hasAttribute(Obj.TOPMAR, Att.ORIENT)) {
-						tr.rotate(Math.toRadians((Double) getAttVal(Obj.TOPMAR, Att.ORIENT)));
-					}
-					tr.translate(0, -20);
+					if (topmap.containsKey(Att.ORIENT)) {
+						tr.rotate(Math.toRadians((Double)topmap.get(Att.ORIENT).val));
+					}
+					tr.concatenate(Topmarks.LightDelta.t);
 					Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)), getScheme(Obj.TOPMAR), new Delta(Handle.BC, tr));
 				}
@@ -1063,8 +1031,8 @@
 				AttMap topmap = feature.objs.get(Obj.DAYMAR).get(0);
 				if (topmap.containsKey(Att.TOPSHP)) {
-					if (hasAttribute(Obj.DAYMAR, Att.ORIENT)) {
-						tr.rotate(Math.toRadians((Double) getAttVal(Obj.DAYMAR, Att.ORIENT)));
-					}
-					tr.translate(0, -20);
+					if (topmap.containsKey(Att.ORIENT)) {
+						tr.rotate(Math.toRadians((Double)topmap.get(Att.ORIENT).val));
+					}
+					tr.concatenate(Topmarks.LightDelta.t);
 					Renderer.symbol(Topmarks.Shapes.get(((ArrayList<TopSHP>) (topmap.get(Att.TOPSHP).val)).get(0)), getScheme(Obj.DAYMAR), new Delta(Handle.BC, tr));
 				}
@@ -1265,4 +1233,43 @@
 	}
 
+	@SuppressWarnings("unchecked")
+	private static void points() {
+		boolean ok = false;
+		switch (feature.type) {
+		case FOGSIG:
+			if (Renderer.zoom >= 12) {
+				if (feature.objs.containsKey(Obj.LIGHTS))
+					lights();
+				else
+					Renderer.symbol(Harbours.Post);
+				ok = true;
+			}
+			break;
+		default:
+			if (Renderer.zoom >= 14) {
+				if (feature.objs.containsKey(Obj.LIGHTS))
+					lights();
+				else
+					Renderer.symbol(Harbours.Post);
+				ok = true;
+			}
+			break;
+		}
+		if (ok) {
+			if (feature.objs.containsKey(Obj.TOPMAR)) {
+				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), null);
+				}
+			} 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), null);
+				}
+			}
+			Signals.addSignals();
+		}
+	}
+
 	private static void ports() {
 		if (Renderer.zoom >= 14) {
Index: /applications/editors/josm/plugins/seachart/src/symbols/Topmarks.java
===================================================================
--- /applications/editors/josm/plugins/seachart/src/symbols/Topmarks.java	(revision 33942)
+++ /applications/editors/josm/plugins/seachart/src/symbols/Topmarks.java	(revision 33943)
@@ -555,4 +555,5 @@
     public static final Delta FloatDelta  = new Delta(Handle.BC, AffineTransform.getTranslateInstance(0.0, -42.0));
     public static final Delta BeaconDelta = new Delta(Handle.BC, AffineTransform.getTranslateInstance(0.0, -70.0));
+    public static final Delta LightDelta  = new Delta(Handle.BC, AffineTransform.getTranslateInstance(0.0, -20.0));
     // CHECKSTYLE.ON: SingleSpaceSeparator
 }
