diff --git a/y2019/BUILD b/y2019/BUILD
index 8705da0..7c987f6 100644
--- a/y2019/BUILD
+++ b/y2019/BUILD
@@ -46,6 +46,7 @@
         "//frc971/wpilib:logging_queue",
         "//frc971/wpilib:loop_output_handler",
         "//frc971/wpilib:pdp_fetcher",
+        "//frc971/wpilib:sensor_reader",
         "//frc971/wpilib:wpilib_interface",
         "//frc971/wpilib:wpilib_robot_base",
         "//third_party:wpilib",
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 {
