diff --git a/imgui_draw.cpp b/imgui_draw.cpp
index 1b042ed..3e89845 100644
--- a/imgui_draw.cpp
+++ b/imgui_draw.cpp
@@ -775,6 +775,7 @@
         const int vtx_count = points_count*3;
         PrimReserve(idx_count, vtx_count);
 
+        const float half_thickness = thickness * 0.5f;
         unsigned int first_vtx_ptr = _VtxCurrentIdx;
         unsigned int unused_vertices = 0;
         unsigned int unused_indices = 0;
@@ -812,15 +813,13 @@
             float miter_l_recip = dx1 * dy2 - dy1 * dx2;
             float mlx, mly, mrx, mry; // Left and right miters
             if (fabsf(miter_l_recip) > 1e-5) {
-                float miter_l = (thickness * 0.5f) / miter_l_recip;
+                float miter_l = (half_thickness) / miter_l_recip;
                 float min_sqlen = sqlen1 > sqlen2 ? sqlen2 : sqlen1;
                 float miter_sqlen = ((dx1 + dx2) * (dx1 + dx2) + (dy1 + dy2) * (dy1 + dy2)) * miter_l * miter_l;
                 if (miter_sqlen > min_sqlen) {
-                    // Limit miter so it doesn't shoot away from the line in case of close to 180 degree turns 
+                    // Limit (inner) miter so it doesn't shoot away in the case when miter is longer than adjacent line segments
                     miter_l *= sqrtf(min_sqlen / miter_sqlen);
                 }
-                if (thickness == 60)
-                    printf("min_sql: %f, miter_sql: %f\n", min_sqlen, miter_sqlen);
 
                 mlx = p1.x - (dx1 + dx2) * miter_l;
                 mly = p1.y - (dy1 + dy2) * miter_l;
@@ -828,10 +827,10 @@
                 mry = p1.y + (dy1 + dy2) * miter_l;
             } else {
                 // Avoid degeneracy for (nearly) straight lines
-                mlx = p1.x + dy1 * thickness * 0.5f;
-                mly = p1.y - dx1 * thickness * 0.5f;
-                mrx = p1.x - dy1 * thickness * 0.5f;
-                mry = p1.y + dx1 * thickness * 0.5f;
+                mlx = p1.x + dy1 * half_thickness;
+                mly = p1.y - dx1 * half_thickness;
+                mrx = p1.x - dy1 * half_thickness;
+                mry = p1.y + dx1 * half_thickness;
             }
             // The two bevel vertices if the angle is right or obtuse
             // miter_sign == 1, iff the outer (maybe bevelled) edge is on the right, -1 iff it is on the left
@@ -839,13 +838,10 @@
             float b1x, b1y, b2x, b2y;
             bool bevel = dx1 * dx2 + dy1 * dy2 > 1e-5;
             if (bevel) {
-                b1x = p1.x + (dx1 - dy1 * miter_sign) * thickness * 0.5f;
-                b1y = p1.y + (dy1 + dx1 * miter_sign) * thickness * 0.5f;
-                b2x = p1.x + (dx2 + dy2 * miter_sign) * thickness * 0.5f;
-                b2y = p1.y + (dy2 - dx2 * miter_sign) * thickness * 0.5f;
-            }
-            if (thickness == 60) {
-                printf("i: %d, miter: %f, sqlen1: %f, sqlen2: %f\n", i1, miter_l_recip, sqlen1, sqlen2);
+                b1x = p1.x + (dx1 - dy1 * miter_sign) * half_thickness;
+                b1y = p1.y + (dy1 + dx1 * miter_sign) * half_thickness;
+                b2x = p1.x + (dx2 + dy2 * miter_sign) * half_thickness;
+                b2y = p1.y + (dy2 - dx2 * miter_sign) * half_thickness;
             }
 
             // Set the previous line direction so it doesn't need to be recomputed
