diff --git a/y2014/control_loops/python/BUILD b/y2014/control_loops/python/BUILD
index 6536f93..21406e3 100644
--- a/y2014/control_loops/python/BUILD
+++ b/y2014/control_loops/python/BUILD
@@ -10,7 +10,7 @@
   ],
 )
 
-py_library(
+py_binary(
   name = 'polydrivetrain',
   srcs = [
     'polydrivetrain.py',
@@ -21,13 +21,24 @@
   ],
 )
 
+py_library(
+  name = 'polydrivetrain_lib',
+  srcs = [
+    'polydrivetrain.py',
+    'drivetrain.py',
+  ],
+  deps = [
+    '//frc971/control_loops/python:controls',
+  ],
+)
+
 py_binary(
   name = 'claw',
   srcs = [
     'claw.py',
   ],
   deps = [
-    ':polydrivetrain',
+    ':polydrivetrain_lib',
     '//frc971/control_loops/python:controls',
   ]
 )
diff --git a/y2014/control_loops/python/claw.py b/y2014/control_loops/python/claw.py
index f1fcae3..6808ce6 100755
--- a/y2014/control_loops/python/claw.py
+++ b/y2014/control_loops/python/claw.py
@@ -484,6 +484,8 @@
                                                  namespaces=namespaces)
     loop_writer.AddConstant(control_loop.Constant("kClawMomentOfInertiaRatio",
       "%f", claw.J_top / claw.J_bottom))
+    loop_writer.AddConstant(control_loop.Constant("kDt", "%f",
+          claw.dt))
     if argv[1][-3:] == '.cc':
       loop_writer.Write(argv[2], argv[1])
     else:
diff --git a/y2014/control_loops/python/drivetrain.py b/y2014/control_loops/python/drivetrain.py
index 1372c25..b94a501 100755
--- a/y2014/control_loops/python/drivetrain.py
+++ b/y2014/control_loops/python/drivetrain.py
@@ -295,6 +295,8 @@
         "Drivetrain", [drivetrain_low_low, drivetrain_low_high,
                        drivetrain_high_low, drivetrain_high_high],
         namespaces = namespaces)
+    dog_loop_writer.AddConstant(control_loop.Constant("kDt", "%f",
+          drivetrain_low_low.dt))
     if argv[1][-3:] == '.cc':
       dog_loop_writer.Write(argv[2], argv[1])
     else:
diff --git a/y2014/control_loops/python/polydrivetrain.py b/y2014/control_loops/python/polydrivetrain.py
index b066c75..3dafd21 100755
--- a/y2014/control_loops/python/polydrivetrain.py
+++ b/y2014/control_loops/python/polydrivetrain.py
@@ -397,14 +397,16 @@
 def main(argv):
   vdrivetrain = VelocityDrivetrain()
 
-  if len(argv) != 7:
+  if len(argv) != 5:
     print "Expected .h file name and .cc file name"
   else:
+    namespaces = ['y2014', 'control_loops', 'drivetrain']
     dog_loop_writer = control_loop.ControlLoopWriter(
         "VelocityDrivetrain", [vdrivetrain.drivetrain_low_low,
                        vdrivetrain.drivetrain_low_high,
                        vdrivetrain.drivetrain_high_low,
-                       vdrivetrain.drivetrain_high_high])
+                       vdrivetrain.drivetrain_high_high],
+                       namespaces=namespaces)
 
     if argv[1][-3:] == '.cc':
       dog_loop_writer.Write(argv[2], argv[1])
@@ -414,10 +416,10 @@
     cim_writer = control_loop.ControlLoopWriter(
         "CIM", [drivetrain.CIM()])
 
-    if argv[5][-3:] == '.cc':
-      cim_writer.Write(argv[6], argv[5])
+    if argv[3][-3:] == '.cc':
+      cim_writer.Write(argv[4], argv[3])
     else:
-      cim_writer.Write(argv[5], argv[6])
+      cim_writer.Write(argv[3], argv[4])
     return
 
   vl_plot = []
diff --git a/y2014/control_loops/python/shooter.py b/y2014/control_loops/python/shooter.py
index cfb7e35..7324b18 100755
--- a/y2014/control_loops/python/shooter.py
+++ b/y2014/control_loops/python/shooter.py
@@ -7,7 +7,7 @@
 from matplotlib import pylab
 
 class SprungShooter(control_loop.ControlLoop):
-  def __init__(self, name="RawSprungShooter"):
+  def __init__(self, name="RawSprungShooter", verbose=False):
     super(SprungShooter, self).__init__(name)
     # Stall Torque in N m
     self.stall_torque = .4982
@@ -68,7 +68,7 @@
 
 
 class Shooter(SprungShooter):
-  def __init__(self, name="RawShooter"):
+  def __init__(self, name="RawShooter", verbose=False):
     super(Shooter, self).__init__(name)
 
     # State feedback matrices
@@ -96,7 +96,7 @@
 
 
 class SprungShooterDeltaU(SprungShooter):
-  def __init__(self, name="SprungShooter"):
+  def __init__(self, name="SprungShooter", verbose=False):
     super(SprungShooterDeltaU, self).__init__(name)
     A_unaugmented = self.A
     B_unaugmented = self.B
@@ -116,17 +116,19 @@
 
     self.PlaceControllerPoles([0.50, 0.35, 0.80])
 
-    print "K"
-    print self.K
-    print "Placed controller poles are"
-    print numpy.linalg.eig(self.A - self.B * self.K)[0]
+    if verbose:
+      print "K"
+      print self.K
+      print "Placed controller poles are"
+      print numpy.linalg.eig(self.A - self.B * self.K)[0]
 
     self.rpl = .05
     self.ipl = 0.008
     self.PlaceObserverPoles([self.rpl + 1j * self.ipl,
                              self.rpl - 1j * self.ipl, 0.90])
-    print "Placed observer poles are"
-    print numpy.linalg.eig(self.A - self.L * self.C)[0]
+    if verbose:
+      print "Placed observer poles are"
+      print numpy.linalg.eig(self.A - self.L * self.C)[0]
 
     self.U_max = numpy.matrix([[12.0]])
     self.U_min = numpy.matrix([[-12.0]])
@@ -135,7 +137,7 @@
 
 
 class ShooterDeltaU(Shooter):
-  def __init__(self, name="Shooter"):
+  def __init__(self, name="Shooter", verbose=False):
     super(ShooterDeltaU, self).__init__(name)
     A_unaugmented = self.A
     B_unaugmented = self.B
@@ -155,17 +157,19 @@
 
     self.PlaceControllerPoles([0.55, 0.45, 0.80])
 
-    print "K"
-    print self.K
-    print "Placed controller poles are"
-    print numpy.linalg.eig(self.A - self.B * self.K)[0]
+    if verbose:
+      print "K"
+      print self.K
+      print "Placed controller poles are"
+      print numpy.linalg.eig(self.A - self.B * self.K)[0]
 
     self.rpl = .05
     self.ipl = 0.008
     self.PlaceObserverPoles([self.rpl + 1j * self.ipl,
                              self.rpl - 1j * self.ipl, 0.90])
-    print "Placed observer poles are"
-    print numpy.linalg.eig(self.A - self.L * self.C)[0]
+    if verbose:
+      print "Placed observer poles are"
+      print numpy.linalg.eig(self.A - self.L * self.C)[0]
 
     self.U_max = numpy.matrix([[12.0]])
     self.U_min = numpy.matrix([[-12.0]])
@@ -189,8 +193,8 @@
   args = parser.parse_args(argv[1:])
 
   # Simulate the response of the system to a goal.
-  sprung_shooter = SprungShooterDeltaU()
-  raw_sprung_shooter = SprungShooter()
+  sprung_shooter = SprungShooterDeltaU(verbose=args.plot)
+  raw_sprung_shooter = SprungShooter(verbose=args.plot)
   close_loop_x = []
   close_loop_u = []
   goal_position = -0.3
@@ -214,8 +218,8 @@
     pylab.plot(range(500), close_loop_u)
     pylab.show()
 
-  shooter = ShooterDeltaU()
-  raw_shooter = Shooter()
+  shooter = ShooterDeltaU(verbose=args.plot)
+  raw_shooter = Shooter(verbose=args.plot)
   close_loop_x = []
   close_loop_u = []
   goal_position = -0.3
@@ -237,8 +241,8 @@
     pylab.show()
 
   # Write the generated constants out to a file.
-  unaug_sprung_shooter = SprungShooter("RawSprungShooter")
-  unaug_shooter = Shooter("RawShooter")
+  unaug_sprung_shooter = SprungShooter("RawSprungShooter", verbose=args.plot)
+  unaug_shooter = Shooter("RawShooter", verbose=args.plot)
   namespaces = ['y2014', 'control_loops', 'shooter']
   unaug_loop_writer = control_loop.ControlLoopWriter("RawShooter",
                                                      [unaug_sprung_shooter,
@@ -247,8 +251,8 @@
   unaug_loop_writer.Write(args.unaugmented_shooterh,
                           args.unaugmented_shootercc)
 
-  sprung_shooter = SprungShooterDeltaU()
-  shooter = ShooterDeltaU()
+  sprung_shooter = SprungShooterDeltaU(verbose=args.plot)
+  shooter = ShooterDeltaU(verbose=args.plot)
   loop_writer = control_loop.ControlLoopWriter("Shooter",
                                                [sprung_shooter, shooter],
                                                namespaces=namespaces)
@@ -257,6 +261,8 @@
                                                   sprung_shooter.max_extension))
   loop_writer.AddConstant(control_loop.Constant("kSpringConstant", "%f",
                                                   sprung_shooter.Ks))
+  loop_writer.AddConstant(control_loop.Constant("kDt", "%f",
+                                                sprung_shooter.dt))
   loop_writer.Write(args.shooterh, args.shootercc)
 
 if __name__ == '__main__':
