diff --git a/hardware_components/abstract_hardware_components.py b/hardware_components/abstract_hardware_components.py
index 63c39ef0db7613b44863a9fd5ec9c639e119ee37..da34d4d824bd0b4f062b06ebe0975fedb1f60ab8 100644
--- a/hardware_components/abstract_hardware_components.py
+++ b/hardware_components/abstract_hardware_components.py
@@ -62,10 +62,6 @@ class MuxAbstract(ABC):
     def _get_addresses(self):
         pass
 
-    @abstractmethod
-    def reset(self):
-        pass
-
     @property
     def barrier(self):
         return self._barrier
@@ -78,6 +74,7 @@ class MuxAbstract(ABC):
     @abstractmethod
     def reset(self):
         pass
+
     def switch(self, elec_dict=None, state='on'): # TODO: generalize for other roles
         """Switch a given list of electrodes with different roles.
         Electrodes with a value of 0 will be ignored.
diff --git a/hardware_system.py b/hardware_system.py
index 7852284d46f8b7254bb4056250013c7a3772665d..fe1e0170e898f1ed1c2d11676abf1e9e11f63c69 100644
--- a/hardware_system.py
+++ b/hardware_system.py
@@ -281,14 +281,20 @@ class OhmPiHardware:
         if len(electrodes) == len(roles):
             # TODO: Check that we don't set incompatible roles to the same electrode
             elec_dict = {i: [] for i in roles}
-            for i in range(len(electrodes)):
-                elec_dict[roles[i]].append(electrodes[i])
             mux_workers = []
-            for _, mux in self.mux_boards.items():
-                # start a new thread to perform some work
-                mux_workers.append(Thread(target=mux.switch, kwargs={'elec_dict': elec_dict}))
-            for mux_worker in mux_workers:
-                mux_worker.start()
+            for idx, elec in enumerate(electrodes):
+                elec_dict[roles[idx]].append(elec)
+                mux = self._cabling[(elec, roles[idx])][0]
+                if mux not in mux_workers:
+                    mux_workers.append(mux)
+            mux_workers = list(set(mux_workers))
+            b = Barrier(len(mux_workers)+1)
+            self.mux_barrier = b
+            for idx, mux in enumerate(mux_workers):
+                # Create a new thread to perform some work
+                self.mux_boards[mux].barrier = b
+                mux_workers[idx] = Thread(target=self.mux_boards[mux].switch, kwargs={'elec_dict': elec_dict})
+                mux_workers[idx].start()
             self.mux_barrier.wait()
             for mux_worker in mux_workers:
                 mux_worker.join()