diff --git a/y2015/control_loops/claw/claw.cc b/y2015/control_loops/claw/claw.cc
index ad8aaee..b4a5a7b 100644
--- a/y2015/control_loops/claw/claw.cc
+++ b/y2015/control_loops/claw/claw.cc
@@ -9,7 +9,7 @@
 #include "y2015/control_loops/claw/claw_motor_plant.h"
 #include "aos/common/util/trapezoid_profile.h"
 
-namespace frc971 {
+namespace y2015 {
 namespace control_loops {
 
 using ::aos::time::Time;
@@ -280,7 +280,8 @@
   status->zeroed = state_ == RUNNING;
   status->estopped = state_ == ESTOP;
   status->state = state_;
-  zeroing::PopulateEstimatorState(claw_estimator_, &status->zeroing_state);
+  ::frc971::zeroing::PopulateEstimatorState(claw_estimator_,
+                                            &status->zeroing_state);
 
   status->angle = claw_loop_->X_hat(0, 0);
   status->angular_velocity = claw_loop_->X_hat(1, 0);
@@ -311,4 +312,4 @@
 }
 
 }  // namespace control_loops
-}  // namespace frc971
+}  // namespace y2015
diff --git a/y2015/control_loops/claw/claw.h b/y2015/control_loops/claw/claw.h
index 02e5398..58c3cc1 100644
--- a/y2015/control_loops/claw/claw.h
+++ b/y2015/control_loops/claw/claw.h
@@ -11,7 +11,7 @@
 #include "y2015/control_loops/claw/claw_motor_plant.h"
 #include "frc971/zeroing/zeroing.h"
 
-namespace frc971 {
+namespace y2015 {
 namespace control_loops {
 namespace testing {
 class ClawTest_DisabledGoal_Test;
@@ -95,7 +95,7 @@
   // Latest position from queue.
   control_loops::ClawQueue::Position current_position_;
   // Zeroing estimator for claw.
-  zeroing::ZeroingEstimator claw_estimator_;
+  ::frc971::zeroing::ZeroingEstimator claw_estimator_;
 
   // The goal for the claw.
   double claw_goal_ = 0.0;
@@ -111,6 +111,6 @@
 };
 
 }  // namespace control_loops
-}  // namespace frc971
+}  // namespace y2015
 
 #endif  // Y2015_CONTROL_LOOPS_CLAW_H_
diff --git a/y2015/control_loops/claw/claw.q b/y2015/control_loops/claw/claw.q
index 8da1c20..e1d444d 100644
--- a/y2015/control_loops/claw/claw.q
+++ b/y2015/control_loops/claw/claw.q
@@ -1,4 +1,4 @@
-package frc971.control_loops;
+package y2015.control_loops;
 
 import "aos/common/controls/control_loops.q";
 import "frc971/control_loops/control_loops.q";
@@ -28,7 +28,7 @@
   };
 
   message Position {
-    PotAndIndexPosition joint;
+    .frc971.PotAndIndexPosition joint;
   };
 
   message Output {
@@ -49,7 +49,7 @@
     bool estopped;
     // The internal state of the claw state machine.
     uint32_t state;
-    EstimatorState zeroing_state;
+    .frc971.EstimatorState zeroing_state;
 
     // Estimated angle of wrist joint.
     double angle;
diff --git a/y2015/control_loops/claw/claw_lib_test.cc b/y2015/control_loops/claw/claw_lib_test.cc
index 6b3ad87..b38a2ee 100644
--- a/y2015/control_loops/claw/claw_lib_test.cc
+++ b/y2015/control_loops/claw/claw_lib_test.cc
@@ -15,7 +15,7 @@
 
 using ::aos::time::Time;
 
-namespace frc971 {
+namespace y2015 {
 namespace control_loops {
 namespace testing {
 
@@ -28,11 +28,11 @@
       : claw_plant_(new StateFeedbackPlant<2, 1, 1>(
             y2015::control_loops::claw::MakeClawPlant())),
         pot_and_encoder_(constants::GetValues().claw.zeroing.index_difference),
-        claw_queue_(".frc971.control_loops.claw_queue", 0x9d7452fb,
-                    ".frc971.control_loops.claw_queue.goal",
-                    ".frc971.control_loops.claw_queue.position",
-                    ".frc971.control_loops.claw_queue.output",
-                    ".frc971.control_loops.claw_queue.status") {
+        claw_queue_(".y2015.control_loops.claw_queue", 0x9d7452fb,
+                    ".y2015.control_loops.claw_queue.goal",
+                    ".y2015.control_loops.claw_queue.position",
+                    ".y2015.control_loops.claw_queue.output",
+                    ".y2015.control_loops.claw_queue.status") {
     InitializePosition(constants::GetValues().claw.wrist.lower_limit);
   }
 
@@ -85,7 +85,7 @@
 
  private:
   ::std::unique_ptr<StateFeedbackPlant<2, 1, 1>> claw_plant_;
-  PositionSensorSimulator pot_and_encoder_;
+  ::frc971::control_loops::PositionSensorSimulator pot_and_encoder_;
 
   ClawQueue claw_queue_;
 };
@@ -93,14 +93,14 @@
 class ClawTest : public ::aos::testing::ControlLoopTest {
  protected:
   ClawTest()
-      : claw_queue_(".frc971.control_loops.claw_queue", 0x9d7452fb,
-                    ".frc971.control_loops.claw_queue.goal",
-                    ".frc971.control_loops.claw_queue.position",
-                    ".frc971.control_loops.claw_queue.output",
-                    ".frc971.control_loops.claw_queue.status"),
+      : claw_queue_(".y2015.control_loops.claw_queue", 0x9d7452fb,
+                    ".y2015.control_loops.claw_queue.goal",
+                    ".y2015.control_loops.claw_queue.position",
+                    ".y2015.control_loops.claw_queue.output",
+                    ".y2015.control_loops.claw_queue.status"),
         claw_(&claw_queue_),
         claw_plant_() {
-    set_team_id(kTeamNumber);
+    set_team_id(::frc971::control_loops::testing::kTeamNumber);
   }
 
   void VerifyNearGoal() {
@@ -345,4 +345,4 @@
 
 }  // namespace testing
 }  // namespace control_loops
-}  // namespace frc971
+}  // namespace y2015
diff --git a/y2015/control_loops/claw/claw_main.cc b/y2015/control_loops/claw/claw_main.cc
index d1b869c..8b0c21f 100644
--- a/y2015/control_loops/claw/claw_main.cc
+++ b/y2015/control_loops/claw/claw_main.cc
@@ -4,7 +4,7 @@
 
 int main() {
   ::aos::Init();
-  frc971::control_loops::Claw claw;
+  y2015::control_loops::Claw claw;
   claw.Run();
   ::aos::Cleanup();
   return 0;
diff --git a/y2015/control_loops/claw/replay_claw.cc b/y2015/control_loops/claw/replay_claw.cc
index 50673e4..600ad99 100644
--- a/y2015/control_loops/claw/replay_claw.cc
+++ b/y2015/control_loops/claw/replay_claw.cc
@@ -14,8 +14,8 @@
 
   ::aos::InitNRT();
 
-  ::aos::controls::ControlLoopReplayer<::frc971::control_loops::ClawQueue>
-      replayer(&::frc971::control_loops::claw_queue, "claw");
+  ::aos::controls::ControlLoopReplayer<::y2015::control_loops::ClawQueue>
+      replayer(&::y2015::control_loops::claw_queue, "claw");
   for (int i = 1; i < argc; ++i) {
     replayer.ProcessFile(argv[i]);
   }
