diff --git a/doc/changelog.rst b/doc/changelog.rst
index 859725b55a9b9c00ed0e543fc290093183cac879..0063f90e5dfb701d98cdf877060bf852443a026f 100644
--- a/doc/changelog.rst
+++ b/doc/changelog.rst
@@ -13,6 +13,7 @@ unreleased
 
     - update documentation on knife-edge scan and fluence calcuation :mr:`276`, :mr:`278`
     - update scannerY mnemonics :mr:`281`
+    - move loading logic to mnemonics :mr:`283`
 
 
 - **New Features**
diff --git a/src/toolbox_scs/constants.py b/src/toolbox_scs/constants.py
index 6c041d3d154a5fd817113de8be4e44bb8f63e14d..eb57f0c6f1aecfec1755baf623f56272a7a0a65d 100644
--- a/src/toolbox_scs/constants.py
+++ b/src/toolbox_scs/constants.py
@@ -47,23 +47,30 @@ mnemonics = {
     # Bunch Arrival Monitors
     "BAM414": ({'source': 'SCS_ILH_LAS/DOOCS/BAM_414_B2:output',
                 'key': 'data.absoluteTD',
-                'dim': ['BAMbunchId']},
+                'dim': ['BAMbunchId'],
+                'extract': 'BAM'},
                {'source': 'SCS_ILH_LAS/DOOCS/BAM_414_B2:output',
                 'key': 'data.lowChargeArrivalTime',
-                'dim': ['BAMbunchId']},),
+                'dim': ['BAMbunchId'],
+                'extract': 'BAM'},),
     "BAM1932M": ({'source': 'SCS_ILH_LAS/DOOCS/BAM_1932M_TL:output',
                   'key': 'data.absoluteTD',
-                  'dim': ['BAMbunchId']},
+                  'dim': ['BAMbunchId'],
+                  'extract': 'BAM'},
                  {'source': 'SCS_ILH_LAS/DOOCS/BAM_1932M_TL:output',
                   'key': 'data.lowChargeArrivalTime',
-                  'dim': ['BAMbunchId']},),
+                  'dim': ['BAMbunchId'],
+                  'extract': 'BAM'},),
     "BAM1932S": ({'source': 'SCS_ILH_LAS/DOOCS/BAM_1932S_TL:output',
                   'key': 'data.absoluteTD',
-                  'dim': ['BAMbunchId']},
+                  'dim': ['BAMbunchId'],
+                  'extract': 'BAM'},
                  {'source': 'SCS_ILH_LAS/DOOCS/BAM_1932S_TL:output',
                   'key': 'data.lowChargeArrivalTime',
-                  'dim': ['BAMbunchId']},),
+                  'dim': ['BAMbunchId'],
+                  'extract': 'BAM'},),
 
+    
     # SA3
     "nrj": ({'source': 'SA3_XTD10_MONO/MDL/PHOTON_ENERGY',
              'key': 'actualEnergy.value',
@@ -80,6 +87,9 @@ mnemonics = {
     "tpi": ({'source': 'SCS_XTD10_TPI/DCTRL/SHUTTER',
                      'key': 'operationModePLC.value',
                      'dim': None},),
+    "TPI_STATE": ({'source': 'SCS_XTD10_TPI/DCTRL/SHUTTER',
+                     'key': 'hardwareStatusBitField.value',
+                     'dim': None},),
     "VSLIT": ({'source': 'SA3_XTD10_VSLIT/MDL/BLADE',
                'key': 'actualGap.value',
                'dim': None},),
@@ -228,22 +238,28 @@ mnemonics = {
     # ADC
     "XTD10_XGM": ({'source': 'SA3_XTD10_XGM/XGM/DOOCS:output',
                    'key': 'data.intensityTD',
-                   'dim': ['XGMbunchId']},),
+                   'dim': ['XGMbunchId'],
+                   'extract': 'XGM'},),
     "XTD10_XGM_sigma": ({'source': 'SA3_XTD10_XGM/XGM/DOOCS:output',
                          'key': 'data.intensitySigmaTD',
-                         'dim': ['XGMbunchId']},),
+                         'dim': ['XGMbunchId'],
+                         'extract': 'XGM'},),
     "XTD10_SA3": ({'source': 'SA3_XTD10_XGM/XGM/DOOCS:output',
                    'key': 'data.intensitySa3TD',
-                   'dim': ['XGMbunchId']},),
+                   'dim': ['XGMbunchId'],
+                   'extract': 'XGM'},),
     "XTD10_SA3_sigma": ({'source': 'SA3_XTD10_XGM/XGM/DOOCS:output',
                          'key': 'data.intensitySa3SigmaTD',
-                         'dim': ['XGMbunchId']},),
+                         'dim': ['XGMbunchId'],
+                         'extract': 'XGM'},),
     "XTD10_SA1": ({'source': 'SA3_XTD10_XGM/XGM/DOOCS:output',
                    'key': 'data.intensitySa1TD',
-                   'dim': ['XGMbunchId']},),
+                   'dim': ['XGMbunchId'],
+                   'extract': 'XGM'},),
     "XTD10_SA1_sigma": ({'source': 'SA3_XTD10_XGM/XGM/DOOCS:output',
                          'key': 'data.intensitySa1SigmaTD',
-                         'dim': ['XGMbunchId']},),
+                         'dim': ['XGMbunchId'],
+                         'extract': 'XGM'},),
     # low pass averaged ADC
     "XTD10_slowTrain": ({'source': 'SA3_XTD10_XGM/XGM/DOOCS',
                          'key': 'controlData.slowTrain.value',
@@ -269,22 +285,28 @@ mnemonics = {
     # ADC
     "SCS_XGM": ({'source': 'SCS_BLU_XGM/XGM/DOOCS:output',
                  'key': 'data.intensityTD',
-                 'dim': ['XGMbunchId']},),
+                 'dim': ['XGMbunchId'],
+                 'extract': 'XGM'},),
     "SCS_XGM_sigma": ({'source': 'SCS_BLU_XGM/XGM/DOOCS:output',
                        'key': 'data.intensitySigmaTD',
-                       'dim': ['XGMbunchId']},),
+                       'dim': ['XGMbunchId'],
+                       'extract': 'XGM'},),
     "SCS_SA1": ({'source': 'SCS_BLU_XGM/XGM/DOOCS:output',
                  'key': 'data.intensitySa1TD',
-                 'dim': ['XGMbunchId']},),
+                 'dim': ['XGMbunchId'],
+                 'extract': 'XGM'},),
     "SCS_SA1_sigma": ({'source': 'SCS_BLU_XGM/XGM/DOOCS:output',
                        'key': 'data.intensitySa1SigmaTD',
-                       'dim': ['XGMbunchId']},),
+                       'dim': ['XGMbunchId'],
+                       'extract': 'XGM'},),
     "SCS_SA3": ({'source': 'SCS_BLU_XGM/XGM/DOOCS:output',
                  'key': 'data.intensitySa3TD',
-                 'dim': ['XGMbunchId']},),
+                 'dim': ['XGMbunchId'],
+                 'extract': 'XGM'},),
     "SCS_SA3_sigma": ({'source': 'SCS_BLU_XGM/XGM/DOOCS:output',
                        'key': 'data.intensitySa3SigmaTD',
-                       'dim': ['XGMbunchId']},),
+                       'dim': ['XGMbunchId'],
+                       'extract': 'XGM'},),
     # low pass averaged ADC
     "SCS_slowTrain": ({'source': 'SCS_BLU_XGM/XGM/DOOCS',
                        'key': 'controlData.slowTrain.value',
@@ -379,6 +401,9 @@ mnemonics = {
     "PP800_FocusLens": ({'source': 'SCS_ILH_LAS/MOTOR/LT_SPARE1',
                          'key': 'actualPosition.value',
                          'dim': None},),
+    "PP800_HWP_POLARIZATION": ({'source': 'SCS_CDIFFT_FDM/MOTOR/FOCUS_1',
+                                'key': 'actualPosition.value',
+                                'dim': None},),
     "LIN_FocusLens": ({'source': 'SCS_CDIFFT_FDM/MOTOR/FOCUS_2',
                        'key': 'actualPosition.value',
                        'dim': None},),
@@ -526,6 +551,12 @@ mnemonics = {
     "scannerY_enc": ({'source': 'SCS_CDIFFT_SAM/ENC/SCANNERY',
                       'key': 'value.value',
                       'dim': None},),
+    "sampleH": ({'source': 'SCS_CDIFFT_SAM/MDL/GRIDSAMPLE',
+                 'key': 'actualH.value',
+                 'dim': None},),
+    "sampleK": ({'source': 'SCS_CDIFFT_SAM/MDL/GRIDSAMPLE',
+                 'key': 'actualK.value',
+                 'dim': None},),
     "FFT_SAM_Z": ({'source': 'SCS_CDIFFT_MOV/MOTOR/SAM_Z',
                    'key': 'actualPosition.value',
                    'dim': None},),
@@ -697,6 +728,12 @@ mnemonics = {
     "MTE3": ({'source': 'SCS_CDIDET_MTE3/CAM/CAMERA:daqOutput',
               'key': 'data.image.pixels',
               'dim': ['x', 'y']},),
+    "GRID_H": ({'source': 'SCS_CDIFFT_SAM/MDL/GRIDSAMPLE',
+              'key': 'actualH.value',
+             'dim': None},),
+    "GRID_K": ({'source': 'SCS_CDIFFT_SAM/MDL/GRIDSAMPLE',
+              'key': 'actualK.value',
+             'dim': None},),
 
     # Andor Newton CCD camera
     "newton": ({'source': 'SCS_EXP_NEWTON/CAM/CAMERA:daqOutput',
@@ -742,25 +779,29 @@ mnemonics = {
                  'dim': ['apdId']},),
     "MCP1raw": ({'source': 'SCS_UTC1_ADQ/ADC/1:network',
                  'key': 'digitizers.channel_1_D.raw.samples',
-                 'dim': ['samplesId']},),
+                 'dim': ['samplesId'],
+                 'extract': 'peaks'},),
     "MCP2apd": ({'source': 'SCS_UTC1_ADQ/ADC/1:network',
                  'key': 'digitizers.channel_1_C.apd.pulseIntegral',
                  'dim': ['apdId']},),
     "MCP2raw": ({'source': 'SCS_UTC1_ADQ/ADC/1:network',
                  'key': 'digitizers.channel_1_C.raw.samples',
-                 'dim': ['samplesId']},),
+                 'dim': ['samplesId'],
+                 'extract': 'peaks'},),
     "MCP3apd": ({'source': 'SCS_UTC1_ADQ/ADC/1:network',
                  'key': 'digitizers.channel_1_B.apd.pulseIntegral',
                  'dim': ['apdId']},),
     "MCP3raw": ({'source': 'SCS_UTC1_ADQ/ADC/1:network',
                  'key': 'digitizers.channel_1_B.raw.samples',
-                 'dim': ['samplesId']},),
+                 'dim': ['samplesId'],
+                 'extract': 'peaks'},),
     "MCP4apd": ({'source': 'SCS_UTC1_ADQ/ADC/1:network',
                  'key': 'digitizers.channel_1_A.apd.pulseIntegral',
                  'dim': ['apdId']},),
     "MCP4raw": ({'source': 'SCS_UTC1_ADQ/ADC/1:network',
                  'key': 'digitizers.channel_1_A.raw.samples',
-                 'dim': ['samplesId']},),
+                 'dim': ['samplesId'],
+                 'extract': 'peaks'},),
 
     # FastADC
     "FastADC0peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_0.output',
@@ -768,61 +809,71 @@ mnemonics = {
                        'dim': ['peakId']},),
     "FastADC0raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_0.output',
                      'key': 'data.rawData',
-                     'dim': ['fadc_samplesId']},),
+                     'dim': ['fadc_samplesId'],
+                     'extract': 'peaks'},),
     "FastADC1peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_1.output',
                        'key': 'data.peaks',
                        'dim': ['peakId']},),
     "FastADC1raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_1.output',
                      'key': 'data.rawData',
-                     'dim': ['fadc_samplesId']},),
+                     'dim': ['fadc_samplesId'],
+                     'extract': 'peaks'},),
     "FastADC2peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_2.output',
                        'key': 'data.peaks',
                        'dim': ['peakId']},),
     "FastADC2raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_2.output',
                      'key': 'data.rawData',
-                     'dim': ['fadc_samplesId']},),
+                     'dim': ['fadc_samplesId'],
+                     'extract': 'peaks'},),
     "FastADC3peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_3.output',
                        'key': 'data.peaks',
                        'dim': ['peakId']},),
     "FastADC3raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_3.output',
                      'key': 'data.rawData',
-                     'dim': ['fadc_samplesId']},),
+                     'dim': ['fadc_samplesId'],
+                     'extract': 'peaks'},),
     "FastADC4peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_4.output',
                        'key': 'data.peaks',
                        'dim': ['peakId']},),
     "FastADC4raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_4.output',
                      'key': 'data.rawData',
-                     'dim': ['fadc_samplesId']},),
+                     'dim': ['fadc_samplesId'],
+                     'extract': 'peaks'},),
     "FastADC5peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_5.output',
                        'key': 'data.peaks',
                        'dim': ['peakId']},),
     "FastADC5raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_5.output',
                      'key': 'data.rawData',
-                     'dim': ['fadc_samplesId']},),
+                     'dim': ['fadc_samplesId'],
+                     'extract': 'peaks'},),
     "FastADC6peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_6.output',
                        'key': 'data.peaks',
                        'dim': ['peakId']},),
     "FastADC6raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_6.output',
                      'key': 'data.rawData',
-                     'dim': ['fadc_samplesId']},),
+                     'dim': ['fadc_samplesId'],
+                     'extract': 'peaks'},),
     "FastADC7peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_7.output',
                        'key': 'data.peaks',
                        'dim': ['peakId']},),
     "FastADC7raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_7.output',
                      'key': 'data.rawData',
-                     'dim': ['fadc_samplesId']},),
+                     'dim': ['fadc_samplesId'],
+                     'extract': 'peaks'},),
     "FastADC8peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_8.output',
                        'key': 'data.peaks',
                        'dim': ['peakId']},),
     "FastADC8raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_8.output',
                      'key': 'data.rawData',
-                     'dim': ['fadc_samplesId']},),
+                     'dim': ['fadc_samplesId'],
+                     'extract': 'peaks'},),
     "FastADC9peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_9.output',
                        'key': 'data.peaks',
                        'dim': ['peakId']},),
     "FastADC9raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_9.output',
                      'key': 'data.rawData',
-                     'dim': ['fadc_samplesId']},),
+                     'dim': ['fadc_samplesId'],
+                     'extract': 'peaks'},),
 
     # FastADC 2
     "FastADC2_0peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_0.output',
@@ -830,61 +881,95 @@ mnemonics = {
                          'dim': ['peakId']},),
     "FastADC2_0raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_0.output',
                        'key': 'data.rawData',
-                       'dim': ['fadc2_samplesId']},),
+                       'dim': ['fadc2_samplesId'],
+                       'extract': 'peaks'},),
     "FastADC2_1peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_1.output',
                          'key': 'data.peaks',
                          'dim': ['peakId']},),
     "FastADC2_1raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_1.output',
                        'key': 'data.rawData',
-                       'dim': ['fadc2_samplesId']},),
+                       'dim': ['fadc2_samplesId'],
+                       'extract': 'peaks'},),
     "FastADC2_2peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_2.output',
                          'key': 'data.peaks',
                          'dim': ['peakId']},),
     "FastADC2_2raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_2.output',
                        'key': 'data.rawData',
-                       'dim': ['fadc2_samplesId']},),
+                       'dim': ['fadc2_samplesId'],
+                       'extract': 'peaks'},),
     "FastADC2_3peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_3.output',
                          'key': 'data.peaks',
                          'dim': ['peakId']},),
     "FastADC2_3raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_3.output',
                        'key': 'data.rawData',
-                       'dim': ['fadc2_samplesId']},),
+                       'dim': ['fadc2_samplesId'],
+                       'extract': 'peaks'},),
     "FastADC2_4peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_4.output',
                          'key': 'data.peaks',
                          'dim': ['peakId']},),
     "FastADC2_4raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_4.output',
                        'key': 'data.rawData',
-                       'dim': ['fadc2_samplesId']},),
+                       'dim': ['fadc2_samplesId'],
+                       'extract': 'peaks'},),
     "FastADC2_5peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_5.output',
                          'key': 'data.peaks',
                          'dim': ['peakId']},),
     "FastADC2_5raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_5.output',
                        'key': 'data.rawData',
-                       'dim': ['fadc2_samplesId']},),
+                       'dim': ['fadc2_samplesId'],
+                       'extract': 'peaks'},),
     "FastADC2_6peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_6.output',
                         'key': 'data.peaks',
                         'dim': ['peakId']},),
     "FastADC2_6raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_6.output',
                        'key': 'data.rawData',
-                       'dim': ['fadc2_samplesId']},),
+                       'dim': ['fadc2_samplesId'],
+                       'extract': 'peaks'},),
     "FastADC2_7peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_7.output',
                          'key': 'data.peaks',
                          'dim': ['peakId']},),
     "FastADC2_7raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_7.output',
                        'key': 'data.rawData',
-                       'dim': ['fadc2_samplesId']},),
+                       'dim': ['fadc2_samplesId'],
+                       'extract': 'peaks'},),
     "FastADC2_8peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_8.output',
                          'key': 'data.peaks',
                         'dim': ['peakId']},),
     "FastADC2_8raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_8.output',
                        'key': 'data.rawData',
-                       'dim': ['fadc2_samplesId']},),
+                       'dim': ['fadc2_samplesId'],
+                       'extract': 'peaks'},),
     "FastADC2_9peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_9.output',
                          'key': 'data.peaks',
                          'dim': ['peakId']},),
     "FastADC2_9raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_9.output',
                        'key': 'data.rawData',
-                       'dim': ['fadc2_samplesId']},),
+                       'dim': ['fadc2_samplesId'],
+                       'extract': 'peaks'},),
+    "FFT_PD2raw": ({'source': 'SCS_FFT_DIAG/ADC/PD2:output',
+                       'key': 'data.rawData',
+                       'dim': ['fftpd2_samplesId'],
+                       'extract': 'peaks'},),
+    "FFT_MCPraw": ({'source': 'SCS_FFT_MCP/ADC/MCP:output',
+                       'key': 'data.rawData',
+                       'dim': ['fftmcp_samplesId'],
+                       'extract': 'peaks'},),
+    "FFT_REFLraw": ({'source': 'SCS_FFT_REFL/ADC/DIODE_UP:output',
+                       'key': 'data.rawData',
+                       'dim': ['fftrefl_samplesId'],
+                       'extract': 'peaks'},),
+    "I0_ILHraw": ({'source': 'SCS_ILH_LAS/ADC/I0_ILH:output',
+                       'key': 'data.rawData',
+                       'dim': ['i0ilh_samplesId'],
+                       'extract': 'peaks'},),
+    "I0_LINraw": ({'source': 'SCS_LIN_LAS/ADC/I0:output',
+                       'key': 'data.rawData',
+                       'dim': ['i0lin_samplesId'],
+                       'extract': 'peaks'},),
+    "REFLECTOMETERraw": ({'source': 'SCS_LIN_LAS/ADC/REFLECTOMETER:output',
+                       'key': 'data.rawData',
+                       'dim': ['linrefl_samplesId'],
+                       'extract': 'peaks'},),
 
     # KARABACON
     "KARABACON": ({'source': 'SCS_DAQ_SCAN/MDL/KARABACON',
diff --git a/src/toolbox_scs/detectors/digitizers.py b/src/toolbox_scs/detectors/digitizers.py
index 29a98d97312c791d3d62ee3ec50fb32855d68b76..d69efd42d7ff39b0f740ca057f25489cc31cfbf0 100644
--- a/src/toolbox_scs/detectors/digitizers.py
+++ b/src/toolbox_scs/detectors/digitizers.py
@@ -240,9 +240,10 @@ def get_peaks(run,
         arr = run.get_array(source, key)
     if isinstance(data, str):
         log.debug(f'Loading array from mnemonic {data}')
-        arr = run.get_array(*run_mnemonics[data].values())
-        source = run_mnemonics[data]['source']
-        key = run_mnemonics[data]['key']
+        m = run_mnemonics[data]
+        source = m['source']
+        key = m['key']
+        arr = run.get_array(source, key, m['dim'])
     if arr is None:
         log.debug('Using array provided in data argument.')
         if source is None or key is None:
@@ -257,7 +258,8 @@ def get_peaks(run,
                                 extra_dims=['pulse_slot'])
             pattern = bunchPattern['pattern']
         if 'bunchPatternTable' in run_mnemonics:
-            bpt = run.get_array(*run_mnemonics['bunchPatternTable'].values())
+            m = run_mnemonics['bunchPatternTable']
+            bpt = run.get_array(m['source'], m['key'], m['dim'])
             pattern = bunchPattern
     else:
         pattern = bunchPattern
@@ -397,7 +399,8 @@ def get_dig_avg_trace(run, mnemonic, ntrains=None):
         total_tid = len(run.train_ids)
         stride = int(np.max([1, np.floor(total_tid/ntrains)]))
         sel = run.select_trains(np.s_[0:None:stride])
-    raw_trace = sel.get_array(*run_mnemonics[mnemonic].values())
+    m =run_mnemonics[mnemonic]
+    raw_trace = sel.get_array(m['source'], m['key'], m['dim'])
     raw_trace = raw_trace.mean(dim='trainId')
     return raw_trace
 
@@ -729,7 +732,8 @@ def check_peak_params(run, mnemonic, raw_trace=None, ntrains=200, params=None,
     if 'bunchPatternTable' in run_mnemonics and bunchPattern != 'None':
         sel = run.select_trains(np.s_[:ntrains])
         bp_params = {}
-        bpt = sel.get_array(*run_mnemonics['bunchPatternTable'].values())
+        m = run_mnemonics['bunchPatternTable']
+        bpt = sel.get_array(m['source'], m['key'], m['dim'])
         mask = is_pulse_at(bpt, bunchPattern)
         pid = np.sort(np.unique(np.where(mask)[1]))
         bp_params['npulses'] = len(pid)
@@ -830,6 +834,8 @@ def digitizer_type(mnemonic=None, mnemo_dict=None, source=None):
         source = mnemo_dict[mnemonic]['source']
     if ':channel' in source:
         return 'FastADC'
+    if ':output' in source:
+        return 'FastADC'
     if ':network' in source:
         return 'ADQ412'
     dic = {'XTD10_MCP': 'FastADC',
@@ -1010,10 +1016,12 @@ def get_digitizer_peaks(run, mnemonics=None, merge_with=None,
         bpt = merge_with['bunchPatternTable']
         log.debug('Using bpt from merge_with dataset.')
     elif 'bunchPatternTable' in run_mnemonics:
-        bpt = run.get_array(*run_mnemonics['bunchPatternTable'].values())
+        m = run_mnemonics['bunchPatternTable']
+        bpt = run.get_array(m['source'], m['key'], m['dim'])
         log.debug('Loaded bpt from DataCollection.')
     elif 'bunchPatternTable_SA3' in run_mnemonics:
-        bpt = run.get_array(*run_mnemonics['bunchPatternTable_SA3'].values())
+        m = run_mnemonics['bunchPatternTable_SA3']
+        bpt = run.get_array(m['source'], m['key'], m['dim'])
         log.debug('Loaded bpt from DataCollection.')
     else:
         bpt = None
diff --git a/src/toolbox_scs/load.py b/src/toolbox_scs/load.py
index f7608ccc7e644a66eecad9846e22229f00be0a7b..c42b083897d5b3d36b87c3c31f12c90a4bc5ac36 100644
--- a/src/toolbox_scs/load.py
+++ b/src/toolbox_scs/load.py
@@ -44,14 +44,10 @@ def load(proposalNB=None, runNB=None,
          validate=False,
          subset=None,
          rois={},
-         extract_adq412=True,
-         extract_fadc=True,
-         extract_fadc2=True,
+         extract_digitizers=True,
          extract_xgm=True,
          extract_bam=True,
-         adq412_bp='sase3',
-         fadc_bp='scs_ppl',
-         fadc2_bp='sase3',
+         bunchPattern='sase3',
          extract_tim=None,
          extract_laser=None,
          tim_bp=None,
@@ -92,17 +88,9 @@ def load(proposalNB=None, runNB=None,
                              'dim': ['ref_x', 'ref_y']},
                      'sam': {'roi':by_index[1050:1210, 535:720],
                              'dim': ['sam_x', 'sam_y']}}}
-    extract_adq412: bool
-        If True, extracts the peaks from ADQ412 variables (e.g. 'MCP2raw',
-        'MCP3apd') and aligns the pulse Id with the sase3 bunch pattern.
-    extract_fadc: bool
-        If True, extracts the peaks from FastADC variables (e.g. 'FastADC5raw',
-        'FastADC3peaks') and aligns the pulse Id according to the fadc_bp bunch
-        pattern.
-    extract_fadc2: bool
-        If True, extracts the peaks from FastADC2 variables (e.g.
-        'FastADC2_5raw', 'FastADC2_3peaks') and aligns the pulse Id according
-        to the fadc2_bp bunch pattern.
+    extract_digitizers: bool
+        If True, extracts the peaks from digitizer variables and aligns the
+        pulse Id according to the fadc_bp bunch pattern.
     extract_xgm: bool
         If True, extracts the values from XGM variables (e.g. 'SCS_SA3',
         'XTD10_XGM') and aligns the pulse Id with the sase1 / sase3 bunch
@@ -110,15 +98,13 @@ def load(proposalNB=None, runNB=None,
     extract_bam: bool
         If True, extracts the values from BAM variables (e.g. 'BAM1932M')
         and aligns the pulse Id with the sase3 bunch pattern.
-    adq412_bp: str
-        bunch pattern used to extract the ADQ412 digitizer pulses.
-        Ignored if extract_adq412=False.
-    fadc_bp: str
+    bunchpattern: str
         bunch pattern used to extract the Fast ADC pulses.
-        Ignored if extract_fadc=False.
-    fadc2_bp: str
-        bunch pattern used to extract the Fast ADC 2 pulses.
-        Ignored if extract_fadc2=False.
+        A string or a dict as in::
+
+        {'FFT_PD2': 'sase3', 'ILH_I0': 'scs_ppl'}
+
+        Ignored if extract_digitizers=False.
 
     DEPRECATED ARGUMENTS:
     extract_tim: DEPRECATED. Use extract_adq412 instead.
@@ -185,9 +171,30 @@ def load(proposalNB=None, runNB=None,
             log.warning(f'Source {v["source"]} not found in run. Skipping!')
             print(f'Source {v["source"]} not found in run. Skipping!')
             continue
-        if k not in rois:
+        if k == 'MTE3':
+            arr = run.get_array(v['source'], v['key'],
+                                extra_dims=v['dim'], name=k)
+            tpi = run.get_array('SCS_XTD10_TPI/DCTRL/SHUTTER',
+                                'hardwareStatusBitField.value', name=k)
+            tpi_open = iter(tpi.trainId[tpi & (1 << 12) > 0])
+
+            mte3_tids = []
+            last = 0
+            current = next(tpi_open, None)
+            if current is None:
+                data_arrays.append(arr)
+            else:
+                for tid in arr.trainId:
+                     while current < tid:
+                         last = current
+                         current = next(tpi_open, tid)
+                     mte3_tids.append(last)
+                data_arrays.append(
+                    arr.assign_coords(trainId=np.array(mte3_tids, dtype='u8')))
+        elif k not in rois:
             # no ROIs selection, we read everything
-            arr = run.get_array(*v.values(), name=k)
+            arr = run.get_array(v['source'], v['key'],
+                                extra_dims=v['dim'], name=k)
             if len(arr) == 0:
                 log.warning(f'Empty array for {f}: {v["source"]}, {v["key"]}. '
                             'Skipping!')
@@ -222,42 +229,28 @@ def load(proposalNB=None, runNB=None,
     data = xr.merge(data_arrays, join='inner')
     data.attrs['runFolder'] = runFolder
 
-    # backward compatibility with old-defined variables:
-    if extract_tim is not None:
-        extract_adq412 = extract_tim
-    if extract_laser is not None:
-        extract_fadc = extract_laser
-    if tim_bp is not None:
-        adq412_bp = tim_bp
-    if laser_bp is not None:
-        fadc_bp = laser_bp
-
-    adq412 = [k for k in run_mnemonics if 'MCP' in k and k in data]
-    if extract_adq412 and len(adq412) > 0:
-        data = tbdet.get_digitizer_peaks(run, mnemonics=adq412,
-                                         merge_with=data,
-                                         bunchPattern=adq412_bp)
-
-    fadc = [k for k in run_mnemonics if ('FastADC' in k)
-            and ('FastADC2_' not in k) and (k in data)]
-    if extract_fadc and len(fadc) > 0:
-        data = tbdet.get_digitizer_peaks(run, mnemonics=fadc, merge_with=data,
-                                         bunchPattern=fadc_bp)
-    fadc2 = [k for k in run_mnemonics if 'FastADC2_' in k and k in data]
-    if extract_fadc2 and len(fadc2) > 0:
-        data = tbdet.get_digitizer_peaks(run, mnemonics=fadc2, merge_with=data,
-                                         bunchPattern=fadc2_bp)
-
-    xgm = ['XTD10_XGM', 'XTD10_XGM_sigma', 'XTD10_SA3', 'XTD10_SA3_sigma',
-           'XTD10_SA1', 'XTD10_SA1_sigma', 'SCS_XGM', 'SCS_XGM_sigma',
-           'SCS_SA1', 'SCS_SA1_sigma', 'SCS_SA3', 'SCS_SA3_sigma']
-    xgm = [k for k in xgm if k in data]
-    if extract_xgm and len(xgm) > 0:
-        data = tbdet.get_xgm(run, mnemonics=xgm, merge_with=data)
-
-    bam = [k for k in run_mnemonics if 'BAM' in k and k in data]
-    if extract_bam and len(bam) > 0:
-        data = tbdet.get_bam(run, mnemonics=bam, merge_with=data)
+    if extract_digitizers:
+        bp = bunchPattern
+        for k, v in run_mnemonics.items():
+            if k not in data or v.get('extract') != 'peaks':
+                continue
+            if isinstance(bunchPattern, dict):
+                bp = bunchPattern.get(k)
+                if bp is None:
+                    continue
+            data = tbdet.get_digitizer_peaks(
+                run, mnemonics=k, merge_with=data, bunchPattern=bp)
+    if extract_xgm:
+        for k, v in run_mnemonics.items():
+            if k not in data or v.get('extract') != 'XGM':
+                continue
+            data = tbdet.get_xgm(run, mnemonics=k, merge_with=data)
+
+    if extract_bam:
+        for k, v in run_mnemonics.items():
+            if k not in data or v.get('extract') != 'BAM':
+                continue
+            data = tbdet.get_bam(run, mnemonics=k, merge_with=data)
 
     return run, data