diff --git a/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref b/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref
index d1e09209b0e42a6af5e1826093475c6022912aad..28210fd550c4e9ad2893054a7212c1a600759682 100644
--- a/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref
+++ b/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref
@@ -9782,6 +9782,16 @@ HLT_j20_0eta290_boffperf_pf_ftf_preselj180_PhysicsTLA_L1J100:
     2: 11
     3: 11
     4: 1
+HLT_j20_JetPEBPhysicsTLA_L1HT190-J15s5pETA21:
+  eventCount: 4
+  stepCounts:
+    0: 4
+    1: 4
+    2: 4
+  stepFeatures:
+    0: 32
+    1: 32
+    2: 32
 HLT_j20_PhysicsTLA_L1HT190-J15s5pETA21:
   eventCount: 4
   stepCounts:
@@ -9878,6 +9888,18 @@ HLT_j20_pf_ftf_presel6j40_PhysicsTLA_L14J15:
     1: 20
     2: 20
     3: 2
+HLT_j20_pf_ftf_preselcHT450_JetPEBPhysicsTLA_L1HT190-J15s5pETA21:
+  eventCount: 1
+  stepCounts:
+    0: 1
+    1: 1
+    2: 1
+    3: 1
+  stepFeatures:
+    0: 1
+    1: 11
+    2: 11
+    3: 11
 HLT_j20_pf_ftf_preselcHT450_PhysicsTLA_L1HT190-J15s5pETA21:
   eventCount: 1
   stepCounts:
@@ -17058,6 +17080,30 @@ HLT_mu8_L1MU5VF:
     1: 12
     2: 10
     3: 9
+HLT_noalg_AFPPEB_L12MU5VF:
+  eventCount: 3
+  stepCounts:
+    0: 3
+  stepFeatures:
+    0: 3
+HLT_noalg_AFPPEB_L1EM22VHI:
+  eventCount: 10
+  stepCounts:
+    0: 10
+  stepFeatures:
+    0: 10
+HLT_noalg_AFPPEB_L1J100:
+  eventCount: 3
+  stepCounts:
+    0: 3
+  stepFeatures:
+    0: 3
+HLT_noalg_AFPPEB_L1MU14FCH:
+  eventCount: 5
+  stepCounts:
+    0: 5
+  stepFeatures:
+    0: 5
 HLT_noalg_CostMonDS_L1All:
   eventCount: 20
   stepCounts:
diff --git a/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref b/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref
index 7ce35b54168a2c39ff532409238279c9570c975c..4b8b7eda09ebb7a4f4aa944bffcfb6025add6028 100644
--- a/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref
+++ b/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref
@@ -3626,6 +3626,8 @@ HLT_j20_0eta290_boffperf_pf_ftf_preselj140_PhysicsTLA_L1J50_DETA20-J50J:
   eventCount: 0
 HLT_j20_0eta290_boffperf_pf_ftf_preselj180_PhysicsTLA_L1J100:
   eventCount: 0
+HLT_j20_JetPEBPhysicsTLA_L1HT190-J15s5pETA21:
+  eventCount: 0
 HLT_j20_PhysicsTLA_L1HT190-J15s5pETA21:
   eventCount: 0
 HLT_j20_PhysicsTLA_L1HT190-jJ40s5pETA21:
@@ -3668,6 +3670,8 @@ HLT_j20_pf_ftf_presel5j50_PhysicsTLA_L14J15:
   eventCount: 0
 HLT_j20_pf_ftf_presel6j40_PhysicsTLA_L14J15:
   eventCount: 0
+HLT_j20_pf_ftf_preselcHT450_JetPEBPhysicsTLA_L1HT190-J15s5pETA21:
+  eventCount: 0
 HLT_j20_pf_ftf_preselcHT450_PhysicsTLA_L1HT190-J15s5pETA21:
   eventCount: 0
 HLT_j20_pf_ftf_preselj140_PhysicsTLA_L1J50:
@@ -6754,6 +6758,26 @@ HLT_mu8_L1MU5VF:
     1: 3
     2: 2
     3: 1
+HLT_noalg_AFPPEB_L12MU5VF:
+  eventCount: 1
+  stepCounts:
+    0: 1
+  stepFeatures:
+    0: 1
+HLT_noalg_AFPPEB_L1EM22VHI:
+  eventCount: 5
+  stepCounts:
+    0: 5
+  stepFeatures:
+    0: 5
+HLT_noalg_AFPPEB_L1J100:
+  eventCount: 0
+HLT_noalg_AFPPEB_L1MU14FCH:
+  eventCount: 2
+  stepCounts:
+    0: 2
+  stepFeatures:
+    0: 2
 HLT_noalg_CostMonDS_L1All:
   eventCount: 50
   stepCounts:
diff --git a/Trigger/TriggerCommon/TrigEDMConfig/python/DataScoutingInfo.py b/Trigger/TriggerCommon/TrigEDMConfig/python/DataScoutingInfo.py
index 4b171297636a706ab77870fa44d9fe0d2a3efdc3..093a4da6050fb9720e75b11f0aacfd5eb6deeab6 100644
--- a/Trigger/TriggerCommon/TrigEDMConfig/python/DataScoutingInfo.py
+++ b/Trigger/TriggerCommon/TrigEDMConfig/python/DataScoutingInfo.py
@@ -21,6 +21,7 @@ CostMonDS, PhysicsTLA
 DataScoutingIdentifiers = {
     'CostMonDS': 1,
     'PhysicsTLA': 5,
+    'JetPEBPhysicsTLA': 6,
 }
 
 
@@ -29,6 +30,7 @@ TruncationThresholds = {
     0: 5*(1024**2),  # Main: 5 MB
     1: 2*(1024**2),  # CostMonDS: 2 MB
     5: 1*(1024**2),  # PhysicsTLA: 1 MB
+    6: 1*(1024**2),  # JetPEBPhysicsTLA: 1 MB
     
 }
 
diff --git a/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py b/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py
index cfa2a8227dea760a6bf91f220e31822f786fc0cc..bb0f1b4175c3dce70391752fe15d74514065e778 100644
--- a/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py
+++ b/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py
@@ -782,25 +782,26 @@ TriggerHLTListRun3 = [
     ('xAOD::JetContainer#HLT_AntiKt4HIJets',                      'BS ESD AODFULL', 'Jet'),
     ('xAOD::JetAuxContainer#HLT_AntiKt4HIJetsAux.'+HIJetVars,       'BS ESD AODFULL', 'Jet'),
 
-    # TLA jets
+    # TLA jets + PEB jets
+    ('TrigRoiDescriptorCollection#HLT_Roi_JetPEBPhysicsTLA',             'BS ESD JetPEBPhysicsTLA',  'Jet'),
 
-    ('xAOD::TrigCompositeContainer#HLT_TCEventInfo_TLA',                                 'BS PhysicsTLA ESD', 'Jet' ),
-    ('xAOD::TrigCompositeAuxContainer#HLT_TCEventInfo_TLAAux.JetDensityEMPFlow.JetDensityEMTopo.AvgMu.NumPV',         'BS PhysicsTLA ESD', 'Jet'    ),
+    ('xAOD::TrigCompositeContainer#HLT_TCEventInfo_TLA',                                 'BS PhysicsTLA JetPEBPhysicsTLA ESD', 'Jet' ),
+    ('xAOD::TrigCompositeAuxContainer#HLT_TCEventInfo_TLAAux.JetDensityEMPFlow.JetDensityEMTopo.AvgMu.NumPV',         'BS PhysicsTLA JetPEBPhysicsTLA ESD', 'Jet'    ),
 
-    ('xAOD::JetContainer#HLT_AntiKt4EMTopoJets_subjesIS_TLA',                      'BS PhysicsTLA ESD', 'Jet'),
-    ('xAOD::JetAuxContainer#HLT_AntiKt4EMTopoJets_subjesIS_TLAAux.'+TLAJetVars,       'BS PhysicsTLA ESD', 'Jet'),
+    ('xAOD::JetContainer#HLT_AntiKt4EMTopoJets_subjesIS_TLA',                      'BS PhysicsTLA JetPEBPhysicsTLA ESD', 'Jet'),
+    ('xAOD::JetAuxContainer#HLT_AntiKt4EMTopoJets_subjesIS_TLAAux.'+TLAJetVars,       'BS PhysicsTLA JetPEBPhysicsTLA ESD', 'Jet'),
 
-    ('xAOD::JetContainer#HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_TLA',                      'BS PhysicsTLA ESD', 'Jet'),
-    ('xAOD::JetAuxContainer#HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_TLAAux.'+TLAJetVars,       'BS PhysicsTLA ESD', 'Jet'),
+    ('xAOD::JetContainer#HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_TLA',                      'BS PhysicsTLA JetPEBPhysicsTLA ESD', 'Jet'),
+    ('xAOD::JetAuxContainer#HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_TLAAux.'+TLAJetVars,       'BS PhysicsTLA JetPEBPhysicsTLA ESD', 'Jet'),
 
 
     # TLA Photons
-    ('xAOD::PhotonContainer#HLT_egamma_Photons_TLA',                                    'BS PhysicsTLA ESD', 'Egamma'),
-    ('xAOD::PhotonAuxContainer#HLT_egamma_Photons_TLAAux.',                             'BS PhysicsTLA ESD', 'Egamma'),
+    ('xAOD::PhotonContainer#HLT_egamma_Photons_TLA',                                    'BS PhysicsTLA JetPEBPhysicsTLA ESD', 'Egamma'),
+    ('xAOD::PhotonAuxContainer#HLT_egamma_Photons_TLAAux.',                             'BS PhysicsTLA JetPEBPhysicsTLA ESD', 'Egamma'),
 
     # TLA Muons
-    ('xAOD::MuonContainer#HLT_MuonsCB_RoI_TLA',                                       'BS PhysicsTLA ESD', 'Muon'),
-    ('xAOD::MuonAuxContainer#HLT_MuonsCB_RoI_TLAAux.',                                'BS PhysicsTLA ESD', 'Muon'),
+    ('xAOD::MuonContainer#HLT_MuonsCB_RoI_TLA',                                       'BS PhysicsTLA JetPEBPhysicsTLA ESD', 'Muon'),
+    ('xAOD::MuonAuxContainer#HLT_MuonsCB_RoI_TLAAux.',                                'BS PhysicsTLA JetPEBPhysicsTLA ESD', 'Muon'),
 
     # FS tracks
     ('xAOD::TrackParticleContainer#HLT_IDTrack_FS_FTF',                 'BS ESD AODFULL', 'Jet'),
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/CommonSequences/EventBuildingSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/CommonSequences/EventBuildingSequences.py
index e1b4644e5329e8d05afed6edd0da7ac1ee2f67f6..ce6536c366e74320f955f1359c9ebce5f447775a 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/CommonSequences/EventBuildingSequences.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/CommonSequences/EventBuildingSequences.py
@@ -201,6 +201,15 @@ def pebInfoWriterTool(flags, name, eventBuildType):
                          SubDetector.TDAQ_CALO_JET_PROC_ROI,
                          SubDetector.TDAQ_CTP
         ])
+    elif 'JetPEBPhysicsTLA' == eventBuildType:
+        tool = RoIPEBInfoWriterToolCfg(name)
+        # Add subdetectors within a ROI for PEB
+        tool.addRegSelDets(flags,['Pixel', 'SCT', 'TRT', 'TTEM', 'TTHEC', 'FCALEM', 'FCALHAD', 'TILE'])
+        tool.EtaWidth = 0.6 # half-width (the RoI is between etaJet-EtaWidth and etaJet+EtaWidth) 
+        tool.PhiWidth = 0.6
+        tool.MaxRoIs = 3                                                                                              
+        moduleId = DataScoutingInfo.getDataScoutingResultID(eventBuildType)
+        tool.addHLTResultToROBList(moduleId)
 
     elif eventBuildType in DataScoutingInfo.getAllDataScoutingIdentifiers():
         # Pure DataScouting configuration
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/CommonSequences/TLABuildingSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/CommonSequences/TLABuildingSequences.py
index 1f75e2821a099d72a512449cc987ba1a94fba868..ab4168687b12ec8bcf3680dd0ce8537fa18fa090 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/CommonSequences/TLABuildingSequences.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/CommonSequences/TLABuildingSequences.py
@@ -80,7 +80,7 @@ def findTLAStep(chainConfig):
 def alignTLASteps(chain_configs, chain_dicts):
 
     def is_tla_dict(chainNameAndDict):
-        return  chainNameAndDict[1]['eventBuildType'] == 'PhysicsTLA' 
+        return  'PhysicsTLA' in chainNameAndDict[1]['eventBuildType'] 
 
     all_tla_chain_dicts = dict(filter(is_tla_dict, chain_dicts.items()))
     all_tla_chain_names = list(all_tla_chain_dicts.keys())
@@ -92,7 +92,7 @@ def alignTLASteps(chain_configs, chain_dicts):
     all_tla_chain_configs = dict(filter(is_tla_config, chain_configs.items()))
 
 
-    maxTLAStepPosition = {} # {eventBuildType: N}
+    maxTLAStepPosition = 0 # {eventBuildType: N}
 
     def getTLAStepPosition(chainConfig):
         tlaStep = findTLAStep(chainConfig)
@@ -106,16 +106,13 @@ def alignTLASteps(chain_configs, chain_dicts):
     # First loop to find the maximal TLA step positions to which we need to align
     for chainName, chainConfig in all_tla_chain_configs.items():
         tlaStepPosition = getTLAStepPosition(chainConfig)
-        ebt = all_tla_chain_dicts[chainName]['eventBuildType']
-        if ebt not in maxTLAStepPosition or tlaStepPosition > maxTLAStepPosition[ebt]:
-            maxTLAStepPosition[ebt] = tlaStepPosition
-
+        if tlaStepPosition > maxTLAStepPosition:
+            maxTLAStepPosition = tlaStepPosition
+    
     # Second loop to insert empty steps before the TLA steps where needed
     for chainName, chainConfig in all_tla_chain_configs.items():
         tlaStepPosition = getTLAStepPosition(chainConfig)
-        ebt = all_tla_chain_dicts[chainName]['eventBuildType']
-        if tlaStepPosition < maxTLAStepPosition[ebt]:
-            numStepsNeeded = maxTLAStepPosition[ebt] - tlaStepPosition
+        if tlaStepPosition < maxTLAStepPosition:
+            numStepsNeeded = maxTLAStepPosition - tlaStepPosition
             log.debug('Aligning TLA step for chain %s by adding %d empty steps', chainName, numStepsNeeded)
             chainConfig.insertEmptySteps('EmptyTLAAlign', numStepsNeeded, tlaStepPosition-1)
-
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Dev_pp_run3_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Dev_pp_run3_v1.py
index 3a1102d64208fbc7865cd76d010795947bb6d0c7..b5f2ac922eab24e5b9b25fb76f6988874d4a34b1 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Dev_pp_run3_v1.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Dev_pp_run3_v1.py
@@ -171,6 +171,10 @@ def setupMenu():
         ChainProp(name='HLT_j20_pf_ftf_presel6j40_PhysicsTLA_L14J15', l1SeedThresholds=['FSNOSEED'], stream=['TLA'], groups=MultiJetGroup+DevGroup),
         ## with calo fast-tag presel - so actually btag TLA ATR-23002
         ChainProp(name='HLT_2j20_2j20_pf_ftf_presel2j25XX2j25b85_PhysicsTLA_L14J15p0ETA25', l1SeedThresholds=['FSNOSEED']*2, stream=['TLA'], groups=MultiJetGroup+DevGroup),
+        
+        #TLA+PEB test for jets ATR-21596, matching "multijet+PFlow" TLA chain in physics menu for cross-check of event size
+        ChainProp(name='HLT_j20_pf_ftf_preselcHT450_JetPEBPhysicsTLA_L1HT190-J15s5pETA21', l1SeedThresholds=['FSNOSEED'], stream=['TLAJetPEB'], groups=DevGroup+MultiJetGroup+LegacyTopoGroup),
+        ChainProp(name='HLT_j20_JetPEBPhysicsTLA_L1HT190-J15s5pETA21', l1SeedThresholds=['FSNOSEED'], stream=['TLAJetPEB'], groups=DevGroup+MultiJetGroup+LegacyTopoGroup),
 
         #
         ChainProp(name='HLT_6j25c_L14J15', l1SeedThresholds=['FSNOSEED'],            groups=MultiJetGroup+DevGroup),
@@ -561,6 +565,13 @@ def setupMenu():
         # high-mu AFP
         ChainProp(name='HLT_2j20_mb_afprec_afpdijet_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED']*2, stream=[PhysicsStream],groups=['PS:Online']+MinBiasGroup+SupportLegGroup),
 
+        # Test PEB chains for AFP (single/di-lepton-seeded, can be prescaled)
+        # ATR-23946
+        ChainProp(name='HLT_noalg_AFPPEB_L1EM22VHI', l1SeedThresholds=['FSNOSEED'], stream=['AFPPEB'], groups=MinBiasGroup),
+        ChainProp(name='HLT_noalg_AFPPEB_L1MU14FCH', l1SeedThresholds=['FSNOSEED'], stream=['AFPPEB'], groups=MinBiasGroup),
+        ChainProp(name='HLT_noalg_AFPPEB_L12MU5VF', l1SeedThresholds=['FSNOSEED'], stream=['AFPPEB'], groups=MinBiasGroup),
+        ChainProp(name='HLT_noalg_AFPPEB_L1J100', l1SeedThresholds=['FSNOSEED'], stream=['AFPPEB'], groups=MinBiasGroup),
+        
         #ATR-23156 will be superseeded by ATR-24698
         ChainProp(name='HLT_mu4_j20_0eta290_boffperf_pf_ftf_dRAB03_L1MU3V', l1SeedThresholds=['MU3V','FSNOSEED'], groups=SingleBjetGroup),
         ChainProp(name='HLT_mu4_j35_0eta290_boffperf_pf_ftf_dRAB03_L1BTAG-MU3VjJ40', l1SeedThresholds=['MU3V','FSNOSEED'], groups=SingleBjetGroup+Topo2Group),
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/StreamInfo.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/StreamInfo.py
index e6bf90aa605f18ab728a2fbce384e6cfeed10e43..dde13d9666c41051f7b0803f7723aad3a523fadc 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/StreamInfo.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/StreamInfo.py
@@ -50,6 +50,8 @@ _all_streams = [
     StreamInfo('Late', 'physics', True, True),
     # TLA/PEB/DATA SCOUTING (physics) STREAMS
     StreamInfo('TLA','physics',True,False),
+    StreamInfo('TLAJetPEB', 'physics', True, False),
+    StreamInfo('AFPPEB','physics',True,False),
     # EXPRESS STREAM
     StreamInfo('express', 'express', True, True),
     # MONITORING STREAMS