diff --git a/frc971/control_loops/wrists/top_wrist_motor_plant.cc b/frc971/control_loops/claw/bottom_claw_motor_plant.cc
similarity index 65%
copy from frc971/control_loops/wrists/top_wrist_motor_plant.cc
copy to frc971/control_loops/claw/bottom_claw_motor_plant.cc
index 132ef4f..a0eb131 100644
--- a/frc971/control_loops/wrists/top_wrist_motor_plant.cc
+++ b/frc971/control_loops/claw/bottom_claw_motor_plant.cc
@@ -1,4 +1,4 @@
-#include "frc971/control_loops/wrists/top_wrist_motor_plant.h"
+#include "frc971/control_loops/claw/bottom_claw_motor_plant.h"
 
 #include <vector>
 
@@ -7,7 +7,7 @@
 namespace frc971 {
 namespace control_loops {
 
-StateFeedbackPlantCoefficients<3, 1, 1> MakeWristPlantCoefficients() {
+StateFeedbackPlantCoefficients<3, 1, 1> MakeBottomClawPlantCoefficients() {
   Eigen::Matrix<double, 3, 3> A;
   A << 1.0, 0.00904786878843, 0.000326582411818, 0.0, 0.815818233346, 0.0631746179893, 0.0, 0.0, 1.0;
   Eigen::Matrix<double, 3, 1> B;
@@ -23,23 +23,23 @@
   return StateFeedbackPlantCoefficients<3, 1, 1>(A, B, C, D, U_max, U_min);
 }
 
-StateFeedbackController<3, 1, 1> MakeWristController() {
+StateFeedbackController<3, 1, 1> MakeBottomClawController() {
   Eigen::Matrix<double, 3, 1> L;
   L << 1.81581823335, 78.6334534274, 142.868137351;
   Eigen::Matrix<double, 1, 3> K;
   K << 92.6004807973, 4.38063492858, 1.11581823335;
-  return StateFeedbackController<3, 1, 1>(L, K, MakeWristPlantCoefficients());
+  return StateFeedbackController<3, 1, 1>(L, K, MakeBottomClawPlantCoefficients());
 }
 
-StateFeedbackPlant<3, 1, 1> MakeWristPlant() {
+StateFeedbackPlant<3, 1, 1> MakeBottomClawPlant() {
   ::std::vector<StateFeedbackPlantCoefficients<3, 1, 1> *> plants(1);
-  plants[0] = new StateFeedbackPlantCoefficients<3, 1, 1>(MakeWristPlantCoefficients());
+  plants[0] = new StateFeedbackPlantCoefficients<3, 1, 1>(MakeBottomClawPlantCoefficients());
   return StateFeedbackPlant<3, 1, 1>(plants);
 }
 
-StateFeedbackLoop<3, 1, 1> MakeWristLoop() {
+StateFeedbackLoop<3, 1, 1> MakeBottomClawLoop() {
   ::std::vector<StateFeedbackController<3, 1, 1> *> controllers(1);
-  controllers[0] = new StateFeedbackController<3, 1, 1>(MakeWristController());
+  controllers[0] = new StateFeedbackController<3, 1, 1>(MakeBottomClawController());
   return StateFeedbackLoop<3, 1, 1>(controllers);
 }
 
diff --git a/frc971/control_loops/claw/bottom_claw_motor_plant.h b/frc971/control_loops/claw/bottom_claw_motor_plant.h
new file mode 100644
index 0000000..fc905ca
--- /dev/null
+++ b/frc971/control_loops/claw/bottom_claw_motor_plant.h
@@ -0,0 +1,20 @@
+#ifndef FRC971_CONTROL_LOOPS_CLAW_BOTTOM_CLAW_MOTOR_PLANT_H_
+#define FRC971_CONTROL_LOOPS_CLAW_BOTTOM_CLAW_MOTOR_PLANT_H_
+
+#include "frc971/control_loops/state_feedback_loop.h"
+
+namespace frc971 {
+namespace control_loops {
+
+StateFeedbackPlantCoefficients<3, 1, 1> MakeBottomClawPlantCoefficients();
+
+StateFeedbackController<3, 1, 1> MakeBottomClawController();
+
+StateFeedbackPlant<3, 1, 1> MakeBottomClawPlant();
+
+StateFeedbackLoop<3, 1, 1> MakeBottomClawLoop();
+
+}  // namespace control_loops
+}  // namespace frc971
+
+#endif  // FRC971_CONTROL_LOOPS_CLAW_BOTTOM_CLAW_MOTOR_PLANT_H_
diff --git a/frc971/control_loops/claw/claw.cc b/frc971/control_loops/claw/claw.cc
new file mode 100644
index 0000000..55cbcc5
--- /dev/null
+++ b/frc971/control_loops/claw/claw.cc
@@ -0,0 +1,113 @@
+#include "frc971/control_loops/claw/claw.h"
+
+#include <stdio.h>
+
+#include <algorithm>
+
+#include "aos/common/control_loop/control_loops.q.h"
+#include "aos/common/logging/logging.h"
+
+#include "frc971/constants.h"
+#include "frc971/control_loops/claw/top_claw_motor_plant.h"
+#include "frc971/control_loops/claw/bottom_claw_motor_plant.h"
+
+// Zeroing plan.
+// There are 2 types of zeros.  Enabled and disabled ones.
+// Disabled ones are only valid during auto mode, and can be used to speed up
+// the enabled zero process.  We need to re-zero during teleop in case the auto
+// zero was poor and causes us to miss all our shots.
+//
+// We need to be able to zero manually while disabled by moving the joint over
+// the zeros.
+// Zero on the down edge when disabled (gravity in the direction of motion)
+//
+// When enabled, zero on the up edge (gravity opposing the direction of motion)
+// The enabled sequence needs to work as follows.  We can crash the claw if we
+// bring them too close to each other or too far from each other.  The only safe
+// thing to do is to move them in unison.
+//
+// Start by moving them both towards the front of the bot to either find either
+// the middle hall effect on either jaw, or the front hall effect on the bottom
+// jaw.  Any edge that isn't the desired edge will provide an approximate edge
+// location that can be used for the fine tuning step.
+// Once an edge is found on the front claw, move back the other way with both
+// claws until an edge is found for the other claw.
+// Now that we have an approximate zero, we can robustify the limits to keep
+// both claws safe.  Then, we can move both claws to a position that is the
+// correct side of the zero and go zero.
+
+// Valid region plan.
+// Difference between the arms has a range, and the values of each arm has a range.
+// If a claw runs up against a static limit, don't let the goal change outside
+// the limit.
+// If a claw runs up against a movable limit, move both claws outwards to get
+// out of the condition.
+
+namespace frc971 {
+namespace control_loops {
+
+ClawMotor::ClawMotor(control_loops::ClawLoop *my_claw)
+    : aos::control_loops::ControlLoop<control_loops::ClawLoop>(my_claw),
+      zeroed_joint_(MakeTopClawLoop()) {
+  {
+    using ::frc971::constants::GetValues;
+    ZeroedJoint<1>::ConfigurationData config_data;
+
+    config_data.lower_limit = GetValues().claw_lower_limit;
+    config_data.upper_limit = GetValues().claw_upper_limit;
+    config_data.hall_effect_start_angle[0] =
+        GetValues().claw_hall_effect_start_angle;
+    config_data.zeroing_off_speed = GetValues().claw_zeroing_off_speed;
+    config_data.zeroing_speed = GetValues().claw_zeroing_speed;
+
+    config_data.max_zeroing_voltage = 5.0;
+    config_data.deadband_voltage = 0.0;
+
+    zeroed_joint_.set_config_data(config_data);
+  }
+}
+
+// Positive angle is up, and positive power is up.
+void ClawMotor::RunIteration(const control_loops::ClawLoop::Goal *goal,
+                             const control_loops::ClawLoop::Position *position,
+                             control_loops::ClawLoop::Output *output,
+                             ::aos::control_loops::Status *status) {
+
+  // Disable the motors now so that all early returns will return with the
+  // motors disabled.
+  if (output) {
+    output->top_claw_voltage = 0;
+    output->bottom_claw_voltage = 0;
+    output->intake_voltage = 0;
+  }
+
+  ZeroedJoint<1>::PositionData transformed_position;
+  ZeroedJoint<1>::PositionData *transformed_position_ptr =
+      &transformed_position;
+  if (!position) {
+    transformed_position_ptr = NULL;
+  } else {
+    transformed_position.position = position->top_position;
+    transformed_position.hall_effects[0] = position->top_calibration_hall_effect;
+    transformed_position.hall_effect_positions[0] = position->top_posedge_value;
+  }
+
+  const double voltage =
+      zeroed_joint_.Update(transformed_position_ptr, output != NULL,
+                           goal->bottom_angle + goal->seperation_angle, 0.0);
+
+  if (position) {
+    LOG(DEBUG, "pos: %f hall: %s absolute: %f\n", position->top_position,
+        position->top_calibration_hall_effect ? "true" : "false",
+        zeroed_joint_.absolute_position());
+  }
+
+  if (output) {
+    output->top_claw_voltage = voltage;
+  }
+  status->done = ::std::abs(zeroed_joint_.absolute_position() -
+                            goal->bottom_angle - goal->seperation_angle) < 0.004;
+}
+
+}  // namespace control_loops
+}  // namespace frc971
diff --git a/frc971/control_loops/wrists/wrists.gyp b/frc971/control_loops/claw/claw.gyp
similarity index 69%
rename from frc971/control_loops/wrists/wrists.gyp
rename to frc971/control_loops/claw/claw.gyp
index f455e2e..c541dad 100644
--- a/frc971/control_loops/wrists/wrists.gyp
+++ b/frc971/control_loops/claw/claw.gyp
@@ -1,11 +1,11 @@
 {
   'targets': [
     {
-      'target_name': 'wrist_loops',
+      'target_name': 'claw_loops',
       'type': 'static_library',
-      'sources': ['wrists.q'],
+      'sources': ['claw.q'],
       'variables': {
-        'header_path': 'frc971/control_loops/wrists',
+        'header_path': 'frc971/control_loops/claw',
       },
       'dependencies': [
         '<(AOS)/common/common.gyp:control_loop_queues',
@@ -18,48 +18,50 @@
       'includes': ['../../../aos/build/queues.gypi'],
     },
     {
-      'target_name': 'wrists_lib',
+      'target_name': 'claw_lib',
       'type': 'static_library',
       'sources': [
-        'wrists.cc',
-        'top_wrist_motor_plant.cc',
-        'top_wrist_motor_plant.cc',
+        'claw.cc',
+        'top_claw_motor_plant.cc',
+        'bottom_claw_motor_plant.cc',
+        'unaugmented_top_claw_motor_plant.cc',
+        'unaugmented_bottom_claw_motor_plant.cc',
       ],
       'dependencies': [
-        'wrist_loops',
+        'claw_loops',
         '<(AOS)/common/common.gyp:controls',
         '<(DEPTH)/frc971/frc971.gyp:constants',
         '<(DEPTH)/frc971/control_loops/control_loops.gyp:state_feedback_loop',
       ],
       'export_dependent_settings': [
-        'wrist_loops',
+        'claw_loops',
         '<(AOS)/common/common.gyp:controls',
         '<(DEPTH)/frc971/control_loops/control_loops.gyp:state_feedback_loop',
       ],
     },
     {
-      'target_name': 'wrists_lib_test',
+      'target_name': 'claw_lib_test',
       'type': 'executable',
       'sources': [
-        'wrists_lib_test.cc',
+        'claw_lib_test.cc',
       ],
       'dependencies': [
         '<(EXTERNALS):gtest',
-        'wrist_loops',
-        'wrists_lib',
+        'claw_loops',
+        'claw_lib',
         '<(AOS)/common/common.gyp:queue_testutils',
         '<(DEPTH)/frc971/control_loops/control_loops.gyp:state_feedback_loop',
       ],
     },
     {
-      'target_name': 'wrists',
+      'target_name': 'claw',
       'type': 'executable',
       'sources': [
-        'wrists_main.cc',
+        'claw_main.cc',
       ],
       'dependencies': [
         '<(AOS)/linux_code/linux_code.gyp:init',
-        'wrists_lib',
+        'claw_lib',
       ],
     },
   ],
diff --git a/frc971/control_loops/claw/claw.h b/frc971/control_loops/claw/claw.h
new file mode 100644
index 0000000..e057c3e
--- /dev/null
+++ b/frc971/control_loops/claw/claw.h
@@ -0,0 +1,63 @@
+#ifndef FRC971_CONTROL_LOOPS_CLAW_CLAW_H_
+#define FRC971_CONTROL_LOOPS_CLAW_CLAW_H_
+
+#include <memory>
+
+#include "aos/common/control_loop/ControlLoop.h"
+#include "frc971/control_loops/state_feedback_loop.h"
+#include "frc971/control_loops/claw/claw.q.h"
+#include "frc971/control_loops/claw/top_claw_motor_plant.h"
+#include "frc971/control_loops/claw/bottom_claw_motor_plant.h"
+
+#include "frc971/control_loops/zeroed_joint.h"
+
+namespace frc971 {
+namespace control_loops {
+namespace testing {
+class ClawTest_NoWindupPositive_Test;
+class ClawTest_NoWindupNegative_Test;
+};
+
+class ClawMotor
+    : public aos::control_loops::ControlLoop<control_loops::ClawLoop> {
+ public:
+  explicit ClawMotor(
+      control_loops::ClawLoop *my_claw = &control_loops::claw);
+
+  // True if the goal was moved to avoid goal windup.
+  bool capped_goal() const { return zeroed_joint_.capped_goal(); }
+
+  // True if the claw is zeroing.
+  bool is_zeroing() const { return zeroed_joint_.is_zeroing(); }
+
+  // True if the claw is zeroing.
+  bool is_moving_off() const { return zeroed_joint_.is_moving_off(); }
+
+  // True if the state machine is uninitialized.
+  bool is_uninitialized() const { return zeroed_joint_.is_uninitialized(); }
+
+  // True if the state machine is ready.
+  bool is_ready() const { return zeroed_joint_.is_ready(); }
+
+ protected:
+  virtual void RunIteration(
+      const control_loops::ClawLoop::Goal *goal,
+      const control_loops::ClawLoop::Position *position,
+      control_loops::ClawLoop::Output *output,
+      ::aos::control_loops::Status *status);
+
+ private:
+  // Friend the test classes for acces to the internal state.
+  friend class testing::ClawTest_NoWindupPositive_Test;
+  friend class testing::ClawTest_NoWindupNegative_Test;
+
+  // The zeroed joint to use.
+  ZeroedJoint<1> zeroed_joint_;
+
+  DISALLOW_COPY_AND_ASSIGN(ClawMotor);
+};
+
+}  // namespace control_loops
+}  // namespace frc971
+
+#endif  // FRC971_CONTROL_LOOPS_CLAW_CLAW_H_
diff --git a/frc971/control_loops/claw/claw.q b/frc971/control_loops/claw/claw.q
new file mode 100644
index 0000000..8852fd3
--- /dev/null
+++ b/frc971/control_loops/claw/claw.q
@@ -0,0 +1,57 @@
+package frc971.control_loops;
+
+import "aos/common/control_loop/control_loops.q";
+
+// All angles here are 0 horizontal, positive up.
+queue_group ClawLoop {
+  implements aos.control_loops.ControlLoop;
+
+  message Goal {
+    // The angle of the bottom wrist.
+    double bottom_angle;
+    // How much higher the top wrist is.
+    double seperation_angle;
+    bool intake;
+  };
+  message Position {
+    double top_position;
+
+    bool top_front_hall_effect;
+    int32_t top_front_hall_effect_posedge_count;
+    int32_t top_front_hall_effect_negedge_count;
+    bool top_calibration_hall_effect;
+    int32_t top_calibration_hall_effect_posedge_count;
+    int32_t top_calibration_hall_effect_negedge_count;
+    bool top_back_hall_effect;
+    int32_t top_back_hall_effect_posedge_count;
+    int32_t top_back_hall_effect_negedge_count;
+    double top_posedge_value;
+    double top_negedge_value;
+
+    double bottom_position;
+    bool bottom_front_hall_effect;
+    int32_t bottom_front_hall_effect_posedge_count;
+    int32_t bottom_front_hall_effect_negedge_count;
+    bool bottom_calibration_hall_effect;
+    int32_t bottom_calibration_hall_effect_posedge_count;
+    int32_t bottom_calibration_hall_effect_negedge_count;
+    bool bottom_back_hall_effect;
+    int32_t bottom_back_hall_effect_posedge_count;
+    int32_t bottom_back_hall_effect_negedge_count;
+    double bottom_posedge_value;
+    double bottom_negedge_value;
+  };
+
+  message Output {
+    double intake_voltage;
+    double top_claw_voltage;
+    double bottom_claw_voltage;
+  };
+
+  queue Goal goal;
+  queue Position position;
+  queue Output output;
+  queue aos.control_loops.Status status;
+};
+
+queue_group ClawLoop claw;
diff --git a/frc971/control_loops/wrists/wrists_lib_test.cc b/frc971/control_loops/claw/claw_lib_test.cc
similarity index 89%
rename from frc971/control_loops/wrists/wrists_lib_test.cc
rename to frc971/control_loops/claw/claw_lib_test.cc
index 996036e..e881ef2 100644
--- a/frc971/control_loops/wrists/wrists_lib_test.cc
+++ b/frc971/control_loops/claw/claw_lib_test.cc
@@ -5,8 +5,8 @@
 #include "gtest/gtest.h"
 #include "aos/common/queue.h"
 #include "aos/common/queue_testutils.h"
-#include "frc971/control_loops/wrists/wrists.q.h"
-#include "frc971/control_loops/wrists/wrists.h"
+#include "frc971/control_loops/claw/claw.q.h"
+#include "frc971/control_loops/claw/claw.h"
 #include "frc971/constants.h"
 
 
@@ -18,17 +18,17 @@
 
 // Class which simulates the wrist and sends out queue messages containing the
 // position.
-class WristMotorSimulation {
+class ClawMotorSimulation {
  public:
   // Constructs a motor simulation.  initial_position is the inital angle of the
   // wrist, which will be treated as 0 by the encoder.
-  WristMotorSimulation(double initial_position)
-      : wrist_plant_(new StateFeedbackPlant<2, 1, 1>(MakeRawWristPlant())),
-        my_wrist_loop_(".frc971.control_loops.wrists",
-                       0x1a7b7094, ".frc971.control_loops.wrists.goal",
-                       ".frc971.control_loops.wrists.position",
-                       ".frc971.control_loops.wrists.output",
-                       ".frc971.control_loops.wrists.status") {
+  ClawMotorSimulation(double initial_position)
+      : wrist_plant_(new StateFeedbackPlant<2, 1, 1>(MakeRawClawPlant())),
+        my_wrist_loop_(".frc971.control_loops.claw",
+                       0x1a7b7094, ".frc971.control_loops.claw.goal",
+                       ".frc971.control_loops.claw.position",
+                       ".frc971.control_loops.claw.output",
+                       ".frc971.control_loops.claw.status") {
     Reinitialize(initial_position);
   }
 
@@ -57,7 +57,7 @@
   void SendPositionMessage() {
     const double angle = GetPosition();
 
-    ::aos::ScopedMessagePtr<control_loops::WristLoop::Position> position =
+    ::aos::ScopedMessagePtr<control_loops::ClawLoop::Position> position =
         my_wrist_loop_.position.MakeMessage();
     position->pos = angle;
 
@@ -103,27 +103,27 @@
 
   ::std::unique_ptr<StateFeedbackPlant<2, 1, 1>> wrist_plant_;
  private:
-  WristLoop my_wrist_loop_;
+  ClawLoop my_wrist_loop_;
   double initial_position_;
   double last_position_;
   double calibration_value_;
   double last_voltage_;
 };
 
-class WristTest : public ::testing::Test {
+class ClawTest : public ::testing::Test {
  protected:
   ::aos::common::testing::GlobalCoreInstance my_core;
 
   // Create a new instance of the test queue so that it invalidates the queue
   // that it points to.  Otherwise, we will have a pointer to shared memory that
   // is no longer valid.
-  WristLoop my_wrist_loop_;
+  ClawLoop my_wrist_loop_;
 
   // Create a loop and simulation plant.
-  WristMotor wrist_motor_;
-  WristMotorSimulation wrist_motor_plant_;
+  ClawMotor wrist_motor_;
+  ClawMotorSimulation wrist_motor_plant_;
 
-  WristTest() : my_wrist_loop_(".frc971.control_loops.wrist",
+  ClawTest() : my_wrist_loop_(".frc971.control_loops.wrist",
                                0x1a7b7094, ".frc971.control_loops.wrist.goal",
                                ".frc971.control_loops.wrist.position",
                                ".frc971.control_loops.wrist.output",
@@ -151,13 +151,13 @@
                 1e-4);
   }
 
-  virtual ~WristTest() {
+  virtual ~ClawTest() {
     ::aos::robot_state.Clear();
   }
 };
 
 // Tests that the wrist zeros correctly and goes to a position.
-TEST_F(WristTest, ZerosCorrectly) {
+TEST_F(ClawTest, ZerosCorrectly) {
   my_wrist_loop_.goal.MakeWithBuilder().goal(0.1).Send();
   for (int i = 0; i < 400; ++i) {
     wrist_motor_plant_.SendPositionMessage();
@@ -169,7 +169,7 @@
 }
 
 // Tests that the wrist zeros correctly starting on the hall effect sensor.
-TEST_F(WristTest, ZerosStartingOn) {
+TEST_F(ClawTest, ZerosStartingOn) {
   wrist_motor_plant_.Reinitialize(90 * M_PI / 180.0);
 
   my_wrist_loop_.goal.MakeWithBuilder().goal(0.1).Send();
@@ -183,7 +183,7 @@
 }
 
 // Tests that missing positions are correctly handled.
-TEST_F(WristTest, HandleMissingPosition) {
+TEST_F(ClawTest, HandleMissingPosition) {
   my_wrist_loop_.goal.MakeWithBuilder().goal(0.1).Send();
   for (int i = 0; i < 400; ++i) {
     if (i % 23) {
@@ -197,7 +197,7 @@
 }
 
 // Tests that loosing the encoder for a second triggers a re-zero.
-TEST_F(WristTest, RezeroWithMissingPos) {
+TEST_F(ClawTest, RezeroWithMissingPos) {
   my_wrist_loop_.goal.MakeWithBuilder().goal(0.1).Send();
   for (int i = 0; i < 800; ++i) {
     // After 3 seconds, simulate the encoder going missing.
@@ -225,7 +225,7 @@
 
 // Tests that disabling while zeroing sends the state machine into the
 // uninitialized state.
-TEST_F(WristTest, DisableGoesUninitialized) {
+TEST_F(ClawTest, DisableGoesUninitialized) {
   my_wrist_loop_.goal.MakeWithBuilder().goal(0.1).Send();
   for (int i = 0; i < 800; ++i) {
     wrist_motor_plant_.SendPositionMessage();
@@ -256,7 +256,7 @@
 
 // Tests that the wrist can't get too far away from the zeroing position if the
 // zeroing position is saturating the goal.
-TEST_F(WristTest, NoWindupNegative) {
+TEST_F(ClawTest, NoWindupNegative) {
   int capped_count = 0;
   double saved_zeroing_position = 0;
   my_wrist_loop_.goal.MakeWithBuilder().goal(0.1).Send();
@@ -293,7 +293,7 @@
 
 // Tests that the wrist can't get too far away from the zeroing position if the
 // zeroing position is saturating the goal.
-TEST_F(WristTest, NoWindupPositive) {
+TEST_F(ClawTest, NoWindupPositive) {
   int capped_count = 0;
   double saved_zeroing_position = 0;
   my_wrist_loop_.goal.MakeWithBuilder().goal(0.1).Send();
diff --git a/frc971/control_loops/claw/claw_main.cc b/frc971/control_loops/claw/claw_main.cc
new file mode 100644
index 0000000..3b7c181
--- /dev/null
+++ b/frc971/control_loops/claw/claw_main.cc
@@ -0,0 +1,11 @@
+#include "frc971/control_loops/claw/claw.h"
+
+#include "aos/linux_code/init.h"
+
+int main() {
+  ::aos::Init();
+  frc971::control_loops::ClawMotor claw;
+  claw.Run();
+  ::aos::Cleanup();
+  return 0;
+}
diff --git a/frc971/control_loops/wrists/top_wrist_motor_plant.cc b/frc971/control_loops/claw/top_claw_motor_plant.cc
similarity index 66%
rename from frc971/control_loops/wrists/top_wrist_motor_plant.cc
rename to frc971/control_loops/claw/top_claw_motor_plant.cc
index 132ef4f..113ff77 100644
--- a/frc971/control_loops/wrists/top_wrist_motor_plant.cc
+++ b/frc971/control_loops/claw/top_claw_motor_plant.cc
@@ -1,4 +1,4 @@
-#include "frc971/control_loops/wrists/top_wrist_motor_plant.h"
+#include "frc971/control_loops/claw/top_claw_motor_plant.h"
 
 #include <vector>
 
@@ -7,7 +7,7 @@
 namespace frc971 {
 namespace control_loops {
 
-StateFeedbackPlantCoefficients<3, 1, 1> MakeWristPlantCoefficients() {
+StateFeedbackPlantCoefficients<3, 1, 1> MakeTopClawPlantCoefficients() {
   Eigen::Matrix<double, 3, 3> A;
   A << 1.0, 0.00904786878843, 0.000326582411818, 0.0, 0.815818233346, 0.0631746179893, 0.0, 0.0, 1.0;
   Eigen::Matrix<double, 3, 1> B;
@@ -23,23 +23,23 @@
   return StateFeedbackPlantCoefficients<3, 1, 1>(A, B, C, D, U_max, U_min);
 }
 
-StateFeedbackController<3, 1, 1> MakeWristController() {
+StateFeedbackController<3, 1, 1> MakeTopClawController() {
   Eigen::Matrix<double, 3, 1> L;
   L << 1.81581823335, 78.6334534274, 142.868137351;
   Eigen::Matrix<double, 1, 3> K;
   K << 92.6004807973, 4.38063492858, 1.11581823335;
-  return StateFeedbackController<3, 1, 1>(L, K, MakeWristPlantCoefficients());
+  return StateFeedbackController<3, 1, 1>(L, K, MakeTopClawPlantCoefficients());
 }
 
-StateFeedbackPlant<3, 1, 1> MakeWristPlant() {
+StateFeedbackPlant<3, 1, 1> MakeTopClawPlant() {
   ::std::vector<StateFeedbackPlantCoefficients<3, 1, 1> *> plants(1);
-  plants[0] = new StateFeedbackPlantCoefficients<3, 1, 1>(MakeWristPlantCoefficients());
+  plants[0] = new StateFeedbackPlantCoefficients<3, 1, 1>(MakeTopClawPlantCoefficients());
   return StateFeedbackPlant<3, 1, 1>(plants);
 }
 
-StateFeedbackLoop<3, 1, 1> MakeWristLoop() {
+StateFeedbackLoop<3, 1, 1> MakeTopClawLoop() {
   ::std::vector<StateFeedbackController<3, 1, 1> *> controllers(1);
-  controllers[0] = new StateFeedbackController<3, 1, 1>(MakeWristController());
+  controllers[0] = new StateFeedbackController<3, 1, 1>(MakeTopClawController());
   return StateFeedbackLoop<3, 1, 1>(controllers);
 }
 
diff --git a/frc971/control_loops/claw/top_claw_motor_plant.h b/frc971/control_loops/claw/top_claw_motor_plant.h
new file mode 100644
index 0000000..c74c976
--- /dev/null
+++ b/frc971/control_loops/claw/top_claw_motor_plant.h
@@ -0,0 +1,20 @@
+#ifndef FRC971_CONTROL_LOOPS_CLAW_TOP_CLAW_MOTOR_PLANT_H_
+#define FRC971_CONTROL_LOOPS_CLAW_TOP_CLAW_MOTOR_PLANT_H_
+
+#include "frc971/control_loops/state_feedback_loop.h"
+
+namespace frc971 {
+namespace control_loops {
+
+StateFeedbackPlantCoefficients<3, 1, 1> MakeTopClawPlantCoefficients();
+
+StateFeedbackController<3, 1, 1> MakeTopClawController();
+
+StateFeedbackPlant<3, 1, 1> MakeTopClawPlant();
+
+StateFeedbackLoop<3, 1, 1> MakeTopClawLoop();
+
+}  // namespace control_loops
+}  // namespace frc971
+
+#endif  // FRC971_CONTROL_LOOPS_CLAW_TOP_CLAW_MOTOR_PLANT_H_
diff --git a/frc971/control_loops/wrists/bottom_wrist_motor_plant.cc b/frc971/control_loops/claw/unaugmented_bottom_claw_motor_plant.cc
similarity index 66%
copy from frc971/control_loops/wrists/bottom_wrist_motor_plant.cc
copy to frc971/control_loops/claw/unaugmented_bottom_claw_motor_plant.cc
index f08793b..cda15c4 100644
--- a/frc971/control_loops/wrists/bottom_wrist_motor_plant.cc
+++ b/frc971/control_loops/claw/unaugmented_bottom_claw_motor_plant.cc
@@ -1,4 +1,4 @@
-#include "frc971/control_loops/wrists/bottom_wrist_motor_plant.h"
+#include "frc971/control_loops/claw/unaugmented_bottom_claw_motor_plant.h"
 
 #include <vector>
 
@@ -7,7 +7,7 @@
 namespace frc971 {
 namespace control_loops {
 
-StateFeedbackPlantCoefficients<2, 1, 1> MakeRawWristPlantCoefficients() {
+StateFeedbackPlantCoefficients<2, 1, 1> MakeRawBottomClawPlantCoefficients() {
   Eigen::Matrix<double, 2, 2> A;
   A << 1.0, 0.00904786878843, 0.0, 0.815818233346;
   Eigen::Matrix<double, 2, 1> B;
@@ -23,23 +23,23 @@
   return StateFeedbackPlantCoefficients<2, 1, 1>(A, B, C, D, U_max, U_min);
 }
 
-StateFeedbackController<2, 1, 1> MakeRawWristController() {
+StateFeedbackController<2, 1, 1> MakeRawBottomClawController() {
   Eigen::Matrix<double, 2, 1> L;
   L << 1.71581823335, 64.8264890043;
   Eigen::Matrix<double, 1, 2> K;
   K << 130.590421637, 7.48987035533;
-  return StateFeedbackController<2, 1, 1>(L, K, MakeRawWristPlantCoefficients());
+  return StateFeedbackController<2, 1, 1>(L, K, MakeRawBottomClawPlantCoefficients());
 }
 
-StateFeedbackPlant<2, 1, 1> MakeRawWristPlant() {
+StateFeedbackPlant<2, 1, 1> MakeRawBottomClawPlant() {
   ::std::vector<StateFeedbackPlantCoefficients<2, 1, 1> *> plants(1);
-  plants[0] = new StateFeedbackPlantCoefficients<2, 1, 1>(MakeRawWristPlantCoefficients());
+  plants[0] = new StateFeedbackPlantCoefficients<2, 1, 1>(MakeRawBottomClawPlantCoefficients());
   return StateFeedbackPlant<2, 1, 1>(plants);
 }
 
-StateFeedbackLoop<2, 1, 1> MakeRawWristLoop() {
+StateFeedbackLoop<2, 1, 1> MakeRawBottomClawLoop() {
   ::std::vector<StateFeedbackController<2, 1, 1> *> controllers(1);
-  controllers[0] = new StateFeedbackController<2, 1, 1>(MakeRawWristController());
+  controllers[0] = new StateFeedbackController<2, 1, 1>(MakeRawBottomClawController());
   return StateFeedbackLoop<2, 1, 1>(controllers);
 }
 
diff --git a/frc971/control_loops/claw/unaugmented_bottom_claw_motor_plant.h b/frc971/control_loops/claw/unaugmented_bottom_claw_motor_plant.h
new file mode 100644
index 0000000..8f59925
--- /dev/null
+++ b/frc971/control_loops/claw/unaugmented_bottom_claw_motor_plant.h
@@ -0,0 +1,20 @@
+#ifndef FRC971_CONTROL_LOOPS_CLAW_UNAUGMENTED_BOTTOM_CLAW_MOTOR_PLANT_H_
+#define FRC971_CONTROL_LOOPS_CLAW_UNAUGMENTED_BOTTOM_CLAW_MOTOR_PLANT_H_
+
+#include "frc971/control_loops/state_feedback_loop.h"
+
+namespace frc971 {
+namespace control_loops {
+
+StateFeedbackPlantCoefficients<2, 1, 1> MakeRawBottomClawPlantCoefficients();
+
+StateFeedbackController<2, 1, 1> MakeRawBottomClawController();
+
+StateFeedbackPlant<2, 1, 1> MakeRawBottomClawPlant();
+
+StateFeedbackLoop<2, 1, 1> MakeRawBottomClawLoop();
+
+}  // namespace control_loops
+}  // namespace frc971
+
+#endif  // FRC971_CONTROL_LOOPS_CLAW_UNAUGMENTED_BOTTOM_CLAW_MOTOR_PLANT_H_
diff --git a/frc971/control_loops/wrists/bottom_wrist_motor_plant.cc b/frc971/control_loops/claw/unaugmented_top_claw_motor_plant.cc
similarity index 67%
rename from frc971/control_loops/wrists/bottom_wrist_motor_plant.cc
rename to frc971/control_loops/claw/unaugmented_top_claw_motor_plant.cc
index f08793b..8ab4bbf 100644
--- a/frc971/control_loops/wrists/bottom_wrist_motor_plant.cc
+++ b/frc971/control_loops/claw/unaugmented_top_claw_motor_plant.cc
@@ -1,4 +1,4 @@
-#include "frc971/control_loops/wrists/bottom_wrist_motor_plant.h"
+#include "frc971/control_loops/claw/unaugmented_top_claw_motor_plant.h"
 
 #include <vector>
 
@@ -7,7 +7,7 @@
 namespace frc971 {
 namespace control_loops {
 
-StateFeedbackPlantCoefficients<2, 1, 1> MakeRawWristPlantCoefficients() {
+StateFeedbackPlantCoefficients<2, 1, 1> MakeRawTopClawPlantCoefficients() {
   Eigen::Matrix<double, 2, 2> A;
   A << 1.0, 0.00904786878843, 0.0, 0.815818233346;
   Eigen::Matrix<double, 2, 1> B;
@@ -23,23 +23,23 @@
   return StateFeedbackPlantCoefficients<2, 1, 1>(A, B, C, D, U_max, U_min);
 }
 
-StateFeedbackController<2, 1, 1> MakeRawWristController() {
+StateFeedbackController<2, 1, 1> MakeRawTopClawController() {
   Eigen::Matrix<double, 2, 1> L;
   L << 1.71581823335, 64.8264890043;
   Eigen::Matrix<double, 1, 2> K;
   K << 130.590421637, 7.48987035533;
-  return StateFeedbackController<2, 1, 1>(L, K, MakeRawWristPlantCoefficients());
+  return StateFeedbackController<2, 1, 1>(L, K, MakeRawTopClawPlantCoefficients());
 }
 
-StateFeedbackPlant<2, 1, 1> MakeRawWristPlant() {
+StateFeedbackPlant<2, 1, 1> MakeRawTopClawPlant() {
   ::std::vector<StateFeedbackPlantCoefficients<2, 1, 1> *> plants(1);
-  plants[0] = new StateFeedbackPlantCoefficients<2, 1, 1>(MakeRawWristPlantCoefficients());
+  plants[0] = new StateFeedbackPlantCoefficients<2, 1, 1>(MakeRawTopClawPlantCoefficients());
   return StateFeedbackPlant<2, 1, 1>(plants);
 }
 
-StateFeedbackLoop<2, 1, 1> MakeRawWristLoop() {
+StateFeedbackLoop<2, 1, 1> MakeRawTopClawLoop() {
   ::std::vector<StateFeedbackController<2, 1, 1> *> controllers(1);
-  controllers[0] = new StateFeedbackController<2, 1, 1>(MakeRawWristController());
+  controllers[0] = new StateFeedbackController<2, 1, 1>(MakeRawTopClawController());
   return StateFeedbackLoop<2, 1, 1>(controllers);
 }
 
diff --git a/frc971/control_loops/claw/unaugmented_top_claw_motor_plant.h b/frc971/control_loops/claw/unaugmented_top_claw_motor_plant.h
new file mode 100644
index 0000000..c87d3ca
--- /dev/null
+++ b/frc971/control_loops/claw/unaugmented_top_claw_motor_plant.h
@@ -0,0 +1,20 @@
+#ifndef FRC971_CONTROL_LOOPS_CLAW_UNAUGMENTED_TOP_CLAW_MOTOR_PLANT_H_
+#define FRC971_CONTROL_LOOPS_CLAW_UNAUGMENTED_TOP_CLAW_MOTOR_PLANT_H_
+
+#include "frc971/control_loops/state_feedback_loop.h"
+
+namespace frc971 {
+namespace control_loops {
+
+StateFeedbackPlantCoefficients<2, 1, 1> MakeRawTopClawPlantCoefficients();
+
+StateFeedbackController<2, 1, 1> MakeRawTopClawController();
+
+StateFeedbackPlant<2, 1, 1> MakeRawTopClawPlant();
+
+StateFeedbackLoop<2, 1, 1> MakeRawTopClawLoop();
+
+}  // namespace control_loops
+}  // namespace frc971
+
+#endif  // FRC971_CONTROL_LOOPS_CLAW_UNAUGMENTED_TOP_CLAW_MOTOR_PLANT_H_
diff --git a/frc971/control_loops/drivetrain/drivetrain.cc b/frc971/control_loops/drivetrain/drivetrain.cc
index bcd62f9..7e6159f 100644
--- a/frc971/control_loops/drivetrain/drivetrain.cc
+++ b/frc971/control_loops/drivetrain/drivetrain.cc
@@ -13,8 +13,8 @@
 #include "frc971/control_loops/state_feedback_loop.h"
 #include "frc971/control_loops/drivetrain/polydrivetrain_cim_plant.h"
 #include "frc971/control_loops/drivetrain/drivetrain.q.h"
-#include "frc971/queues/GyroAngle.q.h"
-#include "frc971/queues/Piston.q.h"
+#include "frc971/queues/gyro_angle.q.h"
+#include "frc971/queues/piston.q.h"
 #include "frc971/constants.h"
 
 using frc971::sensors::gyro;
@@ -569,155 +569,6 @@
 constexpr double PolyDrivetrain::Kt;
 
 
-
-class DrivetrainMotorsOL {
- public:
-  DrivetrainMotorsOL() {
-    _old_wheel = 0.0;
-    wheel_ = 0.0;
-    throttle_ = 0.0;
-    quickturn_ = false;
-    highgear_ = true;
-    _neg_inertia_accumulator = 0.0;
-    _left_pwm = 0.0;
-    _right_pwm = 0.0;
-  }
-  void SetGoal(double wheel, double throttle, bool quickturn, bool highgear) {
-    wheel_ = wheel;
-    throttle_ = throttle;
-    quickturn_ = quickturn;
-    highgear_ = highgear;
-    _left_pwm = 0.0;
-    _right_pwm = 0.0;
-  }
-  void Update() {
-    double overPower;
-    float sensitivity = 1.7;
-    float angular_power;
-    float linear_power;
-    double wheel;
-
-    double neg_inertia = wheel_ - _old_wheel;
-    _old_wheel = wheel_;
-
-    double wheelNonLinearity;
-    if (highgear_) {
-      wheelNonLinearity = 0.1;  // used to be csvReader->TURN_NONLIN_HIGH
-      // Apply a sin function that's scaled to make it feel better.
-      const double angular_range = M_PI / 2.0 * wheelNonLinearity;
-      wheel = sin(angular_range * wheel_) / sin(angular_range);
-      wheel = sin(angular_range * wheel) / sin(angular_range);
-    } else {
-      wheelNonLinearity = 0.2;  // used to be csvReader->TURN_NONLIN_LOW
-      // Apply a sin function that's scaled to make it feel better.
-      const double angular_range = M_PI / 2.0 * wheelNonLinearity;
-      wheel = sin(angular_range * wheel_) / sin(angular_range);
-      wheel = sin(angular_range * wheel) / sin(angular_range);
-      wheel = sin(angular_range * wheel) / sin(angular_range);
-    }
-
-    static const double kThrottleDeadband = 0.05;
-    if (::std::abs(throttle_) < kThrottleDeadband) {
-      throttle_ = 0;
-    } else {
-      throttle_ = copysign((::std::abs(throttle_) - kThrottleDeadband) /
-                           (1.0 - kThrottleDeadband), throttle_);
-    }
-
-    double neg_inertia_scalar;
-    if (highgear_) {
-      neg_inertia_scalar = 8.0;  // used to be csvReader->NEG_INTERTIA_HIGH
-      sensitivity = 1.22; // used to be csvReader->SENSE_HIGH
-    } else {
-      if (wheel * neg_inertia > 0) {
-        neg_inertia_scalar = 5;  // used to be csvReader->NEG_INERTIA_LOW_MORE
-      } else {
-        if (::std::abs(wheel) > 0.65) {
-          neg_inertia_scalar = 5;  // used to be csvReader->NEG_INTERTIA_LOW_LESS_EXT
-        } else {
-          neg_inertia_scalar = 5;  // used to be csvReader->NEG_INTERTIA_LOW_LESS
-        }
-      }
-      sensitivity = 1.24;  // used to be csvReader->SENSE_LOW
-    }
-    double neg_inertia_power = neg_inertia * neg_inertia_scalar;
-    _neg_inertia_accumulator += neg_inertia_power;
-
-    wheel = wheel + _neg_inertia_accumulator;
-    if (_neg_inertia_accumulator > 1) {
-      _neg_inertia_accumulator -= 1;
-    } else if (_neg_inertia_accumulator < -1) {
-      _neg_inertia_accumulator += 1;
-    } else {
-      _neg_inertia_accumulator = 0;
-    }
-
-    linear_power = throttle_;
-
-    if (quickturn_) {
-      double qt_angular_power = wheel;
-      if (::std::abs(linear_power) < 0.2) {
-        if (qt_angular_power > 1) qt_angular_power = 1.0;
-        if (qt_angular_power < -1) qt_angular_power = -1.0;
-      } else {
-        qt_angular_power = 0.0;
-      }
-      overPower = 1.0;
-      if (highgear_) {
-        sensitivity = 1.0;
-      } else {
-        sensitivity = 1.0;
-      }
-      angular_power = wheel;
-    } else {
-      overPower = 0.0;
-      angular_power = ::std::abs(throttle_) * wheel * sensitivity;
-    }
-
-    _right_pwm = _left_pwm = linear_power;
-    _left_pwm += angular_power;
-    _right_pwm -= angular_power;
-
-    if (_left_pwm > 1.0) {
-      _right_pwm -= overPower*(_left_pwm - 1.0);
-      _left_pwm = 1.0;
-    } else if (_right_pwm > 1.0) {
-      _left_pwm -= overPower*(_right_pwm - 1.0);
-      _right_pwm = 1.0;
-    } else if (_left_pwm < -1.0) {
-      _right_pwm += overPower*(-1.0 - _left_pwm);
-      _left_pwm = -1.0;
-    } else if (_right_pwm < -1.0) {
-      _left_pwm += overPower*(-1.0 - _right_pwm);
-      _right_pwm = -1.0;
-    }
-  }
-
-  void SendMotors(Drivetrain::Output *output) {
-    LOG(DEBUG, "left pwm: %f right pwm: %f wheel: %f throttle: %f\n",
-        _left_pwm, _right_pwm, wheel_, throttle_);
-    if (output) {
-      output->left_voltage = _left_pwm * 12.0;
-      output->right_voltage = _right_pwm * 12.0;
-    }
-    if (highgear_) {
-      shifters.MakeWithBuilder().set(false).Send();
-    } else {
-      shifters.MakeWithBuilder().set(true).Send();
-    }
-  }
-
- private:
-  double _old_wheel;
-  double wheel_;
-  double throttle_;
-  bool quickturn_;
-  bool highgear_;
-  double _neg_inertia_accumulator;
-  double _left_pwm;
-  double _right_pwm;
-};
-
 void DrivetrainLoop::RunIteration(const Drivetrain::Goal *goal,
                                   const Drivetrain::Position *position,
                                   Drivetrain::Output *output,
diff --git a/frc971/control_loops/drivetrain/drivetrain_lib_test.cc b/frc971/control_loops/drivetrain/drivetrain_lib_test.cc
index 0f8c87e..0119dd2 100644
--- a/frc971/control_loops/drivetrain/drivetrain_lib_test.cc
+++ b/frc971/control_loops/drivetrain/drivetrain_lib_test.cc
@@ -11,7 +11,7 @@
 #include "frc971/control_loops/drivetrain/drivetrain.h"
 #include "frc971/control_loops/state_feedback_loop.h"
 #include "frc971/control_loops/drivetrain/drivetrain_dog_motor_plant.h"
-#include "frc971/queues/GyroAngle.q.h"
+#include "frc971/queues/gyro_angle.q.h"
 
 
 using ::aos::time::Time;
diff --git a/frc971/control_loops/python/wrists.py b/frc971/control_loops/python/claw.py
similarity index 63%
rename from frc971/control_loops/python/wrists.py
rename to frc971/control_loops/python/claw.py
index d752000..3d6b9fc 100755
--- a/frc971/control_loops/python/wrists.py
+++ b/frc971/control_loops/python/claw.py
@@ -5,9 +5,9 @@
 import sys
 from matplotlib import pylab
 
-class Wrist(control_loop.ControlLoop):
-  def __init__(self, name="RawWrist"):
-    super(Wrist, self).__init__(name)
+class Claw(control_loop.ControlLoop):
+  def __init__(self, name="RawClaw"):
+    super(Claw, self).__init__(name)
     # Stall Torque in N m
     self.stall_torque = 1.4
     # Stall Current in Amps
@@ -16,7 +16,7 @@
     self.free_speed = 6200.0
     # Free Current in Amps
     self.free_current = 1.5
-    # Moment of inertia of the wrist in kg m^2
+    # Moment of inertia of the claw in kg m^2
     # TODO(aschuh): Measure this in reality.  It doesn't seem high enough.
     # James measured 0.51, but that can't be right given what I am seeing.
     self.J = 2.0
@@ -58,9 +58,9 @@
     self.InitializeState()
 
 
-class WristDeltaU(Wrist):
-  def __init__(self, name="Wrist"):
-    super(WristDeltaU, self).__init__(name)
+class ClawDeltaU(Claw):
+  def __init__(self, name="Claw"):
+    super(ClawDeltaU, self).__init__(name)
     A_unaugmented = self.A
     B_unaugmented = self.B
 
@@ -97,58 +97,74 @@
     self.InitializeState()
 
 
-def ClipDeltaU(wrist, delta_u):
-  old_u = numpy.matrix([[wrist.X[2, 0]]])
-  new_u = numpy.clip(old_u + delta_u, wrist.U_min, wrist.U_max)
+def ClipDeltaU(claw, delta_u):
+  old_u = numpy.matrix([[claw.X[2, 0]]])
+  new_u = numpy.clip(old_u + delta_u, claw.U_min, claw.U_max)
   return new_u - old_u
 
 def main(argv):
   # Simulate the response of the system to a step input.
-  wrist = WristDeltaU()
+  claw = ClawDeltaU()
   simulated_x = []
   for _ in xrange(100):
-    wrist.Update(numpy.matrix([[12.0]]))
-    simulated_x.append(wrist.X[0, 0])
+    claw.Update(numpy.matrix([[12.0]]))
+    simulated_x.append(claw.X[0, 0])
 
   pylab.plot(range(100), simulated_x)
   pylab.show()
 
   # Simulate the closed loop response of the system to a step input.
-  wrist = WristDeltaU()
+  top_claw = ClawDeltaU("TopClaw")
   close_loop_x = []
   close_loop_u = []
   R = numpy.matrix([[1.0], [0.0], [0.0]])
-  wrist.X[2, 0] = -5
+  top_claw.X[2, 0] = -5
   for _ in xrange(100):
-    U = numpy.clip(wrist.K * (R - wrist.X_hat), wrist.U_min, wrist.U_max)
-    U = ClipDeltaU(wrist, U)
-    wrist.UpdateObserver(U)
-    wrist.Update(U)
-    close_loop_x.append(wrist.X[0, 0] * 10)
-    close_loop_u.append(wrist.X[2, 0])
+    U = numpy.clip(top_claw.K * (R - top_claw.X_hat), top_claw.U_min, top_claw.U_max)
+    U = ClipDeltaU(top_claw, U)
+    top_claw.UpdateObserver(U)
+    top_claw.Update(U)
+    close_loop_x.append(top_claw.X[0, 0] * 10)
+    close_loop_u.append(top_claw.X[2, 0])
 
   pylab.plot(range(100), close_loop_x)
   pylab.plot(range(100), close_loop_u)
   pylab.show()
 
   # Write the generated constants out to a file.
-  if len(argv) != 5:
+  if len(argv) != 9:
     print "Expected .h file name and .cc file name for"
     print "both the plant and unaugmented plant"
   else:
-    unaug_wrist = Wrist("RawWrist")
-    unaug_loop_writer = control_loop.ControlLoopWriter("RawWrist",
-                                                       [unaug_wrist])
-    if argv[3][-3:] == '.cc':
-      unaug_loop_writer.Write(argv[4], argv[3])
-    else:
-      unaug_loop_writer.Write(argv[3], argv[4])
-
-    loop_writer = control_loop.ControlLoopWriter("Wrist", [wrist])
+    top_unaug_claw = Claw("RawTopClaw")
+    top_unaug_loop_writer = control_loop.ControlLoopWriter("RawTopClaw",
+                                                           [top_unaug_claw])
     if argv[1][-3:] == '.cc':
-      loop_writer.Write(argv[2], argv[1])
+      top_unaug_loop_writer.Write(argv[2], argv[1])
     else:
-      loop_writer.Write(argv[1], argv[2])
+      top_unaug_loop_writer.Write(argv[1], argv[2])
+
+    top_loop_writer = control_loop.ControlLoopWriter("TopClaw", [top_claw])
+    if argv[3][-3:] == '.cc':
+      top_loop_writer.Write(argv[4], argv[3])
+    else:
+      top_loop_writer.Write(argv[3], argv[4])
+
+    bottom_claw = ClawDeltaU("BottomClaw")
+    bottom_unaug_claw = Claw("RawBottomClaw")
+    bottom_unaug_loop_writer = control_loop.ControlLoopWriter(
+        "RawBottomClaw", [bottom_unaug_claw])
+    if argv[5][-3:] == '.cc':
+      bottom_unaug_loop_writer.Write(argv[6], argv[5])
+    else:
+      bottom_unaug_loop_writer.Write(argv[5], argv[6])
+
+    bottom_loop_writer = control_loop.ControlLoopWriter("BottomClaw",
+                                                        [bottom_claw])
+    if argv[7][-3:] == '.cc':
+      bottom_loop_writer.Write(argv[8], argv[7])
+    else:
+      bottom_loop_writer.Write(argv[7], argv[8])
 
 if __name__ == '__main__':
   sys.exit(main(sys.argv))
diff --git a/frc971/control_loops/update_claw.sh b/frc971/control_loops/update_claw.sh
new file mode 100755
index 0000000..083850a
--- /dev/null
+++ b/frc971/control_loops/update_claw.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+#
+# Updates the claw controllers.
+
+cd $(dirname $0)
+
+./python/claw.py claw/unaugmented_top_claw_motor_plant.h \
+    claw/unaugmented_top_claw_motor_plant.cc \
+    claw/top_claw_motor_plant.h \
+    claw/top_claw_motor_plant.cc \
+    claw/unaugmented_bottom_claw_motor_plant.h \
+    claw/unaugmented_bottom_claw_motor_plant.cc \
+    claw/bottom_claw_motor_plant.h \
+    claw/bottom_claw_motor_plant.cc
diff --git a/frc971/control_loops/update_wrists.sh b/frc971/control_loops/update_wrists.sh
deleted file mode 100755
index bb79a0a..0000000
--- a/frc971/control_loops/update_wrists.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-#
-# Updates the wrist controllers.
-
-cd $(dirname $0)
-
-./python/wrists.py wrists/top_wrist_motor_plant.h \
-    wrists/top_wrist_motor_plant.cc \
-    wrists/bottom_wrist_motor_plant.h \
-    wrists/bottom_wrist_motor_plant.cc
diff --git a/frc971/control_loops/wrists/bottom_wrist_motor_plant.h b/frc971/control_loops/wrists/bottom_wrist_motor_plant.h
deleted file mode 100644
index 00db927..0000000
--- a/frc971/control_loops/wrists/bottom_wrist_motor_plant.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef FRC971_CONTROL_LOOPS_WRISTS_BOTTOM_WRIST_MOTOR_PLANT_H_
-#define FRC971_CONTROL_LOOPS_WRISTS_BOTTOM_WRIST_MOTOR_PLANT_H_
-
-#include "frc971/control_loops/state_feedback_loop.h"
-
-namespace frc971 {
-namespace control_loops {
-
-StateFeedbackPlantCoefficients<2, 1, 1> MakeRawWristPlantCoefficients();
-
-StateFeedbackController<2, 1, 1> MakeRawWristController();
-
-StateFeedbackPlant<2, 1, 1> MakeRawWristPlant();
-
-StateFeedbackLoop<2, 1, 1> MakeRawWristLoop();
-
-}  // namespace control_loops
-}  // namespace frc971
-
-#endif  // FRC971_CONTROL_LOOPS_WRISTS_BOTTOM_WRIST_MOTOR_PLANT_H_
diff --git a/frc971/control_loops/wrists/top_wrist_motor_plant.h b/frc971/control_loops/wrists/top_wrist_motor_plant.h
deleted file mode 100644
index ac657cb..0000000
--- a/frc971/control_loops/wrists/top_wrist_motor_plant.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef FRC971_CONTROL_LOOPS_WRISTS_TOP_WRIST_MOTOR_PLANT_H_
-#define FRC971_CONTROL_LOOPS_WRISTS_TOP_WRIST_MOTOR_PLANT_H_
-
-#include "frc971/control_loops/state_feedback_loop.h"
-
-namespace frc971 {
-namespace control_loops {
-
-StateFeedbackPlantCoefficients<3, 1, 1> MakeWristPlantCoefficients();
-
-StateFeedbackController<3, 1, 1> MakeWristController();
-
-StateFeedbackPlant<3, 1, 1> MakeWristPlant();
-
-StateFeedbackLoop<3, 1, 1> MakeWristLoop();
-
-}  // namespace control_loops
-}  // namespace frc971
-
-#endif  // FRC971_CONTROL_LOOPS_WRISTS_TOP_WRIST_MOTOR_PLANT_H_
diff --git a/frc971/control_loops/wrists/wrists.cc b/frc971/control_loops/wrists/wrists.cc
deleted file mode 100644
index fe9295b..0000000
--- a/frc971/control_loops/wrists/wrists.cc
+++ /dev/null
@@ -1,80 +0,0 @@
-#include "frc971/control_loops/wrists/wrists.h"
-
-#include <stdio.h>
-
-#include <algorithm>
-
-#include "aos/common/control_loop/control_loops.q.h"
-#include "aos/common/logging/logging.h"
-
-#include "frc971/constants.h"
-#include "frc971/control_loops/wrists/top_wrist_motor_plant.h"
-#include "frc971/control_loops/wrists/bottom_wrist_motor_plant.h"
-
-namespace frc971 {
-namespace control_loops {
-
-WristMotor::WristMotor(control_loops::WristLoop *my_wrist)
-    : aos::control_loops::ControlLoop<control_loops::WristLoop>(my_wrist),
-      zeroed_joint_(MakeWristLoop()) {
-  {
-    using ::frc971::constants::GetValues;
-    ZeroedJoint<1>::ConfigurationData config_data;
-
-    config_data.lower_limit = GetValues().wrist_lower_limit;
-    config_data.upper_limit = GetValues().wrist_upper_limit;
-    config_data.hall_effect_start_angle[0] =
-        GetValues().wrist_hall_effect_start_angle;
-    config_data.zeroing_off_speed = GetValues().wrist_zeroing_off_speed;
-    config_data.zeroing_speed = GetValues().wrist_zeroing_speed;
-
-    config_data.max_zeroing_voltage = 5.0;
-    config_data.deadband_voltage = 0.0;
-
-    zeroed_joint_.set_config_data(config_data);
-  }
-}
-
-// Positive angle is up, and positive power is up.
-void WristMotor::RunIteration(
-    const ::aos::control_loops::Goal *goal,
-    const control_loops::WristLoop::Position *position,
-    ::aos::control_loops::Output *output,
-    ::aos::control_loops::Status * status) {
-
-  // Disable the motors now so that all early returns will return with the
-  // motors disabled.
-  if (output) {
-    output->voltage = 0;
-  }
-
-  ZeroedJoint<1>::PositionData transformed_position;
-  ZeroedJoint<1>::PositionData *transformed_position_ptr =
-      &transformed_position;
-  if (!position) {
-    transformed_position_ptr = NULL;
-  } else {
-    transformed_position.position = position->pos;
-    transformed_position.hall_effects[0] = position->hall_effect;
-    transformed_position.hall_effect_positions[0] = position->calibration;
-  }
-
-  const double voltage = zeroed_joint_.Update(transformed_position_ptr,
-    output != NULL,
-    goal->goal, 0.0);
-
-  if (position) {
-    LOG(DEBUG, "pos: %f hall: %s absolute: %f\n",
-        position->pos,
-        position->hall_effect ? "true" : "false",
-        zeroed_joint_.absolute_position());
-  }
-
-  if (output) {
-    output->voltage = voltage;
-  }
-  status->done = ::std::abs(zeroed_joint_.absolute_position() - goal->goal) < 0.004;
-}
-
-}  // namespace control_loops
-}  // namespace frc971
diff --git a/frc971/control_loops/wrists/wrists.h b/frc971/control_loops/wrists/wrists.h
deleted file mode 100644
index 1c1fdf4..0000000
--- a/frc971/control_loops/wrists/wrists.h
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef FRC971_CONTROL_LOOPS_WRIST_WRIST_H_
-#define FRC971_CONTROL_LOOPS_WRIST_WRIST_H_
-
-#include <memory>
-
-#include "aos/common/control_loop/ControlLoop.h"
-#include "frc971/control_loops/state_feedback_loop.h"
-#include "frc971/control_loops/wrists/wrists.q.h"
-#include "frc971/control_loops/wrists/top_wrist_motor_plant.h"
-#include "frc971/control_loops/wrists/bottom_wrist_motor_plant.h"
-
-#include "frc971/control_loops/zeroed_joint.h"
-
-namespace frc971 {
-namespace control_loops {
-namespace testing {
-class WristTest_NoWindupPositive_Test;
-class WristTest_NoWindupNegative_Test;
-};
-
-class WristMotor
-    : public aos::control_loops::ControlLoop<control_loops::WristLoop> {
- public:
-  explicit WristMotor(
-      control_loops::WristLoop *my_wrist = &control_loops::wrist);
-
-  // True if the goal was moved to avoid goal windup.
-  bool capped_goal() const { return zeroed_joint_.capped_goal(); }
-
-  // True if the wrist is zeroing.
-  bool is_zeroing() const { return zeroed_joint_.is_zeroing(); }
-
-  // True if the wrist is zeroing.
-  bool is_moving_off() const { return zeroed_joint_.is_moving_off(); }
-
-  // True if the state machine is uninitialized.
-  bool is_uninitialized() const { return zeroed_joint_.is_uninitialized(); }
-
-  // True if the state machine is ready.
-  bool is_ready() const { return zeroed_joint_.is_ready(); }
-
- protected:
-  virtual void RunIteration(
-      const ::aos::control_loops::Goal *goal,
-      const control_loops::WristLoop::Position *position,
-      ::aos::control_loops::Output *output,
-      ::aos::control_loops::Status *status);
-
- private:
-  // Friend the test classes for acces to the internal state.
-  friend class testing::WristTest_NoWindupPositive_Test;
-  friend class testing::WristTest_NoWindupNegative_Test;
-
-  // The zeroed joint to use.
-  ZeroedJoint<1> zeroed_joint_;
-
-  DISALLOW_COPY_AND_ASSIGN(WristMotor);
-};
-
-}  // namespace control_loops
-}  // namespace frc971
-
-#endif  // FRC971_CONTROL_LOOPS_WRIST_WRIST_H_
diff --git a/frc971/control_loops/wrists/wrists.q b/frc971/control_loops/wrists/wrists.q
deleted file mode 100644
index 36159c9..0000000
--- a/frc971/control_loops/wrists/wrists.q
+++ /dev/null
@@ -1,28 +0,0 @@
-package frc971.control_loops;
-
-import "aos/common/control_loop/control_loops.q";
-
-// All angles here are 0 horizontal, positive up.
-queue_group WristsLoop {
-  implements aos.control_loops.ControlLoop;
-
-  message Goal {
-    // The angle of the bottom wrist.
-    double bottom_angle;
-    // How much higher the top wrist is.
-    double between_angle;
-    bool intake;
-  };
-  message Position {
-    double bottom_position, top_position;
-    bool bottom_hall_effect, top_hall_effect;
-    double bottom_calibration, top_calibration;
-  };
-
-  queue Goal goal;
-  queue Position position;
-  queue aos.control_loops.Output output;
-  queue aos.control_loops.Status status;
-};
-
-queue_group WristsLoop wrists;
diff --git a/frc971/control_loops/wrists/wrists_main.cc b/frc971/control_loops/wrists/wrists_main.cc
deleted file mode 100644
index 66d1ea3..0000000
--- a/frc971/control_loops/wrists/wrists_main.cc
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "frc971/control_loops/wrist/wrists.h"
-
-#include "aos/linux_code/init.h"
-
-int main() {
-  ::aos::Init();
-  frc971::control_loops::WristsLoop wrists;
-  wrists.Run();
-  ::aos::Cleanup();
-  return 0;
-}
