diff --git a/config.py b/config.py
index ad391ca92cd33b96ee0938f5f85cabad45e41f8c..10e75f243bdfc744abc0813c1d467b39d220f531 100644
--- a/config.py
+++ b/config.py
@@ -22,7 +22,8 @@ OHMPI_CONFIG = {
     'max_elec': 64,
     'board_addresses': {'A': 0x73, 'B': 0x72, 'M': 0x71, 'N': 0x70},  # CHECK IF YOUR BOARDS HAVE THESE ADDRESSES
     'settings': 'ohmpi_settings.json',  # INSERT YOUR FAVORITE SETTINGS FILE HERE
-    'board_version': '22.10'
+    'board_version': '22.10',
+    'mux_board_version': '2023.0.0'
 }  # TODO: add a dictionary with INA models and associated gain values
 
 # SET THE LOGGING LEVELS, MQTT BROKERS AND MQTT OPTIONS ACCORDING TO YOUR NEEDS
diff --git a/ohmpi.py b/ohmpi.py
index 6c008c9eb4f9d87a704e7600120ce19fc2000176..4cb7f48d0d983633a8123b08f93ef89ec48b455e 100644
--- a/ohmpi.py
+++ b/ohmpi.py
@@ -635,6 +635,7 @@ class OhmPi(object):
         self.max_elec = OHMPI_CONFIG['max_elec']  # maximum number of electrodes
         self.board_addresses = OHMPI_CONFIG['board_addresses']
         self.board_version = OHMPI_CONFIG['board_version']
+        self.mux_board_version = OHMPI_CONFIG['mux_board_version']
         self.exec_logger.debug(f'OHMPI_CONFIG = {str(OHMPI_CONFIG)}')
 
     def read_quad(self, **kwargs):
@@ -1208,7 +1209,7 @@ class OhmPi(object):
                                          ' Set use_mux to True to use the multiplexer...')
         elif self.sequence is None:
             self.exec_logger.warning('Unable to switch MUX without a sequence')
-        else:
+        elif self.mux_board_version == '2023.0.0':
             # choose with MUX board
             tca = adafruit_tca9548a.TCA9548A(self.i2c, self.board_addresses[role])
 
@@ -1232,6 +1233,34 @@ class OhmPi(object):
             else:
                 self.exec_logger.warning(f'Unable to address electrode nr {electrode_nr}')
 
+        elif self.mux_board_version == '2024.0.0':
+            with open(self.mux_addressing_table, 'r') as myfile:
+                header = myfile.readlines()[0].strip('\n').split(',')
+            mux_addressing_table = np.genfromtxt(self.mux_addressing_table, dtype=str,
+                                                   delimiter=',', skip_header=1, )
+            mux_addressing_table = {header[k]: mux_addressing_table.T[k] for k in range(len(header))}
+
+            def set_relay_state(mcp, mcp_pin, state=True):
+                pin_enable = mcp.get_pin(mcp_pin)
+                pin_enable.direction = Direction.OUTPUT
+                pin_enable.value = state
+
+            idx = np.where((mux_addressing_table['Electrode_id'] == electrode_nr) & (mux_addressing_table['Role'] == role))[0]
+            tca_addr = mux_addressing_table['TCA_address'][idx][0]
+            tca_channel = mux_addressing_table['TCA_channel'][idx][0]
+            if tca_addr is None:
+                tca = self.i2c
+            else:
+                tca = adafruit_tca9548a.TCA9548A(self.i2c, self.board_addresses[role])
+            tca = adafruit_tca9548a.TCA9548A(self.i2c, hex(int(tca_addr,16)))[tca_channel]
+            mcp_addr = hex(int(mux_addressing_table['MCP_address'][idx][0], 16))
+            MCP23017(tca, address=mcp_addr)
+            if state == 'on'
+                set_relay_state(mcp_addr, , True)
+
+        else:
+            self.exec_logger.warning('MUX board version not recognized')
+
     def switch_mux_on(self, quadrupole, cmd_id=None):
         """Switches on multiplexer relays for given quadrupole.