diff --git a/y2016/control_loops/superstructure/superstructure.cc b/y2016/control_loops/superstructure/superstructure.cc
index e85657c..97fe0dd 100644
--- a/y2016/control_loops/superstructure/superstructure.cc
+++ b/y2016/control_loops/superstructure/superstructure.cc
@@ -659,6 +659,8 @@
       output->voltage_bottom_rollers = ::std::max(
           -kMaxIntakeBottomVoltage,
           ::std::min(unsafe_goal->voltage_bottom_rollers, kMaxIntakeBottomVoltage));
+      output->traverse_unlatched = unsafe_goal->traverse_unlatched;
+      output->traverse_down = unsafe_goal->traverse_down;
     }
   }
 
diff --git a/y2016/control_loops/superstructure/superstructure.q b/y2016/control_loops/superstructure/superstructure.q
index 5d17fb6..f550512 100644
--- a/y2016/control_loops/superstructure/superstructure.q
+++ b/y2016/control_loops/superstructure/superstructure.q
@@ -64,6 +64,12 @@
     // Voltage to send to the rollers. Positive is sucking in.
     float voltage_top_rollers;
     float voltage_bottom_rollers;
+
+    // If true, release the latch which holds the traverse mechanism in the
+    // middle.
+    bool traverse_unlatched;
+    // If true, fire the traverse mechanism down.
+    bool traverse_down;
   };
 
   message Status {
@@ -109,6 +115,11 @@
 
     float voltage_top_rollers;
     float voltage_bottom_rollers;
+
+    // If true, release the latch to hold the traverse mechanism in the middle.
+    bool traverse_unlatched;
+    // If true, fire the traverse mechanism down.
+    bool traverse_down;
   };
 
   queue Goal goal;
diff --git a/y2016/joystick_reader.cc b/y2016/joystick_reader.cc
index ab23df1..3226d06 100644
--- a/y2016/joystick_reader.cc
+++ b/y2016/joystick_reader.cc
@@ -58,12 +58,11 @@
 const POVLocation kBackLong(3, 0);
 const POVLocation kBackFender(3, 90);
 const POVLocation kFrontFender(3, 270);
-const ButtonLocation kTest3(3, 7);
 const ButtonLocation kIntakeIn(3, 12);
-const ButtonLocation kTest5(3, 8);
 const ButtonLocation kFire(3, 3);
-const ButtonLocation kTest7(3, 5);
 const ButtonLocation kIntakeOut(3, 9);
+const ButtonLocation kPortcullis(3, 7);
+const ButtonLocation kChevalDeFrise(3, 8);
 
 const ButtonLocation kVisionAlign(3, 4);
 
@@ -239,10 +238,6 @@
       shooter_velocity_ = 0.0;
     }
 
-    if (data.IsPressed(kTest3)) {
-      wrist_goal_ = 0.0;
-    }
-
     bool ball_detected = false;
     ::y2016::sensors::ball_detector.FetchLatest();
     if (::y2016::sensors::ball_detector.get()) {
@@ -297,9 +292,6 @@
       }
     }
 
-    if (data.PosEdge(kTest7)) {
-    }
-
     is_outtaking_ = data.IsPressed(kIntakeOut);
 
     if (is_intaking_ || is_outtaking_) {
@@ -318,6 +310,17 @@
       --recently_intaking_accumulator_;
     }
 
+    if (data.IsPressed(kPortcullis)) {
+      traverse_unlatched_ = true;
+      traverse_down_ = true;
+    } else if (data.IsPressed(kChevalDeFrise)) {
+      traverse_unlatched_ = false;
+      traverse_down_ = true;
+    } else {
+      traverse_unlatched_ = true;
+      traverse_down_ = false;
+    }
+
     if (!waiting_for_zero_) {
       auto new_superstructure_goal = superstructure_queue.goal.MakeMessage();
       new_superstructure_goal->angle_intake = intake_goal_;
@@ -355,6 +358,9 @@
         new_superstructure_goal->voltage_bottom_rollers = 0.0;
       }
 
+      new_superstructure_goal->traverse_unlatched = traverse_unlatched_;
+      new_superstructure_goal->traverse_down = traverse_down_;
+
       if (!new_superstructure_goal.Send()) {
         LOG(ERROR, "Sending superstructure goal failed.\n");
       } else {
@@ -397,6 +403,9 @@
   bool was_running_ = false;
   bool auto_running_ = false;
 
+  bool traverse_unlatched_ = false;
+  bool traverse_down_ = false;
+
   // If we're waiting for the subsystems to zero.
   bool waiting_for_zero_ = true;
 
diff --git a/y2016/wpilib/wpilib_interface.cc b/y2016/wpilib/wpilib_interface.cc
index 7c58f15..caf34b2 100644
--- a/y2016/wpilib/wpilib_interface.cc
+++ b/y2016/wpilib/wpilib_interface.cc
@@ -398,7 +398,10 @@
   SolenoidWriter(const ::std::unique_ptr<::frc971::wpilib::BufferedPcm> &pcm)
       : pcm_(pcm),
         drivetrain_(".frc971.control_loops.drivetrain_queue.output"),
-        shooter_(".y2016.control_loops.shooter.shooter_queue.output") {}
+        shooter_(".y2016.control_loops.shooter.shooter_queue.output"),
+        superstructure_(
+            ".y2016.control_loops.superstructure_queue.output") {
+  }
 
   void set_compressor(::std::unique_ptr<Compressor> compressor) {
     compressor_ = ::std::move(compressor);
@@ -414,6 +417,16 @@
     drivetrain_right_ = ::std::move(s);
   }
 
+  void set_traverse(
+      ::std::unique_ptr<::frc971::wpilib::BufferedSolenoid> s) {
+    traverse_ = ::std::move(s);
+  }
+
+  void set_traverse_latch(
+      ::std::unique_ptr<::frc971::wpilib::BufferedSolenoid> s) {
+    traverse_latch_ = ::std::move(s);
+  }
+
   void set_shooter_clamp(
       ::std::unique_ptr<::frc971::wpilib::BufferedSolenoid> s) {
     shooter_clamp_ = ::std::move(s);
@@ -465,6 +478,15 @@
       }
 
       {
+        superstructure_.FetchLatest();
+        if (superstructure_.get()) {
+          LOG_STRUCT(DEBUG, "solenoids", *shooter_);
+          traverse_->Set(superstructure_->traverse_down);
+          traverse_latch_->Set(superstructure_->traverse_unlatched);
+        }
+      }
+
+      {
         ::frc971::wpilib::PneumaticsToLog to_log;
         {
           to_log.compressor_on = compressor_->Enabled();
@@ -483,11 +505,15 @@
   const ::std::unique_ptr<::frc971::wpilib::BufferedPcm> &pcm_;
 
   ::std::unique_ptr<::frc971::wpilib::BufferedSolenoid> drivetrain_left_,
-      drivetrain_right_, shooter_clamp_, shooter_pusher_, lights_;
+      drivetrain_right_, shooter_clamp_, shooter_pusher_, lights_, traverse_,
+      traverse_latch_;
   ::std::unique_ptr<Compressor> compressor_;
 
   ::aos::Queue<::frc971::control_loops::DrivetrainQueue::Output> drivetrain_;
   ::aos::Queue<::y2016::control_loops::shooter::ShooterQueue::Output> shooter_;
+  ::aos::Queue<
+      ::y2016::control_loops::SuperstructureQueue::Output>
+      superstructure_;
 
   ::std::atomic<bool> run_{true};
 };
@@ -694,6 +720,8 @@
     SolenoidWriter solenoid_writer(pcm);
     solenoid_writer.set_drivetrain_left(pcm->MakeSolenoid(1));
     solenoid_writer.set_drivetrain_right(pcm->MakeSolenoid(0));
+    solenoid_writer.set_traverse_latch(pcm->MakeSolenoid(2));
+    solenoid_writer.set_traverse(pcm->MakeSolenoid(3));
     solenoid_writer.set_shooter_clamp(pcm->MakeSolenoid(4));
     solenoid_writer.set_shooter_pusher(pcm->MakeSolenoid(5));
     solenoid_writer.set_lights(pcm->MakeSolenoid(6));
