diff --git a/y2018/BUILD b/y2018/BUILD
index d267b52..088cdfe 100644
--- a/y2018/BUILD
+++ b/y2018/BUILD
@@ -43,5 +43,6 @@
     '//frc971/autonomous:auto_queue',
     '//frc971/control_loops/drivetrain:drivetrain_queue',
     '//y2018/control_loops/drivetrain:drivetrain_base',
+    '//y2018/control_loops/superstructure:superstructure_queue',
   ],
 )
diff --git a/y2018/joystick_reader.cc b/y2018/joystick_reader.cc
index 5e4adf7..9d00ac6 100644
--- a/y2018/joystick_reader.cc
+++ b/y2018/joystick_reader.cc
@@ -13,8 +13,10 @@
 #include "aos/linux_code/init.h"
 #include "frc971/control_loops/drivetrain/drivetrain.q.h"
 #include "y2018/control_loops/drivetrain/drivetrain_base.h"
+#include "y2018/control_loops/superstructure/superstructure.q.h"
 
 using ::frc971::control_loops::drivetrain_queue;
+using ::y2018::control_loops::superstructure_queue;
 
 using ::aos::input::driver_station::ButtonLocation;
 using ::aos::input::driver_station::ControlBit;
@@ -26,6 +28,22 @@
 namespace input {
 namespace joysticks {
 
+//TODO(Neil): Change button locations to real ones on driverstation.
+const ButtonLocation kIntakeDown(3, 9);
+const POVLocation kIntakeUp(3, 90);
+const ButtonLocation kIntakeIn(3, 12);
+const ButtonLocation kIntakeOut(3, 8);
+
+const ButtonLocation kArmDown(3, 3);
+const ButtonLocation kArmSwitch(3, 7);
+const ButtonLocation kArmScale(3, 6);
+
+const ButtonLocation kClawOpen(3, 5);
+const ButtonLocation kClawClose(3, 4);
+
+const ButtonLocation kForkDeploy(3, 11);
+const ButtonLocation kForkStow(3, 10);
+
 std::unique_ptr<DrivetrainInputReader> drivetrain_input_reader_;
 
 class Reader : public ::aos::input::JoystickInput {
@@ -68,6 +86,75 @@
       action_queue_.CancelAllActions();
       LOG(DEBUG, "Canceling\n");
     }
+
+    superstructure_queue.status.FetchLatest();
+    if (!superstructure_queue.status.get()) {
+      LOG(ERROR, "Got no superstructure status packet.\n");
+      return;
+    }
+
+    if (data.IsPressed(kIntakeUp)) {
+      // Bring in the intake.
+      intake_goal_ = -M_PI; //TODO(Neil): Add real value here once we have one.
+    }
+    if (data.IsPressed(kIntakeDown)) {
+      // Deploy the intake.
+      intake_goal_ = 0; //TODO(Neil): Add real value here once we have one.
+    }
+
+    auto new_superstructure_goal = superstructure_queue.goal.MakeMessage();
+
+    new_superstructure_goal->intake.intake_angle = intake_goal_;
+
+    if (data.IsPressed(kIntakeIn)) {
+      // Turn on the rollers.
+      new_superstructure_goal->intake.roller_voltage =
+          9.0;  //TODO(Neil): Add real value once we have one.
+    } else if (data.IsPressed(kIntakeOut)) {
+      // Turn off the rollers.
+      new_superstructure_goal->intake.roller_voltage =
+          -9.0;  //TODO(Neil): Add real value once we have one.
+    } else {
+      // We don't want the rollers on.
+      new_superstructure_goal->intake.roller_voltage = 0.0;
+    }
+
+    if (data.IsPressed(kArmDown)) {
+      // Put the arm down to the intake level.
+      new_superstructure_goal->arm.proximal_position =
+          1.0;  // TODO(Neil): Add real value once we have it.
+      new_superstructure_goal->arm.distal_position =
+          0.0;  // TODO(Neil): Add real value once we have it.
+    } else if (data.IsPressed(kArmSwitch)) {
+      // Put the arm up to the level of the switch.
+      new_superstructure_goal->arm.proximal_position =
+          1.5;  // TODO(Neil): Add real value once we have it.
+      new_superstructure_goal->arm.distal_position =
+          0.5;  // TODO(Neil): Add real value once we have it.
+    } else if (data.IsPressed(kArmScale)) {
+      // Put the arm up to the level of the switch.
+      new_superstructure_goal->arm.proximal_position =
+          1.5;  // TODO(Neil): Add real value once we have it.
+      new_superstructure_goal->arm.distal_position =
+          2.0;  // TODO(Neil): Add real value once we have it.
+    }
+
+    if (data.IsPressed(kClawOpen)) {
+      new_superstructure_goal->open_claw = true;
+    } else if (data.IsPressed(kClawClose)) {
+      new_superstructure_goal->open_claw = false;
+    }
+
+    if (data.IsPressed(kForkDeploy)) {
+      new_superstructure_goal->deploy_fork = true;
+    } else if (data.IsPressed(kForkStow)) {
+      new_superstructure_goal->deploy_fork = false;
+    }
+
+    LOG_STRUCT(DEBUG, "sending goal", *new_superstructure_goal);
+    if (!new_superstructure_goal.Send()) {
+      LOG(ERROR, "Sending superstructure goal failed.\n");
+    }
   }
 
  private:
@@ -78,6 +165,9 @@
     action_queue_.CancelAllActions();
   }
 
+  // Current goals to send to the robot.
+  double intake_goal_ = 0.0;
+
   bool was_running_ = false;
   bool auto_running_ = false;
 
