diff --git a/frc971/control_loops/drivetrain/drivetrain.cc b/frc971/control_loops/drivetrain/drivetrain.cc
index 701ea1b..3573885 100644
--- a/frc971/control_loops/drivetrain/drivetrain.cc
+++ b/frc971/control_loops/drivetrain/drivetrain.cc
@@ -49,7 +49,7 @@
     virtual void CapU() {
       const Eigen::Matrix<double, 4, 1> error = R() - X_hat();
 
-      if (::std::abs(U(0)) > 12.0 || ::std::abs(U(1)) > 12.0) {
+      if (::std::abs(U(0, 0)) > 12.0 || ::std::abs(U(1, 0)) > 12.0) {
         output_was_capped_ = true;
         LOG_MATRIX(DEBUG, "U at start", U());
 
@@ -186,15 +186,15 @@
 
   double GetEstimatedRobotSpeed() const {
     // lets just call the average of left and right velocities close enough
-    return (loop_->X_hat(1) + loop_->X_hat(3)) / 2;
+    return (loop_->X_hat(1, 0) + loop_->X_hat(3, 0)) / 2;
   }
   
   double GetEstimatedLeftEncoder() const {
-    return loop_->X_hat(0);
+    return loop_->X_hat(0, 0);
   }
   
   double GetEstimatedRightEncoder() const {
-    return loop_->X_hat(2);
+    return loop_->X_hat(2, 0);
   }
 
   bool OutputWasCapped() const {
@@ -203,8 +203,8 @@
 
   void SendMotors(Drivetrain::Output *output) const {
     if (output) {
-      output->left_voltage = loop_->U(0);
-      output->right_voltage = loop_->U(1);
+      output->left_voltage = loop_->U(0, 0);
+      output->right_voltage = loop_->U(1, 0);
       output->left_high = false;
       output->right_high = false;
     }
@@ -471,7 +471,7 @@
     const double adjusted_ff_voltage = ::aos::Clip(
         throttle * 12.0 * min_FF_sum / high_min_FF_sum, -12.0, 12.0);
     return ((adjusted_ff_voltage +
-             ttrust_ * min_K_sum * (loop_->X_hat(0) + loop_->X_hat(1)) / 2.0) /
+             ttrust_ * min_K_sum * (loop_->X_hat(0, 0) + loop_->X_hat(1, 0)) / 2.0) /
             (ttrust_ * min_K_sum + min_FF_sum));
   }
 
@@ -604,10 +604,10 @@
       const double wiggle =
           (static_cast<double>((counter_ % 20) / 10) - 0.5) * 5.0;
 
-      loop_->mutable_U(0) = ::aos::Clip(
+      loop_->mutable_U(0, 0) = ::aos::Clip(
           (R_left / Kv)(0, 0) + (IsInGear(left_gear_) ? 0 : wiggle),
           -12.0, 12.0);
-      loop_->mutable_U(1) = ::aos::Clip(
+      loop_->mutable_U(1, 0) = ::aos::Clip(
           (R_right / Kv)(0, 0) + (IsInGear(right_gear_) ? 0 : wiggle),
           -12.0, 12.0);
       loop_->mutable_U() *= 12.0 / position_.battery_voltage;
@@ -616,8 +616,8 @@
 
   void SendMotors(Drivetrain::Output *output) {
     if (output != NULL) {
-      output->left_voltage = loop_->U(0);
-      output->right_voltage = loop_->U(1);
+      output->left_voltage = loop_->U(0, 0);
+      output->right_voltage = loop_->U(1, 0);
       output->left_high = left_gear_ == HIGH || left_gear_ == SHIFTING_UP;
       output->right_high = right_gear_ == HIGH || right_gear_ == SHIFTING_UP;
     }
@@ -722,8 +722,8 @@
     status->filtered_left_position = dt_closedloop.GetEstimatedLeftEncoder();
     status->filtered_right_position = dt_closedloop.GetEstimatedRightEncoder();
     status->output_was_capped = dt_closedloop.OutputWasCapped();
-    status->uncapped_left_voltage = dt_closedloop.loop().U_uncapped(0);
-    status->uncapped_right_voltage = dt_closedloop.loop().U_uncapped(1);
+    status->uncapped_left_voltage = dt_closedloop.loop().U_uncapped(0, 0);
+    status->uncapped_right_voltage = dt_closedloop.loop().U_uncapped(1, 0);
   }
 }
 
diff --git a/frc971/control_loops/drivetrain/drivetrain_lib_test.cc b/frc971/control_loops/drivetrain/drivetrain_lib_test.cc
index 548bd06..3b607fe 100644
--- a/frc971/control_loops/drivetrain/drivetrain_lib_test.cc
+++ b/frc971/control_loops/drivetrain/drivetrain_lib_test.cc
@@ -59,17 +59,17 @@
 
   // Resets the plant.
   void Reinitialize() {
-    drivetrain_plant_->mutable_X(0) = 0.0;
-    drivetrain_plant_->mutable_X(1) = 0.0;
+    drivetrain_plant_->mutable_X(0, 0) = 0.0;
+    drivetrain_plant_->mutable_X(1, 0) = 0.0;
     drivetrain_plant_->mutable_Y() =
         drivetrain_plant_->C() * drivetrain_plant_->X();
-    last_left_position_ = drivetrain_plant_->Y(0);
-    last_right_position_ = drivetrain_plant_->Y(1);
+    last_left_position_ = drivetrain_plant_->Y(0, 0);
+    last_right_position_ = drivetrain_plant_->Y(1, 0);
   }
 
   // Returns the position of the drivetrain.
-  double GetLeftPosition() const { return drivetrain_plant_->Y(0); }
-  double GetRightPosition() const { return drivetrain_plant_->Y(1); }
+  double GetLeftPosition() const { return drivetrain_plant_->Y(0, 0); }
+  double GetRightPosition() const { return drivetrain_plant_->Y(1, 0); }
 
   // Sends out the position queue messages.
   void SendPositionMessage() {
@@ -85,8 +85,8 @@
 
   // Simulates the drivetrain moving for one timestep.
   void Simulate() {
-    last_left_position_ = drivetrain_plant_->Y(0);
-    last_right_position_ = drivetrain_plant_->Y(1);
+    last_left_position_ = drivetrain_plant_->Y(0, 0);
+    last_right_position_ = drivetrain_plant_->Y(1, 0);
     EXPECT_TRUE(my_drivetrain_loop_.output.FetchLatest());
     drivetrain_plant_->mutable_U() << my_drivetrain_loop_.output->left_voltage,
         my_drivetrain_loop_.output->right_voltage;
