diff --git a/frc971/wpilib/wpilib_interface.cc b/frc971/wpilib/wpilib_interface.cc
index 7b2c3a3..6f13205 100644
--- a/frc971/wpilib/wpilib_interface.cc
+++ b/frc971/wpilib/wpilib_interface.cc
@@ -32,6 +32,7 @@
 #include "frc971/wpilib/loop_output_handler.h"
 #include "frc971/wpilib/buffered_solenoid.h"
 #include "frc971/wpilib/buffered_pcm.h"
+#include "frc971/wpilib/gyro_sender.h"
 
 #include "Encoder.h"
 #include "Talon.h"
@@ -46,8 +47,6 @@
 
 using ::aos::util::SimpleLogInterval;
 using ::frc971::control_loops::drivetrain;
-using ::frc971::sensors::other_sensors;
-using ::frc971::sensors::gyro_reading;
 using ::aos::util::WrappingCounter;
 
 namespace frc971 {
@@ -355,10 +354,6 @@
 
 static const double kVcc = 5.15;
 
-double gyro_translate(int64_t in) {
-  return in / 16.0 / 1000.0 / (180.0 / M_PI);
-}
-
 float hall_translate(const constants::ShifterHallEffect &k, float in_low,
                      float in_high) {
   const float low_ratio =
@@ -617,9 +612,6 @@
     filter_.Add(claw_bottom_front_hall_.get());
     filter_.Add(claw_bottom_calibration_hall_.get());
     filter_.Add(claw_bottom_back_hall_.get());
-    printf("Filtering all hall effect sensors with a %" PRIu64
-           " nanosecond window\n",
-           filter_.GetPeriodNanoSeconds());
   }
 
   void operator()() {
@@ -687,31 +679,6 @@
     //::aos::time::TimeFreezer time_freezer;
     DriverStation *ds = DriverStation::GetInstance();
 
-    bool bad_gyro = true;
-    // TODO(brians): Switch to LogInterval for these things.
-    /*
-    if (data->uninitialized_gyro) {
-      LOG(DEBUG, "uninitialized gyro\n");
-      bad_gyro = true;
-    } else if (data->zeroing_gyro) {
-      LOG(DEBUG, "zeroing gyro\n");
-      bad_gyro = true;
-    } else if (data->bad_gyro) {
-      LOG(ERROR, "bad gyro\n");
-      bad_gyro = true;
-    } else if (data->old_gyro_reading) {
-      LOG(WARNING, "old/bad gyro reading\n");
-      bad_gyro = true;
-    } else {
-      bad_gyro = false;
-    }
-    */
-
-    if (!bad_gyro) {
-      // TODO(austin): Read the gyro.
-      gyro_reading.MakeWithBuilder().angle(0).Send();
-    }
-
     if (ds->IsSysActive()) {
       auto message = ::aos::controls::output_check_received.MakeMessage();
       // TODO(brians): Actually read a pulse value from the roboRIO.
@@ -976,6 +943,8 @@
     ::std::thread joystick_thread(::std::ref(joystick_sender));
     ::frc971::wpilib::SensorReader reader;
     ::std::thread reader_thread(::std::ref(reader));
+    ::frc971::wpilib::GyroSender gyro_sender;
+    ::std::thread gyro_thread(::std::ref(gyro_sender));
     ::std::unique_ptr<Compressor> compressor(new Compressor());
     compressor->SetClosedLoopControl(true);
 
@@ -986,7 +955,6 @@
         ::std::unique_ptr<Talon>(new Talon(2)));
     ::std::thread drivetrain_writer_thread(::std::ref(drivetrain_writer));
 
-
     ::frc971::wpilib::ClawWriter claw_writer;
     claw_writer.set_top_claw_talon(::std::unique_ptr<Talon>(new Talon(1)));
     claw_writer.set_bottom_claw_talon(::std::unique_ptr<Talon>(new Talon(0)));
@@ -1013,10 +981,13 @@
     PCHECK(select(0, nullptr, nullptr, nullptr, nullptr));
 
     LOG(ERROR, "Exiting WPILibRobot\n");
+
     joystick_sender.Quit();
     joystick_thread.join();
     reader.Quit();
     reader_thread.join();
+    gyro_sender.Quit();
+    gyro_thread.join();
 
     drivetrain_writer.Quit();
     drivetrain_writer_thread.join();
