diff --git a/Trigger/TrigEvent/TrigNavTools/share/testTrigR2ToR3NavGraphConversion.py b/Trigger/TrigEvent/TrigNavTools/share/testTrigR2ToR3NavGraphConversion.py
index 5260b949300d92ab18fa7987b981bde19e5c1f74..9d7b4f11254776eb29dd8cd0cab007e133a8740f 100755
--- a/Trigger/TrigEvent/TrigNavTools/share/testTrigR2ToR3NavGraphConversion.py
+++ b/Trigger/TrigEvent/TrigNavTools/share/testTrigR2ToR3NavGraphConversion.py
@@ -32,7 +32,7 @@ if __name__=='__main__':
     #mu one chain#
     #ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_mu4"])
     #ConfigFlags.addFlag("TestNavConversion.Chains",['HLT_mu60_0eta105_msonly_L1MU14FCH', 'HLT_mu24_LRT_d0loose_L1MU14FCH', 'HLT_mu40', 'HLT_mu24_imedium', 'HLT_mu24_ivarmedium', 'HLT_mu26_ivarmedium', 'HLT_mu80_msonly_3layersEC', 'HLT_mu80_msonly_3layersEC_L1MU14FCH', 'HLT_mu26_ivarmedium_L1MU14FCH', 'HLT_mu20_iloose_L1MU15', 'HLT_mu50_L1MU14FCH', 'HLT_mu24_ivarloose', 'HLT_mu60_0eta105_msonly', 'HLT_mu50', 'HLT_mu24_iloose', 'HLT_id_cosmicid_L1MU11_EMPTY'])
-    #ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_mu4","HLT_mu6","HLT_mu10","HLT_mu6_2mu4","HLT_mu22"])
+    ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_mu4","HLT_mu6","HLT_mu10","HLT_mu6_2mu4","HLT_mu22"])
     #mu all#ConfigFlags.addFlag("TestNavConversion.Chains",['HLT_mu20_2mu2noL1_JpsimumuFS', 'HLT_mu6_iloose_mu6_11invm24_noos', 'HLT_mu22_mu8noL1', 'HLT_2mu10_nomucomb', 'HLT_3mu6_msonly_L13MU5VF', 'HLT_mu13_mu13_idperf_Zmumu', 'HLT_mu22_mu8noL1_L1MU14FCH', 'HLT_4mu4_nomucomb', 'HLT_mu24_ivarmedium', 'HLT_mu22_mu8noL1_calotag_0eta010', 'HLT_mu22_mu8noL1_TagandProbe', 'HLT_mu26_ivarmedium_L1MU14FCH', 'HLT_mu40', 'HLT_2mu10', 'HLT_mu18_2mu0noL1_JpsimumuFS', 'HLT_2mu14_nomucomb', 'HLT_mu11_nomucomb_2mu4noL1_nscan03_L1MU11_2MU6', 'HLT_mu20_2mu4noL1_L1MU14FCH', 'HLT_mu18_2mu4_JpsimumuL2', 'HLT_mu20_2mu0noL1_JpsimumuFS', 'HLT_3mu6_msonly_L1MU6_EMPTY', 'HLT_mu24_iloose', 'HLT_3mu4_mu2noL1', 'HLT_mu60_0eta105_msonly_L1MU14FCH', 'HLT_2mu4_mu3_mu2noL1_calotag_0eta010_L13MU4', 'HLT_mu20_msonly_mu15noL1_msonly_nscan05_noComb', 'HLT_3mu3_mu3noL1_calotag_0eta010_L13MU4', 'HLT_2mu4_mu3_mu2noL1_L13MU4', 'HLT_mu11_nomucomb_2mu4noL1_nscan03_L1MU11_2MU6_bTau', 'HLT_mu20_msonly_mu10noL1_msonly_nscan05_noComb', 'HLT_mu11_nomucomb_mu6noL1_nscan03_L1MU11_2MU6_bTau', 'HLT_mu20_nomucomb_mu6noL1_nscan03', 'HLT_mu20_ivarmedium_mu4noL1_10invmAB70_L1MU14FCH', 'HLT_4mu4', 'HLT_id_cosmicid_L1MU11_EMPTY', 'HLT_mu20_mu8noL1', 'HLT_mu24_imedium', 'HLT_mu20_ivarmedium_mu8noL1', 'HLT_3mu6_L13MU5VF', 'HLT_mu20_msonly_mu15noL1_msonly_nscan05_noComb_L1MU4_UNPAIRED_ISO', 'HLT_3mu6_msonly', 'HLT_mu24_ivarloose', 'HLT_mu60_0eta105_msonly', 'HLT_mu20_msonly_iloosems_mu6noL1_msonly_nscan05_L1MU4_UNPAIRED_ISO', 'HLT_mu11_L1MU10_2mu4noL1_nscan03_L1MU10_2MU6', 'HLT_mu18_mu8noL1', 'HLT_4mu4_L14MU3V', 'HLT_mu80_msonly_3layersEC_L1MU14FCH', 'HLT_mu18_2mu4noL1', 'HLT_3mu4_nomucomb', 'HLT_2mu14_L12MU8F', 'HLT_mu20_iloose_L1MU15', 'HLT_mu20_ivarmedium_mu8noL1_L1MU14FCH', 'HLT_mu20_msonly_mu10noL1_msonly_nscan05_noComb_L1MU4_UNPAIRED_ISO', 'HLT_mu20_l2idonly_mu6noL1_nscan03', 'HLT_mu11_nomucomb_mu6noL1_nscan03_L1MU11_2MU6_bTau_delayed', 'HLT_2mu6_10invm30_pt2_z10', 'HLT_mu20_msonly_mu10noL1_msonly_nscan05_noComb_L1MU6_EMPTY', 'HLT_mu26_ivarmedium', 'HLT_mu11_2mu4noL1_nscan03_L1MU11_2MU6', 'HLT_2mu14', 'HLT_3mu6', 'HLT_mu20_msonly_mu15noL1_msonly_nscan05_noComb_L1MU6_EMPTY', 'HLT_mu10_ivarmedium_mu10_10invmAB70_L12MU8F', 'HLT_mu20_2mu4noL1', 'HLT_mu6_2mu4', 'HLT_mu50', 'HLT_3mu6_msonly_L1MU4_UNPAIRED_ISO', 'HLT_mu20_msonly_iloosems_mu6noL1_msonly_nscan05_L1MU6_EMPTY', 'HLT_3mu4_mu2noL1_calotag_0eta010', 'HLT_mu6_dRl1_mu20_msonly_iloosems_mu6noL1_dRl1_msonly', 'HLT_3mu4', 'HLT_mu20_mu8noL1_calotag_0eta010', 'HLT_mu6_nomucomb_2mu4_nomucomb_L1MU6_3MU4', 'HLT_2mu20_L12MU20_OVERLAY', 'HLT_mu6_nomucomb_2mu4_nomucomb_delayed_L1MU6_3MU4', 'HLT_3mu4_nomucomb_mu2noL1', 'HLT_mu80_msonly_3layersEC', 'HLT_mu20_mu6noL1_nscan03', 'HLT_mu20_msonly_mu6noL1_msonly_nscan05', 'HLT_mu20_2mu4_JpsimumuL2', 'HLT_3mu3_mu3noL1_L13MU4', 'HLT_mu24_LRT_d0loose_L1MU14FCH', 'HLT_mu50_L1MU14FCH']
     #mu multi#ConfigFlags.addFlag("TestNavConversion.Chains",['HLT_mu20_2mu2noL1_JpsimumuFS', 'HLT_mu6_iloose_mu6_11invm24_noos', 'HLT_mu22_mu8noL1', 'HLT_2mu10_nomucomb', 'HLT_3mu6_msonly_L13MU5VF', 'HLT_mu13_mu13_idperf_Zmumu', 'HLT_mu22_mu8noL1_L1MU14FCH', 'HLT_4mu4_nomucomb', 'HLT_mu22_mu8noL1_calotag_0eta010', 'HLT_mu22_mu8noL1_TagandProbe', 'HLT_2mu10', 'HLT_mu18_2mu0noL1_JpsimumuFS', 'HLT_2mu14_nomucomb', 'HLT_mu11_nomucomb_2mu4noL1_nscan03_L1MU11_2MU6', 'HLT_mu20_2mu4noL1_L1MU14FCH', 'HLT_mu18_2mu4_JpsimumuL2', 'HLT_mu20_2mu0noL1_JpsimumuFS', 'HLT_3mu6_msonly_L1MU6_EMPTY', 'HLT_3mu4_mu2noL1', 'HLT_2mu4_mu3_mu2noL1_calotag_0eta010_L13MU4', 'HLT_mu20_msonly_mu15noL1_msonly_nscan05_noComb', 'HLT_3mu3_mu3noL1_calotag_0eta010_L13MU4', 'HLT_2mu4_mu3_mu2noL1_L13MU4', 'HLT_mu11_nomucomb_2mu4noL1_nscan03_L1MU11_2MU6_bTau', 'HLT_mu20_msonly_mu10noL1_msonly_nscan05_noComb', 'HLT_mu11_nomucomb_mu6noL1_nscan03_L1MU11_2MU6_bTau', 'HLT_mu20_nomucomb_mu6noL1_nscan03', 'HLT_mu20_ivarmedium_mu4noL1_10invmAB70_L1MU14FCH', 'HLT_4mu4', 'HLT_mu20_mu8noL1', 'HLT_mu20_ivarmedium_mu8noL1', 'HLT_3mu6_L13MU5VF', 'HLT_mu20_msonly_mu15noL1_msonly_nscan05_noComb_L1MU4_UNPAIRED_ISO', 'HLT_3mu6_msonly', 'HLT_mu20_msonly_iloosems_mu6noL1_msonly_nscan05_L1MU4_UNPAIRED_ISO', 'HLT_mu11_L1MU10_2mu4noL1_nscan03_L1MU10_2MU6', 'HLT_mu18_mu8noL1', 'HLT_4mu4_L14MU3V', 'HLT_mu18_2mu4noL1', 'HLT_3mu4_nomucomb', 'HLT_mu20_ivarmedium_mu8noL1_L1MU14FCH', 'HLT_2mu14_L12MU8F', 'HLT_mu20_msonly_mu10noL1_msonly_nscan05_noComb_L1MU4_UNPAIRED_ISO', 'HLT_mu20_l2idonly_mu6noL1_nscan03', 'HLT_mu11_nomucomb_mu6noL1_nscan03_L1MU11_2MU6_bTau_delayed', 'HLT_2mu6_10invm30_pt2_z10', 'HLT_mu20_msonly_mu10noL1_msonly_nscan05_noComb_L1MU6_EMPTY', 'HLT_mu11_2mu4noL1_nscan03_L1MU11_2MU6', 'HLT_2mu14', 'HLT_3mu6', 'HLT_mu20_msonly_mu15noL1_msonly_nscan05_noComb_L1MU6_EMPTY', 'HLT_mu10_ivarmedium_mu10_10invmAB70_L12MU8F', 'HLT_mu20_2mu4noL1', 'HLT_mu6_2mu4', 'HLT_3mu6_msonly_L1MU4_UNPAIRED_ISO', 'HLT_mu20_msonly_iloosems_mu6noL1_msonly_nscan05_L1MU6_EMPTY', 'HLT_3mu4_mu2noL1_calotag_0eta010', 'HLT_mu6_dRl1_mu20_msonly_iloosems_mu6noL1_dRl1_msonly', 'HLT_3mu4', 'HLT_mu20_mu8noL1_calotag_0eta010', 'HLT_mu6_nomucomb_2mu4_nomucomb_L1MU6_3MU4', 'HLT_2mu20_L12MU20_OVERLAY', 'HLT_mu6_nomucomb_2mu4_nomucomb_delayed_L1MU6_3MU4', 'HLT_3mu4_nomucomb_mu2noL1', 'HLT_mu20_mu6noL1_nscan03', 'HLT_mu20_msonly_mu6noL1_msonly_nscan05', 'HLT_mu20_2mu4_JpsimumuL2', 'HLT_3mu3_mu3noL1_L13MU4'])
     #ConfigFlags.addFlag("TestNavConversion.Collections",["xAOD::MuonContainer","xAOD::L2StandAloneMuonContainer","xAOD::TrigMissingET","xAOD::JetContainer"])
@@ -77,7 +77,7 @@ if __name__=='__main__':
     ###
 
     #ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_e26_lhtight_nod0"])
-    ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_mu4_j80_xe80_pufit_2dphi10_L1MU4_J50_XE50_DPHI-J20s2XE30"])
+    #ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_mu4_j80_xe80_pufit_2dphi10_L1MU4_J50_XE50_DPHI-J20s2XE30"])
     #ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_e5_lhvloose_nod0","HLT_e9_etcut","HLT_e26_lhtight_nod0","HLT_e28_lhtight_nod0"])
     #ConfigFlags.addFlag("TestNavConversion.Chains",['HLT_e60_medium', 'HLT_e300_etcut_L1EM22VHI', 'HLT_e26_lhtight_ivarloose', 'HLT_e26_lhloose_nod0', 'HLT_e26_lhtight_cutd0dphideta_ivarloose', 'HLT_e300_etcut', 'HLT_e26_lhtight_nod0', 'HLT_e24_lhtight_iloose_L2EFCalo_L1EM20VH', 'HLT_e26_lhtight_nod0_ringer_ivarloose', 'HLT_e24_lhmedium_nod0_iloose_L1EM20VH', 'HLT_e24_medium_L1EM20VH', 'HLT_e24_lhmedium_iloose_L1EM20VH', 'HLT_e26_lhtight_smooth_ivarloose', 'HLT_e24_lhtight_nod0_iloose', 'HLT_e24_tight_iloose_L2EFCalo_L1EM20VH', 'HLT_e140_lhloose_nod0', 'HLT_e28_lhtight_nod0_ringer_iloose', 'HLT_e60_lhmedium_nod0', 'HLT_e140_lhvloose_nod0', 'HLT_e28_lhtight_nod0_ringer_ivarloose', 'HLT_e26_lhtight_smooth_iloose', 'HLT_e140_lhloose_nod0_ringer', 'HLT_e28_lhtight_nod0_noringer_ivarloose', 'HLT_e120_lhloose', 'HLT_e26_lhtight_ivarloose_L1EM22VHI', 'HLT_e24_tight_iloose_HLTCalo_L1EM20VH', 'HLT_e26_lhloose_nopix_lrttight_L1EM22VHI', 'HLT_e120_lhloose_HLTCalo', 'HLT_e26_lhloose_nod0_ringer', 'HLT_e140_lhloose_L1EM22VHI', 'HLT_e24_lhmedium_iloose_HLTCalo_L1EM20VH', 'HLT_e200_etcut', 'HLT_e28_lhtight_nod0_L1EM22VHI', 'HLT_e160_lhvloose_nod0', 'HLT_e60_lhmedium_HLTCalo', 'HLT_e24_lhmedium_nod0_ivarloose', 'HLT_e24_lhtight_nod0_ivarloose', 'HLT_e26_lhtight_iloose', 'HLT_e60_lhmedium_L1EM22VHI', 'HLT_e60_lhmedium_nod0_ringer', 'HLT_e120_loose', 'HLT_e24_lhmedium_L1EM20VH', 'HLT_e24_medium_iloose_L1EM20VH', 'HLT_e60_lhmedium_L1EM24VHI', 'HLT_e20_lhtight_ivarloose_L1ZAFB-25DPHI-eEM15M', 'HLT_e24_lhmedium_nod0_iloose', 'HLT_e120_lhloose_nod0', 'HLT_e26_lhtight_nod0_ivarloose'])
     #ConfigFlags.addFlag("TestNavConversion.Chains",['HLT_e26_lhloose_nopix_lrttight_L1EM22VHI', 'HLT_e26_lhtight_e15_etcut_Zee_L1EM22VHI', 'HLT_e60_medium', 'HLT_e60_lhmedium_HLTCalo', 'HLT_e60_lhmedium_nod0_ringer', 'HLT_e26_lhtight_ivarloose_L1EM22VHI', 'HLT_e24_tight_iloose_L2EFCalo_L1EM20VH', 'HLT_e24_medium_iloose_L1EM20VH', 'HLT_2e17_lhvloose_nod0', 'HLT_2e12_lhvloose_L12EM10VH', 'HLT_e28_lhtight_nod0_ringer_iloose', 'HLT_e120_lhloose', 'HLT_e17_lhmedium_nod0_iloose_2e9_lhmedium_nod0', 'HLT_e20_lhtight_ivarloose_L1ZAFB-25DPHI-eEM15M', 'HLT_2e17_lhvloose_L12EM15VHI', 'HLT_e140_lhloose_nod0', 'HLT_2e17_lhvloose_nod0_ringer_L12EM15VHI', 'HLT_2e24_lhvloose_nod0', 'HLT_e60_lhmedium_L1EM24VHI', 'HLT_e24_lhvloose_nod0_2e12_lhvloose_nod0_L1EM20VH_3EM10VH', 'HLT_e120_lhloose_HLTCalo', 'HLT_e26_lhtight_nod0_ivarloose', 'HLT_e26_lhtight_nod0', 'HLT_e24_tight_L1EM20VH_e15_etcut_Zee', 'HLT_e24_lhmedium_iloose_L1EM20VH', 'HLT_e200_etcut', 'HLT_e140_lhvloose_nod0', 'HLT_e24_lhtight_nod0_ivarloose', 'HLT_e120_lhloose_nod0', 'HLT_e26_lhloose_nod0_ringer', 'HLT_e26_lhtight_nod0_e15_etcut_L1EM7_Zee', 'HLT_2e15_lhvloose_nod0_L12EM13VH', 'HLT_e26_lhtight_iloose', 'HLT_e160_lhvloose_nod0', 'HLT_e24_lhmedium_iloose_HLTCalo_L1EM20VH', 'HLT_e26_lhtight_smooth_ivarloose', 'HLT_2e17_lhvloose_nod0_ringer', 'HLT_2e24_lhvloose_L12EM20VH', 'HLT_e28_lhtight_nod0_L1EM22VHI', 'HLT_e24_lhmedium_nod0_iloose_L1EM20VH', 'HLT_e140_lhloose_nod0_ringer', 'HLT_e17_lhloose_2e9_lhloose', 'HLT_e60_lhmedium_nod0', 'HLT_e24_medium_L1EM20VH', 'HLT_e26_lhtight_cutd0dphideta_ivarloose', 'HLT_e28_lhtight_nod0_noringer_ivarloose', 'HLT_e17_medium_iloose_2e9_medium', 'HLT_e120_loose', 'HLT_e300_etcut_L1EM22VHI', 'HLT_2e12_lhvloose_nod0_L12EM10VH', 'HLT_2e17_lhvloose', 'HLT_e17_lhloose_nod0_2e12_lhloose_nod0_L1EM15VH_3EM10VH', 'HLT_e28_lhtight_nod0_ringer_ivarloose', 'HLT_e24_lhmedium_nod0_iloose', 'HLT_e60_lhmedium_L1EM22VHI', 'HLT_e26_tight_e15_etcut_L1EM7_Zee', 'HLT_e22_lhvloose_nod0_e12_lhvloose_nod0_e10_lhvloose_nod0_L1EM20VH_2EM10VH_3EM8VH', 'HLT_2e17_lhvloose_nod0_L12EM15VHI', 'HLT_e24_tight_iloose_HLTCalo_L1EM20VH', 'HLT_e24_lhvloose_2e12_lhvloose_L1EM20VH_3EM10VH', 'HLT_e300_etcut', 'HLT_e26_lhtight_nod0_ringer_ivarloose', 'HLT_e24_lhtight_iloose_L2EFCalo_L1EM20VH', 'HLT_e24_lhmedium_nod0_ivarloose', 'HLT_2e12_vloose_L12EM10VH', 'HLT_2e12_lhloose_nodphires_L12EM10VH', 'HLT_e26_lhtight_smooth_iloose', 'HLT_e26_lhtight_e15_etcut_idperf_Zee_L1EM22VHI', 'HLT_e24_lhtight_L1EM20VH_e15_etcut_Zee', 'HLT_e17_loose_2e9_loose', 'HLT_2e12_lhloose_HLTCalo_L12EM10VH', 'HLT_e17_lhmedium_iloose_2e9_lhmedium', 'HLT_e26_lhtight_ivarloose', 'HLT_e140_lhloose_L1EM22VHI', 'HLT_e24_lhmedium_L1EM20VH', 'HLT_e24_lhtight_nod0_iloose', 'HLT_e26_lhloose_nod0', 'HLT_2e15_lhvloose_L12EM13VH', 'HLT_2e12_lhloose_nodeta_L12EM10VH', 'HLT_e17_lhloose_nod0_2e9_lhloose_nod0'])
diff --git a/Trigger/TrigEvent/TrigNavTools/share/testTrigR2ToR3NavGraphConversionV2.py b/Trigger/TrigEvent/TrigNavTools/share/testTrigR2ToR3NavGraphConversionV2.py
index 2e7c4a216e44a1683f6f76613e2a374d2bca7e86..774bd76e8de9409a5510cd523d8101ff077258d8 100755
--- a/Trigger/TrigEvent/TrigNavTools/share/testTrigR2ToR3NavGraphConversionV2.py
+++ b/Trigger/TrigEvent/TrigNavTools/share/testTrigR2ToR3NavGraphConversionV2.py
@@ -19,19 +19,17 @@ if __name__=='__main__':
     from AthenaCommon.Constants import WARNING
     from AthenaConfiguration.AllConfigFlags import ConfigFlags
 
-    ###test input file: --filesInput='/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/q221/21.0/myAOD.pool.root'
+    ###test input file format: --filesInput='/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/q221/21.0/myAOD.pool.root'
 
     # Set the Athena configuration flags
     ConfigFlags.Input.Files=["/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/q221/21.0/myAOD.pool.root"]
     ConfigFlags.Output.AODFileName = "outAOD.pool.root"
     ConfigFlags.Detector.GeometryLAr=True
     ConfigFlags.Detector.GeometryTile=True
-    # useful examples: test units based on them
-    #ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_mu4"])
-    #ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_mu4","HLT_mu6","HLT_mu10","HLT_mu6_2mu4","HLT_mu22"])
-#    ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_e5_lhvloose_nod0","HLT_e9_etcut","HLT_e26_lhtight_nod0","HLT_e28_lhtight_nod0"])
-    #ConfigFlags.addFlag("TestNavConversion.Collections",["xAOD::MuonContainer","xAOD::L2StandAloneMuonContainer","xAOD::TrigMissingET","xAOD::JetContainer"])
- #   ConfigFlags.addFlag("TestNavConversion.Collections",["xAOD::ElectronContainer","xAOD::TrigEMClusterContainer","xAOD::TrigEMCluster","xAOD::TrigElectron","xAOD::TrigElectronContainer","xAOD::CaloCluster","xAOD::CaloClusterContainer"])
+    # useful examples in commented lines left intentionally
+    # ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_mu4"])
+    # ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_mu4","HLT_mu6","HLT_mu10","HLT_mu6_2mu4","HLT_mu22"])
+    # ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_e5_lhvloose_nod0","HLT_e9_etcut","HLT_e26_lhtight_nod0","HLT_e28_lhtight_nod0"])
     ConfigFlags.Exec.MaxEvents = 1
     ConfigFlags.fillFromArgs()
     ConfigFlags.lock()
@@ -53,10 +51,11 @@ if __name__=='__main__':
     from AthenaCommon.Constants import DEBUG
     alg = CompFactory.Run2ToRun3TrigNavConverterV2("TrigNavCnv", OutputLevel=DEBUG, TrigConfigSvc=confSvc)
     alg.doSelfValidation = False
-    alg.Collections = ["xAOD::TrigElectronContainer"]
+
+    alg.Collections = ["xAOD::TrigEMCluster", "xAOD::TrigEMClusterContainer", "xAOD::TrigRingerRings", "xAOD::TrigRingerRingsContainer", "xAOD::TrigRNNOutput", "xAOD::TrigRNNOutputContainer", "xAOD::CaloClusterContainer", "xAOD::L2StandAloneMuonContainer", "xAOD::L2CombinedMuonContainer", "xAOD::L2IsoMuonContainer", "xAOD::MuonContainer", "xAOD::TauJetContainer", "xAOD::TauTrackContainer", "xAOD::ElectronContainer", "xAOD::PhotonContainer", "xAOD::JetContainer", "xAOD::BTaggingContainer", "xAOD::BTagVertexContainer", "xAOD::JetElementContainer"]
     alg.doCompression = True
-    # alg.Chains = ["HLT_e26_lhtight_idperf", "HLT_e26_lhmedium_nod0_ivarloose"]
-#    alg.Chains = ["HLT_mu4_j80_xe80_pufit_2dphi10_L1MU4_J50_XE50_DPHI-J20s2XE30"]
+    alg.Chains = ["HLT_mu4","HLT_mu6","HLT_mu10","HLT_mu6_2mu4","HLT_mu22"]
+    alg.Rois = ["initialRoI","forID","forID1","forID2","forMS","forSA","forTB","forMT","forCB"]
 
     cfg.addEventAlgo(alg, sequenceName="AthAlgSeq")
     from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
diff --git a/Trigger/TrigEvent/TrigNavTools/src/Run2ToRun3TrigNavConverterV2.cxx b/Trigger/TrigEvent/TrigNavTools/src/Run2ToRun3TrigNavConverterV2.cxx
index 15f3397abbd4834e394c48a0295e1794343beff1..af3e1b9552ec052f7674691685eff6c3af973ca8 100644
--- a/Trigger/TrigEvent/TrigNavTools/src/Run2ToRun3TrigNavConverterV2.cxx
+++ b/Trigger/TrigEvent/TrigNavTools/src/Run2ToRun3TrigNavConverterV2.cxx
@@ -130,6 +130,7 @@ StatusCode Run2ToRun3TrigNavConverterV2::initialize()
   // configured collections can be either just type name, or type#key
   // decoding takes this into account, if only the type is configured then empty string is places in the decoded lookup map
   // else CLID + a name is placed
+
   for (const auto& name : m_collectionsToSave) {
     std::string typeName = name;
     std::string collName;
@@ -146,6 +147,11 @@ StatusCode Run2ToRun3TrigNavConverterV2::initialize()
     m_collectionsToSaveDecoded[id].insert(collName);
 
   }
+
+  for (const auto& name : m_roisToSave) {
+    m_setRoiName.push_back(name);
+  }
+
   // sanity check, i.e. if there is at least one entry w/o the coll name no other enties are needed for a given clid
   for ( auto [clid, keysSet]: m_collectionsToSaveDecoded ) {
     if ( keysSet.size() > 1 and keysSet.count("") != 0 ) {
@@ -154,6 +160,17 @@ StatusCode Run2ToRun3TrigNavConverterV2::initialize()
     }
   }
 
+  ATH_CHECK(m_clidSvc->getIDOfTypeName("TrigRoiDescriptor", m_roIDescriptorCLID));
+  ATH_CHECK(m_clidSvc->getIDOfTypeName("TrigRoiDescriptorCollection", m_roIDescriptorCollectionCLID));
+  ATH_CHECK(m_clidSvc->getIDOfTypeName("xAOD::TrigRingerRings", m_TrigRingerRingsCLID));
+  ATH_CHECK(m_clidSvc->getIDOfTypeName("xAOD::TrigRingerRingsContainer", m_TrigRingerRingsContainerCLID));
+  ATH_CHECK(m_clidSvc->getIDOfTypeName("xAOD::TrigEMCluster", m_TrigEMClusterCLID));
+  ATH_CHECK(m_clidSvc->getIDOfTypeName("xAOD::TrigEMClusterContainer", m_TrigEMClusterContainerCLID));
+  ATH_CHECK(m_clidSvc->getIDOfTypeName("xAOD::CaloCluster", m_CaloClusterCLID));
+  ATH_CHECK(m_clidSvc->getIDOfTypeName("xAOD::CaloClusterContainer", m_CaloClusterContainerCLID));
+  ATH_CHECK(m_clidSvc->getIDOfTypeName("xAOD::TrackParticleContainer", m_TrackParticleContainerCLID));
+  ATH_CHECK(m_clidSvc->getIDOfTypeName("xAOD::TauTrackContainer", m_TauTrackContainerCLID));
+
   return StatusCode::SUCCESS;
 }
 
@@ -174,7 +191,18 @@ StatusCode Run2ToRun3TrigNavConverterV2::execute(const EventContext& context) co
 
   ConvProxySet_t convProxies;
   HLT::StandaloneNavigation standaloneNav; // needed to keep TEs around
-  ATH_CHECK(mirrorTEsStructure(convProxies, standaloneNav, context));
+  const HLT::TrigNavStructure* run2NavigationPtr = nullptr;
+  if (!m_trigNavKey.key().empty()) {
+    SG::ReadHandle navReadHandle(m_trigNavKey, context);
+    ATH_CHECK(navReadHandle.isValid());
+    standaloneNav.deserialize(navReadHandle->serialized());
+    run2NavigationPtr = &standaloneNav;
+  }
+  else {
+    run2NavigationPtr = m_tdt->ExperimentalAndExpertMethods().getNavigation();
+  }
+
+  ATH_CHECK(mirrorTEsStructure(convProxies, run2NavigationPtr));
 
   if (m_doSelfValidation)
     ATH_CHECK(allProxiesConnected(convProxies));
@@ -193,10 +221,6 @@ StatusCode Run2ToRun3TrigNavConverterV2::execute(const EventContext& context) co
   if (m_doCompression) {
     ATH_CHECK(doCompression(convProxies));
   }
-  if (m_doLinkFeatures) {
-    ATH_CHECK(fillRelevantFeatures(convProxies));
-    ATH_MSG_DEBUG("Features to link found");
-  }
   SG::WriteHandle<TrigCompositeUtils::DecisionContainer> outputNavigation = TrigCompositeUtils::createAndStore(m_trigOutputNavKey, context);
   auto decisionOutput = outputNavigation.ptr();
   TrigCompositeUtils::newDecisionIn(decisionOutput, "HLTPassRaw"); // we rely on the fact that the 1st element is the top
@@ -205,7 +229,15 @@ StatusCode Run2ToRun3TrigNavConverterV2::execute(const EventContext& context) co
   if (m_doSelfValidation) {
     ATH_CHECK(numberOfHNodesPerProxyNotExcessive(convProxies));
   }
+  if (m_doLinkFeatures) {
+    ATH_CHECK(fillRelevantFeatures(convProxies));
+    ATH_CHECK(fillRelevantRois(convProxies, run2NavigationPtr));
+    ATH_MSG_DEBUG("Features to link found");
+  }
+  ATH_CHECK(createL1Nodes(convProxies, *decisionOutput, context));
   ATH_CHECK(createFSNodes(convProxies, *decisionOutput, m_finalTEIdsToChains, context));
+  ATH_CHECK(linkFeaNode(convProxies, run2NavigationPtr, context));
+  ATH_CHECK(linkRoiNode(convProxies, run2NavigationPtr));
   ATH_CHECK(linkTopNode(*decisionOutput));
   ATH_MSG_DEBUG("Conversion done, from " << convProxies.size() << " elements to " << decisionOutput->size() << " elements");
 
@@ -250,19 +282,9 @@ StatusCode Run2ToRun3TrigNavConverterV2::extractTECtoChainMapping(TEIdToChainsMa
   return StatusCode::SUCCESS;
 }
 
-StatusCode Run2ToRun3TrigNavConverterV2::mirrorTEsStructure(ConvProxySet_t& convProxies, HLT::StandaloneNavigation& standaloneNav, const EventContext& context) const {
-  const HLT::TrigNavStructure* run2NavigationPtr = nullptr;
+StatusCode Run2ToRun3TrigNavConverterV2::mirrorTEsStructure(ConvProxySet_t& convProxies, const HLT::TrigNavStructure* run2NavPtr) const {
 
-  if (!m_trigNavKey.key().empty()) {
-    SG::ReadHandle navReadHandle(m_trigNavKey, context);
-    ATH_CHECK(navReadHandle.isValid());
-    standaloneNav.deserialize(navReadHandle->serialized());
-    run2NavigationPtr = &standaloneNav;
-  }
-  else {
-    run2NavigationPtr = m_tdt->ExperimentalAndExpertMethods().getNavigation();
-  }
-  const HLT::TrigNavStructure& run2Navigation = *run2NavigationPtr;
+  const HLT::TrigNavStructure& run2Navigation = *run2NavPtr;
 
   // iterate over the TEs, for each make the ConvProxy and build connections
   std::map<const HLT::TriggerElement*, ConvProxy*> teToProxy;
@@ -516,8 +538,45 @@ StatusCode Run2ToRun3TrigNavConverterV2::collapseFeaturelessProxies(ConvProxySet
   return StatusCode::SUCCESS;
 }
 
-StatusCode Run2ToRun3TrigNavConverterV2::fillRelevantFeatures(ConvProxySet_t&) const {
+
+StatusCode Run2ToRun3TrigNavConverterV2::fillRelevantFeatures(ConvProxySet_t& convProxies) const {
+
   // from all FEAs of the associated TE pick those objects that are to be linked
+  for (auto& proxy : convProxies) {
+      if (proxy->te != nullptr) {
+        
+        for (HLT::TriggerElement::FeatureAccessHelper helper : proxy->te->getFeatureAccessHelpers())
+        {
+            if (feaToSave(helper)==true) {
+              proxy->features.push_back(helper);
+            }
+        }
+      }
+  }
+
+  return StatusCode::SUCCESS;
+}
+
+StatusCode Run2ToRun3TrigNavConverterV2::fillRelevantRois(ConvProxySet_t &convProxies, const HLT::TrigNavStructure *run2NavPtr) const
+{
+  const HLT::TrigNavStructure &run2Navigation = *run2NavPtr;
+
+  for (auto &proxy : convProxies)
+  {
+    if (proxy->te != nullptr)
+    {
+      ATH_MSG_DEBUG("DDD BEFORE rNodes loop");
+      for (const auto &rNodes : HLT::TrigNavStructure::getRoINodes(proxy->te))
+      {
+        if (HLT::TrigNavStructure::isRoINode(rNodes))
+        {
+          ATH_MSG_DEBUG("DDD INSIDE isRoINode condition");
+          proxy->rois = getTEROIfeatures(rNodes, run2Navigation);
+        }
+      }
+    }
+  }
+
   return StatusCode::SUCCESS;
 }
 
@@ -529,25 +588,23 @@ StatusCode Run2ToRun3TrigNavConverterV2::createIMHNodes(ConvProxySet_t& convProx
     for ( auto chainId: proxy->runChains) {
       TrigCompositeUtils::addDecisionID(chainId, proxy->imNode);
     }
-    auto hNode = TrigCompositeUtils::newDecisionIn(&decisions,TrigCompositeUtils::hypoAlgNodeName()); // H 
+    proxy->hNode = TrigCompositeUtils::newDecisionIn(&decisions,TrigCompositeUtils::hypoAlgNodeName()); // H 
     for ( auto chainId: proxy->passChains) {
-      TrigCompositeUtils::addDecisionID(chainId, hNode);
+      TrigCompositeUtils::addDecisionID(chainId, proxy->hNode);
     }
-    proxy->hNodes.push_back(hNode); // H
-    TrigCompositeUtils::linkToPrevious(hNode, proxy->imNode, context); // H low IM up
+    TrigCompositeUtils::linkToPrevious(proxy->hNode, proxy->imNode, context); // H low IM up
   }
   // connecting current IM to all Hs in parent proxies
   for (auto& proxy : convProxies) {
     for (auto& parentProxy : proxy->parents) { 
-      for (auto& hNodeInParent : parentProxy->hNodes) {
-        TrigCompositeUtils::linkToPrevious(proxy->imNode, hNodeInParent, context); // IM low H up (in parent)
-      }
+        TrigCompositeUtils::linkToPrevious(proxy->imNode, parentProxy->hNode, context); // IM low H up (in parent)
     }
   }
   ATH_MSG_DEBUG("IM & H nodes made, output nav elements " << decisions.size());
   return StatusCode::SUCCESS;
 }
 
+
 StatusCode Run2ToRun3TrigNavConverterV2::createFSNodes(const ConvProxySet_t& convProxies, xAOD::TrigCompositeContainer& decisions,
                                                        const TEIdToChainsMap_t& terminalIds, const EventContext& context) const {
   // make node & link it properly
@@ -566,12 +623,12 @@ StatusCode Run2ToRun3TrigNavConverterV2::createFSNodes(const ConvProxySet_t& con
   for ( auto proxy: convProxies ) {
     // associate terminal nodes to filter nodes, 
     if (proxy->children.empty()) { // the H modes are terminal
-      if (proxy->hNodes.empty()) { // nothing has passed, so link to the IM node
+      //if (proxy->hNodes.empty()) { // nothing has passed, so link to the IM node
+      if (proxy->hNode == nullptr) { // nothing has passed, so link to the IM node
         // TODO make sure it needs to be done like that
         makeSFNode(proxy->imNode, proxy->runChains);
       } else {
-        for ( auto hNode: proxy->hNodes)
-          makeSFNode(hNode, TCU::decisionIDs(hNode)); // not using passChains as there may be additional filtering
+          makeSFNode(proxy->hNode, TCU::decisionIDs(proxy->hNode)); // not using passChains as there may be additional filtering
       }
     } else { 
       // likely need more iterations
@@ -594,6 +651,93 @@ StatusCode Run2ToRun3TrigNavConverterV2::createFSNodes(const ConvProxySet_t& con
   return StatusCode::SUCCESS;
 }
 
+
+StatusCode Run2ToRun3TrigNavConverterV2::createL1Nodes(const ConvProxySet_t& convProxies, xAOD::TrigCompositeContainer& decisions,
+                                                       const EventContext& context) const {
+
+  auto makeL1Node = [&decisions, &context](auto firstDecisionNode, auto chainIds){
+    auto L1Node = TrigCompositeUtils::newDecisionIn(&decisions);
+    L1Node->setName(TrigCompositeUtils::hltSeedingNodeName()); // L1
+    for ( auto chainId: chainIds) {
+      TrigCompositeUtils::addDecisionID(chainId, L1Node);
+    }        
+    TrigCompositeUtils::linkToPrevious(firstDecisionNode, L1Node, context); // IM -> L1
+
+    return L1Node;
+  };
+
+  for ( auto proxy: convProxies ) {
+    // associate initial node to filter nodes, 
+    if (proxy->parents.empty()) { // the IM node is initial
+          proxy->l1Node = makeL1Node(proxy->imNode, TCU::decisionIDs(proxy->imNode)); // not using passChains as there may be additional filtering
+    } 
+  }
+
+  ATH_MSG_DEBUG("L1 nodes made, output nav elements ");
+  return StatusCode::SUCCESS;
+}
+
+StatusCode Run2ToRun3TrigNavConverterV2::linkFeaNode(ConvProxySet_t &convProxies, const HLT::TrigNavStructure *run2NavPtr, const EventContext &context) const
+{
+
+  const HLT::TrigNavStructure &run2Navigation = *run2NavPtr;
+
+  // from all FEAs of the associated TE pick those objects that are to be linked
+  for (auto &proxy : convProxies)
+  {
+
+    if (proxy->features.empty())
+    { // no features attached, self link
+      if (proxy->hNode)
+      {
+        ElementLink<xAOD::TrigCompositeContainer> linkToSelf = TrigCompositeUtils::decisionToElementLink(proxy->hNode, context);
+        proxy->hNode->setObjectLink<xAOD::TrigCompositeContainer>(TrigCompositeUtils::featureString(), linkToSelf);
+      }
+    }
+
+    for (auto &fea : proxy->features)
+    {
+      auto [sgKey, sgCLID, sgName] = getSgKey(run2Navigation, fea);
+      ATH_MSG_DEBUG("After getSgKey");
+
+      if (proxy->hNode)
+      {
+        if (fea.getIndex().objectsBegin() < fea.getIndex().objectsEnd())
+        {
+          proxy->hNode->typelessSetObjectLink(TrigCompositeUtils::featureString(), sgKey, sgCLID, fea.getIndex().objectsBegin(), fea.getIndex().objectsEnd());
+        }
+      }
+    }
+  }
+
+  return StatusCode::SUCCESS;
+}
+
+StatusCode Run2ToRun3TrigNavConverterV2::linkRoiNode(ConvProxySet_t &convProxies, const HLT::TrigNavStructure *run2NavPtr) const
+{
+
+  const HLT::TrigNavStructure &run2Navigation = *run2NavPtr;
+
+  // from all Rois of the associated TE pick those objects that are to be linked
+  for (auto &proxy : convProxies)
+  {
+
+    for (auto &roi : proxy->rois)
+    {
+      auto [sgKey, sgCLID, sgName] = getSgKey(run2Navigation, roi);
+      ATH_MSG_DEBUG("After getSgKey");
+      if (proxy->l1Node)
+      {
+        proxy->l1Node->typelessSetObjectLink(TrigCompositeUtils::initialRoIString(), sgKey, sgCLID, roi.getIndex().objectsBegin());
+      }
+
+      proxy->imNode->typelessSetObjectLink(TrigCompositeUtils::roiString(), sgKey, sgCLID, roi.getIndex().objectsBegin());
+    }
+  }
+
+  return StatusCode::SUCCESS;
+}
+
 StatusCode Run2ToRun3TrigNavConverterV2::linkTopNode(xAOD::TrigCompositeContainer& decisions) const {
   // simply link all filter nodes to the HLTPassRaw (the 1st element)
   ATH_CHECK((*decisions.begin())->name() == "HLTPassRaw");
@@ -636,15 +780,23 @@ bool Run2ToRun3TrigNavConverterV2::feaEqual(const std::vector<HLT::TriggerElemen
   return true;
 }
 
-
 bool Run2ToRun3TrigNavConverterV2::feaToSave(const HLT::TriggerElement::FeatureAccessHelper& fea) const { 
-  auto iter = m_collectionsToSaveDecoded.find(fea.getCLID());
-  if ( iter == m_collectionsToSaveDecoded.end() ) return false;
-  if ( iter->second.count("") ) return true; // recording of all collections of a type is requested
-  // TODO complete this implementation with precise collection match (requires access to the NavStructure)
-  //
-  // the logic would be to call: HLTNavDetails::formatSGKey("HLT", conainerTypeName, *(getHolder(fea)->label());
-  //
+        if (m_collectionsToSaveDecoded.find(fea.getCLID()) != m_collectionsToSaveDecoded.end())
+        {
+          return true; // feature accepted for saving
+        }
+
+  return false; 
+}
+
+bool Run2ToRun3TrigNavConverterV2::roiToSave(const HLT::TrigNavStructure& navigationDecoder, const HLT::TriggerElement::FeatureAccessHelper& roi) const { 
+        auto [sgKey, sgCLID, sgName] = getSgKey(navigationDecoder, roi);
+        ATH_MSG_DEBUG("DDD ROI name to be found: " << sgName);
+        if (std::find(m_setRoiName.begin(), m_setRoiName.end(), sgName) != m_setRoiName.end()) {
+          ATH_MSG_DEBUG("DDD ROI name to be found CONFIRMED: " << sgName);
+          return true;
+        }
+
   return false; 
 }
 
@@ -670,13 +822,7 @@ StatusCode Run2ToRun3TrigNavConverterV2::allProxiesConnected(const ConvProxySet_
   return StatusCode::SUCCESS;
 }
 
-StatusCode Run2ToRun3TrigNavConverterV2::numberOfHNodesPerProxyNotExcessive(const ConvProxySet_t& proxies) const {
-  for (auto p : proxies) {
-    if (p->hNodes.size() > m_hNodesPerProxyThreshold) {
-      ATH_MSG_ERROR("Too many H nodes per proxy");
-      return StatusCode::FAILURE;
-    }
-  }
+StatusCode Run2ToRun3TrigNavConverterV2::numberOfHNodesPerProxyNotExcessive(const ConvProxySet_t&) const {
   ATH_MSG_DEBUG("CHECK OK, no excessive number of H nodes per proxy");
   return StatusCode::SUCCESS;
 }
@@ -702,4 +848,70 @@ StatusCode Run2ToRun3TrigNavConverterV2::noUnconnectedHNodes(const xAOD::TrigCom
   ATH_MSG_DEBUG("CHECK OK, all H modes are connected");
 
   return StatusCode::SUCCESS;
-}
\ No newline at end of file
+}
+
+std::tuple<uint32_t, CLID, std::string> Run2ToRun3TrigNavConverterV2::getSgKey(const HLT::TrigNavStructure& navigationDecoder, const HLT::TriggerElement::FeatureAccessHelper& helper) const
+{
+  const std::string hltLabel = navigationDecoder.label(helper.getCLID(), helper.getIndex().subTypeIndex());
+
+  const CLID saveCLID = [&](const CLID& clid) {
+    if (clid == m_roIDescriptorCLID) return m_roIDescriptorCollectionCLID;
+    if (clid == m_TrigEMClusterCLID) return m_TrigEMClusterContainerCLID;
+    if (clid == m_TrigRingerRingsCLID) return m_TrigRingerRingsContainerCLID;
+    return clid;
+  }(helper.getCLID());
+
+  std::string type_name;
+  if (m_clidSvc->getTypeNameOfID(saveCLID, type_name).isFailure())
+  {
+    return { 0, 0, "" };
+  }
+
+  const auto sgStringKey = HLTNavDetails::formatSGkey("HLT", type_name, hltLabel);
+  const bool isAvailable = evtStore()->contains(saveCLID, sgStringKey);
+  ATH_MSG_DEBUG(" Objects presence " << helper << " " << sgStringKey << (isAvailable ? " present" : " absent"));
+  if (!isAvailable) {
+    return { 0, 0, "" };
+  }
+
+
+  const auto sgIntKey = evtStore()->stringToKey(sgStringKey, saveCLID);
+
+  ATH_MSG_DEBUG(" getSgKey: sgKey, sgCLID, sgName " << sgIntKey << " " << saveCLID << " " << hltLabel);
+  return { sgIntKey, saveCLID, hltLabel }; // sgKey, sgCLID, sgName
+}
+
+
+const std::vector<HLT::TriggerElement::FeatureAccessHelper> Run2ToRun3TrigNavConverterV2::getTEROIfeatures(const HLT::TriggerElement* te_ptr, const HLT::TrigNavStructure& navigationDecoder) const
+{
+  // @@@@@@@@@@@@@@@@@@@@@@@@@@ ordered_sorter @@@@@@@@@@@@@@@@@@@@@@@@@@
+  auto ordered_sorter = [&](const auto& left, const auto& right) -> bool {
+    return std::find(cbegin(m_setRoiName), cend(m_setRoiName), left) < std::find(cbegin(m_setRoiName), cend(m_setRoiName), right);
+  };
+
+  std::map<std::string, HLT::TriggerElement::FeatureAccessHelper, decltype(ordered_sorter)> mp(ordered_sorter);
+
+
+  for (HLT::TriggerElement::FeatureAccessHelper helper : te_ptr->getFeatureAccessHelpers())
+  {
+    auto [sgKey, sgCLID, sgName] = getSgKey(navigationDecoder, helper);
+    ATH_MSG_DEBUG("DDD getTEROIfeatures name " << sgName);
+    if (std::find(m_setRoiName.begin(), m_setRoiName.end(), sgName) == m_setRoiName.end()) {
+      // do not filter continue;
+      continue;
+    }
+    ATH_MSG_DEBUG("DDD getTEROIfeatures name accepted " << sgName);
+    mp[sgName] = helper;
+  }
+
+  for (const auto& p : mp) {
+    auto [sgKey, sgCLID, sgName] = getSgKey(navigationDecoder, p.second);
+    ATH_MSG_DEBUG("DDD CHECK getTEROIfeatures name accepted " << sgName);
+  }
+
+  std::vector<HLT::TriggerElement::FeatureAccessHelper> ptrFAHelper;
+  std::transform(cbegin(mp), cend(mp), back_inserter(ptrFAHelper),
+    [](const std::map<std::string, HLT::TriggerElement::FeatureAccessHelper>::value_type& p) {return p.second;});
+
+  return ptrFAHelper;
+}
diff --git a/Trigger/TrigEvent/TrigNavTools/src/Run2ToRun3TrigNavConverterV2.h b/Trigger/TrigEvent/TrigNavTools/src/Run2ToRun3TrigNavConverterV2.h
index a31ebcac895e321b7cb54e53bc80d7f588931e57..fe13163d615ff6f02be3725cb60d2909e312c695 100644
--- a/Trigger/TrigEvent/TrigNavTools/src/Run2ToRun3TrigNavConverterV2.h
+++ b/Trigger/TrigEvent/TrigNavTools/src/Run2ToRun3TrigNavConverterV2.h
@@ -44,8 +44,12 @@ struct ConvProxy {
   static const uint64_t MissingFEA = 0;
   uint64_t feaHash = MissingFEA;
 
+  std::vector<HLT::TriggerElement::FeatureAccessHelper> features;
+  std::vector<HLT::TriggerElement::FeatureAccessHelper> rois;
+
+  TrigCompositeUtils::Decision* l1Node { nullptr };
   TrigCompositeUtils::Decision* imNode; // for checks only
-  std::vector<TrigCompositeUtils::Decision*> hNodes;
+  TrigCompositeUtils::Decision* hNode;
   std::string description() const;
 };
 
@@ -80,14 +84,16 @@ private:
   Gaudi::Property<size_t> m_hNodesPerProxyThreshold{ this, "hNodesPerProxyThreshhold", 15, "Limit number of H nodes per TE (if exceeded conversion results in an error)" };
   Gaudi::Property<std::vector<std::string>> m_chainsToSave{ this, "Chains", {}, "If not specified, all chains are handled" };
   Gaudi::Property<std::vector<std::string>> m_collectionsToSave{ this, "Collections", {} };
+  Gaudi::Property<std::vector<std::string>> m_roisToSave{ this, "Rois", {} };
 
   SG::WriteHandleKey<xAOD::TrigCompositeContainer> m_trigOutputNavKey{ this, "OutputNavKey", "HLTNav_Summary" };
 
-  StatusCode extractTECtoChainMapping(TEIdToChainsMap_t& allTEs, TEIdToChainsMap_t& finalTEs) const;
+  StatusCode extractTECtoChainMapping(TEIdToChainsMap_t& allTES, TEIdToChainsMap_t& finalTEs) const;
   mutable std::mutex m_configUpdateMutex;
   TEIdToChainsMap_t m_allTEIdsToChains, m_finalTEIdsToChains;
+  
 
-  StatusCode mirrorTEsStructure(ConvProxySet_t&, HLT::StandaloneNavigation& standaloneNav, const EventContext& context) const;
+  StatusCode mirrorTEsStructure(ConvProxySet_t&, const HLT::TrigNavStructure* run2NavPtr) const;
 
   StatusCode associateChainsToProxies(ConvProxySet_t&, const TEIdToChainsMap_t&) const;
 
@@ -105,21 +111,28 @@ private:
   StatusCode collapseProxies(ConvProxySet_t&, MAP&) const;
 
 
-  StatusCode fillRelevantFeatures(ConvProxySet_t&) const;
+  StatusCode fillRelevantFeatures(ConvProxySet_t& convProxies) const;
+  StatusCode fillRelevantRois(ConvProxySet_t& convProxies, const HLT::TrigNavStructure* run2NavPtr) const;
 
   StatusCode createIMHNodes(ConvProxySet_t&, xAOD::TrigCompositeContainer&, const EventContext&) const;
 
+  StatusCode createL1Nodes(const ConvProxySet_t& convProxies, xAOD::TrigCompositeContainer& decisions, const EventContext& context) const;
   StatusCode createFSNodes(const ConvProxySet_t&, xAOD::TrigCompositeContainer&, const TEIdToChainsMap_t& finalTEs,  const EventContext& context) const;
 
   StatusCode linkTopNode(xAOD::TrigCompositeContainer&) const;
 
+  StatusCode linkFeaNode(ConvProxySet_t& convProxies, const HLT::TrigNavStructure* run2NavPtr, const EventContext& context) const;
+  StatusCode linkRoiNode(ConvProxySet_t& convProxies, const HLT::TrigNavStructure* run2NavPtr) const;
+
   // helpers
   //!< both method skip TrigPassBits
   uint64_t feaToHash(const std::vector<HLT::TriggerElement::FeatureAccessHelper>&) const;
   bool feaEqual(const std::vector<HLT::TriggerElement::FeatureAccessHelper>& a, const std::vector<HLT::TriggerElement::FeatureAccessHelper>& b ) const;
 
   //!< returns true if this particular feature is to be saved (linked)
-  bool feaToSave(const HLT::TriggerElement::FeatureAccessHelper&) const;
+  bool feaToSave(const HLT::TriggerElement::FeatureAccessHelper& fea) const;
+  
+  bool roiToSave(const HLT::TrigNavStructure& navigationDecoder, const HLT::TriggerElement::FeatureAccessHelper& fea) const;
 
   // self validators
   // they return failure if something is not ok 
@@ -132,8 +145,25 @@ private:
 
   StatusCode noUnconnectedHNodes(const xAOD::TrigCompositeContainer&) const;
 
+  std::tuple<uint32_t, CLID, std::string> getSgKey(const HLT::TrigNavStructure& navigationDecoder, const HLT::TriggerElement::FeatureAccessHelper& helper) const;
+  const std::vector<HLT::TriggerElement::FeatureAccessHelper> getTEfeatures(const HLT::TriggerElement *te_ptr, const HLT::TrigNavStructure &navigationDecoder, bool filterOnCLID=true) const;
+  const std::vector<HLT::TriggerElement::FeatureAccessHelper> getTEROIfeatures(const HLT::TriggerElement* te_ptr, const HLT::TrigNavStructure& navigationDecoder) const;
+
   std::map<CLID, std::set<std::string>> m_collectionsToSaveDecoded;
 
+  std::vector<std::string> m_setRoiName;
+
+  CLID m_roIDescriptorCLID{0};
+  CLID m_roIDescriptorCollectionCLID{0};
+  CLID m_TrigRingerRingsCLID{0};
+  CLID m_TrigRingerRingsContainerCLID{0};
+  CLID m_TrigEMClusterCLID{0};
+  CLID m_TrigEMClusterContainerCLID{0};
+  CLID m_CaloClusterCLID{0};
+  CLID m_CaloClusterContainerCLID{0};
+  CLID m_TrackParticleContainerCLID{0};
+  CLID m_TauTrackContainerCLID{0};
+
 };
 
 #endif // TRIGNAVTOOLS_RUN2TORUN3TRIGNAVCONVERTERV2_H
\ No newline at end of file