diff --git a/.gitignore b/.gitignore
index 2486715..fde7580 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
 stls/
+private
diff --git a/c3cat-bottle-clip/c3cat-bottle-clip.scad b/c3cat-bottle-clip/c3cat-bottle-clip.scad
index 861ecd8..19a51e7 100644
--- a/c3cat-bottle-clip/c3cat-bottle-clip.scad
+++ b/c3cat-bottle-clip/c3cat-bottle-clip.scad
@@ -26,6 +26,16 @@
  */
 
 include <write/Write.scad>
+use <catear_headband.scad>
+
+$fn = 360;
+
+NAME = "c3cat";
+LOGO_FILE = ""; // empty string is catear model
+RENDER_COLOR_ONE = true;
+RENDER_COLOR_TWO = true;
+RENDER_COLOR_THREE = true;
+USE_TINY_EARS = true;
 
 /**
  * Creates one instance of a bottle clip name tag. The default values are
@@ -44,62 +54,137 @@ include <write/Write.scad>
  * font: the path to a font for Write.scad.
  */
 
-/* currently openscad fails to render `Ohren_4.stl` outside of the preview mode */
-//difference() {
-  rotate(45, [0, 0, 1]) bottle_clip(name="c3cat");
-//  translate([ 15, 0, 18]) rotate(80, [0, 1, 0]) catear();
-//  translate([-15, 0, 18]) rotate(-80, [0, 1, 0]) catear();
-//}
-//
-//translate([0,  5, 0]) catear();
-//rotate(180) translate([0,  5, 0]) catear();
+/**
+ * currently openscad fails to render the original `Ohren_4.stl` outside of the preview mode
+ * according to [the wiki](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/FAQ#Why_is_my_imported_STL_file_appearing_with_F5_but_not_F6?) this is the stls fault
+ * using meshlab to run `Filters` -> `Cleaning and Repairing` -> `Remove T-Vertices` by `Edge-Flip` with `Ratio` of `1000000` before importing the stl works but but two errors remain.
+ */
+scale([0.2, 0.2, 0.2]) {
+  difference() {
+    scale([5, 5, 5]) rotate(45, [0, 0, 1]) bottle_clip(name=NAME);
+    translate([ 15*5, 0*5, 18*5]) rotate(80, [0, 1, 0]) catear();
+    translate([-15*5, 0*5, 18*5]) rotate(-80, [0, 1, 0]) catear();
+  }
+  if (RENDER_COLOR_TWO) {
+    color("orange")
+      translate([ 15*5, 0*5, 18*5])
+        rotate(80, [0, 1, 0])
+          catear();
+  }
+  if (RENDER_COLOR_THREE) {
+    color("yellow")
+      translate([-15*5, 0*5, 18*5])
+        rotate(-80, [0, 1, 0])
+          catear();
+  }
+}
+
+module name(name, font, rl, ht, ru) {
+  writecylinder(
+    text=name,
+    where=[0,0,0],
+    radius=rl+0.5,
+    height=ht/13*7,
+    h=ht/13*4,
+    t=max(rl,ru),
+    font=font);
+}
+
+module logo(logo, rl, ht, ru, width) {
+  echo("logo: ", logo);
+  if(logo == "") {
+    ear_size=ht;
+    echo("ht: ", ht);
+    echo("ru: ", ru);
+    echo("rl: ", rl);
+    echo("width: ", width);
+    translate([0,-max(ru,rl),ht*3/4+.5])
+      rotate([90,0,0])
+        scale([1,1,1])
+          scale([ht/100,ht/100,1])
+            translate([0, -ht/2,0])
+              rotate(-90, [0, 0, 1])
+                catear_headband(
+                  size=ear_size,
+                  height=max(ru,rl),
+                  thickness=width,
+                  stretch_len=0,
+                  tip_len=0,
+                  details=false,
+                  with_rake=false
+                );
+  } else {
+        // The logo has been split in 3 parts. // well was... TODO
+/*
+          rotate([0,0,-48]) translate([0,0,ht*3/4-0.1])
+            rotate([90,0,0])
+              scale([0.9,0.9,1])
+                scale([ht/100,ht/100,1])
+                  translate([-25,-29,0.5])
+                    linear_extrude(height=max(ru,rl)*2)
+                      import("logo_1.dxf");
+*/
+          translate([0,0,ht*3/4-0.1])
+            rotate([90,0,0])
+              scale([0.8,0.8,1])
+                scale([ht/100,ht/100,1])
+                  translate([-18,-22,0.5])
+                    linear_extrude(height=max(ru,rl)*2)
+                      import(logo);
+/*
+          rotate([0,0,44]) translate([0,0,ht*3/4-0.1])
+            rotate([90,0,0])
+              scale([0.7,0.7,1])
+                scale([ht/100,ht/100,1])
+                  translate([-25,-26,0.5])
+                    linear_extrude(height=max(ru,rl)*2)
+                      import("logo_3.dxf");
+*/
+  }
+}
 
 module bottle_clip(ru=13, rl=17.5, ht=26, width=2.5, name="c3cat", font="write/orbitron.dxf", logo="") {
-
 	e=100;  // should be big enough, used for the outer boundary of the text/logo
-
-  difference() {
-    rotate([0,0,-45]) union() {
-      // main cylinder
-      cylinder(r1=rl+width, r2=ru+width, h=ht);
-      // text and logo
-      if(logo == "") {
-        color("orange") writecylinder(name, [0,0,0], rl+0.5, ht/13*7, h=ht/13*4, t=max(rl,ru), font=font);
-        translate([4.7, -rl, ht*1.08]) rotate(-10, [1, 0, 0]) rotate(76, [0, 1, 0]) scale([0.08, 2, 0.08]) color("red") import("catears.stl");
-      } else {
-        color("orange") writecylinder(name, [0,0,0], rl+0.5, ht/13*7, h=ht/13*4, t=max(rl,ru), font=font);
-
-        // The logo has been split in 3 parts.
-/*
-        rotate([0,0,-48]) translate([0,0,ht*3/4-0.1])
-          rotate([90,0,0])
-            scale([0.9,0.9,1])
-              scale([ht/100,ht/100,1])
-                translate([-25,-29,0.5])
-                  linear_extrude(height=max(ru,rl)*2)
-                    import("logo_1.dxf");
-*/
-        translate([0,0,ht*3/4-0.1])
-          rotate([90,0,0])
-            scale([0.8,0.8,1])
-              scale([ht/100,ht/100,1])
-                translate([-18,-22,0.5])
-                  linear_extrude(height=max(ru,rl)*2)
-                    import(logo);
-/*
-        rotate([0,0,44]) translate([0,0,ht*3/4-0.1])
-          rotate([90,0,0])
-            scale([0.7,0.7,1])
-              scale([ht/100,ht/100,1])
-                translate([-25,-26,0.5])
-                  linear_extrude(height=max(ru,rl)*2)
-                    import("logo_3.dxf");
-*/
+  rotate([0,0,-45]) {
+    // main cylinder
+    if (RENDER_COLOR_ONE) {
+      color("black") difference() {
+        cylinder(r1=rl+width, r2=ru+width, h=ht);
+        difference() {
+          union() {
+            name(name=name, font=font, rl=rl, ht=ht, ru=ru);
+            logo(logo=logo, rl=rl, ht=ht, ru=ru, width=width);
+          }
+          cylinder(r1=rl+width/2, r2=ru+width/2, h=ht);
+        }
+        translate([0,0,-1])
+          cylinder(r1=rl, r2=ru, h=ht+2);
+        // finally, substract a cube as a gap so we can clip it to the bottle
+        rotate([0, 0, 45])
+          translate([0,0,-1])
+            cube([50,50,50]);
       }
     }
-    // inner cylinder which is substracted
-    translate([0,0,-1])
-      cylinder(r1=rl, r2=ru, h=ht+2);
+    // text
+    if (RENDER_COLOR_TWO) {
+      color("orange") difference() {
+        name(name=name, font=font, rl=rl, ht=ht, ru=ru);
+        cylinder(r1=rl+width/2, r2=ru+width/2, h=ht);
+        outer_cutoff(rl, e, ru, ht, width);
+      }
+    }
+    // logo
+    if (RENDER_COLOR_THREE) {
+      color("yellow") difference() {
+        logo(logo=logo, rl=rl, ht=ht, ru=ru, width=2*width);
+        cylinder(r1=rl+width/2, r2=ru+width/2, h=ht);
+        outer_cutoff(rl, e, ru, ht, width);
+      }
+    }
+  }
+}
+
+module outer_cutoff(rl, e, ru, ht, width) {
     // outer cylinder which is substracted, so the text and the logo end
     // somewhere on the outside ;-)
     difference () {
@@ -109,15 +194,14 @@ module bottle_clip(ru=13, rl=17.5, ht=26, width=2.5, name="c3cat", font="write/o
         // depth is > 0.7
         cylinder(r1=rl+width+0.7, r2=ru+width+0.7, h=ht+2);
     }
-    // finally, substract a cube as a gap so we can clip it to the bottle
-    translate([0,0,-1]) cube([50,50,50]);
-  }
 }
 
 module catear() {
-  rotate(-90, [0, 0, 1]) union() {
-    scale([0.2,  0.2, 0.2]) translate([0, -85]) import("catear.stl");
-    scale([0.2, -0.2, 0.2]) translate([0, -85]) import("catear.stl");
+  if (USE_TINY_EARS) {
+      rotate(-90, [0, 0, 1]) union() {
+      scale([1,  1 ,1]) translate([0, -85]) import("catear.stl");
+      scale([1, -1, 1]) translate([0, -85]) import("catear.stl");
+    }
   }
 }
 
diff --git a/c3cat-bottle-clip/catear_headband.scad b/c3cat-bottle-clip/catear_headband.scad
new file mode 120000
index 0000000..f4226ca
--- /dev/null
+++ b/c3cat-bottle-clip/catear_headband.scad
@@ -0,0 +1 @@
+../catear_headband.scad
\ No newline at end of file
diff --git a/catear_headband.scad b/catear_headband.scad
index ac2a4bd..142ade5 100644
--- a/catear_headband.scad
+++ b/catear_headband.scad
@@ -1,8 +1,9 @@
-include <headband.scad>
+include <globals.scad>;
 
-use <headband.scad>
+use <headband.scad>;
+use <chamfer.scad>;
 
-module catear(height, thickness, fractal=0, side_len=30, bend_factor=0.5, stretch_factor=1.2, debug=false, chamfer=CHAMFER, chamfer_shape=CHAMFER_SHAPE) {
+module catear(height, thickness, fractal=0, side_len=30, bend_factor=0.5, stretch_factor=1.2, debug=false, chamfer=CHAMFER, chamfer_shape=CHAMFER_SHAPE, details=true) {
   $A=[0, side_len/2];
   $B=[0,-side_len/2];
   $C=[-(side_len/2/sin(120))*1.5*stretch_factor, 0];
@@ -22,7 +23,7 @@ module catear(height, thickness, fractal=0, side_len=30, bend_factor=0.5, stretc
       translate([0, $a/2, 0])
         translate([$bend_offset, 0, 0])
           color("#00ffff")
-            chamfer(size=chamfer, child_h=height, child_bot=-height/2, shape=chamfer_shape)
+            chamfer(size=(details)?chamfer:0, child_h=height, child_bot=-height/2, shape=chamfer_shape)
               partial_ring(
                 part=$delta/360,
                 radius=$bend_radius,
@@ -34,15 +35,19 @@ module catear(height, thickness, fractal=0, side_len=30, bend_factor=0.5, stretc
       translate([0, -$b/2, 0])
         translate([$bend_offset, 0, 0])
           color("#ff00ff")
-            chamfer(size=chamfer, child_h=height, child_bot=-height/2, shape=chamfer_shape)
+            chamfer(size=(details)?chamfer:0, child_h=height, child_bot=-height/2, shape=chamfer_shape)
               partial_ring(
                 part=$delta/360,
                 radius=$bend_radius,
                 thickness=thickness,
                 height=height
               );
-  translate($A) color("#aaaaaa") cylinder(h=height, d=thickness, center=true);
-  translate($B) color("#bbbbbb") cylinder(h=height, d=thickness, center=true);
+  translate($A) color("#aaaaaa")
+    chamfer(size=chamfer, child_h=height, child_bot=-height/2, shape=chamfer_shape)
+      cylinder(h=height, d=thickness, center=true);
+  translate($B) color("#bbbbbb")
+    chamfer(size=chamfer, child_h=height, child_bot=-height/2, shape=chamfer_shape)
+      cylinder(h=height, d=thickness, center=true);
   translate($C) color("#cccccc")
     chamfer(size=chamfer, child_h=height, child_bot=-height/2, shape=chamfer_shape)
       cylinder(h=height, d=thickness, center=true);
@@ -69,7 +74,7 @@ module catear(height, thickness, fractal=0, side_len=30, bend_factor=0.5, stretc
   }
 }
 
-module catear_headband(debug=DEBUG, size=SIZE, height=HEIGHT, thickness=THICKNESS, part=PART, stretch_len=STRETCH_LEN, tip_len=TIP_LEN, tip_bend=TIP_BEND, ear_scale=1.5, ear_bend_factor=0.15, ear_stretch_factor=1.2, ear_angle=42, chamfer=CHAMFER, chamfer_shape=CHAMFER_SHAPE) {
+module catear_headband(debug=DEBUG, size=SIZE, height=HEIGHT, thickness=THICKNESS, part=PART, stretch_len=STRETCH_LEN, tip_len=TIP_LEN, tip_bend=TIP_BEND, ear_scale=1.5, ear_bend_factor=0.15, ear_stretch_factor=1.2, ear_angle=42, chamfer=CHAMFER, chamfer_shape=CHAMFER_SHAPE, with_rake=true, details=true) {
 
   $a=size/2*ear_scale;
   $delta=2*(acos($a/(size*2))-90);
@@ -85,7 +90,8 @@ module catear_headband(debug=DEBUG, size=SIZE, height=HEIGHT, thickness=THICKNES
         bend_factor=ear_bend_factor,
         stretch_factor=ear_stretch_factor,
         chamfer=chamfer,
-        chamfer_shape=chamfer_shape
+        chamfer_shape=chamfer_shape,
+        details=details
       );
     }
     rotate(-ear_angle, [0, 0, 1]) {
@@ -97,7 +103,8 @@ module catear_headband(debug=DEBUG, size=SIZE, height=HEIGHT, thickness=THICKNES
         bend_factor=ear_bend_factor,
         stretch_factor=ear_stretch_factor,
         chamfer=chamfer,
-        chamfer_shape=chamfer_shape
+        chamfer_shape=chamfer_shape,
+        details=details
       );
     }
     headband(
@@ -107,7 +114,9 @@ module catear_headband(debug=DEBUG, size=SIZE, height=HEIGHT, thickness=THICKNES
       part=part,
       stretch_len=stretch_len,
       tip_len=tip_len,
-      tip_bend=tip_bend
+      tip_bend=tip_bend,
+      with_rake=with_rake,
+      details=details
     );
   };
 }
diff --git a/catear_pedestal.scad b/catear_pedestal.scad
new file mode 100644
index 0000000..ad0bf7f
--- /dev/null
+++ b/catear_pedestal.scad
@@ -0,0 +1,49 @@
+include <globals.scad>
+
+use <catear_headband.scad>
+
+SCALE_FACTOR=SIZE/9;
+
+echo("scale factor: ", SCALE_FACTOR);
+echo("bottom diameter: ", SIZE/SCALE_FACTOR);
+
+
+difference() {
+  union()
+    for (i=[-1,1])
+      translate([i*2, 0, 0])
+        rotate(i*90, [0, 1, 0])
+          scale(1/SCALE_FACTOR)
+            union() {
+              translate([0, 0, SIZE+20+60])
+                rotate(90, [0, 1, 0])
+                  scale(1.6)
+                    catear_headband(thickness=5, with_rake=false);
+              translate([0, 0, 20])
+                cylinder(h=10, r=SIZE, $fn=360);
+              cylinder(h=20, d=SIZE, $fn=360);
+            }
+  translate([0, 0, -SIZE*(1/SCALE_FACTOR)*5])
+    cube(SIZE*10*(1/SCALE_FACTOR), center=true);
+}
+
+/*
+scale(1/SCALE_FACTOR) {
+translate([0, 0, 30])
+scale([1, 1, -1])
+difference() {
+  union() {
+    translate([0, 0, 20])
+      cylinder(h=10, r=SIZE, $fn=360);
+    cylinder(h=20, d=SIZE, $fn=360);
+  }
+  translate([0, 0, SIZE+20+60])
+    rotate(90, [0, 1, 0])
+      scale(1.6)
+        catear_headband(thickness=5, with_rake=false);
+}
+scale(1.6)
+  translate([0, 0, HEIGHT/2])
+    catear_headband(thickness=5, with_rake=false);
+}
+*/
\ No newline at end of file
diff --git a/generate_bottle_tag.sh b/generate_bottle_tag.sh
new file mode 100755
index 0000000..8ea378d
--- /dev/null
+++ b/generate_bottle_tag.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+# usage: generate_bottle_tag.sh NAME
+
+set -u
+
+VERSION=2.2
+LOGO_FILE='""'
+TINY_EARS=false
+FN=90
+
+NAME="\"$1\""
+
+# usage: render NAME PART
+render() {
+	case "$2" in
+		body)
+			ONE=true
+			TWO=false
+			THREE=false
+			;;
+		name)
+			ONE=false
+			TWO=true
+			THREE=false
+			;;
+		logo)
+			ONE=false
+			TWO=false
+			THREE=true
+			;;
+		*)
+			echo 'fatal: invalid part' >&2
+			exit 1
+			;;
+	esac
+
+	echo rendering "$1" "$2"
+	openscad \
+		-D "\$fn=${FN}" \
+		-D "USE_TINY_EARS=${TINY_EARS}" \
+		-D "LOGO_FILE=${LOGO_FILE}" \
+		-D "NAME=${NAME}" \
+		-D "RENDER_COLOR_ONE=${ONE}" \
+		-D "RENDER_COLOR_TWO=${TWO}" \
+		-D "RENDER_COLOR_THREE=${THREE}" \
+		-o "stls/c3cat-bottle-clip-v${VERSION}_${NAME}_${PART}.stl" \
+		c3cat-bottle-clip/c3cat-bottle-clip.scad
+}
+
+cd "$(dirname $0)"
+
+for PART in body logo name
+do
+	render "$NAME" "$PART"
+	sleep 1
+done
diff --git a/globals.scad b/globals.scad
new file mode 100644
index 0000000..2f53cd2
--- /dev/null
+++ b/globals.scad
@@ -0,0 +1,19 @@
+$fn=90;
+DEBUG=false;
+SIZE=60;
+HEIGHT=4.6;
+THICKNESS=3;
+PART=0.7;
+STRETCH_LEN=40;
+TIP_LEN=0.05;
+TIP_BEND=20;
+RAKE_DEPTH=1;
+RAKE_WIDTH=1;
+RAKE_STRETCH=1;
+RAKE_CHAMFER=0.5;
+CHAMFER=1;
+CHAMFER_SHAPE="curve";
+
+INSERTICLE_X = 4.6;
+INSERTICLE_Y = 7.4;
+INSERTICLE_Z = 5.4;
\ No newline at end of file
diff --git a/headband.scad b/headband.scad
index f09299d..9a0bab7 100644
--- a/headband.scad
+++ b/headband.scad
@@ -1,19 +1,4 @@
-$fn=360;
-DEBUG=false;
-SIZE=60;
-HEIGHT=4.6;
-THICKNESS=3;
-PART=0.7;
-STRETCH_LEN=40;
-TIP_LEN=0.05;
-TIP_BEND=20;
-RAKE_DEPTH=1;
-RAKE_WIDTH=1;
-RAKE_STRETCH=1;
-RAKE_CHAMFER=0.5;
-CHAMFER=1;
-CHAMFER_SHAPE="curve";
-
+include <globals.scad>
 use <chamfer.scad>
 
 module partial_ring(part, radius, thickness, height) {
@@ -23,9 +8,9 @@ module partial_ring(part, radius, thickness, height) {
         square([thickness, height], center=true);
 }
 
-module headband(debug=DEBUG, size=SIZE, height=HEIGHT, thickness=THICKNESS, part=PART, stretch_len=STRETCH_LEN, tip_len=TIP_LEN, tip_bend=TIP_BEND, rake_depth=RAKE_DEPTH, rake_width=RAKE_WIDTH, rake_stretch=RAKE_STRETCH, rake_chamfer=RAKE_CHAMFER, chamfer=CHAMFER, chamfer_shape=CHAMFER_SHAPE) {
+module headband(debug=DEBUG, size=SIZE, height=HEIGHT, thickness=THICKNESS, part=PART, stretch_len=STRETCH_LEN, tip_len=TIP_LEN, tip_bend=TIP_BEND, rake_depth=RAKE_DEPTH, rake_width=RAKE_WIDTH, rake_stretch=RAKE_STRETCH, rake_chamfer=RAKE_CHAMFER, chamfer=CHAMFER, chamfer_shape=CHAMFER_SHAPE, with_rake=true, details=true) {
   union() {
-    chamfer(size=chamfer, child_h=height, child_bot=-height/2, shape=chamfer_shape) union() {
+    chamfer(size=(details)?chamfer:0, child_h=height, child_bot=-height/2, shape=chamfer_shape) union() {
       color("purple")
         partial_ring(part, radius=size, thickness=thickness, height=height);
       rotate( 90-180*part, [0, 0, 1])
@@ -56,7 +41,7 @@ module headband(debug=DEBUG, size=SIZE, height=HEIGHT, thickness=THICKNESS, part
                   );
         }
     }
-    for (i=[-size/2:size/2]) {
+    if (with_rake) for (i=[-size/2:size/2]) {
       rotate(i*2-rake_width/2, [0, 0, 1])
         intersection() {
           scale([1, 1, rake_stretch/(rake_depth/height)])
@@ -69,6 +54,6 @@ module headband(debug=DEBUG, size=SIZE, height=HEIGHT, thickness=THICKNESS, part
             color("red")
               cube([2*rake_depth, rake_width, height], center=true);
         }
-    };
-  };
+    }
+  }
 }
diff --git a/loveboard-cover-r2-cat.scad b/loveboard-cover-r2-cat.scad
new file mode 100644
index 0000000..9153b6c
--- /dev/null
+++ b/loveboard-cover-r2-cat.scad
@@ -0,0 +1,83 @@
+/**
+ * This requires
+ * https://files.printables.com/media/prints/451501/stls/4205518_58958bba-4c36-4995-b4e7-da5abd1ba821/loveboard-cover-r2.stl
+ * 
+ * to be placed under `./stls/LoveBoard-cover-R2.stl` in order to work
+ * but it needs a run in meshlabs uniform fcae orientation filter for
+ * openscad to be happy with it
+ * 
+ * if rendering is missing the ear infill, `Design` > `Flush Caches`
+ * may be required.
+ */
+ 
+include <headband.scad>
+use <catear_headband.scad>
+
+HEIGHT=11;
+THICKNESS=1;
+SIDE_LEN=20;
+BEND_FACTOR=0.15;
+STRETCH_FACTOR=1.2;
+CHAMFER=0;
+CHAMFER_SHAPE="none";
+DEBUG=false;
+
+FILL=true;
+FILL_HEIGHT_FACTOR=0.9;
+FILL_HEIGHT_FALLOFF_STEP=0;
+FILL_HEIGHT_FALLOFF_FACTOR=0.98;
+FILL_HEIGHT_FALLOFF_EXPONENT_FACTOR=3;
+FILL_STEP=0.5;
+
+module loveboard_cover_r2_cat() {
+  $fn=90;
+  union() {
+    difference() {
+      union() {
+        for (i=[-1,1])
+          scale([i, 1, 1]) 
+            translate([-23, 23, 5.5])
+              rotate(-65) {
+                catear(
+                  height=HEIGHT,
+                  thickness=THICKNESS,
+                  side_len=SIDE_LEN,
+                  bend_factor=BEND_FACTOR,
+                  stretch_factor=STRETCH_FACTOR,
+                  debug=DEBUG,
+                  chamfer=CHAMFER,
+                  chamfer_shape=CHAMFER_SHAPE
+                );
+                if (FILL) {
+                  echo("BEGIN FILL");
+                  for (i=[FILL_STEP:FILL_STEP:(SIDE_LEN-FILL_STEP)])
+                    color([0, (256-i*8)/256,0]) {
+                      fill_height=(
+                        HEIGHT * FILL_HEIGHT_FACTOR
+                      * pow(FILL_HEIGHT_FALLOFF_FACTOR,
+                          (SIDE_LEN-1-i)*FILL_HEIGHT_FALLOFF_EXPONENT_FACTOR)
+                      - ((SIDE_LEN-1-i)*FILL_HEIGHT_FALLOFF_STEP)
+                      );
+                      echo([i, fill_height]);
+                      translate([0, 0, (fill_height-HEIGHT)/2])
+                      catear(
+                        height=fill_height,
+                        thickness=THICKNESS,
+                        side_len=i,
+                        bend_factor=BEND_FACTOR,
+                        stretch_factor=STRETCH_FACTOR,
+                        chamfer=0,
+                        chamfer_shape=CHAMFER_SHAPE
+                      );
+                    }
+                  echo("END FILL");
+                }
+              }
+      }
+      scale(0.9999) hull() import("stls/LoveBoard-cover-R2.stl");
+    }
+    color("red") import("stls/LoveBoard-cover-R2.stl");
+  }
+}
+
+loveboard_cover_r2_cat();
\ No newline at end of file
diff --git a/mouseear_headband.scad b/mouseear_headband.scad
new file mode 100644
index 0000000..af1ca43
--- /dev/null
+++ b/mouseear_headband.scad
@@ -0,0 +1,20 @@
+use <catear_headband.scad>
+include <headband.scad>
+
+module mouseear_headband(debug=DEBUG, size=SIZE, height=HEIGHT, thickness=THICKNESS, part=PART, stretch_len=STRETCH_LEN, tip_len=TIP_LEN, tip_bend=TIP_BEND, ear_scale=1, ear_bend_factor=0.65, ear_stretch_factor=1, ear_angle=40) {
+  catear_headband(
+    debug=debug,
+    size=size,
+    height=height,
+    thickness=thickness,
+    part=part,
+    stretch_len=stretch_len,
+    tip_len=tip_len,
+    tip_bend=tip_bend,
+    ear_scale=ear_scale,
+    ear_bend_factor=ear_bend_factor,
+    ear_stretch_factor=ear_stretch_factor,
+    ear_angle=ear_angle);
+}
+
+mouseear_headband();
diff --git a/pressfit_catears.scad b/pressfit_catears.scad
new file mode 100644
index 0000000..7697690
--- /dev/null
+++ b/pressfit_catears.scad
@@ -0,0 +1,32 @@
+include <globals.scad>;
+
+use <catear_headband.scad>;
+use <pressfit_headband.scad>;
+use <chamfer.scad>;
+
+EAR_SCALE = 1.5;
+EAR_BEND_FACTOR = 0.15;
+EAR_STRETCH_FACTOR = 1.2;
+
+difference() {
+translate([20*pow(0.99, SIZE/2*EAR_SCALE-1-THICKNESS), 0, -THICKNESS/2])
+union() for (i=[0:SIZE/2*EAR_SCALE-1]) {
+  j=pow(0.99, i);
+  chamfer_ = floor(abs(2*i/(SIZE/2*EAR_SCALE-1)-1));
+  translate([-j*20, 0, 0])
+    rotate(90, [0, 1, 0])
+      /*chamfer(size=1, child_h=1, child_bot=-0.5, shape=CHAMFER_SHAPE)*/
+        catear(
+          debug=DEBUG,
+          height=INSERTICLE_Z*1.2,
+          thickness=THICKNESS,
+          side_len=SIZE/2*EAR_SCALE-i,
+          bend_factor=EAR_BEND_FACTOR,
+          stretch_factor=EAR_STRETCH_FACTOR,
+          chamfer=chamfer_,
+          chamfer_shape=CHAMFER_SHAPE
+        );
+}
+translate([0, 0, -THICKNESS]) cube([100, 100, THICKNESS], center=true);
+scale([1, 1, 2]) inserticle();
+}
\ No newline at end of file
diff --git a/pressfit_headband.scad b/pressfit_headband.scad
index cab69aa..93cc684 100644
--- a/pressfit_headband.scad
+++ b/pressfit_headband.scad
@@ -1,7 +1,9 @@
-include <headband.scad>
+include <globals.scad>
+
+use <headband.scad>
 
 module inserticle() {
-    cube([4.6, 7.4, 5.4], center=true);
+    cube([INSERTICLE_X, INSERTICLE_Y, INSERTICLE_Z], center=true);
 }
 
 module pressfit_headband(debug=DEBUG, size=SIZE, height=HEIGHT, thickness=THICKNESS, part=PART, stretch_len=STRETCH_LEN, tip_len=TIP_LEN, tip_bend=TIP_BEND) {
diff --git a/pressfit_horns.scad b/pressfit_horns.scad
new file mode 100644
index 0000000..a3d4db7
--- /dev/null
+++ b/pressfit_horns.scad
@@ -0,0 +1,67 @@
+include <globals.scad>;
+
+use <pressfit_headband.scad>;
+
+$fn=360;
+A=30;
+N=4;
+R=45;
+LENGTH=100;
+TWIST=720;
+STEPS=360;
+SLICES=max(TWIST, STEPS, LENGTH);
+SHEIGHT=LENGTH/STEPS;
+BEND_X_FACTOR=0.5;
+BEND_Y_FACTOR=1;
+
+COLORS=[
+"#f00",
+"#f70",
+"#7f0",
+"#0f0",
+"#0f7",
+"#07f",
+"#00f",
+"#70f",
+"#f07"
+];
+
+difference() {
+  union() for (step=[1:STEPS]) {
+    a = A*(1-(step-1)/STEPS);
+    b = A*(1-step/STEPS);
+    r = TWIST/STEPS*(step-1);
+    sh_xy = 0;
+    sh_yx = 0;
+    sh_xz = 1/STEPS*step*BEND_X_FACTOR;
+    sh_yz = 1/STEPS*step*BEND_Y_FACTOR;
+    sh_zx = 0;
+    sh_zy = 0;
+    t_x = sh_xz*SHEIGHT*(step-1)*0.5;
+    t_y = sh_yz*SHEIGHT*(step-1)*0.5;
+    t_z = LENGTH/STEPS*(step-1);
+    sc_x = 1;
+    sc_y = 1;
+    sc_z = 1;
+    mm = [
+      [sc_x,  sh_xy, sh_xz, t_x],
+      [sh_yx, sc_y,  sh_yz, t_y],
+      [sh_zx, sh_zy, sc_z,  t_z],
+    ];
+    echo(a, b, b/a, r, mm);
+    multmatrix(mm)
+      color(COLORS[(step-1)%9])
+      linear_extrude(
+        SHEIGHT,
+        center=false,
+        twist=TWIST/STEPS,
+        scale=b/a,
+        slices=SLICES/STEPS
+      ) rotate(R-r)
+        circle(d=a, $fn=N);
+  }
+  translate([0, 0, INSERTICLE_Z/2])
+    inserticle();
+}
+
+echo("twist angle: ", TWIST/STEPS);
\ No newline at end of file