diff --git a/frc971/control_loops/python/claw.py b/frc971/control_loops/python/claw.py
index 5c275be..c8e6424 100755
--- a/frc971/control_loops/python/claw.py
+++ b/frc971/control_loops/python/claw.py
@@ -261,38 +261,6 @@
 
     self.InitializeState()
 
-
-def FullSeparationPriority(claw, U):
-  bottom_u = U[0, 0]
-  top_u = U[1, 0]
-
-  if bottom_u > claw.U_max[0, 0]:
-    top_u -= bottom_u - claw.U_max[0, 0]
-    if top_u < claw.U_min[1, 0]:
-      top_u = claw.U_min[1, 0]
-
-    bottom_u = claw.U_max[0, 0]
-  if top_u > claw.U_max[1, 0]:
-    bottom_u -= top_u - claw.U_max[1, 0]
-    if bottom_u < claw.U_min[0, 0]:
-      bottom_u = claw.U_min[0, 0]
-
-    top_u = claw.U_max[1, 0]
-  if top_u < claw.U_min[1, 0]:
-    bottom_u -= top_u - claw.U_min[1, 0]
-    if bottom_u > claw.U_max[0, 0]:
-      bottom_u = claw.U_max[0, 0]
-
-    top_u = claw.U_min[1, 0]
-  if bottom_u < claw.U_min[0, 0]:
-    top_u -= bottom_u - claw.U_min[0, 0]
-    if top_u > claw.U_max[1, 0]:
-      top_u = claw.U_max[1, 0]
-
-    bottom_u = claw.U_min[0, 0]
-
-  return numpy.matrix([[bottom_u], [top_u]])
-
 def ScaleU(claw, U, K, error):
   """Clips U as necessary.
 
@@ -391,73 +359,6 @@
 
   return numpy.matrix([[bottom_u], [top_u]])
 
-def AverageUFix(claw, U, preserve_v3=False):
-  """Clips U as necessary.
-
-    Args:
-      claw: claw object containing moments of inertia and U limits.
-      U: Input matrix to clip as necessary.
-      preserve_v3: There are two ways to attempt to clip the voltages:
-        -If you preserve the imaginary v3, then it will attempt to
-          preserve the effect on the separation of the two claws.
-          If it is not able to do this, then it calls itself with preserve_v3
-          set to False.
-        -If you preserve the ratio of the voltage of the bottom and the top,
-          then it will attempt to preserve the ratio of those two. This is
-          equivalent to preserving the ratio of v3 and the bottom voltage.
-  """
-  bottom_u = U[0, 0]
-  top_u = U[1, 0]
-  seperation_u = top_u - bottom_u * claw.J_top / claw.J_bottom
-
-  bottom_bad = bottom_u > claw.U_max[0, 0] or bottom_u < claw.U_min[0, 0]
-  top_bad = top_u > claw.U_max[0, 0] or top_u < claw.U_min[0, 0]
-
-  scalar = claw.U_max[0, 0] / max(numpy.abs(top_u), numpy.abs(bottom_u))
-  if bottom_bad and preserve_v3:
-    bottom_u *= scalar
-    top_u = seperation_u + bottom_u * claw.J_top / claw.J_bottom
-    if abs(top_u) > claw.U_max[0, 0]:
-      return AverageUFix(claw, U, preserve_v3=False)
-  elif top_bad and preserve_v3:
-    top_u *= scalar
-    bottom_u = (top_u - seperation_u) * claw.J_bottom / claw.J_top
-    if abs(bottom_u) > claw.U_max[0, 0]:
-      return AverageUFix(claw, U, preserve_v3=False)
-  elif (bottom_bad or top_bad) and not preserve_v3:
-    top_u *= scalar
-    bottom_u *= scalar
-    print "Scaling"
-
-  return numpy.matrix([[bottom_u], [top_u]])
-
-def ClipDeltaU(claw, U):
-  delta_u = U[0, 0]
-  top_u = U[1, 0]
-  old_bottom_u = claw.X[4, 0]
-
-  # TODO(austin): Preserve the difference between the top and bottom power.
-  new_unclipped_bottom_u = old_bottom_u + delta_u
-
-  #print "Bottom is", new_unclipped_bottom_u, "Top is", top_u
-  if new_unclipped_bottom_u > claw.U_max[0, 0]:
-    top_u -= new_unclipped_bottom_u - claw.U_max[0, 0]
-    new_unclipped_bottom_u = claw.U_max[0, 0]
-  if top_u > claw.U_max[1, 0]:
-    new_unclipped_bottom_u -= top_u - claw.U_max[1, 0]
-    top_u = claw.U_max[1, 0]
-  if top_u < claw.U_min[1, 0]:
-    new_unclipped_bottom_u -= top_u - claw.U_min[1, 0]
-    top_u = claw.U_min[1, 0]
-  if new_unclipped_bottom_u < claw.U_min[0, 0]:
-    top_u -= new_unclipped_bottom_u - claw.U_min[0, 0]
-    new_unclipped_bottom_u = claw.U_min[0, 0]
-
-  new_bottom_u = numpy.clip(new_unclipped_bottom_u, claw.U_min[0, 0], claw.U_max[0, 0])
-  new_top_u = numpy.clip(top_u, claw.U_min[1, 0], claw.U_max[1, 0])
-
-  return numpy.matrix([[new_bottom_u - old_bottom_u], [new_top_u]])
-
 def run_test(claw, initial_X, goal, max_separation_error=0.01, show_graph=False, iterations=200):
   """Runs the claw plant on a given claw (claw) with an initial condition (initial_X) and goal (goal).
 
diff --git a/frc971/control_loops/python/libcdd.py b/frc971/control_loops/python/libcdd.py
index 6305aaf..6b81a4f 100644
--- a/frc971/control_loops/python/libcdd.py
+++ b/frc971/control_loops/python/libcdd.py
@@ -5,6 +5,7 @@
 __author__ = 'Austin Schuh (austin.linux@gmail.com)'
 
 import ctypes
+import sys
 
 # Wrapper around PyFile_AsFile so that we can print out the error messages.
 # Set the arg type and return types of the function call.
