diff --git a/frc971/control_loops/python/points.py b/frc971/control_loops/python/points.py
index f42410f..c22582e 100644
--- a/frc971/control_loops/python/points.py
+++ b/frc971/control_loops/python/points.py
@@ -36,6 +36,11 @@
                 constraint["value"] = value
                 break
 
+    def getConstraint(self, id):
+        for constraint in self.constraints:
+            if constraint["constraint_type"] == id:
+                return constraint["value"]
+
     def addConstraintsToTrajectory(self, trajectory):
         for constraint in self.constraints:
             if constraint["constraint_type"] == "VOLTAGE":
diff --git a/frc971/control_loops/python/spline_graph.py b/frc971/control_loops/python/spline_graph.py
index 86dd001..73f0460 100755
--- a/frc971/control_loops/python/spline_graph.py
+++ b/frc971/control_loops/python/spline_graph.py
@@ -51,18 +51,29 @@
     def input_json_clicked(self, button):
         print("INPUT JSON CLICKED")
         self.drawing_area.import_json(self.file_name_box.get_text())
+        self.long_input.set_value(
+            self.drawing_area.points.getConstraint(
+                "LONGITUDINAL_ACCELERATION"))
+        self.lat_input.set_value(
+            self.drawing_area.points.getConstraint("LATERAL_ACCELERATION"))
+        self.vol_input.set_value(
+            self.drawing_area.points.getConstraint("VOLTAGE"))
 
     def long_changed(self, button):
-        print("LONGITUDAL VELOCITY CHANGED")
+        value = self.long_input.get_value()
+        self.drawing_area.points.setConstraint("LONGITUDINAL_ACCELERATION",
+                                               value)
 
     def lat_changed(self, button):
-        print("LATITUDAL VELOCITY CHANGED")
+        value = self.lat_input.get_value()
+        self.drawing_area.points.setConstraint("LATERAL_ACCELERATION", value)
 
-    def accel_changed(self, button):
-        print("ACCELERATION CHANGED")
+    def vel_changed(self, button):
+        value = self.vel_input.get_value()
 
     def vol_changed(self, button):
-        print("VOLTAGE CHANGED")
+        value = self.vol_input.get_value()
+        self.drawing_area.points.setConstraint("VOLTAGE", value)
 
     def __init__(self):
         Gtk.Window.__init__(self)
@@ -110,44 +121,59 @@
         self.long_input = Gtk.SpinButton()
         self.long_input.set_size_request(100, 20)
         self.long_input.set_numeric(True)
-        self.long_input.set_range(-100, 100)
+        self.long_input.set_range(0, 5)
+        self.long_input.set_digits(3)
+        self.long_input.set_increments(0.1, 100)
         self.long_input.connect("value-changed", self.long_changed)
         self.long_label = Gtk.Label()
-        self.long_label.set_text("Longitudal Velocity Restriction")
+        self.long_label.set_text("Longitudinal Acceleration Restriction")
+        self.long_input.set_value(
+            self.drawing_area.points.getConstraint(
+                "LONGITUDINAL_ACCELERATION"))
 
         self.lat_input = Gtk.SpinButton()
         self.lat_input.set_size_request(100, 20)
         self.lat_input.set_numeric(True)
-        self.lat_input.set_range(-100, 100)
+        self.lat_input.set_range(0, 5)
+        self.lat_input.set_digits(3)
+        self.lat_input.set_increments(0.1, 100)
         self.lat_input.connect("value-changed", self.lat_changed)
         self.lat_label = Gtk.Label()
-        self.lat_label.set_text("Latitudal Velocity Restriction")
+        self.lat_label.set_text("Lateral Acceleration Restriction")
+        self.lat_input.set_value(
+            self.drawing_area.points.getConstraint("LATERAL_ACCELERATION"))
 
-        self.accel_input = Gtk.SpinButton()
-        self.accel_input.set_size_request(100, 20)
-        self.accel_input.set_numeric(True)
-        self.accel_input.set_range(-100, 100)
-        self.accel_input.connect("value-changed", self.accel_changed)
-
-        self.accel_label = Gtk.Label()
-        self.accel_label.set_text("Acceleration Restriction")
+        self.vel_input = Gtk.SpinButton()
+        self.vel_input.set_size_request(100, 20)
+        self.vel_input.set_numeric(True)
+        self.vel_input.set_range(0, 10)
+        self.vel_input.set_digits(3)
+        self.vel_input.set_increments(0.1, 100)
+        self.vel_input.connect("value-changed", self.vel_changed)
+        self.vel_label = Gtk.Label()
+        self.vel_label.set_text(
+            "Velocity Restriction"
+        )  #note: the velocity restrictions are not yet working, they need to be hooked up later
 
         self.vol_input = Gtk.SpinButton()
         self.vol_input.set_size_request(100, 20)
         self.vol_input.set_numeric(True)
-        self.vol_input.set_range(-12, 12)
+        self.vol_input.set_range(0, 12)
+        self.vol_input.set_digits(3)
+        self.vol_input.set_increments(0.1, 100)
         self.vol_input.connect("value-changed", self.vol_changed)
-
         self.vol_label = Gtk.Label()
         self.vol_label.set_text("Voltage Restriction")
+        self.vol_input.set_value(
+            self.drawing_area.points.getConstraint("VOLTAGE"))
 
         container.put(self.long_input, 0, 60)
         container.put(self.lat_input, 0, 110)
-        container.put(self.accel_input, 0, 160)
+        container.put(self.vel_input, 0, 160)
         container.put(self.vol_input, 0, 210)
         container.put(self.long_label, 0, 40)
         container.put(self.lat_label, 0, 90)
-        container.put(self.accel_label, 0, 140)
+        container.put(self.vel_label, 0, 140)
         container.put(self.vol_label, 0, 190)
 
         self.output_json = Gtk.Button.new_with_label("Output")
