Index: applications/editors/josm/plugins/smed2/src/seamap/Renderer.java
===================================================================
--- applications/editors/josm/plugins/smed2/src/seamap/Renderer.java	(revision 29204)
+++ applications/editors/josm/plugins/smed2/src/seamap/Renderer.java	(revision 29205)
@@ -208,5 +208,15 @@
 							while (curr.distance(next) >= len) {
 								if (piv) {
-									succ = new Point2D.Double(prev.getX() + (len * Math.cos(angle)), prev.getY() + (len * Math.sin(angle)));
+									double rem = len;
+									double s = prev.distance(next);
+									double p = curr.distance(prev);
+									if (p > 0) {
+										double n = curr.distance(next);
+										double beta = Math.acos((s * s + p * p - n * n) / 2 / s / p);
+										double gamma = Math.asin(p / len * Math.sin(beta));
+										double alpha = Math.PI - beta - gamma;
+										rem = len * Math.sin(alpha) / Math.sin(beta);
+									}
+									succ = new Point2D.Double(prev.getX() + (rem * Math.cos(angle)), prev.getY() + (rem * Math.sin(angle)));
 									piv = false;
 								} else {
@@ -214,5 +224,6 @@
 								}
 								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);
+									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);
 								}
 								if (space > 0) gap = !gap;
