diff --git a/configs/config_mb_2024_0_2__2_mux_2024_dps5005.py b/configs/config_mb_2024_0_2__2_mux_2024_dps5005.py
index 222888d78791de2d191eb30d14ef50d383be2010..5ed78807197a7a77ba134e9f4a46aa679724dd5c 100644
--- a/configs/config_mb_2024_0_2__2_mux_2024_dps5005.py
+++ b/configs/config_mb_2024_0_2__2_mux_2024_dps5005.py
@@ -34,25 +34,23 @@ HARDWARE_CONFIG = {
     'mux': {'boards':
                 {'mux_02':
                      {'model': 'mux_2024_0_X',
+                      'roles': ['A', 'B', 'M', 'N'],
+                      'electrodes': range(1, 9),
                       'tca_address': None,
                       'tca_channel': 0,
                       'addr2': 'up',
-                      'addr1': 'up',
-                      'roles': {'A': 'X', 'B': 'Y', 'M': 'XX', 'N': 'YY'},
-                      'cabling': {(i+0, j): ('mux_02', i) for j in ['A', 'B', 'M', 'N'] for i in range(1, 9)},
-                      'voltage_max': 12.},
+                      'addr1': 'up'},
                  'mux_05':
                      {'model': 'mux_2024_0_X',
+                      'roles': ['A', 'B', 'M', 'N'],
+                      'electrodes': range(9, 17),
                       'tca_address': None,
                       'tca_channel': 0,
-                      'addr2': 'up',
-                      'addr1': 'down',
-                      'roles': {'A': 'X', 'B': 'Y', 'M': 'XX', 'N': 'YY'},
-                      'cabling': {(i+8, j): ('mux_05', i) for j in ['A', 'B', 'M', 'N'] for i in range(1, 9)},
-                      'voltage_max': 12.}
+                      'addr2': 'down',
+                      'addr1': 'down'}
                  },
              'default': {'interface_name': 'i2c_ext',
-                         'voltage_max': 100.,
+                         'voltage_max': 50.,
                          'current_max': 3.}
             }
     }
diff --git a/configs/config_mb_2024_0_2__8_mux_2023_dps5005.py b/configs/config_mb_2024_0_2__8_mux_2023_dps5005.py
index 7e05a44ba03e804486adf12d5b16b23dfd9df134..eef3c3daa16f33434f33836d6c244b949d2037b4 100644
--- a/configs/config_mb_2024_0_2__8_mux_2023_dps5005.py
+++ b/configs/config_mb_2024_0_2__8_mux_2023_dps5005.py
@@ -35,54 +35,50 @@ HARDWARE_CONFIG = {
                 {'mux_A':
                      {'model': 'mux_2023_0_X',
                       'mux_tca_address': 0x70,
-                      'roles': {'A': 'X'},
-                      'cabling': {(i, j): ('mux_A', i) for j in ['A'] for i in range(1, 65)},
-                      'voltage_max': 12.},
+                      'roles': 'A',
+                      'electrodes': range(1, 65)},
                  'mux_B':
                      {'model': 'mux_2023_0_X',
                       'mux_tca_address': 0x71,
-                      'roles': {'B': 'X'},
-                      'cabling': {(i, j): ('mux_B', i) for j in ['B'] for i in range(1, 65)},
-                      'voltage_max': 12.},
+                      'roles': 'B',
+                      'electrodes': range(1,65)},
                  'mux_M':
                      {'model': 'mux_2023_0_X',
                       'mux_tca_address': 0x72,
-                      'roles': {'M': 'X'},
-                      'cabling': {(i, j): ('mux_M', i) for j in ['M'] for i in range(1, 65)},
-                      'voltage_max': 12.},
+                      'roles': 'M',
+                      'electrodes': range(1, 65)},
                  'mux_N':
                      {'model': 'mux_2023_0_X',
                       'mux_tca_address': 0x73,
-                      'roles': {'N': 'X'},
-                      'cabling': {(i, j): ('mux_N', i) for j in ['N'] for i in range(1, 65)},
-                      'voltage_max': 12.},
+                      'roles': 'N',
+                      'electrodes': range(1,65),
+                      # 'cabling': {(i, j): ('mux_N', i) for j in ['N'] for i in range(1, 65)},
+                      },
                  'mux_A2':
                      {'model': 'mux_2023_0_X',
                       'mux_tca_address': 0x74,
-                      'roles': {'A': 'X'},
-                      'cabling': {(i+64, j): ('mux_A2', i) for j in ['A'] for i in range(1, 65)},
-                      'voltage_max': 12.},
+                      'roles': 'A',
+                      'electrodes': range(65, 129)},
                  'mux_B2':
                      {'model': 'mux_2023_0_X',
                       'mux_tca_address': 0x75,
-                      'roles': {'B': 'X'},
-                      'cabling': {(i+64, j): ('mux_B2', i) for j in ['B'] for i in range(1, 65)},
-                      'voltage_max': 12.},
+                      'roles': 'B',
+                      'electrodes': range(65,129)},
                  'mux_M2':
                      {'model': 'mux_2023_0_X',
                       'mux_tca_address': 0x76,
-                      'roles': {'M': 'X'},
-                      'cabling': {(i+64, j): ('mux_M2', i) for j in ['M'] for i in range(1, 65)},
-                      'voltage_max': 12.},
+                      'roles': 'M',
+                      'electrodes': range(65,129)},
                  'mux_N2':
                      {'model': 'mux_2023_0_X',
                       'mux_tca_address': 0x77,
-                      'roles': {'N': 'X'},
-                      'cabling': {(i+64, j): ('mux_N2', i) for j in ['N'] for i in range(1, 65)},
-                      'voltage_max': 12.},
+                      'roles': 'N',
+                      'electrodes': range(65,129),
+                      #'cabling': {(i+64, j): ('mux_N2', i) for j in ['N'] for i in range(1, 65)},
+                      },
                  },
              'default': {'interface_name': 'i2c_ext',
-                         'voltage_max': 100.,
+                         'voltage_max': 50.,
                          'current_max': 3.}
             }
     }
diff --git a/ohmpi/hardware_components/mux_2023_0_X.py b/ohmpi/hardware_components/mux_2023_0_X.py
index 1e88aef3f757bf1dafd718243fa602694bc72e6f..df4bd14d4770ef98f85c8406ef917a297dbb3a45 100644
--- a/ohmpi/hardware_components/mux_2023_0_X.py
+++ b/ohmpi/hardware_components/mux_2023_0_X.py
@@ -73,14 +73,27 @@ class Mux(MuxAbstract):
             self.exec_logger.event(f'{self.model}: {self.board_id}\tmux_init\tbegin\t{datetime.datetime.utcnow()}')
         assert isinstance(self.connection, I2C)
         self.exec_logger.debug(f'configuration: {kwargs}')
-        self._roles = kwargs.pop('roles', None)
-        if self._roles is None:
-            self._roles = {'A': 'X'}  # NOTE: defaults to 1-role
+        roles = kwargs.pop('roles', None)
+        if isinstance(roles, str):
+            roles = [roles]
+        if roles is None:
+            roles = ['A'] # NOTE: defaults to 1-role
+        else:
+            self._roles = {roles[0]:'X'}
         if np.alltrue([j in self._roles.values() for j in set([i[1] for i in list(inner_cabling['1_role'].keys())])]):
             self._mode = '1_role'
         else:
             self.exec_logger.error(f'Invalid role assignment for {self.model}: {self._roles} !')
             self._mode = ''
+        cabling = kwargs.pop('cabling', None)
+        electrodes = kwargs.pop('electrodes', None)
+        self.cabling = {}
+        if cabling is None:
+            self.cabling = {(e, r): (i + 1, r) for r in roles for i, e in enumerate(electrodes)}
+        else:
+            for k, v in cabling.items():
+                if v[0] == self.board_id:
+                    self.cabling.update({k: (v[1], k[1])})
         self._tca = [adafruit_tca9548a.TCA9548A(self.connection, kwargs['mux_tca_address'])[i] for i in np.arange(7, 3, -1)]
         # self._mcp_addresses = (kwargs.pop('mcp', '0x20'))  # TODO: add assert on valid addresses..
         self._mcp = [None, None, None, None]
diff --git a/ohmpi/hardware_components/mux_2024_0_X.py b/ohmpi/hardware_components/mux_2024_0_X.py
index 9334bb032b00518b450fb29598773437feeeb992..1da3a6cf8caedb5730d2421817163d2a56ed3bb6 100644
--- a/ohmpi/hardware_components/mux_2024_0_X.py
+++ b/ohmpi/hardware_components/mux_2024_0_X.py
@@ -69,9 +69,12 @@ class Mux(MuxAbstract):
             self.exec_logger.event(f'{self.model}: {self.board_id}\tmux_init\tbegin\t{datetime.datetime.utcnow()}')
         assert isinstance(self.connection, I2C)
         self.exec_logger.debug(f'configuration: {kwargs}')
-        self._roles = kwargs.pop('roles', None)
-        if self._roles is None:
-            self._roles = {'A': 'X', 'B': 'Y', 'M': 'XX', 'N': 'YY'}  # NOTE: defaults to 4-roles
+        roles = kwargs.pop('roles', None)
+        if roles is None:
+            roles = ['A', 'B', 'M', 'N'] # NOTE: defaults to 4-roles
+        else:
+            roles_board = ['X', 'Y', 'XX', 'YY']
+            self._roles = {roles[i]: roles_board[i] for i in range(len(roles))}
         if np.all([j in self._roles.values() for j in set([i[1] for i in list(inner_cabling['4_roles'].keys())])]):
             self._mode = '4_roles'
         elif np.all([j in self._roles.values() for j in set([i[1] for i in list(inner_cabling['2_roles'].keys())])]):
@@ -79,7 +82,15 @@ class Mux(MuxAbstract):
         else:
             self.exec_logger.error(f'Invalid role assignment for {self.model}: {self._roles} !')
             self._mode = ''
-
+        cabling = kwargs.pop('cabling', None)
+        electrodes = kwargs.pop('electrodes', None)
+        self.cabling = {}
+        if cabling is None:
+            self.cabling = {(e, r): (i + 1, r) for r in roles for i, e in enumerate(electrodes)}
+        else:
+            for k, v in cabling.items():
+                if v[0] == self.board_id:
+                    self.cabling.update({k: (v[1], k[1])})
         # Setup TCA
         tca_address = kwargs.pop('tca_address', None)
         tca_channel = kwargs.pop('tca_channel', 0)
@@ -126,7 +137,6 @@ class Mux(MuxAbstract):
 
     def switch_one(self, elec=None, role=None, state=None):
         MuxAbstract.switch_one(self, elec=elec, role=role, state=state)
-
         def activate_relay(mcp, mcp_pin, value=True):
             pin_enable = mcp.get_pin(mcp_pin)
             pin_enable.direction = Direction.OUTPUT
diff --git a/ohmpi/hardware_system.py b/ohmpi/hardware_system.py
index 5a9437372aa1e54e3974931fd54ce1acff97a09b..080fbd4c2a5e2fea8db01ca1d0ddf43eed691a8e 100644
--- a/ohmpi/hardware_system.py
+++ b/ohmpi/hardware_system.py
@@ -163,8 +163,7 @@ class OhmPiHardware:
         for mux_id, mux in self.mux_boards.items():
             mux.barrier = self.mux_barrier
             for k, v in mux.cabling.items():
-                update_dict(self._cabling, {k: (mux_id, k[0])})
-
+                update_dict(self._cabling, {k: (mux_id, k[0])})   #TODO: in theory k[0] is not needed in values
         # Complete OhmPiHardware initialization
         self.readings = np.array([])  # time series of acquired data
         self._start_time = None  # time of the beginning of a readings acquisition
diff --git a/ohmpi/ohmpi.py b/ohmpi/ohmpi.py
index 5f3b6d5d136cf7e06f4ebeef014c0ddabcd87239..d15fa18950c3fef354f534a300eac6b594b5dcda 100644
--- a/ohmpi/ohmpi.py
+++ b/ohmpi/ohmpi.py
@@ -196,7 +196,7 @@ class OhmPi(object):
                 mm = np.repeat(last_measurement['M'], dd.shape[0])
                 nn = np.repeat(last_measurement['N'], dd.shape[0])
                 fwdata = np.c_[aa, bb, mm, nn, dd]
-                np.savetxt(f, fwdata, fmt=['%d', '%d', '%d', '%d', '%d', '%d', '%d', '%.3f', '%.3f'])
+                np.savetxt(f, fwdata, fmt=['%d', '%d', '%d', '%d', '%.3f', '%.3f', '%.3f'])
 
         if fw_in_csv:
             d = last_measurement['full_waveform']
diff --git a/ohmpi/utils.py b/ohmpi/utils.py
index 653d112d510474107f63d31a83f3be7946e2861c..c1c45595b5bb6556da8e2f2a79780350d4a07706 100644
--- a/ohmpi/utils.py
+++ b/ohmpi/utils.py
@@ -115,27 +115,32 @@ def parse_log(log):
     return time, process_id, tag, msg, session
 
 
-def mux_2024_to_mux_2023_takeouts(mux_boards):
-
+def mux_2024_to_mux_2023_takeouts(elec_list):
     """ Updates cabling for mux v2024 so that takeouts are similar to takeouts from mux v2023.
     This is only useful when replacing mux v2023 installations or re-using old test circuits.
 
     Parameters
     ----------
-    mux_boards: list of class MUX objects.
+    elec_list: list of electrodes or sequence
 
-    Example
-    -------
-    k = OhmPi()
-    mux_2024_to_mux_2023_takeouts(k._hw.mux_boards)
     """
 
     mapper = {1: 16, 2: 1, 3: 15, 4: 2, 5: 14, 6: 3, 7: 13, 8: 4, 9: 12, 10: 5, 11: 11,
               12: 6, 13: 10, 14: 7, 15: 9, 16: 8}
 
-    for mux in mux_boards:
-        new_cabling = mux.cabling.copy()
-        for k, v in mux.cabling.items():
-            print(k, v)
-            new_cabling[k] = (mapper[v[0]], v[1])
-        mux.cabling = new_cabling
+    return np.vectorize(mapper.get)(elec_list)
+
+def mux_2023_to_mux_2024_takeouts(elec_list):
+    """ Updates cabling for mux v2023 so that takeouts are similar to takeouts from mux v2024.
+    This is only useful when replacing mux v2023 installations or re-using old test circuits.
+
+    Parameters
+    ----------
+    elec_list: list of electrodes or sequence
+
+    """
+
+    mapper = { 1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16,
+               9: 15, 10: 13, 11: 11, 12: 9, 13: 7, 14: 5, 15: 3, 16: 1,}
+
+    return np.vectorize(mapper.get)(elec_list)
\ No newline at end of file