diff --git a/index.html b/index.html
index 3bfd69df3793731f724ec6924433b292bfda0234..76e0ff50ec42468796bef5e037cacf6abf7ed4b6 100644
--- a/index.html
+++ b/index.html
@@ -38,9 +38,6 @@
 			.attr("d", "m 82.393993,102.36183 c -13.481701,0.0332 -35.416429,-15.12149 -35.446705,-28.75598 -0.03028,-13.63449 20.096934,-32.30487 35.446705,-32.64203 15.349771,-0.33716 49.390017,61.33466 61.043907,61.39801 11.65389,0.0634 39.30246,-15.12148 39.33273,-28.75598 0.0303,-13.6345 -23.98295,-32.30489 -39.33273,-32.64203 -15.34978,-0.33714 -47.562206,61.36486 -61.043907,61.39801 z"
 			);
 
-		//transition();
-
-
 		function getRandomColorRgb() {
 			let red = Math.floor(Math.random() * 256);
 			let green = Math.floor(Math.random() * 256);
@@ -52,6 +49,28 @@
 			return { x: point.x + distance * Math.cos(rad), y: point.y + distance * Math.sin(rad) };
 		}
 
+
+		// from https://github.com/d3/d3-shape/blob/master/src/curve/natural.js
+		function controlPoints(x) {
+			var i,
+				n = x.length - 1,
+				m,
+				a = new Array(n),
+				b = new Array(n),
+				r = new Array(n);
+			a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];
+			for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];
+			a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];
+			for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];
+			a[n - 1] = r[n - 1] / b[n - 1];
+			for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];
+			b[n - 1] = (x[n] + a[n - 1]) / 2;
+			for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];
+			return [a, b];
+		}
+
+
+
 		class ArowOnPath {
 			constructor(path, start, length, parts = 3, thickness = 5, angle = 2, padding = 1) {
 				this.path = path;
@@ -59,12 +78,12 @@
 				this.angle = angle;
 				this.thickness = thickness;
 
-				var partlen = (length - (2 * padding)) / (2*parts);
-				this.p = [this.pointsAt(start+padding,(-1*padding))];
-				for (i = 1; i < (2 * parts); i++) {
+				var partlen = (length - (2 * padding)) / (2 * parts);
+				this.p = [this.pointsAt(start + padding, (-1 * padding))];
+				for (var i = 1; i < (2 * parts); i++) {
 					this.p.push(this.pointsAt(start + (i * partlen)));
 				}
-				this.p.push(this.pointsAt(start + length-padding,padding));
+				this.p.push(this.pointsAt(start + length - padding, (-1 * padding)));
 			}
 			pointAngle(length) {
 				var p1 = this.path.getPointAtLength(length);
@@ -93,31 +112,53 @@
 				return point.x.toString() + "," + point.y.toString();
 			}
 
+
 			d3path() {
 				var path = d3.path();
 				console.log(this.p.length);
 				var i = 0
-				console.log(i);
+
 				path.moveTo(this.p[i].m.x, this.p[i].m.y);
 				path.lineTo(this.p[i].a.x, this.p[i].a.y);
 
-				do {
-					i++;
-					path.bezierCurveTo(this.p[i].a.x, this.p[i].a.y,
-						this.p[i].a.x, this.p[i].a.y,
-						this.p[i + 1].a.x, this.p[i + 1].a.y);
-					i++;
-				} while (i < (this.p.length - 1));
-				console.log(i);
+				var nat = d3.curveNatural(path);
+				nat.lineStart();
+				for (var i = 0; i < this.p.length; i++) {
+					nat.point(this.p[i].a.x, this.p[i].a.y);
+
+				}
+				var px = controlPoints(nat._x),
+					py = controlPoints(nat._y);
+				var n = this.p.length;
+				var x = nat._x,
+					y = nat._y;
+				for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
+					path.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
+				}
+				
+				console.log(i)
+				i = this.p.length - 1;
 				path.lineTo(this.p[i].m.x, this.p[i].m.y);
 				path.lineTo(this.p[i].b.x, this.p[i].b.y);
-				do {
-					i--;
-					path.bezierCurveTo(this.p[i].b.x, this.p[i].b.y,
-						this.p[i].b.x, this.p[i].b.y,
-						this.p[i - 1].b.x, this.p[i - 1].b.y);
-					i--;
-				} while (i > 1);
+
+				nat.lineStart();
+				console.log("blah")
+				for (var i = this.p.length - 1; i >= 0; --i) {
+					console.log(i)
+					nat.point(this.p[i].b.x, this.p[i].b.y);
+
+				}
+				var px = controlPoints(nat._x),
+					py = controlPoints(nat._y);
+				var n = this.p.length;
+				var x = nat._x,
+					y = nat._y;
+				for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
+					path.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
+				}
+				//line.context(path)(this.p);
+
+				
 				path.closePath();
 				return path;
 			}
@@ -126,19 +167,20 @@
 			}
 		}
 
-		var i;
-		var s = path.node()
 
-
-
-		ar = new ArowOnPath(s, 0, 10);
-		svg.append("path")
-			.attr("d", ar.toString())
-			.attr("style", "fill:" + getRandomColorRgb());
+		var s = path.node()
 
 		var l = s.getTotalLength();
 		var segs = 8;
+		var seg_l = l / segs;
 		var thickness = 5;
+		for (var i = 0; i < segs; i++) {
+			ar = new ArowOnPath(s, (i * seg_l), seg_l);
+			svg.append("path")
+				.attr("d", ar.toString())
+				.attr("style", "fill:" + getRandomColorRgb());
+		}
+
 
 
 	</script>