diff --git a/ohmpi.py b/ohmpi.py
index 6aa95ac827ef4e07971768f23906a0f6390c29b6..939560562b93e3dea841f7e897b9271680cbc804 100644
--- a/ohmpi.py
+++ b/ohmpi.py
@@ -546,69 +546,72 @@ class OhmPi(object):
         self.run = True
         self.status = 'running'
 
-        # make sure all mux are off to start with
-        self.reset_mux()
+        if self.on_pi:
+            # make sure all mux are off to start with
+            self.reset_mux()
 
-        # measure all quad of the RS sequence
-        for i in range(0, quads.shape[0]):
-            quad = quads[i, :]  # quadrupole
+            # measure all quad of the RS sequence
+            for i in range(0, quads.shape[0]):
+                quad = quads[i, :]  # quadrupole
 
-            # NOTE (GB): I'd use the self.run_measurement() for all this middle part so we an make use of autogain and so ...
-            # call the switch_mux function to switch to the right electrodes
-            # self.switch_mux_on(quad)
+                # NOTE (GB): I'd use the self.run_measurement() for all this middle part so we an make use of autogain and so ...
+                # call the switch_mux function to switch to the right electrodes
+                # self.switch_mux_on(quad)
 
-            # run a measurement
-            # current_measurement = self.run_measurement(quad, 1, 0.25)
+                # run a measurement
+                # current_measurement = self.run_measurement(quad, 1, 0.25)
 
-            # switch mux off
-            # self.switch_mux_off(quad)
+                # switch mux off
+                # self.switch_mux_off(quad)
 
-            self.switch_mux_on(quad)
+                self.switch_mux_on(quad)
 
-            # current injection
-            pin0 = self.mcp.get_pin(0)
-            pin0.direction = Direction.OUTPUT
-            pin1 = self.mcp.get_pin(1)
-            pin1.direction = Direction.OUTPUT
-            pin0.value = False
-            pin1.value = False
+                # current injection
+                pin0 = self.mcp.get_pin(0)
+                pin0.direction = Direction.OUTPUT
+                pin1 = self.mcp.get_pin(1)
+                pin1.direction = Direction.OUTPUT
+                pin0.value = False
+                pin1.value = False
 
-            # call the switch_mux function to switch to the right electrodes
-            self.ads_current = ads.ADS1115(self.i2c, gain=2 / 3, data_rate=860, address=0x48)
-            # ADS1115 for voltage measurement (MN)
-            self.ads_voltage = ads.ADS1115(self.i2c, gain=2 / 3, data_rate=860, address=0x49)
-            pin1.value = True  # inject from pin1 to pin0
-            pin0.value = False
-            time.sleep(0.2)
-
-            # measure current and voltage
-            current = AnalogIn(self.ads_current, ads.P0).voltage / (50 * self.r_shunt)
-            voltage = -AnalogIn(self.ads_voltage, ads.P0, ads.P1).voltage * 2.5
-            # compute resistance measured (= contact resistance)
-            resistance = np.abs(voltage / current)
-            msg = f'Contact resistance {str(quad):s}: I: {current * 1000.:>10.3f} mA, V: {voltage * 1000.:>10.3f} mV, ' \
-                  f'R: {resistance /1000.:>10.3f} kOhm'
-
-            self.exec_logger.debug(msg)
-
-            # if contact resistance = 0 -> we have a short circuit!!
-            if resistance < 1e-2:
-                msg = f'!!!SHORT CIRCUIT!!! {str(quad):s}: {resistance / 1000.:.3f} kOhm'
-                self.exec_logger.warning(msg)
-
-            # save data and print in a text file
-            self.append_and_save(export_path_rs, {
-                'A': quad[0],
-                'B': quad[1],
-                'RS [kOhm]': resistance / 1000.,
-            })
-
-            # close mux path and put pin back to GND
-            self.switch_mux_off(quad)
-            pin0.value = False
-            pin1.value = False
+                # call the switch_mux function to switch to the right electrodes
+                self.ads_current = ads.ADS1115(self.i2c, gain=2 / 3, data_rate=860, address=0x48)
+                # ADS1115 for voltage measurement (MN)
+                self.ads_voltage = ads.ADS1115(self.i2c, gain=2 / 3, data_rate=860, address=0x49)
+                pin1.value = True  # inject from pin1 to pin0
+                pin0.value = False
+                time.sleep(0.2)
+
+                # measure current and voltage
+                current = AnalogIn(self.ads_current, ads.P0).voltage / (50 * self.r_shunt)
+                voltage = -AnalogIn(self.ads_voltage, ads.P0, ads.P1).voltage * 2.5
+                # compute resistance measured (= contact resistance)
+                resistance = np.abs(voltage / current)
+                msg = f'Contact resistance {str(quad):s}: I: {current * 1000.:>10.3f} mA, V: {voltage * 1000.:>10.3f} mV, ' \
+                      f'R: {resistance /1000.:>10.3f} kOhm'
+
+                self.exec_logger.debug(msg)
+
+                # if contact resistance = 0 -> we have a short circuit!!
+                if resistance < 1e-2:
+                    msg = f'!!!SHORT CIRCUIT!!! {str(quad):s}: {resistance / 1000.:.3f} kOhm'
+                    self.exec_logger.warning(msg)
+
+                # save data and print in a text file
+                self.append_and_save(export_path_rs, {
+                    'A': quad[0],
+                    'B': quad[1],
+                    'RS [kOhm]': resistance / 1000.,
+                })
+
+                # close mux path and put pin back to GND
+                self.switch_mux_off(quad)
+                pin0.value = False
+                pin1.value = False
 
-        self.reset_mux()
+            self.reset_mux()
+        else:
+            pass
         self.status = 'idle'
         self.run = False
 
@@ -652,61 +655,62 @@ class OhmPi(object):
                       f' Make sure your client interface is running and bound to this port...', 'blue'))
         self.exec_logger.debug(f'Start listening for commands on port {tcp_port}')
         while self.cmd_listen:
-            message = socket.recv()
-            self.exec_logger.debug(f'Received command: {message}')
-            e = None
             try:
-                cmd_id = None
-                decoded_message = json.loads(message.decode('utf-8'))
-                cmd_id = decoded_message.pop('cmd_id', None)
-                cmd = decoded_message.pop('cmd', None)
-                args = decoded_message.pop('args', None)
-                status = False
+                message = socket.recv(flags=zmq.NOBLOCK)
+                self.exec_logger.debug(f'Received command: {message}')
                 e = None
-                if cmd is not None and cmd_id is not None:
-                    if cmd == 'update_settings' and args is not None:
-                        self._update_acquisition_settings(args)
-                    elif cmd == 'start':
-                        self.measure(cmd_id)
-                        while not self.status == 'idle':
-                            time.sleep(0.1)
-                        status = True
-                    elif cmd == 'stop':
-                        self.stop()
-                        status = True
-                    elif cmd == 'read_sequence':
-                        try:
-                            self.read_quad(args)
-                            status = True
-                        except Exception as e:
-                            self.exec_logger.warning(f'Unable to read sequence: {e}')
-                    elif cmd == 'set_sequence':
-                        try:
-                            self.sequence = np.array(args)
+                try:
+                    cmd_id = None
+                    decoded_message = json.loads(message.decode('utf-8'))
+                    cmd_id = decoded_message.pop('cmd_id', None)
+                    cmd = decoded_message.pop('cmd', None)
+                    args = decoded_message.pop('args', None)
+                    status = False
+                    e = None
+                    if cmd is not None and cmd_id is not None:
+                        if cmd == 'update_settings' and args is not None:
+                            self._update_acquisition_settings(args)
+                        elif cmd == 'start':
+                            self.measure(cmd_id)
+                            while not self.status == 'idle':
+                                time.sleep(0.1)
                             status = True
-                        except Exception as e:
-                            self.exec_logger.warning(f'Unable to set sequence: {e}')
-                    elif cmd == 'rs_check':
-                        try:
-                            self.rs_check()
+                        elif cmd == 'stop':
+                            self.stop()
                             status = True
-                        except Exception as e:
-                            print('error====', e)
-                            self.exec_logger.warning(f'Unable to run rs-check: {e}')
-                    else:
-                        self.exec_logger.warning(f'Unkown command {cmd} - cmd_id: {cmd_id}')
-            except Exception as e:
-                self.exec_logger.warning(f'Unable to decode command {message}: {e}')
-                status = False
-            finally:
-                reply = {'cmd_id': cmd_id, 'status': status}
-                reply = json.dumps(reply)
-                self.exec_logger.debug(f'Execution report: {reply}')
-                self.exec_logger.debug(reply)
-                reply = bytes(reply, 'utf-8')
-                socket.send(reply)
-            #  Do some 'work'
-            time.sleep(.1)
+                        elif cmd == 'read_sequence':
+                            try:
+                                self.read_quad(args)
+                                status = True
+                            except Exception as e:
+                                self.exec_logger.warning(f'Unable to read sequence: {e}')
+                        elif cmd == 'set_sequence':
+                            try:
+                                self.sequence = np.array(args)
+                                status = True
+                            except Exception as e:
+                                self.exec_logger.warning(f'Unable to set sequence: {e}')
+                        elif cmd == 'rs_check':
+                            try:
+                                self.rs_check()
+                                status = True
+                            except Exception as e:
+                                print('error====', e)
+                                self.exec_logger.warning(f'Unable to run rs-check: {e}')
+                        else:
+                            self.exec_logger.warning(f'Unkown command {cmd} - cmd_id: {cmd_id}')
+                except Exception as e:
+                    self.exec_logger.warning(f'Unable to decode command {message}: {e}')
+                    status = False
+                finally:
+                    reply = {'cmd_id': cmd_id, 'status': status}
+                    reply = json.dumps(reply)
+                    self.exec_logger.debug(f'Execution report: {reply}')
+                    self.exec_logger.debug(reply)
+                    reply = bytes(reply, 'utf-8')
+                    socket.send(reply)
+            except zmq.Again:
+                time.sleep(.1)
 
     def measure(self, cmd_id=None):
         """Run the sequence in a separate thread. Can be stopped by 'OhmPi.stop()'.