diff --git a/gantry.py b/gantry.py
index 9538064..4d21bb7 100644
--- a/gantry.py
+++ b/gantry.py
@@ -402,7 +402,10 @@ class Carriage:
             .center(-x - HGR20.L - x_carriage_spacing / 2, -x_rail_spacing / 2)
             .transformed(rotate=(180, 0, 0))
             .rect(60, 60)
-            .extrude(64)
+            .extrude(64 - 8)
+            .faces(">z")
+            .rect(60, 32)
+            .extrude(8)
         )
         self.x_nut_mount = gantry.ball_screw_model.nutHoles(
             self.x_nut_mount, x + carriage_w / 2
@@ -418,7 +421,7 @@ class Carriage:
                 s.copyWorkplane(back)
                 .center(-x - HGR20.L - x_carriage_spacing / 2, -x_rail_spacing / 2)
                 .transformed(rotate=(0 if forward else 180, 0, 0))
-                .rect(44, 44)
+                .rect(48, 48)
                 .vertices()
                 .hole(5)
             )
@@ -508,7 +511,7 @@ class Carrier:
 
         angle_z = 0.188 * 25.4
         angle_w = 2.0 * 25.4
-        self.stepper_mount = (
+        self.stepper_bracket = (
             cq.Workplane()
             .copyWorkplane(self.plane)
             .transformed(offset=(-200 / 2, z_rail_len / 2, 0), rotate=(0, 90, 0))
@@ -520,10 +523,106 @@ class Carrier:
             .finalize()
             .extrude(200)
         )
+        self.stepper_bracket = carriage.left_rail.holes(self.stepper_bracket)
+        self.stepper_bracket = carriage.right_rail.holes(self.stepper_bracket)
+        self.stepper_bracket = (
+            self.stepper_bracket.copyWorkplane(
+                self.ballscrew_model.w.transformed(rotate=(90, 0, 0))
+            ).hole(32)
+            # .copyWorkplane(self.ballscrew_model.w.transformed(rotate=(90, 0, 0)))
+            # .pushPoints([(40, 0)])
+            # .hole(5)
+        )
+        self.stepper_bracket = self.ballscrew_model.fixedBearingHoles(
+            self.stepper_bracket
+        )
+
+        offset = (
+            self.ballscrew_model.w.vertices().val()
+            - self.plane.transformed(
+                offset=(0, z_rail_len / 2 + 10, 0), rotate=(-90, 0, 0)
+            )
+            .vertices()
+            .val()
+        )
+
+        # print("offset: ", offset)
+        self.stepper_mount = (
+            cq.Workplane()
+            .copyWorkplane(
+                self.plane.transformed(
+                    offset=(0, z_rail_len / 2 + 10, 0), rotate=(-90, 0, 0)
+                )
+            )
+            .tag("flange_center")
+            .rect(100, 50)
+            .extrude(5)
+            .workplaneFromTagged("flange_center")
+            .transformed(rotate=(180, 0, 0))
+            .rect(90, 25, forConstruction=True)
+            .vertices()
+            .hole(5)
+            .copyWorkplane(
+                self.plane.transformed(
+                    offset=(0, z_rail_len / 2 + 10, 0), rotate=(-90, 0, 0)
+                ).transformed(offset=(0, -offset.y, 0), rotate=(0, 0, 30))
+            )
+            .tag("stepper_center")
+            .rect(58.4, 58.4)
+            .extrude(5)
+            .workplaneFromTagged("stepper_center")
+            .transformed(rotate=(180, 0, 0))
+            .rect(47.41, 47.41, forConstruction=True)
+            .vertices()
+            .hole(5)
+            .copyWorkplane(self.ballscrew_model.w.transformed(rotate=(90, 0, 0)))
+            .hole(40)
+        )
+        self.stepper_bracket = (
+            self.stepper_bracket.copyWorkplane(
+                self.stepper_mount.workplaneFromTagged("stepper_center")
+            )
+            .rect(47.41, 47.41, forConstruction=True)
+            .vertices()
+            .hole(5)
+            .copyWorkplane(self.stepper_mount.workplaneFromTagged("flange_center"))
+            .transformed(rotate=(0, 0, 0))
+            .rect(90, 25, forConstruction=True)
+            .vertices()
+            .hole(5)
+        )
+
+        self.stepper_lower_spacer = (
+            cq.Workplane()
+            .copyWorkplane(self.fixed_bearing.workplaneFromTagged("mounting face"))
+            .rect(60, 40)
+            .extrude(16)
+            .copyWorkplane(self.ballscrew_model.w.transformed(rotate=(90, 0, 0)))
+            .rect(36, 36)
+            .cutThruAll()
+        )
+        self.stepper_lower_spacer = self.ballscrew_model.fixedBearingHoles(
+            self.stepper_lower_spacer
+        )
+        self.stepper_mount = self.ballscrew_model.fixedBearingHoles(self.stepper_mount)
+
+        def bracket_mounting_holes(s):
+            points = [
+                (x, y)
+                for x in [-93, -83, 93, 83]
+                for y in [-z_ballscrew_len / 2 + 30, -z_ballscrew_len / 2 + 10]
+            ]
+            return (
+                s.copyWorkplane(self.plane.transformed(rotate=(180, 0, 0)))
+                .pushPoints(points)
+                .hole(5)
+            )
+
+        self.plate = bracket_mounting_holes(self.plate)
+        self.stepper_bracket = bracket_mounting_holes(self.stepper_bracket)
 
         ballscrew_offset = z_ballscrew_len / 2 + carriage.z / 2 - z
         carriage.z_nut = self.ballscrew_model.nut(ballscrew_offset)
-        # TODO add carriage nut mount to carriage
         carriage.z_nut_mount = (
             cq.Workplane()
             .copyWorkplane(carriage.plate.workplaneFromTagged("carriage_plate"))
@@ -538,7 +637,7 @@ class Carrier:
                 )
             )
             .rect(
-                44, 44
+                48, 48
             )  # mounting holes; these need to line up with the x nut mounting holes
             .vertices()
             .hole(5)
@@ -561,8 +660,10 @@ class Carrier:
             .add(self.plate, name="z plate")
             .add(self.ballscrew, name="z ballscrew")
             .add(self.fixed_bearing, name="z fixed bearing")
-            .add(self.floating_bearing, name="z floating bearing")
-            .add(self.stepper_mount, name="stepper motor-ballscrew mount")
+            # .add(self.floating_bearing, name="z floating bearing")
+            .add(self.stepper_bracket, name="stepper motor-ballscrew bracket")
+            .add(self.stepper_lower_spacer, name="stepper motor lower spacer")
+            .add(self.stepper_mount, name="stepper mount")
         )
 
 
diff --git a/utils.py b/utils.py
index ca4b360..6b5e439 100644
--- a/utils.py
+++ b/utils.py
@@ -104,6 +104,8 @@ class SFU1204:
             .copyWorkplane(w2)
             .rect(B, H1)
             .extrude(L)
+            .copyWorkplane(w2.transformed(offset=(0, 0, L)))
+            .tag("mounting face")
             .copyWorkplane(w.transformed(rotate=(180, 0, 0)))
             .hole(d1)
             .copyWorkplane(w3.transformed(rotate=(180, 0, 0)))