diff --git a/frc971/control_loops/index/index.cc b/frc971/control_loops/index/index.cc
index 8ba9c33..cb41973 100644
--- a/frc971/control_loops/index/index.cc
+++ b/frc971/control_loops/index/index.cc
@@ -20,8 +20,7 @@
 namespace frc971 {
 namespace control_loops {
 
-double IndexMotor::Frisbee::ObserveNoTopDiscSensor(
-    double index_position, double index_velocity) {
+double IndexMotor::Frisbee::ObserveNoTopDiscSensor(double index_position) {
   // The absolute disc position in meters.
   double disc_position = absolute_position(index_position);
   if (IndexMotor::kTopDiscDetectStart <= disc_position &&
@@ -32,36 +31,15 @@
         ::std::abs(disc_position - IndexMotor::kTopDiscDetectStop));
     double distance_to_below = IndexMotor::ConvertDiscPositionToIndex(
         ::std::abs(disc_position - IndexMotor::kTopDiscDetectStart));
-    if (::std::abs(index_velocity) < 100000) {
-      if (distance_to_above < distance_to_below) {
-        LOG(INFO, "Moving disc to top slow.\n");
-        // Move it up.
-        index_start_position_ -= distance_to_above;
-        return -distance_to_above;
-      } else {
-        LOG(INFO, "Moving disc to bottom slow.\n");
-        index_start_position_ += distance_to_below;
-        return distance_to_below;
-      }
+    if (distance_to_above < distance_to_below) {
+      LOG(INFO, "Moving disc to top slow.\n");
+      // Move it up.
+      index_start_position_ -= distance_to_above;
+      return -distance_to_above;
     } else {
-      if (index_velocity > 0) {
-        // Now going up.  If we didn't see it before, and we don't see it
-        // now but it should be in view, it must still be below.  If it were
-        // above, it would be going further away from us.
-        LOG(INFO, "Moving fast up, shifting disc down.  Disc was at %f\n",
-            absolute_position(index_position));
-        index_start_position_ += distance_to_below;
-        LOG(INFO, "Moving fast up, shifting disc down.  Disc now at %f\n",
-            absolute_position(index_position));
-        return distance_to_below;
-      } else {
-        LOG(INFO, "Moving fast down, shifting disc up.  Disc was at %f\n",
-            absolute_position(index_position));
-        index_start_position_ -= distance_to_above;
-        LOG(INFO, "Moving fast down, shifting disc up.  Disc now at %f\n",
-            absolute_position(index_position));
-        return -distance_to_above;
-      }
+      LOG(INFO, "Moving disc to bottom slow.\n");
+      index_start_position_ += distance_to_below;
+      return distance_to_below;
     }
   }
   return 0.0;
@@ -139,9 +117,6 @@
 /*static*/ const double
     IndexMotor::IndexStateFeedbackLoop::kNoMotionCuttoffCount = 20;
 
-// Distance to move the indexer when grabbing a disc.
-const double kNextPosition = 10.0;
-
 /*static*/ double IndexMotor::ConvertDiscAngleToIndex(const double angle) {
   return (angle * (1 + (kDiscRadius * 2 + kRollerRadius) / kRollerRadius));
 }
@@ -358,7 +333,7 @@
            frisbee != rend; ++frisbee) {
         frisbee->OffsetDisc(cumulative_offset);
         double amount_moved = frisbee->ObserveNoTopDiscSensor(
-            wrist_loop_->X_hat(0, 0), wrist_loop_->X_hat(1, 0));
+            wrist_loop_->X_hat(0, 0));
         cumulative_offset += amount_moved;
       }
     }
diff --git a/frc971/control_loops/index/index.h b/frc971/control_loops/index/index.h
index c9dc86f..f76ea97 100644
--- a/frc971/control_loops/index/index.h
+++ b/frc971/control_loops/index/index.h
@@ -185,7 +185,7 @@
     // currently blocking the top sensor.  This knowledge can be used to move
     // this disc if it is believed to be blocking the top sensor.
     // Returns the amount that the disc moved due to this observation.
-    double ObserveNoTopDiscSensor(double index_position, double index_velocity);
+    double ObserveNoTopDiscSensor(double index_position);
 
     // Posedge and negedge disc times.
     ::aos::time::Time bottom_posedge_time_;
