diff --git a/y2020/wpilib_interface.cc b/y2020/wpilib_interface.cc
index 914c9c6..b7cf7e1 100644
--- a/y2020/wpilib_interface.cc
+++ b/y2020/wpilib_interface.cc
@@ -186,13 +186,6 @@
     right_accelerator_encoder_ = ::std::move(encoder);
   }
 
-  // Control Panel
-
-  void set_control_panel_encoder(::std::unique_ptr<frc::Encoder> encoder) {
-    fast_encoder_filter_.Add(encoder.get());
-    control_panel_encoder_ = ::std::move(encoder);
-  }
-
   // Auto mode switches.
   void set_autonomous_mode(int i, ::std::unique_ptr<frc::DigitalInput> sensor) {
     medium_encoder_filter_.Add(sensor.get());
@@ -252,14 +245,6 @@
       flatbuffers::Offset<frc971::PotAndAbsolutePosition> turret_offset =
           frc971::PotAndAbsolutePosition::Pack(*builder.fbb(), &turret);
 
-      // Control Panel
-      frc971::RelativePositionT control_panel;
-      CopyPosition(*control_panel_encoder_, &control_panel,
-                   Values::kControlPanelEncoderCountsPerRevolution(),
-                   Values::kControlPanelEncoderRatio(), false);
-      flatbuffers::Offset<frc971::RelativePosition> control_panel_offset =
-          frc971::RelativePosition::Pack(*builder.fbb(), &control_panel);
-
       // Shooter
       y2020::control_loops::superstructure::ShooterPositionT shooter;
       shooter.theta_finisher =
@@ -286,7 +271,6 @@
       position_builder.add_intake_joint(intake_joint_offset);
       position_builder.add_turret(turret_offset);
       position_builder.add_shooter(shooter_offset);
-      position_builder.add_control_panel(control_panel_offset);
 
       builder.Send(position_builder.Finish());
     }
@@ -323,9 +307,7 @@
   ::frc971::wpilib::AbsoluteEncoder intake_joint_encoder_;
 
   ::std::unique_ptr<::frc::Encoder> finisher_encoder_,
-      left_accelerator_encoder_, right_accelerator_encoder_,
-      control_panel_encoder_;
-
+      left_accelerator_encoder_, right_accelerator_encoder_;
   ::std::array<::std::unique_ptr<frc::DigitalInput>, 2> autonomous_modes_;
 
   frc971::wpilib::ADIS16470 *imu_ = nullptr;
@@ -384,11 +366,6 @@
     }
   }
 
-  void set_washing_machine_control_panel_victor(
-      ::std::unique_ptr<::frc::VictorSP> t) {
-    washing_machine_control_panel_victor_ = ::std::move(t);
-  }
-
   void set_accelerator_left_falcon(::std::unique_ptr<::frc::TalonFX> t) {
     accelerator_left_falcon_ = ::std::move(t);
   }
@@ -438,12 +415,6 @@
                         std::clamp(output.feeder_voltage(), -kMaxBringupPower,
                                    kMaxBringupPower) /
                             12.0);
-    if (washing_machine_control_panel_victor_) {
-      washing_machine_control_panel_victor_->SetSpeed(
-          std::clamp(-output.washing_machine_spinner_voltage(),
-                     -kMaxBringupPower, kMaxBringupPower) /
-          12.0);
-    }
 
     accelerator_left_falcon_->SetSpeed(
         std::clamp(-output.accelerator_left_voltage(), -kMaxBringupPower,
@@ -478,9 +449,6 @@
     hood_victor_->SetDisabled();
     intake_joint_victor_->SetDisabled();
     turret_victor_->SetDisabled();
-    if (washing_machine_control_panel_victor_) {
-      washing_machine_control_panel_victor_->SetDisabled();
-    }
     accelerator_left_falcon_->SetDisabled();
     accelerator_right_falcon_->SetDisabled();
     finisher_falcon0_->SetDisabled();
@@ -492,7 +460,7 @@
   }
 
   ::std::unique_ptr<::frc::VictorSP> hood_victor_, intake_joint_victor_,
-      turret_victor_, washing_machine_control_panel_victor_;
+      turret_victor_;
 
   ::std::unique_ptr<::frc::TalonFX> accelerator_left_falcon_,
       accelerator_right_falcon_, finisher_falcon0_, finisher_falcon1_;
@@ -550,9 +518,6 @@
     sensor_reader.set_left_accelerator_encoder(make_encoder(4));
     sensor_reader.set_right_accelerator_encoder(make_encoder(3));
 
-    sensor_reader.set_control_panel_encoder(
-        make_unique<frc::Encoder>(5, 6, false, frc::Encoder::k1X));
-
     // Note: If ADIS16470 is plugged in directly to the roboRIO SPI port without
     // the Spartan Board, then trigger is on 26, reset 27, and chip select is
     // CS0.
@@ -592,8 +557,6 @@
     superstructure_writer.set_turret_victor(make_unique<frc::VictorSP>(7));
     superstructure_writer.set_feeder_falcon(
         make_unique<ctre::phoenix::motorcontrol::can::TalonFX>(1));
-    superstructure_writer.set_washing_machine_control_panel_victor(
-        make_unique<frc::VictorSP>(6));
     superstructure_writer.set_accelerator_left_falcon(
         make_unique<::frc::TalonFX>(5));
     superstructure_writer.set_accelerator_right_falcon(
