diff --git a/y2020/constants.cc b/y2020/constants.cc
index 013cac1..740dc8c 100644
--- a/y2020/constants.cc
+++ b/y2020/constants.cc
@@ -33,8 +33,11 @@
   // keep it constant.
   constexpr double kVelocityFinisher = 350.0;
   r->shot_interpolation_table =
-      InterpolationTable<Values::ShotParams>({{1.4732, {0.10, 10.6}},
-                                              {3.50, {0.48, 13.2}},
+      InterpolationTable<Values::ShotParams>({{1.0, {0.01, 10.7}},
+                                              {1.2, {0.01, 10.7}},
+                                              {1.4732, {0.10, 10.6}},
+                                              {2.5, {0.36, 12.0}},
+                                              {3.50, {0.43, 13.2}},
                                               {4.7371, {0.535, 14.2}},
                                               {5.27, {0.53, 14.55}},
                                               {6.332, {0.53, 15.2}},
diff --git a/y2020/control_loops/superstructure/turret/aiming.cc b/y2020/control_loops/superstructure/turret/aiming.cc
index 841f1a3..2cc2ce0 100644
--- a/y2020/control_loops/superstructure/turret/aiming.cc
+++ b/y2020/control_loops/superstructure/turret/aiming.cc
@@ -72,7 +72,7 @@
 // Minimum distance that we must be from the inner port in order to attempt the
 // shot--this is to account for the fact that if we are too close to the target,
 // then we won't have a clear shot on the inner port.
-constexpr double kMinimumInnerPortShotDistance = 3.5;
+constexpr double kMinimumInnerPortShotDistance = 3.9;
 
 // Amount of buffer, in radians, to leave to help avoid wrapping. I.e., any time
 // that we are in kAvoidEdges mode, we will keep ourselves at least
@@ -165,13 +165,13 @@
   const double ydot = linear_angular(0) * std::sin(status->theta());
 
   const double inner_port_angle = robot_pose_from_inner_port.heading();
-  const double inner_port_distance = robot_pose_from_inner_port.xy_norm();
+  const double inner_port_distance = robot_pose_from_inner_port.rel_pos().x();
   // Add a bit of hysteresis so that we don't jump between aiming for the inner
   // and outer ports.
   const double max_inner_port_angle =
       aiming_for_inner_port_ ? 1.2 * kMaxInnerPortAngle : kMaxInnerPortAngle;
   const double min_inner_port_distance =
-      aiming_for_inner_port_ ? 0.8 * kMinimumInnerPortShotDistance
+      aiming_for_inner_port_ ? (kMinimumInnerPortShotDistance - 0.3)
                              : kMinimumInnerPortShotDistance;
   aiming_for_inner_port_ =
       (std::abs(inner_port_angle) < max_inner_port_angle) &&
diff --git a/y2020/joystick_reader.cc b/y2020/joystick_reader.cc
index 9934571..34d3f54 100644
--- a/y2020/joystick_reader.cc
+++ b/y2020/joystick_reader.cc
@@ -43,9 +43,11 @@
 const ButtonLocation kAutoNoHood(3, 5);
 const ButtonLocation kHood(3, 4);
 const ButtonLocation kShootSlow(4, 2);
+const ButtonLocation kFixedTurret(3, 1);
 const ButtonLocation kFeed(4, 1);
 const ButtonLocation kFeedDriver(1, 2);
 const ButtonLocation kIntakeExtend(3, 9);
+const ButtonLocation kIntakeExtendDriver(1, 4);
 const ButtonLocation kIntakeIn(4, 4);
 const ButtonLocation kSpit(4, 3);
 const ButtonLocation kLocalizerReset(3, 8);
@@ -111,8 +113,7 @@
     double climber_speed = 0.0;
     bool preload_intake = false;
 
-    const bool auto_track =
-        data.IsPressed(kAutoTrack) || data.IsPressed(kAutoNoHood);
+    const bool auto_track = data.IsPressed(kAutoTrack);
 
     if (data.IsPressed(kHood)) {
       hood_pos = 0.45;
@@ -130,7 +131,12 @@
       turret_pos = 0.0;
     }
 
-    if (data.IsPressed(kShootFast)) {
+    if (data.IsPressed(kAutoNoHood)) {
+      if (setpoint_fetcher_.get()) {
+        accelerator_speed = setpoint_fetcher_->accelerator();
+        finisher_speed = setpoint_fetcher_->finisher();
+      }
+    } else if (data.IsPressed(kShootFast)) {
       if (setpoint_fetcher_.get()) {
         accelerator_speed = setpoint_fetcher_->accelerator();
         finisher_speed = setpoint_fetcher_->finisher();
@@ -143,7 +149,7 @@
       finisher_speed = 300.0;
     }
 
-    if (data.IsPressed(kIntakeExtend)) {
+    if (data.IsPressed(kIntakeExtend) || data.IsPressed(kIntakeExtendDriver)) {
       intake_pos = 1.2;
       roller_speed = 7.0f;
       roller_speed_compensation = 2.0f;
@@ -210,10 +216,14 @@
                                                data.IsPressed(kFeedDriver));
       superstructure_goal_builder.add_climber_voltage(climber_speed);
 
-      superstructure_goal_builder.add_turret_tracking(auto_track);
+      superstructure_goal_builder.add_turret_tracking(
+          !data.IsPressed(kFixedTurret));
       superstructure_goal_builder.add_hood_tracking(
-          auto_track && !data.IsPressed(kAutoNoHood));
-      superstructure_goal_builder.add_shooter_tracking(auto_track);
+          !data.IsPressed(kFixedTurret) && !data.IsPressed(kAutoNoHood));
+      superstructure_goal_builder.add_shooter_tracking(
+          auto_track ||
+          (!data.IsPressed(kFixedTurret) && !data.IsPressed(kAutoNoHood) &&
+           data.IsPressed(kFeedDriver)));
       superstructure_goal_builder.add_intake_preloading(preload_intake);
 
       if (!builder.Send(superstructure_goal_builder.Finish())) {
