diff --git a/y2024/constants.h b/y2024/constants.h
index 1d0f5d3..44c5c23 100644
--- a/y2024/constants.h
+++ b/y2024/constants.h
@@ -55,9 +55,7 @@
     return 4096.0;
   }
 
-  static constexpr double kIntakePivotEncoderRatio() {
-    return (16.0 / 64.0) * (18.0 / 62.0);
-  }
+  static constexpr double kIntakePivotEncoderRatio() { return (15.0 / 24.0); }
 
   static constexpr double kMaxIntakePivotEncoderPulsesPerSecond() {
     return control_loops::superstructure::intake_pivot::kFreeSpeed /
@@ -67,20 +65,22 @@
            kIntakePivotEncoderCountsPerRevolution();
   }
 
-  // TODO(Filip): Update climber values once we have them.
   static constexpr double kClimberEncoderCountsPerRevolution() {
     return 4096.0;
   }
 
-  static constexpr double kClimberEncoderRatio() {
-    return (16.0 / 64.0) * (18.0 / 62.0);
+  static constexpr double kClimberEncoderRatio() { return (16.0 / 60.0); }
+
+  static constexpr double kClimberPotMetersPerRevolution() {
+    return 16 * 0.25 * 0.0254 * kClimberEncoderRatio();
   }
 
-  static constexpr double kClimberPotRatio() { return 16.0 / 64.0; }
+  static constexpr double kClimberEncoderMetersPerRevolution() {
+    return kClimberPotMetersPerRevolution();
+  }
 
-  static constexpr double kClimberPotRadiansPerVolt() {
-    return kClimberPotRatio() * (3.0 /*turns*/ / 5.0 /*volts*/) *
-           (2 * M_PI /*radians*/);
+  static constexpr double kClimberPotMetersPerVolt() {
+    return kClimberPotMetersPerRevolution() * (10.0 /*turns*/ / 5.0 /*volts*/);
   }
 
   static constexpr double kMaxClimberEncoderPulsesPerSecond() {
diff --git a/y2024/constants/common.jinja2 b/y2024/constants/common.jinja2
index bcf0362..cb663fa 100644
--- a/y2024/constants/common.jinja2
+++ b/y2024/constants/common.jinja2
@@ -16,9 +16,8 @@
 }
 %}
 
-{# TODO(Filip): Update climber values #}
-{% set climber_encoder_ratio = (1.0 / 1.0) %}
-{% set climber_radius = 0.436496 %}
+{% set climber_encoder_ratio = (16.0 / 60.0) %}
+{% set climber_radius = 16.0 * 0.25 / 2.0 / pi %}
 {%
 set climber_zero = {
     "average_filter_size": zeroing_sample_size,
diff --git a/y2024/control_loops/python/climber.py b/y2024/control_loops/python/climber.py
index 10aeff9..9dd347b 100644
--- a/y2024/control_loops/python/climber.py
+++ b/y2024/control_loops/python/climber.py
@@ -14,19 +14,19 @@
 except gflags.DuplicateFlagError:
     pass
 
-# TODO(Filip): Update information the climber when design is finalized.
 kClimber = linear_system.LinearSystemParams(
     name='Climber',
-    motor=control_loop.Falcon(),
-    G=(1.0 / 4.0) * (1.0 / 3.0) * (1.0 / 3.0),
-    radius=22 * 0.25 / numpy.pi / 2.0 * 0.0254,
-    mass=2.0,
+    motor=control_loop.KrakenFOC(),
+    G=(8. / 60.) * (16. / 60.),
+    radius=16 * 0.25 / numpy.pi / 2.0 * 0.0254,
+    mass=1.0,
     q_pos=0.10,
     q_vel=1.35,
     kalman_q_pos=0.12,
     kalman_q_vel=2.00,
     kalman_q_voltage=35.0,
-    kalman_r_position=0.05)
+    kalman_r_position=0.05,
+)
 
 
 def main(argv):
diff --git a/y2024/control_loops/python/intake_pivot.py b/y2024/control_loops/python/intake_pivot.py
index f32aa8b..81a616f 100644
--- a/y2024/control_loops/python/intake_pivot.py
+++ b/y2024/control_loops/python/intake_pivot.py
@@ -20,8 +20,8 @@
 kIntakePivot = angular_system.AngularSystemParams(
     name='IntakePivot',
     motor=control_loop.KrakenFOC(),
-    G=(16.0 / 60.0) * (18.0 / 62.0) * (18.0 / 62.0) * (15.0 / 24.0),
-    J=0.34,  # Borrowed from 2022, 0.035 seems too low
+    G=(16. / 60.) * (18. / 62.) * (18. / 62.) * (15. / 24.),
+    J=0.25,
     q_pos=0.40,
     q_vel=20.0,
     kalman_q_pos=0.12,
@@ -52,4 +52,4 @@
 if __name__ == '__main__':
     argv = FLAGS(sys.argv)
     glog.init()
-    sys.exit(main(argv))
\ No newline at end of file
+    sys.exit(main(argv))
diff --git a/y2024/wpilib_interface.cc b/y2024/wpilib_interface.cc
index b396426..8050b57 100644
--- a/y2024/wpilib_interface.cc
+++ b/y2024/wpilib_interface.cc
@@ -78,7 +78,7 @@
 constexpr double kMaxBringupPower = 12.0;
 
 double climber_pot_translate(double voltage) {
-  return voltage * Values::kClimberPotRadiansPerVolt();
+  return voltage * Values::kClimberPotMetersPerVolt();
 }
 
 double drivetrain_velocity_translate(double in) {
@@ -140,7 +140,8 @@
 
       CopyPosition(climber_encoder_, builder->add_climber(),
                    Values::kClimberEncoderCountsPerRevolution(),
-                   Values::kClimberEncoderRatio(), climber_pot_translate, true,
+                   Values::kClimberEncoderMetersPerRevolution(),
+                   climber_pot_translate, true,
                    robot_constants_->robot()
                        ->climber_constants()
                        ->potentiometer_offset());
