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]);
   }
diff --git a/y2015/control_loops/fridge/BUILD b/y2015/control_loops/fridge/BUILD
index 2e90a80..a9bb737 100644
--- a/y2015/control_loops/fridge/BUILD
+++ b/y2015/control_loops/fridge/BUILD
@@ -26,27 +26,52 @@
   ],
 )
 
+genrule(
+  name = 'genrule_elevator',
+  visibility = ['//visibility:private'],
+  cmd = '$(location //y2015/control_loops/python:elevator) $(OUTS)',
+  tools = [
+    '//y2015/control_loops/python:elevator',
+  ],
+  outs = [
+    'elevator_motor_plant.h',
+    'elevator_motor_plant.cc',
+  ],
+)
+
+cc_library(
+  name = 'elevator_plants',
+  srcs = [
+    'elevator_motor_plant.cc',
+  ],
+  hdrs = [
+    'elevator_motor_plant.h',
+  ],
+  deps = [
+    '//frc971/control_loops:state_feedback_loop',
+  ],
+)
+
 cc_library(
   name = 'fridge_lib',
   srcs = [
     'fridge.cc',
     'integral_arm_plant.cc',
-    'elevator_motor_plant.cc',
   ],
   hdrs = [
     'fridge.h',
     'integral_arm_plant.h',
-    'elevator_motor_plant.h',
   ],
   deps = [
+    ':elevator_plants',
     ':fridge_queue',
     '//aos/common/controls:control_loop',
     '//aos/common/util:trapezoid_profile',
-    '//y2015:constants',
-    '//frc971/control_loops:state_feedback_loop',
     '//frc971/control_loops/voltage_cap:voltage_cap',
+    '//frc971/control_loops:state_feedback_loop',
     '//frc971/zeroing',
     '//y2015/util:kinematics',
+    '//y2015:constants',
   ],
 )
 
diff --git a/y2015/control_loops/fridge/elevator_motor_plant.cc b/y2015/control_loops/fridge/elevator_motor_plant.cc
deleted file mode 100644
index 995d838..0000000
--- a/y2015/control_loops/fridge/elevator_motor_plant.cc
+++ /dev/null
@@ -1,49 +0,0 @@
-#include "y2015/control_loops/fridge/elevator_motor_plant.h"
-
-#include <vector>
-
-#include "frc971/control_loops/state_feedback_loop.h"
-
-namespace frc971 {
-namespace control_loops {
-
-StateFeedbackPlantCoefficients<4, 2, 2> MakeElevatorPlantCoefficients() {
-  Eigen::Matrix<double, 4, 4> A;
-  A << 1.0, 0.00435668193669, 0.0, 0.0, 0.0, 0.754212786054, 0.0, 0.0, 0.0, 0.0, 0.997194498569, 0.00435222083164, 0.0, 0.0, -1.07131589702, 0.751658962986;
-  Eigen::Matrix<double, 4, 2> B;
-  B << 3.82580284276e-05, 3.82580284276e-05, 0.0146169286307, 0.0146169286307, 3.82387898839e-05, -3.82387898839e-05, 0.0146019613563, -0.0146019613563;
-  Eigen::Matrix<double, 2, 4> C;
-  C << 1, 0, 1, 0, 1, 0, -1, 0;
-  Eigen::Matrix<double, 2, 2> D;
-  D << 0, 0, 0, 0;
-  Eigen::Matrix<double, 2, 1> U_max;
-  U_max << 12.0, 12.0;
-  Eigen::Matrix<double, 2, 1> U_min;
-  U_min << -12.0, -12.0;
-  return StateFeedbackPlantCoefficients<4, 2, 2>(A, B, C, D, U_max, U_min);
-}
-
-StateFeedbackController<4, 2, 2> MakeElevatorController() {
-  Eigen::Matrix<double, 4, 2> L;
-  L << 0.677106393027, 0.677106393027, 35.5375738607, 35.5375738607, 0.674426730777, -0.674426730777, 34.7138874344, -34.7138874344;
-  Eigen::Matrix<double, 2, 4> K;
-  K << 321.310606763, 11.7674534233, 601.047935717, 12.6977148843, 321.310606764, 11.7674534233, -601.047935716, -12.6977148843;
-  Eigen::Matrix<double, 4, 4> A_inv;
-  A_inv << 1.0, -0.00577646258091, 0.0, 0.0, 0.0, 1.32588576923, 0.0, 0.0, 0.0, 0.0, 0.996613922337, -0.00577054766522, 0.0, 0.0, 1.42044250221, 1.32216599481;
-  return StateFeedbackController<4, 2, 2>(L, K, A_inv, MakeElevatorPlantCoefficients());
-}
-
-StateFeedbackPlant<4, 2, 2> MakeElevatorPlant() {
-  ::std::vector< ::std::unique_ptr<StateFeedbackPlantCoefficients<4, 2, 2>>> plants(1);
-  plants[0] = ::std::unique_ptr<StateFeedbackPlantCoefficients<4, 2, 2>>(new StateFeedbackPlantCoefficients<4, 2, 2>(MakeElevatorPlantCoefficients()));
-  return StateFeedbackPlant<4, 2, 2>(&plants);
-}
-
-StateFeedbackLoop<4, 2, 2> MakeElevatorLoop() {
-  ::std::vector< ::std::unique_ptr<StateFeedbackController<4, 2, 2>>> controllers(1);
-  controllers[0] = ::std::unique_ptr<StateFeedbackController<4, 2, 2>>(new StateFeedbackController<4, 2, 2>(MakeElevatorController()));
-  return StateFeedbackLoop<4, 2, 2>(&controllers);
-}
-
-}  // namespace control_loops
-}  // namespace frc971
diff --git a/y2015/control_loops/fridge/elevator_motor_plant.h b/y2015/control_loops/fridge/elevator_motor_plant.h
deleted file mode 100644
index e68e6d7..0000000
--- a/y2015/control_loops/fridge/elevator_motor_plant.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef Y2015_CONTROL_LOOPS_FRIDGE_ELEVATOR_MOTOR_PLANT_H_
-#define Y2015_CONTROL_LOOPS_FRIDGE_ELEVATOR_MOTOR_PLANT_H_
-
-#include "frc971/control_loops/state_feedback_loop.h"
-
-namespace frc971 {
-namespace control_loops {
-
-StateFeedbackPlantCoefficients<4, 2, 2> MakeElevatorPlantCoefficients();
-
-StateFeedbackController<4, 2, 2> MakeElevatorController();
-
-StateFeedbackPlant<4, 2, 2> MakeElevatorPlant();
-
-StateFeedbackLoop<4, 2, 2> MakeElevatorLoop();
-
-}  // namespace control_loops
-}  // namespace frc971
-
-#endif  // Y2015_CONTROL_LOOPS_FRIDGE_ELEVATOR_MOTOR_PLANT_H_
diff --git a/y2015/control_loops/fridge/fridge.cc b/y2015/control_loops/fridge/fridge.cc
index 9f2241a..4c24a1f 100644
--- a/y2015/control_loops/fridge/fridge.cc
+++ b/y2015/control_loops/fridge/fridge.cc
@@ -12,8 +12,9 @@
 
 #include "y2015/constants.h"
 
-namespace frc971 {
+namespace y2015 {
 namespace control_loops {
+namespace fridge {
 
 namespace chrono = ::std::chrono;
 
@@ -27,8 +28,9 @@
 
 template <int S>
 void CappedStateFeedbackLoop<S>::CapU() {
-  VoltageCap(max_voltage_, this->U(0, 0), this->U(1, 0), &this->mutable_U(0, 0),
-             &this->mutable_U(1, 0));
+  ::frc971::control_loops::VoltageCap(max_voltage_, this->U(0, 0),
+                                      this->U(1, 0), &this->mutable_U(0, 0),
+                                      &this->mutable_U(1, 0));
 }
 
 template <int S>
@@ -49,10 +51,10 @@
   return deltaR;
 }
 
-Fridge::Fridge(control_loops::FridgeQueue *fridge)
-    : aos::controls::ControlLoop<control_loops::FridgeQueue>(fridge),
-      arm_loop_(new CappedStateFeedbackLoop<5>(
-          StateFeedbackLoop<5, 2, 2>(MakeIntegralArmLoop()))),
+Fridge::Fridge(FridgeQueue *fridge)
+    : aos::controls::ControlLoop<FridgeQueue>(fridge),
+      arm_loop_(new CappedStateFeedbackLoop<5>(StateFeedbackLoop<5, 2, 2>(
+          ::frc971::control_loops::MakeIntegralArmLoop()))),
       elevator_loop_(new CappedStateFeedbackLoop<4>(
           StateFeedbackLoop<4, 2, 2>(MakeElevatorLoop()))),
       left_arm_estimator_(constants::GetValues().fridge.left_arm_zeroing),
@@ -239,10 +241,10 @@
   return arm_zeroing_velocity_;
 }
 
-void Fridge::RunIteration(const control_loops::FridgeQueue::Goal *unsafe_goal,
-                          const control_loops::FridgeQueue::Position *position,
-                          control_loops::FridgeQueue::Output *output,
-                          control_loops::FridgeQueue::Status *status) {
+void Fridge::RunIteration(const FridgeQueue::Goal *unsafe_goal,
+                          const FridgeQueue::Position *position,
+                          FridgeQueue::Output *output,
+                          FridgeQueue::Status *status) {
   if (WasReset()) {
     LOG(ERROR, "WPILib reset, restarting\n");
     left_elevator_estimator_.Reset();
@@ -709,17 +711,19 @@
     status->grabbers.bottom_front = false;
     status->grabbers.bottom_back = false;
   }
-  zeroing::PopulateEstimatorState(left_arm_estimator_, &status->left_arm_state);
-  zeroing::PopulateEstimatorState(right_arm_estimator_,
-                                  &status->right_arm_state);
-  zeroing::PopulateEstimatorState(left_elevator_estimator_,
-                                  &status->left_elevator_state);
-  zeroing::PopulateEstimatorState(right_elevator_estimator_,
-                                  &status->right_elevator_state);
+  ::frc971::zeroing::PopulateEstimatorState(left_arm_estimator_,
+                                            &status->left_arm_state);
+  ::frc971::zeroing::PopulateEstimatorState(right_arm_estimator_,
+                                            &status->right_arm_state);
+  ::frc971::zeroing::PopulateEstimatorState(left_elevator_estimator_,
+                                            &status->left_elevator_state);
+  ::frc971::zeroing::PopulateEstimatorState(right_elevator_estimator_,
+                                            &status->right_elevator_state);
   status->estopped = (state_ == ESTOP);
   status->state = state_;
   last_state_ = state_;
 }
 
+}  // namespace fridge
 }  // namespace control_loops
-}  // namespace frc971
+}  // namespace y2015
diff --git a/y2015/control_loops/fridge/fridge.h b/y2015/control_loops/fridge/fridge.h
index 0448e09..ee64554 100644
--- a/y2015/control_loops/fridge/fridge.h
+++ b/y2015/control_loops/fridge/fridge.h
@@ -10,8 +10,9 @@
 #include "frc971/zeroing/zeroing.h"
 #include "y2015/util/kinematics.h"
 
-namespace frc971 {
+namespace y2015 {
 namespace control_loops {
+namespace fridge {
 namespace testing {
 class FridgeTest_DisabledGoalTest_Test;
 class FridgeTest_ArmGoalPositiveWindupTest_Test;
@@ -42,10 +43,10 @@
 };
 
 class Fridge
-    : public aos::controls::ControlLoop<control_loops::FridgeQueue> {
+    : public aos::controls::ControlLoop<FridgeQueue> {
  public:
-  explicit Fridge(
-      control_loops::FridgeQueue *fridge_queue = &control_loops::fridge_queue);
+  explicit Fridge(FridgeQueue *fridge_queue =
+                      &::y2015::control_loops::fridge::fridge_queue);
 
   enum State {
     // Waiting to receive data before doing anything.
@@ -72,10 +73,10 @@
   State state() const { return state_; }
 
  protected:
-  void RunIteration(const control_loops::FridgeQueue::Goal *goal,
-                    const control_loops::FridgeQueue::Position *position,
-                    control_loops::FridgeQueue::Output *output,
-                    control_loops::FridgeQueue::Status *status) override;
+  void RunIteration(const FridgeQueue::Goal *goal,
+                    const FridgeQueue::Position *position,
+                    FridgeQueue::Output *output,
+                    FridgeQueue::Status *status) override;
 
  private:
   friend class testing::FridgeTest_DisabledGoalTest_Test;
@@ -127,10 +128,10 @@
   ::std::unique_ptr<CappedStateFeedbackLoop<5>> arm_loop_;
   ::std::unique_ptr<CappedStateFeedbackLoop<4>> elevator_loop_;
 
-  zeroing::ZeroingEstimator left_arm_estimator_;
-  zeroing::ZeroingEstimator right_arm_estimator_;
-  zeroing::ZeroingEstimator left_elevator_estimator_;
-  zeroing::ZeroingEstimator right_elevator_estimator_;
+  ::frc971::zeroing::ZeroingEstimator left_arm_estimator_;
+  ::frc971::zeroing::ZeroingEstimator right_arm_estimator_;
+  ::frc971::zeroing::ZeroingEstimator left_elevator_estimator_;
+  ::frc971::zeroing::ZeroingEstimator right_elevator_estimator_;
 
   // Offsets from the encoder position to the absolute position.  Add these to
   // the encoder position to get the absolute position.
@@ -153,7 +154,7 @@
   State state_ = UNINITIALIZED;
   State last_state_ = UNINITIALIZED;
 
-  control_loops::FridgeQueue::Position current_position_;
+  FridgeQueue::Position current_position_;
 
   ProfilingType last_profiling_type_;
   aos::util::ElevatorArmKinematics kinematics_;
@@ -165,8 +166,9 @@
   aos::util::TrapezoidProfile y_profile_;
 };
 
+}  // namespace fridge
 }  // namespace control_loops
-}  // namespace frc971
+}  // namespace y2015
 
 #endif // Y2015_CONTROL_LOOPS_FRIDGE_H_
 
diff --git a/y2015/control_loops/fridge/fridge.q b/y2015/control_loops/fridge/fridge.q
index 257374d..9df30e3 100644
--- a/y2015/control_loops/fridge/fridge.q
+++ b/y2015/control_loops/fridge/fridge.q
@@ -1,4 +1,4 @@
-package frc971.control_loops;
+package y2015.control_loops.fridge;
 
 import "aos/common/controls/control_loops.q";
 import "frc971/control_loops/control_loops.q";
@@ -82,8 +82,8 @@
   };
 
   message Position {
-    PotAndIndexPair arm;
-    PotAndIndexPair elevator;
+    .frc971.PotAndIndexPair arm;
+    .frc971.PotAndIndexPair elevator;
   };
 
   message Status {
@@ -128,10 +128,10 @@
     // The internal state of the state machine.
     int32_t state;
 
-    EstimatorState left_elevator_state;
-    EstimatorState right_elevator_state;
-    EstimatorState left_arm_state;
-    EstimatorState right_arm_state;
+    .frc971.EstimatorState left_elevator_state;
+    .frc971.EstimatorState right_elevator_state;
+    .frc971.EstimatorState left_arm_state;
+    .frc971.EstimatorState right_arm_state;
   };
 
   message Output {
diff --git a/y2015/control_loops/fridge/fridge_lib_test.cc b/y2015/control_loops/fridge/fridge_lib_test.cc
index 7719fb4..2378622 100644
--- a/y2015/control_loops/fridge/fridge_lib_test.cc
+++ b/y2015/control_loops/fridge/fridge_lib_test.cc
@@ -20,8 +20,9 @@
 
 using ::aos::time::Time;
 
-namespace frc971 {
+namespace y2015 {
 namespace control_loops {
+namespace fridge {
 namespace testing {
 // Class which simulates the fridge and sends out queue messages with the
 // position.
@@ -30,7 +31,8 @@
   static constexpr double kNoiseScalar = 0.1;
   // Constructs a simulation.
   FridgeSimulation()
-      : arm_plant_(new StateFeedbackPlant<4, 2, 2>(MakeArmPlant())),
+      : arm_plant_(new StateFeedbackPlant<4, 2, 2>(
+            ::frc971::control_loops::MakeArmPlant())),
         elevator_plant_(new StateFeedbackPlant<4, 2, 2>(MakeElevatorPlant())),
         left_arm_pot_encoder_(
             constants::GetValues().fridge.left_arm_zeroing.index_difference),
@@ -40,11 +42,11 @@
             constants::GetValues().fridge.left_elev_zeroing.index_difference),
         right_elevator_pot_encoder_(
             constants::GetValues().fridge.right_elev_zeroing.index_difference),
-        fridge_queue_(".frc971.control_loops.fridge_queue", 0xe4e05855,
-                      ".frc971.control_loops.fridge_queue.goal",
-                      ".frc971.control_loops.fridge_queue.position",
-                      ".frc971.control_loops.fridge_queue.output",
-                      ".frc971.control_loops.fridge_queue.status") {
+        fridge_queue_(".y2015.control_loops.fridge.fridge_queue", 0xe4e05855,
+                      ".y2015.control_loops.fridge.fridge_queue.goal",
+                      ".y2015.control_loops.fridge.fridge_queue.position",
+                      ".y2015.control_loops.fridge.fridge_queue.output",
+                      ".y2015.control_loops.fridge.fridge_queue.status") {
     // Initialize the elevator.
     InitializeElevatorPosition(
         constants::GetValues().fridge.elevator.lower_limit);
@@ -109,7 +111,7 @@
 
   // Sends a queue message with the position.
   void SendPositionMessage() {
-    ::aos::ScopedMessagePtr<control_loops::FridgeQueue::Position> position =
+    ::aos::ScopedMessagePtr<FridgeQueue::Position> position =
         fridge_queue_.position.MakeMessage();
 
     left_arm_pot_encoder_.GetSensorValues(&position->arm.left);
@@ -196,10 +198,10 @@
   ::std::unique_ptr<StateFeedbackPlant<4, 2, 2>> arm_plant_;
   ::std::unique_ptr<StateFeedbackPlant<4, 2, 2>> elevator_plant_;
 
-  PositionSensorSimulator left_arm_pot_encoder_;
-  PositionSensorSimulator right_arm_pot_encoder_;
-  PositionSensorSimulator left_elevator_pot_encoder_;
-  PositionSensorSimulator right_elevator_pot_encoder_;
+  ::frc971::control_loops::PositionSensorSimulator left_arm_pot_encoder_;
+  ::frc971::control_loops::PositionSensorSimulator right_arm_pot_encoder_;
+  ::frc971::control_loops::PositionSensorSimulator left_elevator_pot_encoder_;
+  ::frc971::control_loops::PositionSensorSimulator right_elevator_pot_encoder_;
 
   FridgeQueue fridge_queue_;
 
@@ -211,11 +213,11 @@
 class FridgeTest : public ::aos::testing::ControlLoopTest {
  protected:
   FridgeTest()
-      : fridge_queue_(".frc971.control_loops.fridge_queue", 0xe4e05855,
-                      ".frc971.control_loops.fridge_queue.goal",
-                      ".frc971.control_loops.fridge_queue.position",
-                      ".frc971.control_loops.fridge_queue.output",
-                      ".frc971.control_loops.fridge_queue.status"),
+      : fridge_queue_(".y2015.control_loops.fridge.fridge_queue", 0xe4e05855,
+                      ".y2015.control_loops.fridge.fridge_queue.goal",
+                      ".y2015.control_loops.fridge.fridge_queue.position",
+                      ".y2015.control_loops.fridge.fridge_queue.output",
+                      ".y2015.control_loops.fridge.fridge_queue.status"),
         fridge_(&fridge_queue_),
         fridge_plant_(),
         kinematics_(constants::GetValues().fridge.arm_length,
@@ -223,7 +225,7 @@
                     constants::GetValues().fridge.elevator.lower_limit,
                     constants::GetValues().fridge.arm.upper_limit,
                     constants::GetValues().fridge.arm.lower_limit) {
-    set_team_id(kTeamNumber);
+    set_team_id(::frc971::control_loops::testing::kTeamNumber);
   }
 
   void VerifyNearGoal() {
@@ -731,5 +733,6 @@
 // after we are zeroed.
 
 }  // namespace testing
+}  // namespace fridge
 }  // namespace control_loops
-}  // namespace frc971
+}  // namespace y2015
diff --git a/y2015/control_loops/fridge/fridge_main.cc b/y2015/control_loops/fridge/fridge_main.cc
index e0fd6ea..658a4af 100644
--- a/y2015/control_loops/fridge/fridge_main.cc
+++ b/y2015/control_loops/fridge/fridge_main.cc
@@ -4,7 +4,7 @@
 
 int main() {
   ::aos::Init();
-  frc971::control_loops::Fridge fridge;
+  y2015::control_loops::fridge::Fridge fridge;
   fridge.Run();
   ::aos::Cleanup();
   return 0;
diff --git a/y2015/control_loops/fridge/replay_fridge.cc b/y2015/control_loops/fridge/replay_fridge.cc
index 65cc98a..842aa0d 100644
--- a/y2015/control_loops/fridge/replay_fridge.cc
+++ b/y2015/control_loops/fridge/replay_fridge.cc
@@ -14,8 +14,9 @@
 
   ::aos::InitNRT();
 
-  ::aos::controls::ControlLoopReplayer<::frc971::control_loops::FridgeQueue>
-      replayer(&::frc971::control_loops::fridge_queue, "fridge");
+  ::aos::controls::ControlLoopReplayer<
+      ::y2015::control_loops::fridge::FridgeQueue>
+      replayer(&::y2015::control_loops::fridge::fridge_queue, "fridge");
   for (int i = 1; i < argc; ++i) {
     replayer.ProcessFile(argv[i]);
   }
diff --git a/y2015/control_loops/python/BUILD b/y2015/control_loops/python/BUILD
index 77c3d81..16fc62b 100644
--- a/y2015/control_loops/python/BUILD
+++ b/y2015/control_loops/python/BUILD
@@ -61,3 +61,15 @@
     '//frc971/control_loops/python:controls',
   ],
 )
+
+py_binary(
+  name = 'elevator',
+  srcs  = [
+    'elevator.py',
+  ],
+  deps = [
+    '//external:python-gflags',
+    '//external:python-glog',
+    '//frc971/control_loops/python:controls',
+  ],
+)
diff --git a/y2015/control_loops/python/elevator.py b/y2015/control_loops/python/elevator.py
index 464011b..dc9caa1 100755
--- a/y2015/control_loops/python/elevator.py
+++ b/y2015/control_loops/python/elevator.py
@@ -1,9 +1,8 @@
 #!/usr/bin/python
 
-import control_loop
-import controls
-import polytope
-import polydrivetrain
+from frc971.control_loops.python import control_loop
+from frc971.control_loops.python import controls
+from frc971.control_loops.python import polytope
 import numpy
 import sys
 import matplotlib
@@ -128,7 +127,7 @@
 
 
 def run_test(elevator, initial_X, goal, max_separation_error=0.01,
-             show_graph=True, iterations=200, controller_elevator=None,
+             show_graph=False, iterations=200, controller_elevator=None,
              observer_elevator=None):
   """Runs the elevator plant with an initial condition and goal.
 
@@ -235,12 +234,14 @@
   if len(argv) != 3:
     print "Expected .h file name and .cc file name for the elevator."
   else:
+    namespaces = ['y2015', 'control_loops', 'fridge']
     elevator = Elevator("Elevator")
-    loop_writer = control_loop.ControlLoopWriter("Elevator", [elevator])
-    if argv[1][-3:] == '.cc':
-      loop_writer.Write(argv[2], argv[1])
-    else:
-      loop_writer.Write(argv[1], argv[2])
+    loop_writer = control_loop.ControlLoopWriter("Elevator", [elevator],
+                                                 namespaces=namespaces)
+  if argv[1][-3:] == '.cc':
+    loop_writer.Write(argv[2], argv[1])
+  else:
+    loop_writer.Write(argv[1], argv[2])
 
 if __name__ == '__main__':
   sys.exit(main(sys.argv))
