diff --git a/frc971/control_loops/python/path_edit.py b/frc971/control_loops/python/path_edit.py
index 437b242..0a944e1 100755
--- a/frc971/control_loops/python/path_edit.py
+++ b/frc971/control_loops/python/path_edit.py
@@ -47,6 +47,7 @@
         # add default spline for testing purposes
         # init editing / viewing modes and pointer location
         self.mode = Mode.kPlacing
+        self.previous_mode = Mode.kPlacing
         self.mousex = 0
         self.lastx = 0
         self.mousey = 0
@@ -192,6 +193,9 @@
             for multispline in self.multisplines:
                 for i, point in enumerate(multispline.staged_points):
                     draw_px_x(cr, point[0], point[1], self.pxToM(2))
+            if len(self.multisplines) != 0 and self.multisplines[0].getSplines(
+            ):  #still in testing
+                self.draw_splines(cr)
         elif self.mode == Mode.kEditing:
             if len(self.multisplines) != 0 and self.multisplines[0].getSplines(
             ):
@@ -479,6 +483,11 @@
                 self.active_multispline_index = self.multisplines.index(
                     multispline)
 
+        elif self.mode == Mode.kViewing:
+
+            if self.control_point_index == None:
+                self.drag_start = (event.x, event.y)
+
         self.queue_draw()
 
     def do_motion_notify_event(self, event):
@@ -496,12 +505,13 @@
             multispline.update_lib_spline()
             self.graph.schedule_recalculate(self.multisplines)
 
-        if self.mode == Mode.kEditing and self.drag_start != None and self.control_point_index == None:
+        if self.drag_start != None and self.control_point_index == None:
+            if self.mode == Mode.kEditing or self.mode == Mode.kViewing:
 
-            self.zoom_transform.translate(event.x - self.lastx,
-                                          event.y - self.lasty)
-            self.lastx = event.x
-            self.lasty = event.y
+                self.zoom_transform.translate(event.x - self.lastx,
+                                              event.y - self.lasty)
+                self.lastx = event.x
+                self.lasty = event.y
 
         self.queue_draw()
 
diff --git a/frc971/control_loops/python/spline_graph.py b/frc971/control_loops/python/spline_graph.py
index dc64dfa..fbe43bf 100755
--- a/frc971/control_loops/python/spline_graph.py
+++ b/frc971/control_loops/python/spline_graph.py
@@ -4,6 +4,7 @@
 import matplotlib
 import gi
 from path_edit import FieldWidget
+from path_edit import Mode  # still being tested
 from basic_window import RunApp
 from constants import FIELDS, FIELD, SCREEN_SIZE
 
@@ -26,6 +27,21 @@
     def clear_clicked(self, button):
         self.field.clear()
 
+    def toggle_view_clicked(self, button):
+        temp_variable = self.field.mode
+
+        if self.field.mode != Mode.kViewing:
+            self.field.mode = Mode.kViewing
+            Gtk.Button.set_label(self.toggle_view, "Switch to Editing Mode")
+
+        else:
+            self.field.mode = self.field.previous_mode
+            if self.field.mode == Mode.kEditing:
+                Gtk.Button.set_label(self.toggle_view,
+                                     "Switch to Viewing Mode")
+
+        self.field.previous_mode = temp_variable
+
     def output_json_clicked(self, button):
         self.field.export_json(self.file_name_box.get_text())
 
@@ -155,7 +171,12 @@
         self.clear = Gtk.Button.new_with_label("Clear")
         self.clear.set_size_request(50, 40)
         self.clear.connect("clicked", self.clear_clicked)
+        #-----------currently being edited-----------#
 
+        self.toggle_view = Gtk.Button.new_with_label("Switch to Viewing Mode")
+        self.toggle_view.set_size_request(100, 40)
+        self.toggle_view.connect("clicked", self.toggle_view_clicked)
+        #--------------------------------------------#
         self.undo = Gtk.Button.new_with_label("Undo (Ctrl + Z)")
         self.undo.set_size_request(50, 40)
         self.undo.connect("clicked", self.undo_func)
@@ -204,11 +225,12 @@
         container.attach(limitControls, 5, 1, 1, 1)
 
         jsonControls = Gtk.FlowBox()
-        jsonControls.set_min_children_per_line(7)
+        jsonControls.set_min_children_per_line(8)
         jsonControls.add(self.file_name_box)
         jsonControls.add(self.output_json)
         jsonControls.add(self.input_json)
         jsonControls.add(self.clear)
+        jsonControls.add(self.toggle_view)  #----------------in progress
         jsonControls.add(self.undo)
         jsonControls.add(self.new_spline)
         jsonControls.add(self.new_multispline)
