diff --git a/pd/src/g_template.c b/pd/src/g_template.c
index 91d5b2b249fb6259e2fb5c9c3db1234a1d87c9a2..f69fc6569e3279f82f1b1b469090592eb5c81f0f 100644
--- a/pd/src/g_template.c
+++ b/pd/src/g_template.c
@@ -3884,18 +3884,39 @@ typedef struct {int x,y;} intxy;
    http://www.tcl.tk/cgi-bin/tct/tip/168.html */
 void curve_smooth_to_q(int *pix, int n, int closed)
 {
+    fprintf(stderr,"curve_smooth_to_q closed=%d\n", closed);
     intxy *p = (intxy *)pix;
     int i, end = (closed ? n : n - 1);
+    int a = 0, b = 0;
+    int overlap = 0;
+    int current = 0;
     // >>1 is used instead of /2 or *0.5, because of slight difference in rounding.
     if (closed)
-        sys_vgui("M %d %d \\\n",
-            (p[0].x+p[n-1].x)>>1,
-            (p[0].y+p[n-1].y)>>1);
-    else
+    {
+        int a=0, b=0;
+        // if first point and last point are the same skip the first point
+        if (p[0].x == p[n-1].x && p[0].y == p[n-1].y)
+        {
+            if (n-1 != 0)
+            {
+                // protects below in the for loop to not exceed the point array size
+                overlap = 1;
+            }
+            a = (p[1].x+p[0].x)>>1;
+            b = (p[1].y+p[0].y)>>1;
+        }
+        else
+        {
+            a = (p[0].x+p[n-1].x)>>1;
+            b = (p[0].y+p[n-1].y)>>1;
+        }
+        sys_vgui("M %d %d \\\n", a, b);
+    }
+    else // need to test non-closed smooth curves
         sys_vgui("M %d %d \\\n", p[0].x, p[0].y);
-    intxy o = closed ? p[n-1] : p[1];
-    int n2 = closed?n:n-1;
-    for (i = closed?0:2; i < n2; i++)
+    intxy o = closed ? p[0+overlap] : p[1];
+    int n2 = (closed?n:n-1); // need to test this for non-closed smooth curves
+    for (i = (closed?(1+overlap):2); i < n2; i++)
     {
         sys_vgui("Q %d %d %d %d \\\n",
             o.x, o.y,
@@ -3904,11 +3925,15 @@ void curve_smooth_to_q(int *pix, int n, int closed)
         o = p[i];
     }
     if (closed)
+    {
+        // here we repurpose overlap for an additional check
+        overlap = (p[0].x == p[n-1].x && p[0].y == p[n-1].y && n-1 != 0);
         sys_vgui("Q %d %d %d %d \\\n", p[n-1].x, p[n-1].y,
-            (p[n-1].x+p[0].x)>>1,
-            (p[n-1].y+p[0].y)>>1);
+            (p[n-1].x+p[0+overlap].x)>>1,
+            (p[n-1].y+p[0+overlap].y)>>1);
+    }
     else
-       sys_vgui("Q %d %d %d %d \\\n", p[n-2].x, p[n-2].y, p[n-1].x, p[n-1].y);
+       sys_vgui("Q %d %d %d %d \\\n", p[n-2].x, p[n-2].y, p[n-1].x, p[n-1].y); // need ot test this for non-closed smooth curves
 }
 
 static void *curve_new(t_symbol *classsym, t_int argc, t_atom *argv)