diff --git a/src/libraries/rounded_rectangle_profile.scad b/src/libraries/rounded_rectangle_profile.scad
deleted file mode 100644
index dec7a0c..0000000
--- a/src/libraries/rounded_rectangle_profile.scad
+++ /dev/null
@@ -1,35 +0,0 @@
-function sign_x(i,n) =
-	i < n/4 || i > n*3/4  ?  1 :
-	i > n/4 && i < n*3/4  ? -1 :
-	0;
-
-function sign_y(i,n) =
-	i > 0 && i < n/2  ?  1 :
-	i > n/2 ? -1 :
-	0;
-
-
-function rectangle_profile(size=[1,1],fn=32) = [
-	for (index = [0:fn-1])
-		let(a = index/fn*360)
-			sign_x(index, fn) * [size[0]/2,0]
-			+ sign_y(index, fn) * [0,size[1]/2]
-];
-
-function rounded_rectangle_profile(size=[1,1],r=1,fn=32) = [
-	let(max_fn = max(fn,8))
-		for (index = [0:max_fn-1])
-			let(a = index/max_fn*360)
-				r * [cos(a), sin(a)]
-				+ sign_x(index, max_fn) * [size[0]/2-r,0]
-				+ sign_y(index, max_fn) * [0,size[1]/2-r]
-];
-
-function double_rounded_rectangle_profile(size=[1,1], r=1, fn=32) = [
-	let(max_fn = max(fn,8))
-		for (index = [0:max_fn-1])
-			let(a = index/max_fn*360)
-				r * [cos(a), sin(a)]
-				+ sign_x(index, max_fn) * [size[0]/2-r,0]
-				+ sign_y(index, max_fn) * [0,size[1]/2-r]
-];
diff --git a/src/shapes/rounded_square.scad b/src/shapes/rounded_square.scad
index e3f5f26..bef7faa 100644
--- a/src/shapes/rounded_square.scad
+++ b/src/shapes/rounded_square.scad
@@ -1,4 +1,5 @@
-include <../libraries/rounded_rectangle_profile.scad>
+include <square.scad>
+include <../libraries/round-anything/polyround.scad>
 
 module rounded_square_shape(size, delta, progress, center = true) {
   offset(r=$corner_radius, $fa=360/$shape_facets){
@@ -7,6 +8,5 @@ module rounded_square_shape(size, delta, progress, center = true) {
 }
 
 // for skin
-
 function skin_rounded_square(size, delta, progress, thickness_difference) =
-  rounded_rectangle_profile(size - (delta * progress), fn=$shape_facets, r=$corner_radius);
+  polyRound(add_rounding(rectangle_profile(size - (delta * progress)), $corner_radius), $shape_facets/4);
diff --git a/src/shapes/sculpted_square.scad b/src/shapes/sculpted_square.scad
index 8e73474..426e5ca 100644
--- a/src/shapes/sculpted_square.scad
+++ b/src/shapes/sculpted_square.scad
@@ -1,5 +1,3 @@
-include <../libraries/rounded_rectangle_profile.scad>
-
 // rounded square shape with additional sculpting functions to better approximate
 
 // When sculpting sides, how much in should the tops come
@@ -44,8 +42,35 @@ module sculpted_square_shape(size, delta, progress) {
   }
 }
 
-// fudging the hell out of this, I don't remember what the negative-offset-positive-offset was doing in the module above
-// also no 'bowed' square shape for now
+function new_side_rounded_square(size, r, cornerRadius=0) =
+  let(
+    width = (size.x - r)/2,
+    height = (size.y - r)/2,
+
+    // fudge numbers! the radius conflict resolution in polyround smooths out
+    // the entire shape based on the ratios between conflicting radii. bumping
+    // these up makes the whole shape more fluid
+    widthRadius = r ? width*8 : 0,
+    heightRadius = r ? height*8 : 0,
+
+    bow = r/2,
+
+    // close enough :/
+    facets = 360 / $shape_facets/2,
+
+    points = [
+       [-width,-height,cornerRadius],
+       [0,-height-bow,widthRadius],
+       [width,-height,cornerRadius],
+       [width + bow,0,heightRadius],
+       [width,height,cornerRadius],
+       [0,height + bow,widthRadius],
+       [-width,height,cornerRadius],
+       [-width-bow,0,heightRadius]
+    ]
+  ) polyRound(points,facets);
+
+
 function skin_sculpted_square_shape(size, delta, progress, thickness_difference) =
   let(
     width = size[0],
@@ -67,13 +92,7 @@ function skin_sculpted_square_shape(size, delta, progress, thickness_difference)
       width - extra_width_this_slice - thickness_difference,
       height - extra_height_this_slice - thickness_difference
     ]
-  ) double_rounded_rectangle_profile(square_size - [extra_corner_radius_this_slice, extra_corner_radius_this_slice]/4, fn=$shape_facets, r=extra_corner_radius_this_slice/1.5 + $more_side_sculpting_factor * progress);
-
-  /* offset(r = extra_corner_radius_this_slice) {
-    offset(r = -extra_corner_radius_this_slice) {
-      side_rounded_square(square_size, r = $more_side_sculpting_factor * progress);
-    }
-  } */
+  ) new_side_rounded_square(square_size, $more_side_sculpting_factor * progress, extra_corner_radius_this_slice);
 
 
 module side_rounded_square(size, r) {
diff --git a/src/shapes/square.scad b/src/shapes/square.scad
index 27a5d03..701e87a 100644
--- a/src/shapes/square.scad
+++ b/src/shapes/square.scad
@@ -1,6 +1,4 @@
 use <../functions.scad>
-include <../libraries/rounded_rectangle_profile.scad>
-
 
 // we do this weird key_shape_type check here because rounded_square uses
 // square_shape, and we want flat sides to work for that too.
@@ -23,14 +21,23 @@ module square_shape(size, delta, progress){
 // shape makes the sides flat by making the top a trapezoid.
 // This obviously doesn't work with rounded sides at all
 module flat_sided_square_shape(size, delta, progress) {
-  polygon(points=[
-    [(-size.x + (delta.x + extra_keytop_length_for_flat_sides()) * progress)/2, (-size.y + delta.y * progress)/2],
-    [(size.x - (delta.x + extra_keytop_length_for_flat_sides()) * progress)/2,(-size.y + delta.y * progress)/2],
-    [(size.x - (delta.x - extra_keytop_length_for_flat_sides()) * progress)/2, (size.y - delta.y * progress)/2],
-    [(-size.x + (delta.x - extra_keytop_length_for_flat_sides()) * progress)/2, (size.y - delta.y * progress)/2]
-  ]);
+  polygon(skin_flat_sided_square_shape(size, delta, progress));
 }
 
+function skin_flat_sided_square_shape(size,delta,progress) = [
+  [(-size.x + (delta.x + extra_keytop_length_for_flat_sides()) * progress)/2, (-size.y + delta.y * progress)/2],
+  [(size.x - (delta.x + extra_keytop_length_for_flat_sides()) * progress)/2,(-size.y + delta.y * progress)/2],
+  [(size.x - (delta.x - extra_keytop_length_for_flat_sides()) * progress)/2, (size.y - delta.y * progress)/2],
+  [(-size.x + (delta.x - extra_keytop_length_for_flat_sides()) * progress)/2, (size.y - delta.y * progress)/2]
+];
+
+function rectangle_profile(size) = [
+  [-size.x/2, -size.y/2],
+  [size.x/2, -size.y/2],
+  [size.x/2, size.y/2],
+  [-size.x/2, size.y/2],
+];
+
 function skin_square_shape(size, delta, progress, thickness_difference) =
   let(
     width = size[0],
@@ -43,4 +50,4 @@ function skin_square_shape(size, delta, progress, thickness_difference) =
       width - width_difference - thickness_difference,
       height - height_difference - thickness_difference
     ]
-  ) rectangle_profile(square_size, fn=36);
+  ) $key_shape_type == "flat_sided_square" ? skin_flat_sided_square_shape(size, delta, progress) : rectangle_profile(square_size);