diff --git a/hinges.scad b/hinges.scad
index 20400ba..4668e32 100644
--- a/hinges.scad
+++ b/hinges.scad
@@ -508,8 +508,8 @@ module snap_lock(thick, snaplen=5, snapdiam=5, layerheight=0.2, foldangle=90, hi
     attachable(anchor,spin,orient, size=size) {
         back(snap_x) {
             cube([snaplen, snapdiam, snapdiam/2+thick], anchor=BOT) {
-                attach(TOP) xcyl(l=snaplen, d=snapdiam, $fn=16);
-                attach(TOP) xcopies(snaplen-snapdiam/4/3) xscale(0.333) sphere(d=snapdiam*0.8, $fn=12);
+                attach(TOP) xcyl(l=snaplen, d=snapdiam, $fn = max(16,quant(segs(snapdiam/2),4)));
+                attach(TOP) xcopies(snaplen-snapdiam/4/3) xscale(0.333) sphere(d=snapdiam*0.8, $fn = max(12,quant(segs(snapdiam/2),4)));
             }
         }
         children();
@@ -550,8 +550,8 @@ module snap_socket(thick, snaplen=5, snapdiam=5, layerheight=0.2, foldangle=90,
             zrot_copies([0,180], r=snaplen+get_slop()) {
                 diff("divot")
                 cube([snaplen, snapdiam, snapdiam/2+thick], anchor=BOT) {
-                    attach(TOP) xcyl(l=snaplen, d=snapdiam, $fn=16);
-                    tag("divot") attach(TOP) left((snaplen+snapdiam/4/3)/2) xscale(0.333) sphere(d=snapdiam*0.8, $fn=12);
+                    attach(TOP) xcyl(l=snaplen, d=snapdiam, $fn=max(16,quant(segs(snapdiam/2),4)));
+                    tag("divot") attach(TOP) left((snaplen+snapdiam/4/3)/2) xscale(0.333) sphere(d=snapdiam*0.8, $fn = max(12,quant(segs(snapdiam/2),4)));
                 }
             }
         }
diff --git a/skin.scad b/skin.scad
index e8b2bcd..d97e4c4 100644
--- a/skin.scad
+++ b/skin.scad
@@ -986,7 +986,7 @@ function rotate_sweep(
         style=style
     ) :
     let(
-        steps = ceil(segs(max_x) * angle / 360) + 1,
+        steps = ceil(segs(max_x) * angle / 360) + (angle<360? 1 : 0),
         skmat = down(min_y) * skew(sxz=shift.x/h, syz=shift.y/h) * up(min_y),
         transforms = [
             if (angle==360) for (i=[0:1:steps-1]) skmat * rot([90,0,360-i*360/steps]),
@@ -1046,7 +1046,7 @@ module rotate_sweep(
             spin=spin, orient=orient
         ) children();
     } else {
-        steps = ceil(segs(max_x) * angle / 360) + 1;
+        steps = ceil(segs(max_x) * angle / 360) + (angle<360? 1 : 0);
         skmat = down(min_y) * skew(sxz=shift.x/h, syz=shift.y/h) * up(min_y);
         transforms = [
             if (angle==360) for (i=[0:1:steps-1]) skmat * rot([90,0,360-i*360/steps]),
diff --git a/utility.scad b/utility.scad
index 4c2dbb6..1bf6283 100644
--- a/utility.scad
+++ b/utility.scad
@@ -779,7 +779,7 @@ function scalar_vec3(v, dflt) =
 //   r = Radius of circle to get the number of segments for.
 // Example:
 //   $fn=12; sides=segs(10);  // Returns: 12
-//   $fa=2; $fs=3, sides=segs(10);  // Returns: 21
+//   $fa=2; $fs=3; sides=segs(10);  // Returns: 21
 function segs(r) = 
     $fn>0? ($fn>3? $fn : 3) :
     let( r = is_finite(r)? r : 0 )
diff --git a/version.scad b/version.scad
index dd037bd..639be96 100644
--- a/version.scad
+++ b/version.scad
@@ -9,7 +9,7 @@
 //////////////////////////////////////////////////////////////////////
 
 
-BOSL_VERSION = [2,0,665];
+BOSL_VERSION = [2,0,670];
 
 
 // Section: BOSL Library Version Functions