diff --git a/frc971/control_loops/python/graph.py b/frc971/control_loops/python/graph.py
index 1b83713..456edd1 100644
--- a/frc971/control_loops/python/graph.py
+++ b/frc971/control_loops/python/graph.py
@@ -53,3 +53,5 @@
         # renumber the x-axis to include the last point,
         # the total time to drive the spline
         self.axis.xaxis.set_ticks(np.linspace(0, total_time, num=8))
+
+        self.queue_draw()
diff --git a/frc971/control_loops/python/path_edit.py b/frc971/control_loops/python/path_edit.py
index 3386bc6..c639379 100755
--- a/frc971/control_loops/python/path_edit.py
+++ b/frc971/control_loops/python/path_edit.py
@@ -223,8 +223,6 @@
 
         draw_px_cross(cr, self.mousex, self.mousey, 10)
         cr.restore()
-        if self.points.getLibsplines():
-            self.graph.recalculate_graph(self.points)
 
         print("spent {:.2f} ms drawing the field widget".format(1000 * (time.perf_counter() - start_time)))
 
@@ -249,18 +247,21 @@
     def mouse_move(self, event):
         old_x = self.mousex
         old_y = self.mousey
-        self.mousex = event.x
-        self.mousey = event.y
+        self.mousex, self.mousey = event.x, event.y
         dif_x = self.mousex - old_x
         dif_y = self.mousey - old_y
         difs = np.array([pxToM(dif_x), pxToM(dif_y)])
 
-        if self.mode == Mode.kEditing:
+        if self.mode == Mode.kEditing and self.spline_edit != -1:
             self.points.updates_for_mouse_move(self.index_of_edit,
                                                self.spline_edit,
                                                pxToM(self.mousex),
                                                pxToM(self.mousey), difs)
 
+            self.points.update_lib_spline()
+            self.graph.recalculate_graph(self.points)
+        self.queue_draw()
+
     def export_json(self, file_name):
         self.path_to_export = os.path.join(
             self.module_path,  # position of the python
@@ -310,7 +311,7 @@
         print("SPLINES LOADED")
         self.mode = Mode.kEditing
 
-    def key_press(self, event, file_name):
+    def key_press(self, event):
         keyval = Gdk.keyval_to_lower(event.keyval)
 
         # TODO: This should be a button
@@ -325,10 +326,10 @@
                 self.points.getSplines()[len(self.points.getSplines()) - 1][5],
                 self.points.getSplines()[len(self.points.getSplines()) - 1][4],
                 self.points.getSplines()[len(self.points.getSplines()) - 1][3])
+            self.queue_draw()
 
     def button_press(self, event):
-        self.mousex = event.x
-        self.mousey = event.y
+        self.mousex, self.mousey = event.x, event.y
 
         if self.mode == Mode.kPlacing:
             if self.points.add_point(
@@ -337,15 +338,7 @@
         elif self.mode == Mode.kEditing:
             # Now after index_of_edit is not -1, the point is selected, so
             # user can click for new point
-            if self.index_of_edit > -1 and self.held_x != self.mousex:
-                self.points.setSplines(self.spline_edit, self.index_of_edit,
-                                       pxToM(self.mousex), pxToM(self.mousey))
-
-                self.points.splineExtrapolate(self.spline_edit)
-
-                self.index_of_edit = -1
-                self.spline_edit = -1
-            else:
+            if self.index_of_edit == -1:
                 # Get clicked point
                 # Find nearest
                 # Move nearest to clicked
@@ -367,3 +360,21 @@
                             self.index_of_edit = index_of_closest
                             self.spline_edit = index_splines
                             self.held_x = self.mousex
+        self.queue_draw()
+
+    def button_release(self, event):
+        self.mousex, self.mousey = event.x, event.y
+        if self.mode == Mode.kEditing:
+            if self.index_of_edit > -1 and self.held_x != self.mousex:
+
+                self.points.setSplines(self.spline_edit, self.index_of_edit,
+                                       pxToM(self.mousex),
+                                       pxToM(self.mousey))
+
+                self.points.splineExtrapolate(self.spline_edit)
+
+                self.points.update_lib_spline()
+                self.graph.recalculate_graph(self.points)
+
+                self.index_of_edit = -1
+                self.spline_edit = -1
diff --git a/frc971/control_loops/python/spline_graph.py b/frc971/control_loops/python/spline_graph.py
index 1378e8f..f56b0d3 100755
--- a/frc971/control_loops/python/spline_graph.py
+++ b/frc971/control_loops/python/spline_graph.py
@@ -20,17 +20,6 @@
 
         self.connect(event, handler)
 
-    def mouse_move(self, event):
-        self.field.mouse_move(event)
-        self.queue_draw()
-
-    def button_press(self, event):
-        self.field.button_press(event)
-
-    def key_press(self, event):
-        self.field.key_press(event, self.file_name_box.get_text())
-        self.queue_draw()
-
     def configure(self, event):
         self.field.window_shape = (event.width, event.height)
 
@@ -77,6 +66,7 @@
 
         self.eventBox = Gtk.EventBox()
         self.eventBox.set_events(Gdk.EventMask.BUTTON_PRESS_MASK
+                                 | Gdk.EventMask.BUTTON_PRESS_MASK
                                  | Gdk.EventMask.BUTTON_RELEASE_MASK
                                  | Gdk.EventMask.POINTER_MOTION_MASK
                                  | Gdk.EventMask.SCROLL_MASK
@@ -85,10 +75,11 @@
         self.field = FieldWidget()
 
         self.method_connect("delete-event", basic_window.quit_main_loop)
-        self.method_connect("key-release-event", self.key_press)
-        self.method_connect("button-release-event", self.button_press)
+        self.method_connect("key-release-event", self.field.key_press)
+        self.method_connect("button-press-event", self.field.button_press)
+        self.method_connect("button-release-event", self.field.button_release)
         self.method_connect("configure-event", self.configure)
-        self.method_connect("motion_notify_event", self.mouse_move)
+        self.method_connect("motion_notify_event", self.field.mouse_move)
 
         self.file_name_box = Gtk.Entry()
         self.file_name_box.set_size_request(200, 40)
