diff --git a/y2017/control_loops/python/column.py b/y2017/control_loops/python/column.py
index e94c227..d6043b3 100755
--- a/y2017/control_loops/python/column.py
+++ b/y2017/control_loops/python/column.py
@@ -57,7 +57,7 @@
         self.A_continuous, self.B_continuous, self.dt)
 
     q_indexer_vel = 13.0
-    q_pos = 0.04
+    q_pos = 0.05
     q_vel = 0.8
     self.Q = numpy.matrix([[(1.0 / (q_indexer_vel ** 2.0)), 0.0, 0.0],
                            [0.0, (1.0 / (q_pos ** 2.0)), 0.0],
@@ -176,9 +176,9 @@
     self.Kff = numpy.matrix(numpy.zeros((2, 6)))
     self.Kff[:, 0:4] = orig_Kff
 
-    q_pos = 0.12
+    q_pos = 0.40
     q_vel = 2.00
-    q_voltage = 4.0
+    q_voltage = 8.0
     if voltage_error_noise is not None:
       q_voltage = voltage_error_noise
 
diff --git a/y2017/control_loops/python/hood.py b/y2017/control_loops/python/hood.py
index d42620a..6c7c2d0 100755
--- a/y2017/control_loops/python/hood.py
+++ b/y2017/control_loops/python/hood.py
@@ -57,7 +57,7 @@
 
     # Moment of inertia, measured in CAD.
     # Extra mass to compensate for friction is added on.
-    self.J = 0.08 + 1.1 + \
+    self.J = 0.08 + 2.3 + \
              self.big_gear_inertia * ((self.G1 / self.G) ** 2) + \
              self.big_gear_inertia * ((self.G2 / self.G) ** 2) + \
              self.motor_inertia * ((1.0 / self.G) ** 2.0)
@@ -94,8 +94,8 @@
     glog.debug(repr(self.A_continuous))
 
     # Calculate the LQR controller gain
-    q_pos = 0.006
-    q_vel = 0.30
+    q_pos = 0.015
+    q_vel = 0.40
     self.Q = numpy.matrix([[(1.0 / (q_pos ** 2.0)), 0.0],
                            [0.0, (1.0 / (q_vel ** 2.0))]])
 
diff --git a/y2017/control_loops/python/shooter.py b/y2017/control_loops/python/shooter.py
index 1a4f910..5aef754 100755
--- a/y2017/control_loops/python/shooter.py
+++ b/y2017/control_loops/python/shooter.py
@@ -20,7 +20,6 @@
   pylab.plot(time, numpy.subtract(list1, list2), label='diff')
   pylab.legend()
 
-
 class VelocityShooter(control_loop.HybridControlLoop):
   def __init__(self, name='VelocityShooter'):
     super(VelocityShooter, self).__init__(name)
@@ -39,7 +38,7 @@
     # Moment of inertia of the shooter wheel in kg m^2
     # 1400.6 grams/cm^2
     # 1.407 *1e-4 kg m^2
-    self.J = 0.00120
+    self.J = 0.00100
     # Resistance of the motor, divided by 2 to account for the 2 motors
     self.R = 12.0 / self.stall_current
     # Motor velocity constant
@@ -93,8 +92,8 @@
 
     self.A_continuous = numpy.matrix(numpy.zeros((2, 2)))
     self.A_continuous[0:1, 0:1] = self.A_continuous_unaugmented
-    self.A_continuous[1, 0] = 105.0
-    self.A_continuous[1, 1] = -105.0
+    self.A_continuous[1, 0] = 225.0
+    self.A_continuous[1, 1] = -self.A_continuous[1, 0]
 
     self.B_continuous = numpy.matrix(numpy.zeros((2, 1)))
     self.B_continuous[0:1, 0] = self.B_continuous_unaugmented
@@ -102,10 +101,19 @@
     self.C = numpy.matrix([[0, 1]])
     self.D = numpy.matrix([[0]])
 
+    # The states are [unfiltered_velocity, velocity]
     self.A, self.B = self.ContinuousToDiscrete(
         self.A_continuous, self.B_continuous, self.dt)
 
-    self.PlaceControllerPoles([.75, 0.75])
+    self.PlaceControllerPoles([.70, 0.60])
+
+    q_vel = 40.0
+    q_filteredvel = 30.0
+    self.Q = numpy.matrix([[(1.0 / (q_vel ** 2.0)), 0.0],
+                           [0.0, (1.0 / (q_filteredvel ** 2.0))]])
+
+    self.R = numpy.matrix([[(1.0 / (3.0 ** 2.0))]])
+    self.K = controls.dlqr(self.A, self.B, self.Q, self.R)
 
     glog.debug('K %s', repr(self.K))
     glog.debug('System poles are %s',
@@ -195,11 +203,12 @@
     glog.debug('A_dt(A): \n%s', repr(self.A))
 
     q_pos = 0.01
-    q_vel = 2.0
-    q_voltage = 0.3
+    q_vel = 4.0
+    q_velfilt = 1.5
+    q_voltage = 2.0
     self.Q_continuous = numpy.matrix([[(q_pos ** 2.0), 0.0, 0.0, 0.0],
                                       [0.0, (q_vel ** 2.0), 0.0, 0.0],
-                                      [0.0, 0.0, (q_vel ** 2.0), 0.0],
+                                      [0.0, 0.0, (q_velfilt ** 2.0), 0.0],
                                       [0.0, 0.0, 0.0, (q_voltage ** 2.0)]])
 
     r_pos = 0.0003
@@ -261,6 +270,7 @@
     else:
       initial_t = 0
 
+    last_U = numpy.matrix([[0.0]])
     for i in xrange(iterations):
       X_hat = shooter.X
 
@@ -290,16 +300,17 @@
           observer_shooter.CorrectObserver(U)
         self.offset.append(observer_shooter.X_hat[3, 0])
 
-      applied_U = U.copy()
-      if i > 30:
+      applied_U = last_U.copy()
+      if i > 60:
         applied_U += 2
       shooter.Update(applied_U)
 
       if observer_shooter is not None:
         if hybrid_obs:
-          observer_shooter.PredictHybridObserver(U, shooter.dt)
+          observer_shooter.PredictHybridObserver(last_U, shooter.dt)
         else:
-          observer_shooter.PredictObserver(U)
+          observer_shooter.PredictObserver(last_U)
+      last_U = U.copy()
 
 
       self.t.append(initial_t + i * shooter.dt)
@@ -328,17 +339,10 @@
   scenario_plotter = ScenarioPlotter()
 
   if FLAGS.plot:
-    shooter = Shooter()
-    shooter_controller = IntegralShooter()
-    observer_shooter = IntegralShooter()
     iterations = 200
 
     initial_X = numpy.matrix([[0.0], [0.0], [0.0]])
     R = numpy.matrix([[0.0], [100.0], [100.0], [0.0]])
-    scenario_plotter.run_test(shooter, goal=R, controller_shooter=shooter_controller,
-                              observer_shooter=observer_shooter, iterations=iterations)
-
-    scenario_plotter.Plot()
 
     scenario_plotter_int = ScenarioPlotter()
 
@@ -351,8 +355,6 @@
       hybrid_obs = True)
 
     scenario_plotter_int.Plot()
-    PlotDiff(scenario_plotter.x_hat, scenario_plotter_int.x_hat,
-      scenario_plotter.t)
 
     pylab.show()
 
diff --git a/y2017/control_loops/python/turret.py b/y2017/control_loops/python/turret.py
index edd5b53..d64fceb 100755
--- a/y2017/control_loops/python/turret.py
+++ b/y2017/control_loops/python/turret.py
@@ -46,7 +46,7 @@
     # Moment of inertia, measured in CAD.
     # Extra mass to compensate for friction is added on.
     self.J = 0.06 + self.motor_inertia * ((1.0 / self.G) ** 2.0)
-    glog.info('Turret J is: %f', self.J)
+    glog.debug('Turret J is: %f', self.J)
 
     # Control loop time step
     self.dt = 0.005
