diff --git a/y2019/wpilib_interface.cc b/y2019/wpilib_interface.cc
index 5d78649..2483f40 100644
--- a/y2019/wpilib_interface.cc
+++ b/y2019/wpilib_interface.cc
@@ -23,9 +23,7 @@
 #include "aos/logging/logging.h"
 #include "aos/logging/queue_logging.h"
 #include "aos/make_unique.h"
-#include "aos/stl_mutex/stl_mutex.h"
 #include "aos/time/time.h"
-#include "aos/util/compiler_memory_barrier.h"
 #include "aos/util/log_interval.h"
 #include "aos/util/phased_loop.h"
 #include "aos/util/wrapping_counter.h"
@@ -33,16 +31,14 @@
 #include "frc971/autonomous/auto.q.h"
 #include "frc971/control_loops/drivetrain/drivetrain.q.h"
 #include "frc971/wpilib/ADIS16448.h"
-#include "frc971/wpilib/buffered_pcm.h"
-#include "frc971/wpilib/buffered_solenoid.h"
 #include "frc971/wpilib/dma.h"
 #include "frc971/wpilib/dma_edge_counting.h"
 #include "frc971/wpilib/encoder_and_potentiometer.h"
-#include "frc971/wpilib/interrupt_edge_counting.h"
 #include "frc971/wpilib/joystick_sender.h"
 #include "frc971/wpilib/logging.q.h"
 #include "frc971/wpilib/loop_output_handler.h"
 #include "frc971/wpilib/pdp_fetcher.h"
+#include "frc971/wpilib/sensor_reader.h"
 #include "frc971/wpilib/wpilib_interface.h"
 #include "frc971/wpilib/wpilib_robot_base.h"
 
@@ -105,7 +101,7 @@
               "medium encoders are too fast");
 
 // Class to send position messages with sensor readings to our loops.
-class SensorReader {
+class SensorReader : public ::frc971::wpilib::SensorReader {
  public:
   SensorReader() {
     // Set to filter out anything shorter than 1/4 of the minimum pulse width
@@ -133,11 +129,6 @@
     drivetrain_right_encoder_ = ::std::move(encoder);
   }
 
-  void set_pwm_trigger(::std::unique_ptr<frc::DigitalInput> pwm_trigger) {
-    medium_encoder_filter_.Add(pwm_trigger.get());
-    pwm_trigger_ = ::std::move(pwm_trigger);
-  }
-
   // All of the DMA-related set_* calls must be made before this, and it
   // doesn't hurt to do all of them.
   void set_dma(::std::unique_ptr<DMA> dma) {
@@ -145,76 +136,6 @@
         new ::frc971::wpilib::DMASynchronizer(::std::move(dma)));
   }
 
-  void RunPWMDetecter() {
-    ::aos::SetCurrentThreadRealtimePriority(41);
-
-    pwm_trigger_->RequestInterrupts();
-    // Rising edge only.
-    pwm_trigger_->SetUpSourceEdge(true, false);
-
-    monotonic_clock::time_point last_posedge_monotonic =
-        monotonic_clock::min_time;
-
-    while (run_) {
-      auto ret = pwm_trigger_->WaitForInterrupt(1.0, true);
-      if (ret == frc::InterruptableSensorBase::WaitResult::kRisingEdge) {
-        // Grab all the clocks.
-        const double pwm_fpga_time = pwm_trigger_->ReadRisingTimestamp();
-
-        aos_compiler_memory_barrier();
-        const double fpga_time_before = frc::GetFPGATime() * 1e-6;
-        aos_compiler_memory_barrier();
-        const monotonic_clock::time_point monotonic_now =
-            monotonic_clock::now();
-        aos_compiler_memory_barrier();
-        const double fpga_time_after = frc::GetFPGATime() * 1e-6;
-        aos_compiler_memory_barrier();
-
-        const double fpga_offset =
-            (fpga_time_after + fpga_time_before) / 2.0 - pwm_fpga_time;
-
-        // Compute when the edge was.
-        const monotonic_clock::time_point monotonic_edge =
-            monotonic_now - chrono::duration_cast<chrono::nanoseconds>(
-                                chrono::duration<double>(fpga_offset));
-
-        LOG(DEBUG, "Got PWM pulse %f spread, %f offset, %lld trigger\n",
-            fpga_time_after - fpga_time_before, fpga_offset,
-            monotonic_edge.time_since_epoch().count());
-
-        // Compute bounds on the timestep and sampling times.
-        const double fpga_sample_length = fpga_time_after - fpga_time_before;
-        const chrono::nanoseconds elapsed_time =
-            monotonic_edge - last_posedge_monotonic;
-
-        last_posedge_monotonic = monotonic_edge;
-
-        // Verify that the values are sane.
-        if (fpga_sample_length > 2e-5 || fpga_sample_length < 0) {
-          continue;
-        }
-        if (fpga_offset < 0 || fpga_offset > 0.00015) {
-          continue;
-        }
-        if (elapsed_time >
-                chrono::microseconds(5050) + chrono::microseconds(4) ||
-            elapsed_time <
-                chrono::microseconds(5050) - chrono::microseconds(4)) {
-          continue;
-        }
-        // Good edge!
-        {
-          ::std::unique_lock<::aos::stl_mutex> locker(tick_time_mutex_);
-          last_tick_time_monotonic_timepoint_ = last_posedge_monotonic;
-          last_period_ = elapsed_time;
-        }
-      } else {
-        LOG(INFO, "PWM triggered %d\n", ret);
-      }
-    }
-    pwm_trigger_->CancelInterrupts();
-  }
-
   void operator()() {
     ::aos::SetCurrentThreadName("SensorReader");
 
@@ -293,23 +214,10 @@
 
   int32_t my_pid_;
 
-  // Mutex to manage access to the period and tick time variables.
-  ::aos::stl_mutex tick_time_mutex_;
-  monotonic_clock::time_point last_tick_time_monotonic_timepoint_ =
-      monotonic_clock::min_time;
-  chrono::nanoseconds last_period_ = chrono::microseconds(5050);
-
   ::std::unique_ptr<::frc971::wpilib::DMASynchronizer> dma_synchronizer_;
 
-  frc::DigitalGlitchFilter fast_encoder_filter_, medium_encoder_filter_,
-      hall_filter_;
-
   ::std::unique_ptr<frc::Encoder> drivetrain_left_encoder_,
       drivetrain_right_encoder_;
-
-  ::std::unique_ptr<frc::DigitalInput> pwm_trigger_;
-
-  ::std::atomic<bool> run_{true};
 };
 
 class DrivetrainWriter : public ::frc971::wpilib::LoopOutputHandler {
