diff --git a/y2019/control_loops/drivetrain/localized_drivetrain_test.cc b/y2019/control_loops/drivetrain/localized_drivetrain_test.cc
index 3a6bec7..24dd6c2 100644
--- a/y2019/control_loops/drivetrain/localized_drivetrain_test.cc
+++ b/y2019/control_loops/drivetrain/localized_drivetrain_test.cc
@@ -212,7 +212,7 @@
 
     Goal::Builder drivetrain_builder = builder.MakeBuilder<Goal>();
     drivetrain_builder.add_controller_type(
-        frc971::control_loops::drivetrain::ControllerType_MOTION_PROFILE);
+        frc971::control_loops::drivetrain::ControllerType::MOTION_PROFILE);
     drivetrain_builder.add_left_goal(-1.0);
     drivetrain_builder.add_right_goal(1.0);
 
@@ -233,7 +233,7 @@
 
     Goal::Builder drivetrain_builder = builder.MakeBuilder<Goal>();
     drivetrain_builder.add_controller_type(
-        frc971::control_loops::drivetrain::ControllerType_MOTION_PROFILE);
+        frc971::control_loops::drivetrain::ControllerType::MOTION_PROFILE);
     drivetrain_builder.add_left_goal(-1.0);
     drivetrain_builder.add_right_goal(1.0);
 
@@ -253,7 +253,7 @@
 
     Goal::Builder drivetrain_builder = builder.MakeBuilder<Goal>();
     drivetrain_builder.add_controller_type(
-        frc971::control_loops::drivetrain::ControllerType_MOTION_PROFILE);
+        frc971::control_loops::drivetrain::ControllerType::MOTION_PROFILE);
     drivetrain_builder.add_left_goal(-1.0);
     drivetrain_builder.add_right_goal(1.0);
 
@@ -275,7 +275,7 @@
 
     Goal::Builder drivetrain_builder = builder.MakeBuilder<Goal>();
     drivetrain_builder.add_controller_type(
-        frc971::control_loops::drivetrain::ControllerType_MOTION_PROFILE);
+        frc971::control_loops::drivetrain::ControllerType::MOTION_PROFILE);
     drivetrain_builder.add_left_goal(-1.0);
     drivetrain_builder.add_right_goal(1.0);
 
@@ -304,7 +304,7 @@
 
     Goal::Builder drivetrain_builder = builder.MakeBuilder<Goal>();
     drivetrain_builder.add_controller_type(
-        frc971::control_loops::drivetrain::ControllerType_MOTION_PROFILE);
+        frc971::control_loops::drivetrain::ControllerType::MOTION_PROFILE);
     drivetrain_builder.add_left_goal(-1.0);
     drivetrain_builder.add_right_goal(1.0);
 
@@ -340,7 +340,7 @@
 
     Goal::Builder drivetrain_builder = builder.MakeBuilder<Goal>();
     drivetrain_builder.add_controller_type(
-        frc971::control_loops::drivetrain::ControllerType_MOTION_PROFILE);
+        frc971::control_loops::drivetrain::ControllerType::MOTION_PROFILE);
     drivetrain_builder.add_left_goal(-1.0);
     drivetrain_builder.add_right_goal(1.0);
 
@@ -368,7 +368,7 @@
 
     Goal::Builder drivetrain_builder = builder.MakeBuilder<Goal>();
     drivetrain_builder.add_controller_type(
-        frc971::control_loops::drivetrain::ControllerType_LINE_FOLLOWER);
+        frc971::control_loops::drivetrain::ControllerType::LINE_FOLLOWER);
     drivetrain_builder.add_throttle(0.5);
 
     EXPECT_TRUE(builder.Send(drivetrain_builder.Finish()));
diff --git a/y2019/control_loops/drivetrain/localizer_test.cc b/y2019/control_loops/drivetrain/localizer_test.cc
index fbce275..319065e 100644
--- a/y2019/control_loops/drivetrain/localizer_test.cc
+++ b/y2019/control_loops/drivetrain/localizer_test.cc
@@ -178,7 +178,7 @@
 
       goal_builder.add_spline(spline_offset);
       goal_builder.add_controller_type(
-          frc971::control_loops::drivetrain::ControllerType_SPLINE_FOLLOWER);
+          frc971::control_loops::drivetrain::ControllerType::SPLINE_FOLLOWER);
       goal_builder.add_spline_handle(1);
 
       fbb.Finish(goal_builder.Finish());
@@ -211,7 +211,7 @@
           status(fbb.Release());
 
       if (status.message().trajectory_logging()->planning_state() ==
-          ::frc971::control_loops::drivetrain::PlanningState_PLANNED) {
+          ::frc971::control_loops::drivetrain::PlanningState::PLANNED) {
         break;
       }
     }
diff --git a/y2019/control_loops/drivetrain/target_selector.cc b/y2019/control_loops/drivetrain/target_selector.cc
index 7f2259d..87115ae 100644
--- a/y2019/control_loops/drivetrain/target_selector.cc
+++ b/y2019/control_loops/drivetrain/target_selector.cc
@@ -28,9 +28,8 @@
   if (hint_fetcher_.Fetch()) {
     VLOG(1) << "selector_hint: " << aos::FlatbufferToJson(hint_fetcher_.get());
     // suggested_target is unsigned so we don't check for >= 0.
-    if (hint_fetcher_->suggested_target() < 4) {
-      target_hint_ =
-          static_cast<SelectionHint>(hint_fetcher_->suggested_target());
+    if (hint_fetcher_->suggested_target() < drivetrain::SelectionHint::MAX) {
+      target_hint_ = hint_fetcher_->suggested_target();
     } else {
       AOS_LOG(ERROR, "Got invalid suggested target.\n");
     }
@@ -64,30 +63,30 @@
       continue;
     }
     switch (target_hint_) {
-      case SelectionHint::kNearShip:
+      case drivetrain::SelectionHint::NEAR_SHIP:
         if (view.target->target_type() !=
             Target::TargetType::kNearSideCargoBay) {
           continue;
         }
         break;
-      case SelectionHint::kMidShip:
+      case drivetrain::SelectionHint::MID_SHIP:
         if (view.target->target_type() !=
             Target::TargetType::kMidSideCargoBay) {
           continue;
         }
         break;
-      case SelectionHint::kFarShip:
+      case drivetrain::SelectionHint::FAR_SHIP:
         if (view.target->target_type() !=
             Target::TargetType::kFarSideCargoBay) {
           continue;
         }
         break;
-      case SelectionHint::kFarRocket:
+      case drivetrain::SelectionHint::FAR_ROCKET:
         if (view.target->target_type() != Target::TargetType::kFarRocket) {
           continue;
         }
         break;
-      case SelectionHint::kNone:
+      case drivetrain::SelectionHint::NONE:
       default:
         break;
     }
diff --git a/y2019/control_loops/drivetrain/target_selector.fbs b/y2019/control_loops/drivetrain/target_selector.fbs
index d264992..f7a3291 100644
--- a/y2019/control_loops/drivetrain/target_selector.fbs
+++ b/y2019/control_loops/drivetrain/target_selector.fbs
@@ -1,7 +1,7 @@
 namespace y2019.control_loops.drivetrain;
 
 // These should match the SelectionHint enum in target_selector.h.
-enum SelectionHint : byte {
+enum SelectionHint : ubyte {
   // No selection, we should just default to whatever.
   NONE,
   // Near, middle, and far targets.
diff --git a/y2019/control_loops/drivetrain/target_selector.h b/y2019/control_loops/drivetrain/target_selector.h
index e75e122..4ab65ef 100644
--- a/y2019/control_loops/drivetrain/target_selector.h
+++ b/y2019/control_loops/drivetrain/target_selector.h
@@ -29,16 +29,6 @@
   typedef TypedCamera<y2019::constants::Field::kNumTargets,
                       /*num_obstacles=*/0, double> FakeCamera;
 
-  enum class SelectionHint {
-    // No hint
-    kNone = 0,
-    // Cargo ship bays
-    kNearShip = 1,
-    kMidShip = 2,
-    kFarShip = 3,
-    kFarRocket = 4,
-  };
-
   TargetSelector(::aos::EventLoop *event_loop);
 
   bool UpdateSelection(const ::Eigen::Matrix<double, 5, 1> &state,
@@ -72,7 +62,7 @@
 
   // Whether we are currently in ball mode.
   bool ball_mode_ = false;
-  SelectionHint target_hint_ = SelectionHint::kNone;
+  drivetrain::SelectionHint target_hint_ = drivetrain::SelectionHint::NONE;
 };
 
 }  // namespace control_loops
diff --git a/y2019/control_loops/drivetrain/target_selector_test.cc b/y2019/control_loops/drivetrain/target_selector_test.cc
index 90ca830..43a0456 100644
--- a/y2019/control_loops/drivetrain/target_selector_test.cc
+++ b/y2019/control_loops/drivetrain/target_selector_test.cc
@@ -118,7 +118,7 @@
         // targets:
         TestParams{(State() << 0.0, 0.0, 0.0, 1.0, 1.0).finished(),
                    /*ball_mode=*/false,
-                   drivetrain::SelectionHint_NONE,
+                   drivetrain::SelectionHint::NONE,
                    1.0,
                    false,
                    {},
@@ -127,43 +127,43 @@
         // anything.
         TestParams{(State() << 4.0, 2.0, M_PI, 0.05, 0.05).finished(),
                    /*ball_mode=*/false,
-                   drivetrain::SelectionHint_NONE,
+                   drivetrain::SelectionHint::NONE,
                    0.05,
                    false,
                    {},
                    /*expected_radius=*/0.0},
         TestParams{(State() << 4.0, 2.0, M_PI, -0.05, -0.05).finished(),
                    /*ball_mode=*/false,
-                   drivetrain::SelectionHint_NONE,
+                   drivetrain::SelectionHint::NONE,
                    -0.05,
                    false,
                    {},
                    /*expected_radius=*/0.0},
         TestParams{(State() << 4.0, 2.0, M_PI, 0.5, 0.5).finished(),
-                   /*ball_mode=*/false, drivetrain::SelectionHint_NONE, 1.0,
+                   /*ball_mode=*/false, drivetrain::SelectionHint::NONE, 1.0,
                    true, HPSlotLeft(), /*expected_radius=*/0.0},
         // Put ourselves between the rocket and cargo ship; we should see the
         // hatches driving one direction and the near cargo ship port the other.
         // We also command a speed opposite the current direction of motion and
         // confirm that that behaves as expected.
         TestParams{(State() << 6.0, 2.0, -M_PI_2, -0.5, -0.5).finished(),
-                   /*ball_mode=*/false, drivetrain::SelectionHint_NONE, 1.0,
+                   /*ball_mode=*/false, drivetrain::SelectionHint::NONE, 1.0,
                    true, CargoNearLeft(), /*expected_radius=*/HatchRadius()},
         TestParams{(State() << 6.0, 2.0, M_PI_2, 0.5, 0.5).finished(),
-                   /*ball_mode=*/false, drivetrain::SelectionHint_NONE, -1.0,
+                   /*ball_mode=*/false, drivetrain::SelectionHint::NONE, -1.0,
                    true, CargoNearLeft(), /*expected_radius=*/HatchRadius()},
         TestParams{(State() << 6.0, 2.0, -M_PI_2, 0.5, 0.5).finished(),
-                   /*ball_mode=*/false, drivetrain::SelectionHint_NONE, -1.0,
+                   /*ball_mode=*/false, drivetrain::SelectionHint::NONE, -1.0,
                    true, RocketHatchFarLeft(),
                    /*expected_radius=*/HatchRadius()},
         TestParams{(State() << 6.0, 2.0, M_PI_2, -0.5, -0.5).finished(),
-                   /*ball_mode=*/false, drivetrain::SelectionHint_NONE, 1.0,
+                   /*ball_mode=*/false, drivetrain::SelectionHint::NONE, 1.0,
                    true, RocketHatchFarLeft(),
                    /*expected_radius=*/HatchRadius()},
         // And we shouldn't see anything spinning in place:
         TestParams{(State() << 6.0, 2.0, M_PI_2, -0.5, 0.5).finished(),
                    /*ball_mode=*/false,
-                   drivetrain::SelectionHint_NONE,
+                   drivetrain::SelectionHint::NONE,
                    0.0,
                    false,
                    {},
@@ -171,7 +171,7 @@
         // Drive backwards off the field--we should not see anything.
         TestParams{(State() << -0.1, 0.0, 0.0, -0.5, -0.5).finished(),
                    /*ball_mode=*/false,
-                   drivetrain::SelectionHint_NONE,
+                   drivetrain::SelectionHint::NONE,
                    -1.0,
                    false,
                    {},
@@ -179,12 +179,12 @@
         // In ball mode, we should be able to see the portal, and get zero
         // radius.
         TestParams{(State() << 6.0, 2.0, M_PI_2, 0.5, 0.5).finished(),
-                   /*ball_mode=*/true, drivetrain::SelectionHint_NONE, 1.0,
+                   /*ball_mode=*/true, drivetrain::SelectionHint::NONE, 1.0,
                    true, RocketPortal(),
                    /*expected_radius=*/0.0},
         // Reversing direction should get cargo ship with zero radius.
         TestParams{(State() << 6.0, 2.0, M_PI_2, 0.5, 0.5).finished(),
-                   /*ball_mode=*/true, drivetrain::SelectionHint_NONE, -1.0,
+                   /*ball_mode=*/true, drivetrain::SelectionHint::NONE, -1.0,
                    true, CargoNearLeft(),
                    /*expected_radius=*/0.0}));
 
