diff --git a/aos/common/queue.h b/aos/common/queue.h
index 6c33822..927f11f 100644
--- a/aos/common/queue.h
+++ b/aos/common/queue.h
@@ -213,15 +213,19 @@
 
   // Fetches the next message from the queue.
   // Returns true if there was a new message available and we successfully
-  // fetched it.  This removes the message from the queue for all readers.
+  // fetched it.
   bool FetchNext();
-  bool FetchNextBlocking();
+  void FetchNextBlocking();
 
   // Fetches the last message from the queue.
   // Returns true if there was a new message available and we successfully
   // fetched it.
   bool FetchLatest();
 
+  // Fetches another message from the queue. Blocks until there is one if the
+  // latest was already Fetched.
+  void FetchAnother();
+
   // Returns the age of the message.
   const time::Time Age() { return time::Time::Now() - queue_msg_->sent_time; }
 
diff --git a/aos/common/queue_test.cc b/aos/common/queue_test.cc
index 58c88dc..dfafe6a 100644
--- a/aos/common/queue_test.cc
+++ b/aos/common/queue_test.cc
@@ -34,7 +34,7 @@
   MyThread() : threaded_test_queue(".aos.common.testing.test_queue") {}
 
   virtual void Run() {
-    ASSERT_TRUE(threaded_test_queue.FetchNextBlocking());
+    threaded_test_queue.FetchNextBlocking();
     EXPECT_TRUE(threaded_test_queue->test_bool);
     EXPECT_EQ(0x971, threaded_test_queue->test_int);
   }
diff --git a/aos/linux_code/queue-tmpl.h b/aos/linux_code/queue-tmpl.h
index 15029986..64121f3 100644
--- a/aos/linux_code/queue-tmpl.h
+++ b/aos/linux_code/queue-tmpl.h
@@ -193,12 +193,12 @@
 }
 
 template <class T>
-bool Queue<T>::FetchNextBlocking() {
+void Queue<T>::FetchNextBlocking() {
   Init();
-  const T *msg = static_cast<const T *>(queue_->ReadMessageIndex(RawQueue::kBlock, &index_));
+  const T *msg = static_cast<const T *>(
+      queue_->ReadMessageIndex(RawQueue::kBlock, &index_));
   queue_msg_.reset(msg);
   assert (msg != NULL);
-  return true;
 }
 
 template <class T>
@@ -218,6 +218,11 @@
 }
 
 template <class T>
+void Queue<T>::FetchAnother() {
+  if (!FetchLatest()) FetchNextBlocking();
+}
+
+template <class T>
 SafeScopedMessagePtr<T> Queue<T>::SafeMakeMessage() {
   Init();
   SafeScopedMessagePtr<T> safe_msg(queue_);
diff --git a/frc971/actions/shoot_action.cc b/frc971/actions/shoot_action.cc
index e302912..211d81f 100644
--- a/frc971/actions/shoot_action.cc
+++ b/frc971/actions/shoot_action.cc
@@ -10,6 +10,31 @@
 
 namespace frc971 {
 namespace actions {
+namespace {
+
+bool IntakeOff() {
+  control_loops::claw_queue_group.goal.FetchLatest();
+  if (!control_loops::claw_queue_group.goal.get()) {
+    LOG(WARNING, "no claw goal\n");
+    // If it doesn't have a goal, then the intake isn't on so we don't have to
+    // turn it off.
+    return true;
+  } else {
+    if (!control_loops::claw_queue_group.goal.MakeWithBuilder()
+        .bottom_angle(control_loops::claw_queue_group.goal->bottom_angle)
+        .separation_angle(
+            control_loops::claw_queue_group.goal->separation_angle)
+        .intake(0.0)
+        .centering(0.0)
+        .Send()) {
+      LOG(WARNING, "sending claw goal failed\n");
+      return false;
+    }
+  }
+  return true;
+}
+
+}  // namespace
 
 constexpr double ShootAction::kOffsetRadians;
 constexpr double ShootAction::kClawShootingSeparation;
@@ -53,19 +78,7 @@
     return;
   }
 
-  // Turn the intake off.
-  control_loops::claw_queue_group.goal.FetchLatest();
-
-  if (!control_loops::claw_queue_group.goal.MakeWithBuilder()
-           .bottom_angle(control_loops::claw_queue_group.goal->bottom_angle)
-           .separation_angle(
-                control_loops::claw_queue_group.goal->separation_angle)
-           .intake(0.0)
-           .centering(0.0)
-           .Send()) {
-    LOG(WARNING, "sending claw goal failed\n");
-    return;
-  }
+  if (!IntakeOff()) return;
 
   // Make sure that we have the latest shooter status.
   control_loops::shooter_queue_group.status.FetchLatest();
@@ -86,19 +99,7 @@
   // wait for record of shot having been fired
   if (WaitUntil(::std::bind(&ShootAction::DoneShot, this))) return;
 
-  // Turn the intake off.
-  control_loops::claw_queue_group.goal.FetchLatest();
-
-  if (!control_loops::claw_queue_group.goal.MakeWithBuilder()
-           .bottom_angle(control_loops::claw_queue_group.goal->bottom_angle)
-           .separation_angle(
-                control_loops::claw_queue_group.goal->separation_angle)
-           .intake(0.0)
-           .centering(0.0)
-           .Send()) {
-    LOG(WARNING, "sending claw goal failed\n");
-    return;
-  }
+  if (!IntakeOff()) return;
 }
 
 bool ClawIsReady() {
@@ -146,12 +147,8 @@
 }
 
 bool ShootAction::DoneSetupShot() {
-  if (!control_loops::shooter_queue_group.status.FetchLatest()) {
-    control_loops::shooter_queue_group.status.FetchNextBlocking();
-  }
-  if (!control_loops::claw_queue_group.status.FetchLatest()) {
-    control_loops::claw_queue_group.status.FetchNextBlocking();
-  }
+  control_loops::shooter_queue_group.status.FetchAnother();
+  control_loops::claw_queue_group.status.FetchAnother();
   // Make sure that both the shooter and claw have reached the necessary
   // states.
   if (ShooterIsReady() && ClawIsReady()) {
@@ -163,9 +160,7 @@
 }
 
 bool ShootAction::DonePreShotOpen() {
-  if (!control_loops::claw_queue_group.status.FetchLatest()) {
-    control_loops::claw_queue_group.status.FetchNextBlocking();
-  }
+  control_loops::claw_queue_group.status.FetchAnother();
   if (control_loops::claw_queue_group.status->separation >
       kClawShootingSeparation) {
     LOG(INFO, "Opened up enough to shoot.\n");
@@ -175,9 +170,7 @@
 }
 
 bool ShootAction::DoneShot() {
-  if (!control_loops::shooter_queue_group.status.FetchLatest()) {
-    control_loops::shooter_queue_group.status.FetchNextBlocking();
-  }
+  control_loops::shooter_queue_group.status.FetchAnother();
   if (control_loops::shooter_queue_group.status->shots > previous_shots_) {
     LOG(INFO, "Shot succeeded!\n");
     return true;
diff --git a/frc971/control_loops/claw/claw_calibration.cc b/frc971/control_loops/claw/claw_calibration.cc
index 608c72d..94bff15 100644
--- a/frc971/control_loops/claw/claw_calibration.cc
+++ b/frc971/control_loops/claw/claw_calibration.cc
@@ -148,7 +148,7 @@
 };
 
 int Main() {
-  while (!control_loops::claw_queue_group.position.FetchNextBlocking());
+  control_loops::claw_queue_group.position.FetchNextBlocking();
 
   const double top_start_position =
       control_loops::claw_queue_group.position->top.position;
@@ -216,87 +216,86 @@
       *control_loops::claw_queue_group.position;
 
   while (true) {
-    if (control_loops::claw_queue_group.position.FetchNextBlocking()) {
-      bool print = false;
-      if (top.GetPositionOfEdge(control_loops::claw_queue_group.position->top,
-                                &limits.upper_claw)) {
-        print = true;
-        printf("Got an edge on the upper claw\n");
-      }
-      if (bottom.GetPositionOfEdge(
-              control_loops::claw_queue_group.position->bottom,
-              &limits.lower_claw)) {
-        print = true;
-        printf("Got an edge on the lower claw\n");
-      }
-      const double top_position =
-          control_loops::claw_queue_group.position->top.position -
-          top_start_position;
-      const double bottom_position =
-          control_loops::claw_queue_group.position->bottom.position -
-          bottom_start_position;
-      const double separation = top_position - bottom_position;
-      if (separation > limits.claw_max_separation) {
-        limits.soft_max_separation = limits.claw_max_separation = separation;
-        print = true;
-      }
-      if (separation < limits.claw_min_separation) {
-        limits.soft_min_separation = limits.claw_min_separation = separation;
-        print = true;
-      }
-
-      if (print) {
-        printf("{%f,\n", limits.claw_zeroing_off_speed);
-        printf("%f,\n", limits.claw_zeroing_speed);
-        printf("%f,\n", limits.claw_zeroing_separation);
-        printf("%f,\n", limits.claw_min_separation);
-        printf("%f,\n", limits.claw_max_separation);
-        printf("%f,\n", limits.soft_min_separation);
-        printf("%f,\n", limits.soft_max_separation);
-        printf(
-            "{%f, %f, %f, %f, {%f, %f, %f, %f}, {%f, %f, %f, %f}, {%f, %f, %f, "
-            "%f}},\n",
-            limits.upper_claw.lower_hard_limit,
-            limits.upper_claw.upper_hard_limit, limits.upper_claw.lower_limit,
-            limits.upper_claw.upper_limit, limits.upper_claw.front.lower_angle,
-            limits.upper_claw.front.upper_angle,
-            limits.upper_claw.front.lower_decreasing_angle,
-            limits.upper_claw.front.upper_decreasing_angle,
-            limits.upper_claw.calibration.lower_angle,
-            limits.upper_claw.calibration.upper_angle,
-            limits.upper_claw.calibration.lower_decreasing_angle,
-            limits.upper_claw.calibration.upper_decreasing_angle,
-            limits.upper_claw.back.lower_angle,
-            limits.upper_claw.back.upper_angle,
-            limits.upper_claw.back.lower_decreasing_angle,
-            limits.upper_claw.back.upper_decreasing_angle);
-
-        printf(
-            "{%f, %f, %f, %f, {%f, %f, %f, %f}, {%f, %f, %f, %f}, {%f, %f, %f, "
-            "%f}},\n",
-            limits.lower_claw.lower_hard_limit,
-            limits.lower_claw.upper_hard_limit, limits.lower_claw.lower_limit,
-            limits.lower_claw.upper_limit, limits.lower_claw.front.lower_angle,
-            limits.lower_claw.front.upper_angle,
-            limits.lower_claw.front.lower_decreasing_angle,
-            limits.lower_claw.front.upper_decreasing_angle,
-            limits.lower_claw.calibration.lower_angle,
-            limits.lower_claw.calibration.upper_angle,
-            limits.lower_claw.calibration.lower_decreasing_angle,
-            limits.lower_claw.calibration.upper_decreasing_angle,
-            limits.lower_claw.back.lower_angle,
-            limits.lower_claw.back.upper_angle,
-            limits.lower_claw.back.lower_decreasing_angle,
-            limits.lower_claw.back.upper_decreasing_angle);
-        printf("%f,  // claw_unimportant_epsilon\n",
-               limits.claw_unimportant_epsilon);
-        printf("%f,   // start_fine_tune_pos\n", limits.start_fine_tune_pos);
-        printf("%f,\n", limits.max_zeroing_voltage);
-        printf("}\n");
-      }
-
-      last_position = *control_loops::claw_queue_group.position;
+    control_loops::claw_queue_group.position.FetchNextBlocking();
+    bool print = false;
+    if (top.GetPositionOfEdge(control_loops::claw_queue_group.position->top,
+                              &limits.upper_claw)) {
+      print = true;
+      printf("Got an edge on the upper claw\n");
     }
+    if (bottom.GetPositionOfEdge(
+            control_loops::claw_queue_group.position->bottom,
+            &limits.lower_claw)) {
+      print = true;
+      printf("Got an edge on the lower claw\n");
+    }
+    const double top_position =
+        control_loops::claw_queue_group.position->top.position -
+        top_start_position;
+    const double bottom_position =
+        control_loops::claw_queue_group.position->bottom.position -
+        bottom_start_position;
+    const double separation = top_position - bottom_position;
+    if (separation > limits.claw_max_separation) {
+      limits.soft_max_separation = limits.claw_max_separation = separation;
+      print = true;
+    }
+    if (separation < limits.claw_min_separation) {
+      limits.soft_min_separation = limits.claw_min_separation = separation;
+      print = true;
+    }
+
+    if (print) {
+      printf("{%f,\n", limits.claw_zeroing_off_speed);
+      printf("%f,\n", limits.claw_zeroing_speed);
+      printf("%f,\n", limits.claw_zeroing_separation);
+      printf("%f,\n", limits.claw_min_separation);
+      printf("%f,\n", limits.claw_max_separation);
+      printf("%f,\n", limits.soft_min_separation);
+      printf("%f,\n", limits.soft_max_separation);
+      printf(
+          "{%f, %f, %f, %f, {%f, %f, %f, %f}, {%f, %f, %f, %f}, {%f, %f, %f, "
+          "%f}},\n",
+          limits.upper_claw.lower_hard_limit,
+          limits.upper_claw.upper_hard_limit, limits.upper_claw.lower_limit,
+          limits.upper_claw.upper_limit, limits.upper_claw.front.lower_angle,
+          limits.upper_claw.front.upper_angle,
+          limits.upper_claw.front.lower_decreasing_angle,
+          limits.upper_claw.front.upper_decreasing_angle,
+          limits.upper_claw.calibration.lower_angle,
+          limits.upper_claw.calibration.upper_angle,
+          limits.upper_claw.calibration.lower_decreasing_angle,
+          limits.upper_claw.calibration.upper_decreasing_angle,
+          limits.upper_claw.back.lower_angle,
+          limits.upper_claw.back.upper_angle,
+          limits.upper_claw.back.lower_decreasing_angle,
+          limits.upper_claw.back.upper_decreasing_angle);
+
+      printf(
+          "{%f, %f, %f, %f, {%f, %f, %f, %f}, {%f, %f, %f, %f}, {%f, %f, %f, "
+          "%f}},\n",
+          limits.lower_claw.lower_hard_limit,
+          limits.lower_claw.upper_hard_limit, limits.lower_claw.lower_limit,
+          limits.lower_claw.upper_limit, limits.lower_claw.front.lower_angle,
+          limits.lower_claw.front.upper_angle,
+          limits.lower_claw.front.lower_decreasing_angle,
+          limits.lower_claw.front.upper_decreasing_angle,
+          limits.lower_claw.calibration.lower_angle,
+          limits.lower_claw.calibration.upper_angle,
+          limits.lower_claw.calibration.lower_decreasing_angle,
+          limits.lower_claw.calibration.upper_decreasing_angle,
+          limits.lower_claw.back.lower_angle,
+          limits.lower_claw.back.upper_angle,
+          limits.lower_claw.back.lower_decreasing_angle,
+          limits.lower_claw.back.upper_decreasing_angle);
+      printf("%f,  // claw_unimportant_epsilon\n",
+             limits.claw_unimportant_epsilon);
+      printf("%f,   // start_fine_tune_pos\n", limits.start_fine_tune_pos);
+      printf("%f,\n", limits.max_zeroing_voltage);
+      printf("}\n");
+    }
+
+    last_position = *control_loops::claw_queue_group.position;
   }
   return 0;
 }
diff --git a/frc971/output/led_setter.cc b/frc971/output/led_setter.cc
index a69183d..53c4974 100644
--- a/frc971/output/led_setter.cc
+++ b/frc971/output/led_setter.cc
@@ -13,7 +13,7 @@
   ::bbb::LED claw_zeroed(3);
 
   while (true) {
-    CHECK(claw_queue_group.status.FetchNextBlocking());
+    claw_queue_group.status.FetchNextBlocking();
     claw_zeroed.Set(claw_queue_group.status->zeroed_for_auto);
   }
 }
