diff --git a/y2017/wpilib_interface.cc b/y2017/wpilib_interface.cc
index 659f11c..158f7a1 100644
--- a/y2017/wpilib_interface.cc
+++ b/y2017/wpilib_interface.cc
@@ -125,70 +125,6 @@
 static_assert(kMaxSlowEncoderPulsesPerSecond < kMaxMediumEncoderPulsesPerSecond,
               "slow encoders are faster than medium?");
 
-// Handles reading the duty cycle on a DigitalInput.
-class DutyCycleReader {
- public:
-  void set_input(::std::unique_ptr<DigitalInput> input) {
-    high_counter_.reset(new Counter(input.get()));
-    high_counter_->SetMaxPeriod(kMaxPeriod);
-    high_counter_->SetSemiPeriodMode(true);
-
-    period_length_counter_.reset(new Counter(input.get()));
-    period_length_counter_->SetMaxPeriod(kMaxPeriod);
-    period_length_counter_->SetUpSourceEdge(true, false);
-
-    input_ = ::std::move(input);
-  }
-
-  double Read() const {
-    const double high_time = high_counter_->GetPeriod();
-    const double period_length = period_length_counter_->GetPeriod();
-    if (!::std::isfinite(high_time) || !::std::isfinite(period_length)) {
-      return ::std::numeric_limits<double>::quiet_NaN();
-    }
-    return high_time / period_length;
-  }
-
- private:
-  static constexpr ::std::chrono::nanoseconds kNominalPeriod =
-      ::std::chrono::microseconds(4096);
-  static constexpr double kMaxPeriod =
-      (::std::chrono::duration_cast<::std::chrono::duration<double>>(
-           kNominalPeriod) *
-       2).count();
-
-  ::std::unique_ptr<Counter> high_counter_, period_length_counter_;
-  ::std::unique_ptr<DigitalInput> input_;
-};
-
-class AbsoluteEncoderAndPotentiometer {
- public:
-  void set_absolute_pwm(::std::unique_ptr<DigitalInput> input) {
-    duty_cycle_.set_input(::std::move(input));
-  }
-
-  void set_encoder(::std::unique_ptr<Encoder> encoder) {
-    encoder_ = ::std::move(encoder);
-  }
-
-  void set_potentiometer(::std::unique_ptr<AnalogInput> potentiometer) {
-    potentiometer_ = ::std::move(potentiometer);
-  }
-
-  double ReadAbsoluteEncoder() const { return duty_cycle_.Read(); }
-
-  int32_t ReadRelativeEncoder() const { return encoder_->GetRaw(); }
-
-  double ReadPotentiometerVoltage() const {
-    return potentiometer_->GetVoltage();
-  }
-
- private:
-  DutyCycleReader duty_cycle_;
-  ::std::unique_ptr<Encoder> encoder_;
-  ::std::unique_ptr<AnalogInput> potentiometer_;
-};
-
 // Class to send position messages with sensor readings to our loops.
 class SensorReader {
  public:
@@ -492,11 +428,12 @@
     position->index_pulses = encoder.index_posedge_count();
   }
 
-  void CopyPosition(const AbsoluteEncoderAndPotentiometer &encoder,
-                    ::frc971::PotAndAbsolutePosition *position,
-                    double encoder_counts_per_revolution, double encoder_ratio,
-                    ::std::function<double(double)> potentiometer_translate,
-                    bool reverse, double pot_offset) {
+  void CopyPosition(
+      const ::frc971::wpilib::AbsoluteEncoderAndPotentiometer &encoder,
+      ::frc971::PotAndAbsolutePosition *position,
+      double encoder_counts_per_revolution, double encoder_ratio,
+      ::std::function<double(double)> potentiometer_translate, bool reverse,
+      double pot_offset) {
     const double multiplier = reverse ? -1.0 : 1.0;
     position->pot = multiplier * potentiometer_translate(
                                      encoder.ReadPotentiometerVoltage()) +
@@ -551,7 +488,7 @@
   ::std::unique_ptr<Encoder> drivetrain_left_encoder_,
       drivetrain_right_encoder_;
 
-  AbsoluteEncoderAndPotentiometer intake_encoder_;
+  ::frc971::wpilib::AbsoluteEncoderAndPotentiometer intake_encoder_;
 
   ::std::unique_ptr<Encoder> indexer_encoder_;
   ::std::unique_ptr<DigitalInput> indexer_hall_;
