diff --git a/dstatInterface/dstat_comm.py b/dstatInterface/dstat_comm.py
index 562b0dc128052ac593cfbce2d228d869a534d492..1f8105338f9693fc9b2d78182aac2c54f3051040 100644
--- a/dstatInterface/dstat_comm.py
+++ b/dstatInterface/dstat_comm.py
@@ -99,9 +99,10 @@ class Experiment:
 
         self.data_postprocessing()
         
-        self.plot.updateline(self, 0)
-        self.plot.redraw()
-
+#        self.plot.updateline(self, 0)
+#        self.plot.redraw()
+        print "pipe closed"
+        self.main_pipe.close()
         self.ser.close()
         
     def data_handler(self):
@@ -115,15 +116,21 @@ class Experiment:
         
         while True:
             try:
-                    voltage, current = struct.unpack('<Hl', recv_p.recv()) #uint16 + int32
+                if self.main_pipe.poll():
+                    if self.main_pipe.recv() == 'a':
+                        self.ser.write('a')
+                        return
+                
+                voltage, current = struct.unpack('<Hl', recv_p.recv()) #uint16 + int32
+                #(line, [data])
+                self.main_pipe.send((0, [(voltage-32768)*3000./65536, current*(1.5/self.gain/8388607)]))
+#                    self.data[0].append((voltage-32768)*3000./65536)
+#                    self.data[1].append(current*(1.5/self.gain/8388607))
+#                    if ((time.time() - updatetime) > .2):
+#                        self.plot.updateline(self, 0)
+#                        self.plot.redraw()
+#                        updatetime = float(time.time())
 
-                    self.data[0].append((voltage-32768)*3000./65536)
-                    self.data[1].append(current*(1.5/self.gain/8388607))
-                    if ((time.time() - updatetime) > .2):
-                        self.plot.updateline(self, 0)
-                        self.plot.redraw()
-                        updatetime = float(time.time())
-            
             except EOFError:
                 print "empty"
                 break
@@ -187,7 +194,8 @@ class chronoamp(Experiment):
             break
 
 class lsv_exp(Experiment):
-    def __init__(self, parameters, view_parameters, plot_instance, databuffer_instance):
+    def __init__(self, parameters, view_parameters, plot_instance, databuffer_instance, send_pipe):
+        self.main_pipe = send_pipe
         self.parameters = parameters
         self.view_parameters = view_parameters
         self.plot = plot_instance
diff --git a/dstatInterface/interface/dstatInterface.glade b/dstatInterface/interface/dstatInterface.glade
index c476d8fc2939556f9d74018fc37d968c12e3b495..01ebc18238b1793e9fd2f20bef743a550ef64545 100644
--- a/dstatInterface/interface/dstatInterface.glade
+++ b/dstatInterface/interface/dstatInterface.glade
@@ -375,6 +375,7 @@
                         <property name="can_focus">True</property>
                         <property name="receives_default">True</property>
                         <property name="use_stock">True</property>
+                        <signal name="clicked" handler="on_pot_stop_clicked" swapped="no"/>
                       </object>
                       <packing>
                         <property name="expand">True</property>
diff --git a/dstatInterface/interface_test.py b/dstatInterface/interface_test.py
index e16ed93081d1f07982b50faaf5d52e2f838a4679..31926e10c63aa6d69b3d479fd19e5663b0e1d3e8 100644
--- a/dstatInterface/interface_test.py
+++ b/dstatInterface/interface_test.py
@@ -240,8 +240,20 @@ class main:
                 if parameters['start'] == parameters['stop']:
                     raise InputError(parameters['start'],"Start cannot equal Stop.")
             
-                self.current_exp = comm.lsv_exp(parameters, view_parameters, self.plot, self.rawbuffer)
-                self.current_exp.run(self.serial_liststore.get_value(self.serial_combobox.get_active_iter(), 0))
+
+#                self.current_exp.run(self.serial_liststore.get_value(self.serial_combobox.get_active_iter(), 0))
+                self.line = 0
+                self.recv_p, self.send_p = multiprocessing.Pipe(duplex=True)
+
+                self.current_exp = comm.lsv_exp(parameters, view_parameters, self.plot, self.rawbuffer, self.send_p)
+                
+                self.p = multiprocessing.Process(target=self.current_exp.run, args=(self.serial_liststore.get_value(self.serial_combobox.get_active_iter(), 0), ))
+                self.p.start()
+                
+                self.send_p.close()
+
+                self.plot_proc = gobject.timeout_add(200, self.experiment_running_plot)
+                gobject.idle_add(self.experiment_running)
             
             elif selection == 2: #CV
                 parameters['clean_mV'] = int(self.cv.clean_mV.get_text())
@@ -340,17 +352,38 @@ class main:
         except AssertionError as e:
             self.spinner.stop()
             self.statusbar.push(self.error_context_id, str(e))
+
+    def experiment_running(self):
+        try:
+            if self.recv_p.poll():
+                self.line, data = self.recv_p.recv()
+                print self.line, data
+                for i in range(len(data)):
+                    self.current_exp.data[self.line+i].append(data[i])
+            return True
+        except EOFError:
+            self.experiment_done()
+            return False
+            
+    def experiment_running_plot(self):
+        self.plot.updateline(self.current_exp, self.line)
+        self.plot.redraw()
+        return True
+
+    def experiment_done(self):
+        gobject.source_remove(self.plot_proc) #stop automatic plot update
+        self.experiment_running_plot() #make sure all data updated on plot
         
         self.databuffer.set_text("")
         self.databuffer.place_cursor(self.databuffer.get_start_iter())
         self.rawbuffer.set_text("")
         self.rawbuffer.place_cursor(self.rawbuffer.get_start_iter())
-
+        
         for col in zip(*self.current_exp.data):
             for row in col:
                 self.rawbuffer.insert_at_cursor(str(row)+ "\t")
             self.rawbuffer.insert_at_cursor("\n")
-
+        
         
         if self.current_exp.data_extra:
             for col in zip(*self.current_exp.data_extra):
@@ -360,7 +393,12 @@ class main:
         
         
         self.spinner.stop()
-
+    
+    def on_pot_stop_clicked(self, data=None):
+        if self.recv_p:
+            print "stop"
+            self.recv_p.send('a')
+    
     def on_file_save_exp_activate(self, menuitem, data=None):
         if self.current_exp:
             self.save = save.npSave(self.current_exp)
diff --git a/dstatInterface/mpltest.py b/dstatInterface/mpltest.py
index 516d8032dc57a5c5397d4444a0879752d21bd26e..ea8bc7585a474746f87782ce287df979f53d0beb 100644
--- a/dstatInterface/mpltest.py
+++ b/dstatInterface/mpltest.py
@@ -61,4 +61,6 @@ class plotbox:
         self.axe1.relim()
         self.axe1.autoscale(True, axis = 'y')
         self.figure.canvas.draw()
+
+        return True