diff --git a/frc971/control_loops/python/angle_adjust.py b/frc971/control_loops/python/angle_adjust.py
index f49c305..bee58bc 100755
--- a/frc971/control_loops/python/angle_adjust.py
+++ b/frc971/control_loops/python/angle_adjust.py
@@ -44,7 +44,7 @@
     self.ContinuousToDiscrete(self.A_continuous, self.B_continuous,
                               self.dt, self.C)
 
-    self.PlaceControllerPoles([.5, .5])
+    self.PlaceControllerPoles([.45, .8])
 
     self.rpl = .05
     self.ipl = 0.008
@@ -92,11 +92,11 @@
   if len(argv) != 3:
     print "Expected .cc file name and .h file name"
   else:
+    loop_writer = control_loop.ControlLoopWriter("AngleAdjust", [angle_adjust])
     if argv[1][-3:] == '.cc':
-      print '.cc file is second'
+      loop_writer.Write(argv[2], argv[1])
     else:
-      angle_adjust.DumpHeaderFile(argv[1])
-      angle_adjust.DumpCppFile(argv[2], argv[1])
+      loop_writer.Write(argv[1], argv[2])
 
 if __name__ == '__main__':
   sys.exit(main(sys.argv))
diff --git a/frc971/control_loops/python/control_loop.py b/frc971/control_loops/python/control_loop.py
index c5316e7..4ff2623 100644
--- a/frc971/control_loops/python/control_loop.py
+++ b/frc971/control_loops/python/control_loop.py
@@ -1,6 +1,136 @@
 import controls
 import numpy
 
+class ControlLoopWriter(object):
+  def __init__(self, gain_schedule_name, loops, namespaces=None):
+    """Constructs a control loop writer.
+
+    Args:
+      gain_schedule_name: string, Name of the overall controller.
+      loops: array[ControlLoop], a list of control loops to gain schedule
+        in order.
+      namespaces: array[string], a list of names of namespaces to nest in
+        order.  If None, the default will be used.
+    """
+    self._gain_schedule_name = gain_schedule_name
+    self._loops = loops
+    if namespaces:
+      self._namespaces = namespaces
+    else:
+      self._namespaces = ['frc971', 'control_loops']
+
+    self._namespace_start = '\n'.join(
+        ['namespace %s {' % name for name in self._namespaces])
+
+    self._namespace_end = '\n'.join(
+        ['}  // namespace %s' % name for name in reversed(self._namespaces)])
+
+  def _HeaderGuard(self, header_file):
+    return ('FRC971_CONTROL_LOOPS_' +
+            header_file.upper().replace('.', '_').replace('/', '_') +
+            '_')
+
+  def Write(self, header_file, cc_file):
+    """Writes the loops to the specified files."""
+    self.WriteHeader(header_file)
+    self.WriteCC(header_file, cc_file)
+
+  def _GenericType(self, typename):
+    """Returns a loop template using typename for the type."""
+    num_states = self._loops[0].A.shape[0]
+    num_inputs = self._loops[0].B.shape[1]
+    num_outputs = self._loops[0].C.shape[0]
+    return '%s<%d, %d, %d>' % (
+        typename, num_states, num_inputs, num_outputs)
+
+  def _ControllerType(self):
+    """Returns a template name for StateFeedbackController."""
+    return self._GenericType('StateFeedbackController')
+
+  def _LoopType(self):
+    """Returns a template name for StateFeedbackLoop."""
+    return self._GenericType('StateFeedbackLoop')
+
+  def _PlantType(self):
+    """Returns a template name for StateFeedbackPlant."""
+    return self._GenericType('StateFeedbackPlant')
+
+  def _CoeffType(self):
+    """Returns a template name for StateFeedbackPlantCoefficients."""
+    return self._GenericType('StateFeedbackPlantCoefficients')
+
+  def WriteHeader(self, header_file):
+    """Writes the header file to the file named header_file."""
+    with open(header_file, 'w') as fd:
+      header_guard = self._HeaderGuard(header_file)
+      fd.write('#ifndef %s\n'
+               '#define %s\n\n' % (header_guard, header_guard))
+      fd.write('#include \"frc971/control_loops/state_feedback_loop.h\"\n')
+      fd.write('\n')
+
+      fd.write(self._namespace_start)
+      fd.write('\n\n')
+      for loop in self._loops:
+        fd.write(loop.DumpPlantHeader())
+        fd.write('\n')
+        fd.write(loop.DumpControllerHeader())
+        fd.write('\n')
+
+      fd.write('%s Make%sPlant();\n\n' %
+               (self._PlantType(), self._gain_schedule_name))
+
+      fd.write('%s Make%sLoop();\n\n' %
+               (self._LoopType(), self._gain_schedule_name))
+
+      fd.write(self._namespace_end)
+      fd.write('\n\n')
+      fd.write("#endif  // %s\n" % header_guard)
+
+  def WriteCC(self, header_file_name, cc_file):
+    """Writes the cc file to the file named cc_file."""
+    with open(cc_file, 'w') as fd:
+      fd.write('#include \"frc971/control_loops/%s\"\n' % header_file_name)
+      fd.write('\n')
+      fd.write('#include <vector>\n')
+      fd.write('\n')
+      fd.write('#include \"frc971/control_loops/state_feedback_loop.h\"\n')
+      fd.write('\n')
+      fd.write(self._namespace_start)
+      fd.write('\n\n')
+      for loop in self._loops:
+        fd.write(loop.DumpPlant())
+        fd.write('\n')
+
+      for loop in self._loops:
+        fd.write(loop.DumpController())
+        fd.write('\n')
+
+      fd.write('%s Make%sPlant() {\n' %
+               (self._PlantType(), self._gain_schedule_name))
+      fd.write('  ::std::vector<%s *> plants(%d);\n' % (
+          self._CoeffType(), len(self._loops)))
+      for index, loop in enumerate(self._loops):
+        fd.write('  plants[%d] = new %s(%s);\n' %
+                 (index, self._CoeffType(),
+                  loop.PlantFunction()))
+      fd.write('  return %s(plants);\n' % self._PlantType())
+      fd.write('}\n\n')
+
+      fd.write('%s Make%sLoop() {\n' %
+               (self._LoopType(), self._gain_schedule_name))
+      fd.write('  ::std::vector<%s *> controllers(%d);\n' % (
+          self._ControllerType(), len(self._loops)))
+      for index, loop in enumerate(self._loops):
+        fd.write('  controllers[%d] = new %s(%s);\n' %
+                 (index, self._ControllerType(),
+                  loop.ControllerFunction()))
+      fd.write('  return %s(controllers);\n' % self._LoopType())
+      fd.write('}\n\n')
+
+      fd.write(self._namespace_end)
+      fd.write('\n')
+
+
 class ControlLoop(object):
   def __init__(self, name):
     """Constructs a control loop object.
@@ -10,20 +140,6 @@
     """
     self._name = name
 
-    self._namespace_start = ("namespace frc971 {\n"
-                             "namespace control_loops {\n\n")
-
-    self._namespace_end = ("}  // namespace frc971\n"
-                           "}  // namespace control_loops\n")
-
-    self._header_start = ("#ifndef FRC971_CONTROL_LOOPS_%s_%s_MOTOR_PLANT_H_\n"
-                          "#define FRC971_CONTROL_LOOPS_%s_%s_MOTOR_PLANT_H_\n\n"
-                          % (self._name.upper(), self._name.upper(),
-                             self._name.upper(), self._name.upper()))
-
-    self._header_end = ("#endif  // FRC971_CONTROL_LOOPS_%s_%s_MOTOR_PLANT_H_\n"
-                        % (self._name.upper(), self._name.upper()))
-
   def ContinuousToDiscrete(self, A_continuous, B_continuous, dt, C):
     """Calculates the discrete time values for A and B as well as initializing
       X and Y to the correct sizes.
@@ -80,44 +196,36 @@
       string, The C++ commands required to populate a variable named matrix_name
         with the contents of matrix.
     """
-    ans = ["  Eigen::Matrix<double, %d, %d> %s;\n" % (
+    ans = ['  Eigen::Matrix<double, %d, %d> %s;\n' % (
         matrix.shape[0], matrix.shape[1], matrix_name)]
     first = True
     for x in xrange(matrix.shape[0]):
       for y in xrange(matrix.shape[1]):
 	element = matrix[x, y]
         if first:
-          ans.append("  %s << " % matrix_name)
+          ans.append('  %s << ' % matrix_name)
           first = False
         else:
-          ans.append(", ")
+          ans.append(', ')
         ans.append(str(element))
 
-    ans.append(";\n")
-    return "".join(ans)
+    ans.append(';\n')
+    return ''.join(ans)
 
-  def _DumpPlantHeader(self, plant_name):
+  def DumpPlantHeader(self):
     """Writes out a c++ header declaration which will create a Plant object.
 
-    Args:
-      plant_name: string, the name of the plant.  Used to create the name of the
-        function.  The function name will be Make<plant_name>Plant().
-
     Returns:
       string, The header declaration for the function.
     """
     num_states = self.A.shape[0]
     num_inputs = self.B.shape[1]
     num_outputs = self.C.shape[0]
-    return "StateFeedbackPlant<%d, %d, %d> Make%sPlant();\n" % (
-        num_states, num_inputs, num_outputs, plant_name)
+    return 'StateFeedbackPlantCoefficients<%d, %d, %d> Make%sPlantCoefficients();\n' % (
+        num_states, num_inputs, num_outputs, self._name)
 
-  def _DumpPlant(self, plant_name):
-    """Writes out a c++ function which will create a Plant object.
-
-    Args:
-      plant_name: string, the name of the plant.  Used to create the name of the
-        function.  The function name will be Make<plant_name>Plant().
+  def DumpPlant(self):
+    """Writes out a c++ function which will create a PlantCoefficients object.
 
     Returns:
       string, The function which will create the object.
@@ -125,28 +233,33 @@
     num_states = self.A.shape[0]
     num_inputs = self.B.shape[1]
     num_outputs = self.C.shape[0]
-    ans = ["StateFeedbackPlant<%d, %d, %d> Make%sPlant() {\n" % (
-        num_states, num_inputs, num_outputs, plant_name)]
+    ans = ['StateFeedbackPlantCoefficients<%d, %d, %d>'
+           ' Make%sPlantCoefficients() {\n' % (
+        num_states, num_inputs, num_outputs, self._name)]
 
-    ans.append(self._DumpMatrix("A", self.A))
-    ans.append(self._DumpMatrix("B", self.B))
-    ans.append(self._DumpMatrix("C", self.C))
-    ans.append(self._DumpMatrix("D", self.D))
-    ans.append(self._DumpMatrix("U_max", self.U_max))
-    ans.append(self._DumpMatrix("U_min", self.U_min))
+    ans.append(self._DumpMatrix('A', self.A))
+    ans.append(self._DumpMatrix('B', self.B))
+    ans.append(self._DumpMatrix('C', self.C))
+    ans.append(self._DumpMatrix('D', self.D))
+    ans.append(self._DumpMatrix('U_max', self.U_max))
+    ans.append(self._DumpMatrix('U_min', self.U_min))
 
-    ans.append("  return StateFeedbackPlant<%d, %d, %d>"
-               "(A, B, C, D, U_max, U_min);\n" % (num_states, num_inputs,
+    ans.append('  return StateFeedbackPlantCoefficients<%d, %d, %d>'
+               '(A, B, C, D, U_max, U_min);\n' % (num_states, num_inputs,
                                                   num_outputs))
-    ans.append("}\n")
-    return "".join(ans)
+    ans.append('}\n')
+    return ''.join(ans)
 
-  def _DumpLoopHeader(self, loop_name):
-    """Writes out a c++ header declaration which will create a Loop object.
+  def PlantFunction(self):
+    """Returns the name of the plant coefficient function."""
+    return 'Make%sPlantCoefficients()' % self._name
 
-    Args:
-      loop_name: string, the name of the loop.  Used to create the name of the
-        function.  The function name will be Make<loop_name>Loop().
+  def ControllerFunction(self):
+    """Returns the name of the controller function."""
+    return 'Make%sController()' % self._name
+
+  def DumpControllerHeader(self):
+    """Writes out a c++ header declaration which will create a Controller object.
 
     Returns:
       string, The header declaration for the function.
@@ -154,16 +267,11 @@
     num_states = self.A.shape[0]
     num_inputs = self.B.shape[1]
     num_outputs = self.C.shape[0]
-    return "StateFeedbackLoop<%d, %d, %d> Make%sLoop();\n" % (
-        num_states, num_inputs, num_outputs, loop_name)
+    return 'StateFeedbackController<%d, %d, %d> %s;\n' % (
+        num_states, num_inputs, num_outputs, self.ControllerFunction())
 
-  def _DumpLoop(self, loop_name):
-    """Returns a c++ function which will create a Loop object.
-
-    Args:
-      loop_name: string, the name of the loop.  Used to create the name of the
-        function and create the plant.  The function name will be
-        Make<loop_name>Loop().
+  def DumpController(self):
+    """Returns a c++ function which will create a Controller object.
 
     Returns:
       string, The function which will create the object.
@@ -171,52 +279,14 @@
     num_states = self.A.shape[0]
     num_inputs = self.B.shape[1]
     num_outputs = self.C.shape[0]
-    ans = ["StateFeedbackLoop<%d, %d, %d> Make%sLoop() {\n" % (
-        num_states, num_inputs, num_outputs, loop_name)]
+    ans = ['StateFeedbackController<%d, %d, %d> %s {\n' % (
+        num_states, num_inputs, num_outputs, self.ControllerFunction())]
 
-    ans.append(self._DumpMatrix("L", self.L))
-    ans.append(self._DumpMatrix("K", self.K))
+    ans.append(self._DumpMatrix('L', self.L))
+    ans.append(self._DumpMatrix('K', self.K))
 
-    ans.append("  return StateFeedbackLoop<%d, %d, %d>"
-               "(L, K, Make%sPlant());\n" % (num_states, num_inputs,
-                                             num_outputs, loop_name))
-    ans.append("}\n")
-    return "".join(ans)
-
-  def DumpHeaderFile(self, file_name):
-    """Writes the header file for creating a Plant and Loop object.
-
-    Args:
-      file_name: string, name of the file to write the header file to.
-    """
-    with open(file_name, "w") as fd:
-      fd.write(self._header_start)
-      fd.write("#include \"frc971/control_loops/state_feedback_loop.h\"\n")
-      fd.write('\n')
-      fd.write(self._namespace_start)
-      fd.write(self._DumpPlantHeader(self._name))
-      fd.write('\n')
-      fd.write(self._DumpLoopHeader(self._name))
-      fd.write('\n')
-      fd.write(self._namespace_end)
-      fd.write('\n')
-      fd.write(self._header_end)
-
-  def DumpCppFile(self, file_name, header_file_name):
-    """Writes the C++ file for creating a Plant and Loop object.
-
-    Args:
-      file_name: string, name of the file to write the header file to.
-    """
-    with open(file_name, "w") as fd:
-      fd.write("#include \"frc971/control_loops/%s\"\n" % header_file_name)
-      fd.write('\n')
-      fd.write("#include \"frc971/control_loops/state_feedback_loop.h\"\n")
-      fd.write('\n')
-      fd.write(self._namespace_start)
-      fd.write('\n')
-      fd.write(self._DumpPlant(self._name))
-      fd.write('\n')
-      fd.write(self._DumpLoop(self._name))
-      fd.write('\n')
-      fd.write(self._namespace_end)
+    ans.append('  return StateFeedbackController<%d, %d, %d>'
+               '(L, K, Make%sPlantCoefficients());\n' % (num_states, num_inputs,
+                                             num_outputs, self._name))
+    ans.append('}\n')
+    return ''.join(ans)
diff --git a/frc971/control_loops/python/index.py b/frc971/control_loops/python/index.py
index c65397b..f165afe 100755
--- a/frc971/control_loops/python/index.py
+++ b/frc971/control_loops/python/index.py
@@ -6,8 +6,8 @@
 from matplotlib import pylab
 
 class Index(control_loop.ControlLoop):
-  def __init__(self):
-    super(Index, self).__init__("Index")
+  def __init__(self, J=0.00013, name="Index"):
+    super(Index, self).__init__(name)
     # Stall Torque in N m
     self.stall_torque = 0.4862
     # Stall Current in Amps
@@ -17,7 +17,7 @@
     # Free Current in Amps
     self.free_current = 1.5
     # Moment of inertia of the index in kg m^2
-    self.J = 0.00013
+    self.J = J
     # Resistance of the motor
     self.R = 12.0 / self.stall_current + 0.024 + .003
     # Motor velocity constant
@@ -43,7 +43,7 @@
     self.ContinuousToDiscrete(self.A_continuous, self.B_continuous,
                               self.dt, self.C)
 
-    self.PlaceControllerPoles([.5, .55])
+    self.PlaceControllerPoles([.40, .63])
 
     self.rpl = .05
     self.ipl = 0.008
@@ -80,15 +80,25 @@
   pylab.plot(range(100), close_loop_x)
   pylab.show()
 
+  # Set the constants for the number of discs that we expect to see.
+  # The c++ code expects that the index in the array will be the number of
+  # discs.
+  index0 = Index(0.00010, "Index0Disc")
+  index1 = Index(0.00013, "Index1Disc")
+  index2 = Index(0.00013, "Index2Disc")
+  index3 = Index(0.00018, "Index3Disc")
+  index4 = Index(0.00025, "Index4Disc")
+
   # Write the generated constants out to a file.
   if len(argv) != 3:
     print "Expected .h file name and .c file name"
   else:
+    loop_writer = control_loop.ControlLoopWriter(
+        "Index", [index0, index1, index2, index3, index4])
     if argv[1][-3:] == '.cc':
-      print '.cc file is second'
+      loop_writer.Write(argv[2], argv[1])
     else:
-      index.DumpHeaderFile(argv[1])
-      index.DumpCppFile(argv[2], argv[1])
+      loop_writer.Write(argv[1], argv[2])
 
 if __name__ == '__main__':
   sys.exit(main(sys.argv))
diff --git a/frc971/control_loops/python/shooter.py b/frc971/control_loops/python/shooter.py
index 25a6795..83beb90 100755
--- a/frc971/control_loops/python/shooter.py
+++ b/frc971/control_loops/python/shooter.py
@@ -17,7 +17,7 @@
     # Free Current in Amps
     self.free_current = 1.4
     # Moment of inertia of the shooter wheel in kg m^2
-    self.J = 0.0040
+    self.J = 0.0032
     # Resistance of the motor, divided by 2 to account for the 2 motors
     self.R = 12.0 / self.stall_current / 2
     # Motor velocity constant
@@ -129,11 +129,11 @@
   if len(argv) != 3:
     print "Expected .h file name and .cc file name"
   else:
+    loop_writer = control_loop.ControlLoopWriter("Shooter", [shooter])
     if argv[1][-3:] == '.cc':
-      print '.cc file is second'
+      loop_writer.Write(argv[2], argv[1])
     else:
-      shooter.DumpHeaderFile(argv[1])
-      shooter.DumpCppFile(argv[2], argv[1])
+      loop_writer.Write(argv[1], argv[2])
 
 
 if __name__ == '__main__':
diff --git a/frc971/control_loops/python/transfer.py b/frc971/control_loops/python/transfer.py
index 2ec7926..d7818a3 100755
--- a/frc971/control_loops/python/transfer.py
+++ b/frc971/control_loops/python/transfer.py
@@ -84,8 +84,11 @@
   if len(argv) != 3:
     print "Expected .cc file name and .h file name"
   else:
-    transfer.DumpHeaderFile(argv[1])
-    transfer.DumpCppFile(argv[2], argv[1])
+    loop_writer = control_loop.ControlLoopWriter("Transfer", [transfer])
+    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))
diff --git a/frc971/control_loops/python/wrist.py b/frc971/control_loops/python/wrist.py
index 6fc9c27..20f9c40 100755
--- a/frc971/control_loops/python/wrist.py
+++ b/frc971/control_loops/python/wrist.py
@@ -85,11 +85,11 @@
   if len(argv) != 3:
     print "Expected .h file name and .cc file name"
   else:
+    loop_writer = control_loop.ControlLoopWriter("Wrist", [wrist])
     if argv[1][-3:] == '.cc':
-      print '.cc file is second'
+      loop_writer.Write(argv[2], argv[1])
     else:
-      wrist.DumpHeaderFile(argv[1])
-      wrist.DumpCppFile(argv[2], argv[1])
+      loop_writer.Write(argv[1], argv[2])
 
 if __name__ == '__main__':
   sys.exit(main(sys.argv))
