diff --git a/y2014/control_loops/claw/claw.cc b/y2014/control_loops/claw/claw.cc
index 4b76fd2..2fb93b4 100644
--- a/y2014/control_loops/claw/claw.cc
+++ b/y2014/control_loops/claw/claw.cc
@@ -953,15 +953,15 @@
   if (output) {
     if (goal) {
       // setup the intake
-      output_struct.intake_voltage =
-          (goal->intake() > 12.0)
-              ? 12
-              : (goal->intake() < -12.0) ? -12.0 : goal->intake();
+      output_struct.intake_voltage = (goal->intake() > 12.0) ? 12
+                                     : (goal->intake() < -12.0)
+                                         ? -12.0
+                                         : goal->intake();
       output_struct.tusk_voltage = goal->centering();
-      output_struct.tusk_voltage =
-          (goal->centering() > 12.0)
-              ? 12
-              : (goal->centering() < -12.0) ? -12.0 : goal->centering();
+      output_struct.tusk_voltage = (goal->centering() > 12.0) ? 12
+                                   : (goal->centering() < -12.0)
+                                       ? -12.0
+                                       : goal->centering();
     }
     output_struct.top_claw_voltage = claw_.U(1, 0);
     output_struct.bottom_claw_voltage = claw_.U(0, 0);
diff --git a/y2014/control_loops/claw/claw.h b/y2014/control_loops/claw/claw.h
index 07a5d2a..943e0ad 100644
--- a/y2014/control_loops/claw/claw.h
+++ b/y2014/control_loops/claw/claw.h
@@ -3,10 +3,10 @@
 
 #include <memory>
 
-#include "frc971/control_loops/control_loop.h"
-#include "frc971/control_loops/polytope.h"
 #include "frc971/control_loops/coerce_goal.h"
+#include "frc971/control_loops/control_loop.h"
 #include "frc971/control_loops/hall_effect_tracker.h"
+#include "frc971/control_loops/polytope.h"
 #include "frc971/control_loops/state_feedback_loop.h"
 #include "y2014/constants.h"
 #include "y2014/control_loops/claw/claw_goal_generated.h"
diff --git a/y2014/control_loops/claw/claw_lib_test.cc b/y2014/control_loops/claw/claw_lib_test.cc
index 3a5fdc5..8886cda 100644
--- a/y2014/control_loops/claw/claw_lib_test.cc
+++ b/y2014/control_loops/claw/claw_lib_test.cc
@@ -3,9 +3,10 @@
 #include <chrono>
 #include <memory>
 
+#include "gtest/gtest.h"
+
 #include "frc971/control_loops/control_loop_test.h"
 #include "frc971/control_loops/team_number_test_environment.h"
-#include "gtest/gtest.h"
 #include "y2014/constants.h"
 #include "y2014/control_loops/claw/claw.h"
 #include "y2014/control_loops/claw/claw_goal_generated.h"
@@ -336,8 +337,7 @@
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_bottom_angle(::std::nan(""));
     goal_builder.add_separation_angle(::std::nan(""));
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
 
   SetEnabled(true);
@@ -351,8 +351,7 @@
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_bottom_angle(0.1);
     goal_builder.add_separation_angle(0.2);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
 
   SetEnabled(true);
@@ -449,8 +448,7 @@
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_bottom_angle(0.1);
     goal_builder.add_separation_angle(0.2);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
 
   SetEnabled(true);
@@ -618,8 +616,7 @@
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_bottom_angle(0.1);
     goal_builder.add_separation_angle(0.2);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
 
   TestWindup(ClawMotor::UNKNOWN_LOCATION,
@@ -636,8 +633,7 @@
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_bottom_angle(0.1);
     goal_builder.add_separation_angle(0.2);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
 
   TestWindup(ClawMotor::UNKNOWN_LOCATION,
@@ -654,8 +650,7 @@
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_bottom_angle(0.1);
     goal_builder.add_separation_angle(0.2);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
 
   TestWindup(ClawMotor::FINE_TUNE_BOTTOM,
diff --git a/y2014/control_loops/claw/claw_main.cc b/y2014/control_loops/claw/claw_main.cc
index 16803cf..1ad93a7 100644
--- a/y2014/control_loops/claw/claw_main.cc
+++ b/y2014/control_loops/claw/claw_main.cc
@@ -1,7 +1,6 @@
-#include "y2014/control_loops/claw/claw.h"
-
 #include "aos/events/shm_event_loop.h"
 #include "aos/init.h"
+#include "y2014/control_loops/claw/claw.h"
 
 int main(int argc, char **argv) {
   ::aos::InitGoogle(&argc, &argv);
diff --git a/y2014/control_loops/shooter/shooter.h b/y2014/control_loops/shooter/shooter.h
index ec383ad..5704691 100644
--- a/y2014/control_loops/shooter/shooter.h
+++ b/y2014/control_loops/shooter/shooter.h
@@ -3,8 +3,8 @@
 
 #include <memory>
 
-#include "frc971/control_loops/control_loop.h"
 #include "aos/time/time.h"
+#include "frc971/control_loops/control_loop.h"
 #include "frc971/control_loops/state_feedback_loop.h"
 #include "y2014/constants.h"
 #include "y2014/control_loops/shooter/shooter_goal_generated.h"
diff --git a/y2014/control_loops/shooter/shooter_lib_test.cc b/y2014/control_loops/shooter/shooter_lib_test.cc
index 7fd0fbf..d7fc0ea 100644
--- a/y2014/control_loops/shooter/shooter_lib_test.cc
+++ b/y2014/control_loops/shooter/shooter_lib_test.cc
@@ -3,10 +3,11 @@
 #include <chrono>
 #include <memory>
 
+#include "gtest/gtest.h"
+
 #include "aos/network/team_number.h"
 #include "frc971/control_loops/control_loop_test.h"
 #include "frc971/control_loops/team_number_test_environment.h"
-#include "gtest/gtest.h"
 #include "y2014/constants.h"
 #include "y2014/control_loops/shooter/shooter.h"
 #include "y2014/control_loops/shooter/shooter_goal_generated.h"
@@ -404,8 +405,7 @@
     ::aos::Sender<Goal>::Builder builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_shot_power(70.0);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
   RunFor(chrono::seconds(2));
 
@@ -424,8 +424,7 @@
     ::aos::Sender<Goal>::Builder builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_shot_power(70.0);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
   RunFor(chrono::milliseconds(1200));
   EXPECT_EQ(ShooterMotor::STATE_READY, shooter_motor_.state());
@@ -434,8 +433,7 @@
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_shot_power(35.0);
     goal_builder.add_shot_requested(true);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
 
   bool hit_fire = false;
@@ -472,8 +470,7 @@
     ::aos::Sender<Goal>::Builder builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_shot_power(70.0);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
   RunFor(chrono::milliseconds(1500));
 
@@ -483,8 +480,7 @@
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_shot_power(0.0);
     goal_builder.add_shot_requested(true);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
 
   bool hit_fire = false;
@@ -521,8 +517,7 @@
     ::aos::Sender<Goal>::Builder builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_shot_power(500.0);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
   while (test_event_loop_->monotonic_now() <
          monotonic_clock::time_point(chrono::milliseconds(1600))) {
@@ -540,8 +535,7 @@
     ::aos::Sender<Goal>::Builder builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_shot_power(70.0);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
   RunFor(chrono::milliseconds(1500));
 
@@ -550,8 +544,7 @@
     ::aos::Sender<Goal>::Builder builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_shot_power(14.0);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
 
   RunFor(chrono::milliseconds(500));
@@ -570,8 +563,7 @@
     ::aos::Sender<Goal>::Builder builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_shot_power(70.0);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
   RunFor(chrono::milliseconds(1500));
   EXPECT_EQ(ShooterMotor::STATE_READY, shooter_motor_.state());
@@ -579,8 +571,7 @@
     ::aos::Sender<Goal>::Builder builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_unload_requested(true);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
 
   while (test_event_loop_->monotonic_now() <
@@ -601,8 +592,7 @@
     ::aos::Sender<Goal>::Builder builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_shot_power(70);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
   RunFor(chrono::milliseconds(1500));
 
@@ -615,8 +605,7 @@
     ::aos::Sender<Goal>::Builder builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_unload_requested(true);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
 
   while (test_event_loop_->monotonic_now() <
@@ -637,8 +626,7 @@
     ::aos::Sender<Goal>::Builder builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_shot_power(70);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
   RunFor(chrono::milliseconds(1500));
   EXPECT_EQ(ShooterMotor::STATE_READY, shooter_motor_.state());
@@ -646,8 +634,7 @@
     ::aos::Sender<Goal>::Builder builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_unload_requested(true);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
 
   int kicked_delay = 20;
@@ -682,8 +669,7 @@
     ::aos::Sender<Goal>::Builder builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_shot_power(70);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
   RunFor(chrono::milliseconds(1500));
   EXPECT_EQ(ShooterMotor::STATE_READY, shooter_motor_.state());
@@ -691,8 +677,7 @@
     ::aos::Sender<Goal>::Builder builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_unload_requested(true);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
 
   int kicked_delay = 20;
@@ -732,8 +717,7 @@
     ::aos::Sender<Goal>::Builder builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_shot_power(70.0);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
   RunFor(chrono::seconds(2));
   // EXPECT_NEAR(0.0, shooter_motor_.GetPosition(), 0.01);
@@ -754,8 +738,7 @@
     ::aos::Sender<Goal>::Builder builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_shot_power(70.0);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
   RunFor(chrono::seconds(3));
   // EXPECT_NEAR(0.0, shooter_motor_.GetPosition(), 0.01);
@@ -786,8 +769,7 @@
     ::aos::Sender<Goal>::Builder builder = shooter_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
     goal_builder.add_shot_power(120.0);
-    EXPECT_EQ(builder.Send(goal_builder.Finish()),
-              aos::RawSender::Error::kOk);
+    EXPECT_EQ(builder.Send(goal_builder.Finish()), aos::RawSender::Error::kOk);
   }
   while (test_event_loop_->monotonic_now() <
          monotonic_clock::time_point(chrono::seconds(2))) {
diff --git a/y2014/control_loops/shooter/shooter_main.cc b/y2014/control_loops/shooter/shooter_main.cc
index c2817d1..3496328 100644
--- a/y2014/control_loops/shooter/shooter_main.cc
+++ b/y2014/control_loops/shooter/shooter_main.cc
@@ -1,7 +1,6 @@
-#include "y2014/control_loops/shooter/shooter.h"
-
 #include "aos/events/shm_event_loop.h"
 #include "aos/init.h"
+#include "y2014/control_loops/shooter/shooter.h"
 
 int main(int argc, char **argv) {
   ::aos::InitGoogle(&argc, &argv);
