Index: /applications/editors/josm/plugins/smed2/src/seamap/Renderer.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/seamap/Renderer.java	(revision 29274)
+++ /applications/editors/josm/plugins/smed2/src/seamap/Renderer.java	(revision 29275)
@@ -157,5 +157,5 @@
 							if (!gap) {
 								Symbols.drawSymbol(g2, symbol, sScale, curr.getX(), curr.getY(),
-										new Delta(Handle.BC, AffineTransform.getRotateInstance(Math.atan2((succ.getY() - curr.getY()), (succ.getX() - curr.getX()) + Math.toRadians(90)))), null);
+										new Delta(Handle.BC, AffineTransform.getRotateInstance(Math.atan2((succ.getY() - curr.getY()), (succ.getX() - curr.getX())) + Math.toRadians(90))), null);
 							}
 							if (space > 0) gap = !gap;
Index: /applications/editors/josm/plugins/smed2/src/seamap/Rules.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/seamap/Rules.java	(revision 29274)
+++ /applications/editors/josm/plugins/smed2/src/seamap/Rules.java	(revision 29275)
@@ -294,5 +294,6 @@
 		case ACHARE:
 			if (zoom >= 12) {
-				Renderer.symbol(feature, Harbours.Anchorage, null, null);
+				if (feature.flag != Fflag.LINE)
+					Renderer.symbol(feature, Harbours.Anchorage, null, null);
 				Renderer.lineSymbols(feature, Areas.Restricted, 1.0, Areas.LineAnchor, 10);
 				if ((zoom >= 15) && ((name) != null)) {
Index: /applications/editors/josm/plugins/smed2/src/seamap/SeaMap.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/seamap/SeaMap.java	(revision 29274)
+++ /applications/editors/josm/plugins/smed2/src/seamap/SeaMap.java	(revision 29275)
@@ -201,5 +201,5 @@
 
 		public boolean hasNext() {
-			return (edge != null) && ((it == null) || (edge.nodes.isEmpty()) || (forward && it.hasNext()) || (!forward && it.hasPrevious()));
+			return (edge != null);
 		}
 
@@ -253,5 +253,5 @@
 
 		public boolean hasNext() {
-			return side != null;
+			return (side != null) && ((sit.hasNext()) || (eit.hasNext()));
 		}
 
@@ -502,6 +502,5 @@
 				llon = lon;
 			}
-			double frac = harc / sarc;
-			return new Snode(llat + ((lat - llat) / frac), llon + ((lon - llon) / frac));
+			return new Snode(llat + ((lat - llat) * harc / sarc), llon + ((lon - llon) * harc / sarc));
 		case AREA:
 			Bound bound = areas.get(feature.refs).get(0);
Index: /applications/editors/josm/plugins/smed2/src/smed2/Smed2Action.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/smed2/Smed2Action.java	(revision 29274)
+++ /applications/editors/josm/plugins/smed2/src/smed2/Smed2Action.java	(revision 29275)
@@ -41,40 +41,56 @@
 		@Override
 		public void dataChanged(DataChangedEvent e) {
-			System.out.println("DataChangedEvent");
+//			System.out.println("DataChangedEvent");
+			makeMap();
+			if (rendering != null) rendering.zoomChanged();
 		}
 
 		@Override
 		public void nodeMoved(NodeMovedEvent e) {
-			System.out.println("NodeMovedEvent");
+//			System.out.println("NodeMovedEvent");
+			makeMap();
+			if (rendering != null) rendering.zoomChanged();
 		}
 
 		@Override
 		public void otherDatasetChange(AbstractDatasetChangedEvent e) {
-			System.out.println("AbstractDatasetChangedEvent");
+//			System.out.println("AbstractDatasetChangedEvent");
+			makeMap();
+			if (rendering != null) rendering.zoomChanged();
 		}
 
 		@Override
 		public void primitivesAdded(PrimitivesAddedEvent e) {
-			System.out.println("PrimitivesAddedEvent");
+//			System.out.println("PrimitivesAddedEvent");
+			makeMap();
+			if (rendering != null) rendering.zoomChanged();
 		}
 
 		@Override
 		public void primitivesRemoved(PrimitivesRemovedEvent e) {
-			System.out.println("PrimitivesRemovedEvent");
+//			System.out.println("PrimitivesRemovedEvent");
+			makeMap();
+			if (rendering != null) rendering.zoomChanged();
 		}
 
 		@Override
 		public void relationMembersChanged(RelationMembersChangedEvent e) {
-			System.out.println("RelationMembersChangedEvent");
+//			System.out.println("RelationMembersChangedEvent");
+			makeMap();
+			if (rendering != null) rendering.zoomChanged();
 		}
 
 		@Override
 		public void tagsChanged(TagsChangedEvent e) {
-			System.out.println("TagsChangedEvent");
+//			System.out.println("TagsChangedEvent");
+			makeMap();
+			if (rendering != null) rendering.zoomChanged();
 		}
 
 		@Override
 		public void wayNodesChanged(WayNodesChangedEvent e) {
-			System.out.println("WayNodesChangedEvent");
+//			System.out.println("WayNodesChangedEvent");
+			makeMap();
+			if (rendering != null) rendering.zoomChanged();
 		}
 	};
@@ -109,5 +125,5 @@
 		editFrame.setResizable(true);
 		editFrame.setAlwaysOnTop(true);
-		editFrame.setVisible(true);
+//		editFrame.setVisible(true);
 		panelMain = new PanelMain();
 		editFrame.add(panelMain);
@@ -175,6 +191,6 @@
 					if (nextNode.compareTo(node) != 0) {
 						node = nextNode;
-						showFrame.setVisible(true);
-						showFrame.showFeature(node, map);
+//						showFrame.setVisible(true);
+//						showFrame.showFeature(node, map);
 					}
 				} else {
@@ -187,6 +203,6 @@
 					if (nextWay.compareTo(way) != 0) {
 						way = nextWay;
-						showFrame.setVisible(true);
-						showFrame.showFeature(way, map);
+//						showFrame.setVisible(true);
+//						showFrame.showFeature(way, map);
 					}
 				} else {
