diff --git a/Python_script/climate-lab-gui.py b/Python_script/climate-lab-gui.py
index 849d0fec2de2147523826b6b270ab0290bc939c1..7f96356bfa457f3e44ca1f8c884a093fe2945ebd 100755
--- a/Python_script/climate-lab-gui.py
+++ b/Python_script/climate-lab-gui.py
@@ -82,88 +82,108 @@ class TestStandMainWindow(QMainWindow):
         self.stopButton.setEnabled(True)
         self.qt_app.processEvents();
 
-        p = mp.Process(target=self.do_measurement_impl)
+        # get parameters for measurement from GUI
+        os.chdir(self.start_dir)
+
+        time_string = time.strftime("%Y_%m_%d-%H_%M_%S")
+        if self.autoNameCheckbox.isChecked():
+            output_basename = time_string + "_results"
+        else:
+            output_basename = self.baseName.text()
+
+        with open('test_stand_parameter.json', 'r') as f:
+            config_data = json.load(f)
+
+        with open('ext_sensor_channels.json', 'r') as f2:
+            ext_sensor_channels = json.load(f2)
+
+        if not self.check_and_change_dir(config_data['data_folder'] + '/' + output_basename):
+            return
+
+        if self.tempSweepButton.isChecked():
+            measurement_type = 'temperature'
+        elif self.humSweepButton.isChecked():
+            measurement_type = 'humidity'
+        elif self.measurementFileButton.isChecked():
+            measurement_type = 'file'
+
+        error_queue = mp.Queue(3)
+
+        p = mp.Process(target=TestStandMainWindow.do_measurement_impl,
+                       args=(measurement_type, self.startParameter.value(), self.stopParameter.value(),
+                             self.stepParameter.value(), self.fixedParameter.value(), self.soakingTime.value(),
+                             self.stableReads.value(), time_string, self.get_analysis_config(time_string),
+                             os.path.join(self.start_dir, self.measurementFile.text()), error_queue, config_data,
+                             ext_sensor_channels))
+
         p.start()
         while p.is_alive():
             time.sleep(0.1)
             self.qt_app.processEvents();
         p.join()
-        
+
+        while not error_queue.empty():
+            QtWidgets.QMessageBox.critical(self, 'Error', error_queue.get())
+
         self.runSettingsLayout.setEnabled(True)
         self.startButton.setEnabled(True)
         self.stopButton.setEnabled(False)
 
 
     #the part that is started in a separate process
-    def do_measurement_impl(self):
-        os.chdir(self.start_dir)
-        with open('test_stand_parameter.json', 'r') as f:
-            config_data = json.load(f)
-       
-        with open('ext_sensor_channels.json', 'r') as f2:
-            ext_sensor_channels = json.load(f2)
-
-        time_string = time.strftime("%Y_%m_%d-%H_%M_%S")
-        if self.autoNameCheckbox.isChecked():
-            output_basename = time_string + "_results"
-        else:
-            output_basename = self.baseName.text()
-
-        if not self.check_and_change_dir(config_data['data_folder'] + '/' + output_basename):
-            return
+    @staticmethod
+    def do_measurement_impl(measurement_type, output_basename, start_parameter, stop_parameter, step_parameter,
+                            fixed_parameter, soaking_time, stable_reads, analysis_config, measurement_file, error_queue,
+                            config_data, ext_sensor_channels):
 
         meas = None
         try:
             meas = prototype.Measurements(config_data, output_basename,False, ext_sensor_channels)
-            q = mp.Queue()
-            if self.tempSweepButton.isChecked():
-                temperatures = meas.perform_sweep(self.startParameter.value(), self.stopParameter.value(),
-                                                  self.stepParameter.value(), self.fixedParameter.value(),
-                                                  self.soakingTime.value(), self.stableReads.value(),
+            if measurement_type == 'temperature':
+                temperatures = meas.perform_sweep(start_parameter, stop_parameter, step_parameter, fixed_parameter,
+                                                  soaking_time, stable_reads,
                                                   'temperature')
                 temp_extensions = []
                 for t in temperatures:
-                    temp_extensions.append(str(t) + 'deg_' + str(self.fixedParameter.value()) + 'rh')
-                analysis.plot_sweep(temperatures, [self.fixedParameter.value()] * len(temperatures), output_basename,
+                    temp_extensions.append(str(t) + 'deg_' + str(fixed_parameter) + 'rh')
+                analysis.plot_sweep(temperatures, [fixed_parameter] * len(temperatures), output_basename,
                                     'temperature', meas.dut.get_measurement_set_names(),
-                                    meas.dut.get_dut_reference_signal_names(), self.get_analysis_config(time_string))
-                
+                                    meas.dut.get_dut_reference_signal_names(), analysis_config)
+
                 prototype.plot_output(output_basename, temp_extensions, True, config_data, ext_sensor_channels,
                                       meas.dut.get_measurement_set_names(), meas.dut.get_dut_reference_signal_names(),
                                       output_basename + ': Temperature sweep ' + str(temperatures[0]) + '--' +
-                                      str(temperatures[-1]) + ' degC @ ' + str(self.fixedParameter.value()) + ' % r.h.')
+                                      str(temperatures[-1]) + ' degC @ ' + str(fixed_parameter) + ' % r.h.')
 
-            elif self.humSweepButton.isChecked():
-                humidities = meas.perform_sweep(self.startParameter.value(), self.stopParameter.value(),
-                                                self.stepParameter.value(), self.fixedParameter.value(),
-                                                self.soakingTime.value(), self.stableReads.value(),
-                                                'humidity')
+            elif measurement_type == 'humidity':
+                humidities = meas.perform_sweep(start_parameter, stop_parameter, step_parameter, fixed_parameter,
+                                                soaking_time.value(), stable_reads, 'humidity')
                 hum_extensions = []
                 for h in humidities:
-                    hum_extensions.append(str(self.fixedParameter.value()) + 'deg_' + str(h) + 'rh')
-                analysis.plot_sweep([self.fixedParameter.value()] * len(humidities), humidities, output_basename,
+                    hum_extensions.append(str(fixed_parameter) + 'deg_' + str(h) + 'rh')
+                analysis.plot_sweep([fixed_parameter] * len(humidities), humidities, output_basename,
                                     'humidity', meas.dut.get_measurement_set_names(),
-                                    meas.dut.get_dut_reference_signal_names(), self.get_analysis_config(time_string))
-                                
+                                    meas.dut.get_dut_reference_signal_names(), analysis_config)
+
                 prototype.plot_output(output_basename, hum_extensions, True, config_data, ext_sensor_channels,
                                       meas.dut.get_measurement_set_names(), meas.dut.get_dut_reference_signal_names(),
                                       output_basename + ': Humidity sweep ' + str(humidities[0]) + '--' +
-                                      str(humidities[-1]) + ' % r.h. @ ' + str(self.fixedParameter.value()) + ' degC')
+                                      str(humidities[-1]) + ' % r.h. @ ' + str(fixed_parameter) + ' degC')
 
-            elif self.measurementFileButton.isChecked():
+            elif measurement_type == 'file':
                 try:
-                    n_measurements = meas.perform_measurements(os.path.join(self.start_dir,
-                                                                            self.measurementFile.text()))
-                    prototype.plot_output(output_basename, range(n_measurements), True, config_data, ext_sensor_channels,
+                    n_measurements = meas.perform_measurements(measurement_file)
+                    prototype.plot_output(output_basename, range(n_measurements), True, config_data,
+                                          ext_sensor_channels,
                                           meas.dut.get_measurement_set_names(),
                                           meas.dut.get_dut_reference_signal_names(),
                                           output_basename)
                 except FileNotFoundError as e:
-                    QtWidgets.QMessageBox.warning(self, 'Warning', str(e))
+                    error_queue.put(str(e))
 
         except Exception as e:
             print('ERROR: Exception during measurement: '+str(e))
-            QtWidgets.QMessageBox.critical(self, 'Error', str(e))
+            error_queue.put(str(e))
 
         finally:
             if meas is not None: