diff --git a/Catalogue/floralPhyllo_accident.html b/Catalogue/floralPhyllo_accident.html
index 44889c2..ce5b433 100644
--- a/Catalogue/floralPhyllo_accident.html
+++ b/Catalogue/floralPhyllo_accident.html
@@ -1,213 +1,207 @@
 <!DOCTYPE html>
 <html>
-<!-- ahhh -->
+  <!-- ahhh -->
 
-<body style="margin:0;overflow: hidden;">
-    <canvas id="myCanvas" width="10" height="10" style="display: block;box-sizing: border-box;">
-        Your browser does not support the HTML5 canvas tag.</canvas>
+  <body style="margin: 0; overflow: hidden">
+    <canvas
+      id="myCanvas"
+      width="10"
+      height="10"
+      style="display: block; box-sizing: border-box"
+    >
+      Your browser does not support the HTML5 canvas tag.</canvas
+    >
     <script>
-        let c = document.getElementById("myCanvas");
-        let ctx = c.getContext("2d");
-        ctx.canvas.width = window.innerWidth;
-        ctx.canvas.height = window.innerHeight;
+      let c = document.getElementById("myCanvas");
+      let ctx = c.getContext("2d");
+      ctx.canvas.width = window.innerWidth;
+      ctx.canvas.height = window.innerHeight;
 
+      let deg_per_sec = 30 / 5000;
+      let time = 99999999;
+      let fps = 60;
+      let leafWidth = 120;
+      let leafHeight = 60;
+      centerX = ctx.canvas.width / 2;
+      centerY = ctx.canvas.height / 2;
 
+      rotation = 0; //was = j = angle
+      currentFrame = 0; //was = i
 
-        let deg_per_sec = 30 / 5000;
-        let time = 99999999;
-        let fps = 60;
-        let leafWidth = 120;
-        let leafHeight = 60;
-        centerX = ctx.canvas.width / 2;
-        centerY = ctx.canvas.height / 2;
+      function render() {
+        if (currentFrame < time / (1 / fps)) {
+          setTimeout(() => {
+            render();
+            render_clear();
 
-        rotation = 0; //was = j = angle
-        currentFrame = 0; //was = i
+            // Draw_Phyllotaxis(rotation + 3.1);
+            Draw_Phyllotaxis(rotation + 1.5);
+            // Draw_Phyllotaxis(1.5);
+            // console.log(rotation + 3.1)
+            // Draw_Phyllotaxis(rotation/5000);
 
-
-
-        function render() {
-            if (currentFrame < time / (1 / fps)) {
-                setTimeout(() => {
-                    render();
-                    render_clear();
-
-                    // Draw_Phyllotaxis(rotation + 3.1);
-                    Draw_Phyllotaxis(rotation + 1.5);
-                    // Draw_Phyllotaxis(1.5);
-                    // console.log(rotation + 3.1)
-                    // Draw_Phyllotaxis(rotation/5000);
-
-                    // Draw_center(); //Debugging
-                    // DrawBorder();
-                }, 1000 / fps);
-                rotation += deg_per_sec / fps; // was = j = angle, now = rotation
-                currentFrame += 1; // was = i
-            }
+            // Draw_center(); //Debugging
+            // DrawBorder();
+          }, 1000 / fps);
+          rotation += deg_per_sec / fps; // was = j = angle, now = rotation
+          currentFrame += 1; // was = i
         }
+      }
 
-        render();
+      render();
 
-        function Draw_Phyllotaxis(angle) {
-            // colour1 = [255, 170, 0];
-            // colour2 = [255, 0, 221];
-            colour1 = [45, 129, 252];
-            colour2 = [252, 3, 98];
+      function Draw_Phyllotaxis(angle) {
+        // colour1 = [255, 170, 0];
+        // colour2 = [255, 0, 221];
+        colour1 = [45, 129, 252];
+        colour2 = [252, 3, 98];
 
-            var c = 24; //something to do with width. but not width
+        var c = 24; //something to do with width. but not width
 
-            for (let n = 0; n < 300; n += 1) {
-                ncolour = LerpRGB(colour1, colour2, Math.cos(rad(n / 2)));
-                let a = n * (angle)//137.5;
-                let r = c * Math.sqrt(n);
-                let x = r * Math.cos(a) + centerX;
-                let y = r * Math.sin(a) + centerY;
-
-
-
-                drawEyelid(x, y);
-
-                // ctx.beginPath();
-                // ctx.arc(x, y, 8, 0, 2 * Math.PI);
-                // ctx.fillStyle = colourToText(ncolour);
-                // ctx.fill();
-
-            }
+        for (let n = 0; n < 300; n += 1) {
+          ncolour = LerpRGB(colour1, colour2, Math.cos(rad(n / 2)));
+          let a = n * angle; //137.5;
+          let r = c * Math.sqrt(n);
+          let x = r * Math.cos(a) + centerX;
+          let y = r * Math.sin(a) + centerY;
 
+          drawEyelid(x, y);
 
+          // ctx.beginPath();
+          // ctx.arc(x, y, 8, 0, 2 * Math.PI);
+          // ctx.fillStyle = colourToText(ncolour);
+          // ctx.fill();
         }
-        function rad(degrees) {
-            var pi = Math.PI;
-            return degrees * (pi / 180);
+      }
+      function rad(degrees) {
+        var pi = Math.PI;
+        return degrees * (pi / 180);
+      }
+
+      function LerpRGB(a, b, t) {
+        if (t < 0) {
+          t *= -1;
         }
+        var newColor = [0, 0, 0];
+        newColor[0] = a[0] + (b[0] - a[0]) * t;
+        newColor[1] = a[1] + (b[1] - a[1]) * t;
+        newColor[2] = a[2] + (b[2] - a[2]) * t;
+        return newColor;
+      }
 
-        function LerpRGB(a, b, t) {
-            if (t < 0) {
-                t *= -1;
-            }
-            var newColor = [0, 0, 0];
-            newColor[0] = a[0] + (b[0] - a[0]) * t;
-            newColor[1] = a[1] + (b[1] - a[1]) * t;
-            newColor[2] = a[2] + (b[2] - a[2]) * t;
-            return newColor;
-        }
+      function colourToText(colour) {
+        return "rgb(" + colour[0] + "," + colour[1] + "," + colour[2] + ")";
+      }
 
-        function colourToText(colour) {
-            return "rgb(" + colour[0] + "," + colour[1] + "," + colour[2] + ")"
-        }
+      function render_clear() {
+        ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
+        ctx.fillStyle = "black";
+        ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
+      }
 
-        function render_clear() {
-            ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
-            ctx.fillStyle = "black";
-            ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
-        }
+      function drawEyelid(x1, y1) {
+        x1 -= centerX;
+        y1 -= centerY;
+        let angle = Math.atan(y1 / x1);
+        // if(angle >=Math.PI){
+        //     angle -=Math.PI
+        //     console.log("greater called")
+        // }
+        angle = Math.abs(angle);
+        console.log(angle);
+        let x2Old = 0 + leafWidth;
+        let y2Old = 0;
 
-        function drawEyelid(x1, y1) {
-            x1 -= centerX
-            y1 -= centerY
-            let angle = Math.atan(y1 / x1);
-            // if(angle >=Math.PI){
-            //     angle -=Math.PI
-            //     console.log("greater called")
-            // }
-            angle= Math.abs(angle)
-            console.log(angle)
-            let x2Old = 0 + leafWidth
-            let y2Old = 0
+        let x3Old = 0 + leafWidth / 2;
+        let y3Old = 0 + leafHeight / 2;
 
+        let x4Old = 0 + leafWidth / 2;
+        let y4Old = 0 - leafHeight / 2;
 
-            let x3Old = 0 + (leafWidth / 2);
-            let y3Old = 0 + (leafHeight / 2);
+        let x2 = x2Old * Math.cos(angle) - y2Old * Math.sin(angle);
+        let y2 = x2Old * Math.sin(angle) + y2Old * Math.cos(angle);
 
-            let x4Old = 0 + (leafWidth / 2);
-            let y4Old = 0 - (leafHeight / 2);
+        let x3 = x3Old * Math.cos(angle) - y3Old * Math.sin(angle);
+        let y3 = x3Old * Math.sin(angle) + y3Old * Math.cos(angle);
 
-            let x2 = x2Old * Math.cos(angle) - y2Old * Math.sin(angle)
-            let y2 = x2Old * Math.sin(angle) + y2Old * Math.cos(angle)
+        let x4 = x4Old * Math.cos(angle) - y4Old * Math.sin(angle);
+        let y4 = x4Old * Math.sin(angle) + y4Old * Math.cos(angle);
 
-            let x3 = x3Old * Math.cos(angle) - y3Old * Math.sin(angle)
-            let y3 = x3Old * Math.sin(angle) + y3Old * Math.cos(angle)
-           
-            let x4 = x4Old * Math.cos(angle) - y4Old * Math.sin(angle)
-            let y4 = x4Old * Math.sin(angle) + y4Old * Math.cos(angle)
-            
-            let oldx1 = x1
-            let oldy1 = y1
+        let oldx1 = x1;
+        let oldy1 = y1;
 
-            x1 += centerX// +x2/2
-            y1 += centerY// +x2/2
-            x2 += x1 
-            y2 += y1
-            x3 += x1 
-            y3 += y1 
-            x4 += x1 
-            y4 += y1 
-            ctx.beginPath()
-            ctx.moveTo(x1, y1)
-            ctx.quadraticCurveTo(x3, y3, x2, y2)
+        x1 += centerX; // +x2/2
+        y1 += centerY; // +x2/2
+        x2 += x1;
+        y2 += y1;
+        x3 += x1;
+        y3 += y1;
+        x4 += x1;
+        y4 += y1;
+        ctx.beginPath();
+        ctx.moveTo(x1, y1);
+        ctx.quadraticCurveTo(x3, y3, x2, y2);
 
-            ctx.moveTo(x1, y1)
-            ctx.quadraticCurveTo(x4, y4, x2, y2)
-            ctx.fillStyle = 'black'
-            ctx.fill()
+        ctx.moveTo(x1, y1);
+        ctx.quadraticCurveTo(x4, y4, x2, y2);
+        ctx.fillStyle = "black";
+        ctx.fill();
 
-            ctx.lineWidth = 1
-            ctx.beginPath()
-            ctx.moveTo(x1, y1)
-            ctx.quadraticCurveTo(x3, y3, x2, y2)
+        ctx.lineWidth = 1;
+        ctx.beginPath();
+        ctx.moveTo(x1, y1);
+        ctx.quadraticCurveTo(x3, y3, x2, y2);
 
-            ctx.moveTo(x1, y1)
-            ctx.quadraticCurveTo(x4, y4, x2, y2)
-            ctx.strokeStyle = 'orange'
-            ctx.stroke()
-        }
-        function drawEyelid2(x1, y1) {
-            x1 -= centerX
-            y1 -= centerY
-            let angle = Math.atan(y1 / x1);
+        ctx.moveTo(x1, y1);
+        ctx.quadraticCurveTo(x4, y4, x2, y2);
+        ctx.strokeStyle = "orange";
+        ctx.stroke();
+      }
+      function drawEyelid2(x1, y1) {
+        x1 -= centerX;
+        y1 -= centerY;
+        let angle = Math.atan(y1 / x1);
 
-            let localLeafCenterX = -(leafWidth * Math.cos(Math.PI - angle)) / 2
-            let localLeafCenterY = (leafWidth * Math.sin(Math.PI - angle)) / 2
+        let localLeafCenterX = -(leafWidth * Math.cos(Math.PI - angle)) / 2;
+        let localLeafCenterY = (leafWidth * Math.sin(Math.PI - angle)) / 2;
 
-            let x2 = x1 - (leafWidth * Math.cos(Math.PI - angle));
-            let y2 = y1 + (leafWidth * Math.sin(Math.PI - angle));
+        let x2 = x1 - leafWidth * Math.cos(Math.PI - angle);
+        let y2 = y1 + leafWidth * Math.sin(Math.PI - angle);
 
-            let alpha = Math.atan(leafHeight / (leafWidth / 2))
-            let x3 = x1 + localLeafCenterX + leafHeight * Math.sin(alpha);
-            let y3 = y1 + localLeafCenterY - leafHeight * Math.cos(alpha);
+        let alpha = Math.atan(leafHeight / (leafWidth / 2));
+        let x3 = x1 + localLeafCenterX + leafHeight * Math.sin(alpha);
+        let y3 = y1 + localLeafCenterY - leafHeight * Math.cos(alpha);
 
-            let x4 = x1 + localLeafCenterX - leafHeight * Math.sin(alpha);
-            let y4 = y1 + localLeafCenterY + leafHeight * Math.cos(alpha);
+        let x4 = x1 + localLeafCenterX - leafHeight * Math.sin(alpha);
+        let y4 = y1 + localLeafCenterY + leafHeight * Math.cos(alpha);
 
-            x1 += centerX
-            y1 += centerY
-            x2 += centerX
-            y2 += centerY
-            x3 += centerX
-            y3 += centerY
-            x4 += centerX
-            y4 += centerY
-            ctx.beginPath()
-            ctx.moveTo(x1, y1)
-            ctx.quadraticCurveTo(x3, y3, x2, y2)
+        x1 += centerX;
+        y1 += centerY;
+        x2 += centerX;
+        y2 += centerY;
+        x3 += centerX;
+        y3 += centerY;
+        x4 += centerX;
+        y4 += centerY;
+        ctx.beginPath();
+        ctx.moveTo(x1, y1);
+        ctx.quadraticCurveTo(x3, y3, x2, y2);
 
-            ctx.moveTo(x1, y1)
-            ctx.quadraticCurveTo(x4, y4, x2, y2)
-            ctx.fillStyle = 'black'
-            ctx.fill()
+        ctx.moveTo(x1, y1);
+        ctx.quadraticCurveTo(x4, y4, x2, y2);
+        ctx.fillStyle = "black";
+        ctx.fill();
 
-            ctx.lineWidth = 1
-            ctx.beginPath()
-            ctx.moveTo(x1, y1)
-            ctx.quadraticCurveTo(x3, y3, x2, y2)
-
-            ctx.moveTo(x1, y1)
-            ctx.quadraticCurveTo(x4, y4, x2, y2)
-            ctx.strokeStyle = 'orange'
-            ctx.stroke()
-        }
+        ctx.lineWidth = 1;
+        ctx.beginPath();
+        ctx.moveTo(x1, y1);
+        ctx.quadraticCurveTo(x3, y3, x2, y2);
 
+        ctx.moveTo(x1, y1);
+        ctx.quadraticCurveTo(x4, y4, x2, y2);
+        ctx.strokeStyle = "orange";
+        ctx.stroke();
+      }
     </script>
-</body>
-
-</html>
\ No newline at end of file
+  </body>
+</html>
diff --git a/docs/index.html b/docs/index.html
index e384f75..227d767 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -13,7 +13,10 @@
     <select id="shape-selector">
       <option value="PolyTwistColourWidth">PolyTwistColourWidth</option>
     <option value="FloralPhyllo">FloralPhyllo</option>
+    <option value="FloralPhyllo_Accident">FloralPhyllo_Accident</option>
     <option value="Spiral1">Spiral1</option>
+    <option value="FloralAccident">FloralAccident</option>
+    <option value="Nodal_expanding">Nodal_expanding</option>
     </select>
     <div id="custom"></div>
     <br>
diff --git a/docs/js/helper.js b/docs/js/helper.js
index 91e81f0..cb25714 100644
--- a/docs/js/helper.js
+++ b/docs/js/helper.js
@@ -8,7 +8,7 @@ async function fetchConfig(className) {
       {
         type: "range",
         min: -180,
-        max: 180 ,
+        max: 180,
         defaultValue: -90,
         property: "rotation",
       },
@@ -22,10 +22,28 @@ async function fetchConfig(className) {
       { type: "color", defaultValue: "#4287f5", property: "colour2" },
     ],
     Spiral1: [
-        { type: "range", min: 1, max: 50, defaultValue: 20, property: "sides" },
+      { type: "range", min: 1, max: 50, defaultValue: 20, property: "sides" },
       { type: "range", min: 1, max: 600, defaultValue: 240, property: "width" },
       { type: "color", defaultValue: "#4287f5", property: "colour" },
     ],
+    FloralAccident: [
+      { type: "range", min: 1, max: 50, defaultValue: 20, property: "sides" },
+      { type: "range", min: 1, max: 600, defaultValue: 240, property: "width" },
+      { type: "color", defaultValue: "#4287f5", property: "colour" },
+    ],
+    FloralPhyllo_Accident: [
+      { type: "range", min: 1, max: 50, defaultValue: 20, property: "sides" },
+      { type: "range", min: 1, max: 600, defaultValue: 240, property: "width" },
+      { type: "color", defaultValue: "#2D81FC", property: "colour1" },
+      { type: "color", defaultValue: "#FC0362", property: "colour2" },
+    ],
+    Nodal_expanding: [
+      { type: "range", min: 1, max: 100, defaultValue: 5, property: "expand" },
+      { type: "range", min: 1, max: 100000, defaultValue: 100000, property: "points" },
+      { type: "range", min: 1, max: 10, defaultValue: 3, property: "line_width" },
+      { type: "color", defaultValue: "#2D81FC", property: "colour1" },
+      { type: "color", defaultValue: "#FC0362", property: "colour2" },
+    ],
   };
   return config[className];
 }
@@ -110,6 +128,66 @@ function drawEyelid(width, x1, y1, colour) {
   ctx.stroke();
 }
 
+function drawEyelidAccident(x1, y1) {
+  let leafWidth = 120;
+  let leafHeight = 60;
+  x1 -= centerX;
+  y1 -= centerY;
+  let angle = Math.atan(y1 / x1);
+  // if(angle >=Math.PI){
+  //     angle -=Math.PI
+  //     console.log("greater called")
+  // }
+  angle = Math.abs(angle);
+  let x2Old = 0 + leafWidth;
+  let y2Old = 0;
+
+  let x3Old = 0 + leafWidth / 2;
+  let y3Old = 0 + leafHeight / 2;
+
+  let x4Old = 0 + leafWidth / 2;
+  let y4Old = 0 - leafHeight / 2;
+
+  let x2 = x2Old * Math.cos(angle) - y2Old * Math.sin(angle);
+  let y2 = x2Old * Math.sin(angle) + y2Old * Math.cos(angle);
+
+  let x3 = x3Old * Math.cos(angle) - y3Old * Math.sin(angle);
+  let y3 = x3Old * Math.sin(angle) + y3Old * Math.cos(angle);
+
+  let x4 = x4Old * Math.cos(angle) - y4Old * Math.sin(angle);
+  let y4 = x4Old * Math.sin(angle) + y4Old * Math.cos(angle);
+
+  let oldx1 = x1;
+  let oldy1 = y1;
+
+  x1 += centerX; // +x2/2
+  y1 += centerY; // +x2/2
+  x2 += x1;
+  y2 += y1;
+  x3 += x1;
+  y3 += y1;
+  x4 += x1;
+  y4 += y1;
+  ctx.beginPath();
+  ctx.moveTo(x1, y1);
+  ctx.quadraticCurveTo(x3, y3, x2, y2);
+
+  ctx.moveTo(x1, y1);
+  ctx.quadraticCurveTo(x4, y4, x2, y2);
+  ctx.fillStyle = "black";
+  ctx.fill();
+
+  ctx.lineWidth = 1;
+  ctx.beginPath();
+  ctx.moveTo(x1, y1);
+  ctx.quadraticCurveTo(x3, y3, x2, y2);
+
+  ctx.moveTo(x1, y1);
+  ctx.quadraticCurveTo(x4, y4, x2, y2);
+  ctx.strokeStyle = "orange";
+  ctx.stroke();
+}
+
 function DrawPolygon(sides, width, rotation, colour) {
   ctx.beginPath();
   ctx.moveTo(
diff --git a/docs/js/index.js b/docs/js/index.js
index 9a230ff..ee1d449 100644
--- a/docs/js/index.js
+++ b/docs/js/index.js
@@ -21,6 +21,9 @@ function createInstance(className, args) {
     PolyTwistColourWidth: PolyTwistColourWidth,
     FloralPhyllo: FloralPhyllo,
     Spiral1: Spiral1,
+    FloralAccident: FloralAccident,
+    FloralPhyllo_Accident: FloralPhyllo_Accident,
+    Nodal_expanding: Nodal_expanding,
     // Add more class constructors here as needed
   };
 
diff --git a/docs/js/objects.js b/docs/js/objects.js
index f725c99..2ec013c 100644
--- a/docs/js/objects.js
+++ b/docs/js/objects.js
@@ -120,3 +120,100 @@ class Spiral1 extends BaseShape {
   }
 }
 
+class FloralAccident extends BaseShape {
+  constructor(sides,width, colour) {
+    super();
+    this.sides = sides;
+    this.width = width;
+    this.colour = colour;
+  }
+
+  draw(rotation) {
+    var rot = Math.round((this.sides - 2) * 180 / this.sides * 2)
+    var piv = 360 / this.sides;
+    var stt = 0.5 * Math.PI - rad(rot) //+ rad(rotation);
+    var end = 0;
+    var n = this.width / ((this.width / 10) * (this.width / 10)) //pixel correction for mid leaf
+
+    for (let i = 1; i < this.sides + 1; i++) {
+      end = stt + rad(rot);
+
+      ctx.beginPath();
+      ctx.arc(centerX + Math.cos(rad(90 + piv * i + rotation)) * this.width, centerY + Math.sin(rad(90 + piv * i + rotation)) * this.width, this.width, stt - (stt - end + rad(rotation)) / 2, end + rad(n), 0);
+      ctx.strokeStyle = this.colour;
+      ctx.stroke();
+
+
+      ctx.beginPath();
+      ctx.arc(centerX + Math.cos(rad(90 + piv * i - rotation)) * this.width, centerY + Math.sin(rad(90 + piv * i - rotation)) * this.width, this.width, stt, end - (end - stt - rad(rotation)) / 2 + rad(n), 0);
+      ctx.strokeStyle = this.colour;
+      ctx.stroke();
+
+
+      stt = end + -(rad(rot - piv)) //+rad(30);
+    }
+
+  }
+}
+class FloralPhyllo_Accident extends BaseShape {
+  constructor(sides,width, colour1,colour2) {
+    super();
+    this.sides = sides;
+    this.width = width;
+    this.colour1 = colour1;
+    this.colour2 = colour2;
+  }
+
+  draw(angle) {
+
+    var c = 24; //something to do with width. but not width
+
+    for (let n = 0; n < 300; n += 1) {
+      let ncolour = LerpHex(this.colour1, this.colour2, Math.cos(rad(n / 2)));
+      let a = n * (angle/1000+100); //137.5;
+      let r = c * Math.sqrt(n);
+      let x = r * Math.cos(a) + centerX;
+      let y = r * Math.sin(a) + centerY;
+
+      drawEyelidAccident(x, y);
+
+    }
+  }
+}
+class Nodal_expanding extends BaseShape {
+  constructor(expand,points,line_width,colour1,colour2) {
+    super();
+    this.expand = expand;
+    this.points = points;
+    this.line_width = line_width;
+    this.colour1 = colour1;
+    this.colour2 = colour2;
+  }
+
+  draw(step) {
+    let colour_change = 0.5
+    var angle = 360 / this.points * step
+
+    var start_angle = angle;
+    var done = false;
+    var total_moves = 1;
+    var length = this.expand;
+
+    for (let z = 1; z <= 100; z++) { //why specifically 2500
+      ctx.beginPath();
+      let ncolour = LerpHex(this.colour1, this.colour2, Math.cos(rad(z * colour_change)));
+
+      ctx.moveTo(centerX + (Math.cos(rad(angle * (z - 1) + 0)) * (length - this.expand)), centerY + (Math.sin(rad(angle * (z - 1) + 0)) * (length - this.expand)));
+      ctx.lineTo(centerX + (Math.cos(rad(angle * z + 0)) * length), centerY + (Math.sin(rad(angle * z + 0)) * length));
+      length += this.expand;
+      ctx.lineWidth = this.line_width;//try 1
+      ctx.strokeStyle = ncolour;
+      // ctx.strokeStyle = colourToText(ncolour);
+      console.log(ncolour)
+      ctx.stroke();
+    }
+
+
+  }
+}
+