diff --git a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/FullCPAlgorithmsTest.py b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/FullCPAlgorithmsTest.py
index 821c2090a5e437991f217db2721193d2b1852cef..cf1e5b831551d06ca8e079af8add907055c27372 100644
--- a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/FullCPAlgorithmsTest.py
+++ b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/FullCPAlgorithmsTest.py
@@ -447,30 +447,23 @@ def makeSequenceOld (dataType, algSeq, vars, forCompare, isPhyslite, noPhysliteB
 
 def makeSequenceBlocks (dataType, algSeq, vars, forCompare, isPhyslite, noPhysliteBroken) :
 
+    configSeq = ConfigSequence ()
+
+
     if not isPhyslite :
         # Include, and then set up the pileup analysis sequence:
         prwfiles, lumicalcfiles = pileupConfigFiles(dataType)
 
-        from AsgAnalysisAlgorithms.PileupAnalysisSequence import \
-            makePileupAnalysisSequence
-        pileupSequence = makePileupAnalysisSequence(
-            dataType,
-            userPileupConfigs=prwfiles,
-            userLumicalcFiles=lumicalcfiles,
-        )
-        pileupSequence.configure( inputName = {}, outputName = {} )
-
-        # Add the pileup sequence to the job:
-        algSeq += pileupSequence
-
+        from AsgAnalysisAlgorithms.AsgAnalysisConfig import \
+            makePileupReweightingConfig
+        makePileupReweightingConfig (configSeq,
+                                     userPileupConfigs=prwfiles,
+                                     userLumicalcFiles=lumicalcfiles)
 
     vars += [ 'EventInfo.runNumber     -> runNumber',
               'EventInfo.eventNumber   -> eventNumber', ]
 
 
-    configSeq = ConfigSequence ()
-
-
     # Include, and then set up the electron analysis algorithm sequence:
     from EgammaAnalysisAlgorithms.ElectronAnalysisConfig import makeElectronCalibrationConfig, makeElectronWorkingPointConfig
 
diff --git a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/AsgAnalysisConfig.py b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/AsgAnalysisConfig.py
index 7d2cdc057b8179e35fb46963205f0c017ed3f424..6d64cd996fb8178befc42f7d78cb18184fb90d16 100644
--- a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/AsgAnalysisConfig.py
+++ b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/AsgAnalysisConfig.py
@@ -4,6 +4,75 @@
 from AnalysisAlgorithmsConfig.ConfigBlock import ConfigBlock
 
 
+class PileupReweightingBlock (ConfigBlock):
+    """the ConfigBlock for pileup reweighting"""
+
+    def __init__ (self) :
+        super (PileupReweightingBlock, self).__init__ ()
+        self.campaign=None
+        self.files=None
+        self.useDefaultConfig=False
+        self.userLumicalcFiles=None
+        self.userPileupConfigs=None
+
+
+    def makeAlgs (self, config) :
+
+        from Campaigns.Utils import Campaign
+
+        try:
+            from AthenaCommon.Logging import logging
+        except ImportError:
+            import logging
+        log = logging.getLogger('makePileupAnalysisSequence')
+
+        # TODO: support per-campaign config
+
+        toolConfigFiles = []
+        toolLumicalcFiles = []
+        campaign = self.campaign
+        if self.files is not None and (campaign is None or campaign is Campaign.Unknown or self.userPileupConfigs is None):
+            if campaign is None or campaign is Campaign.Unknown:
+                from Campaigns.Utils import getMCCampaign
+                campaign = getMCCampaign(self.files)
+                if campaign:
+                    log.info(f'Autoconfiguring PRW with campaign: {campaign}')
+                else:
+                    log.info('Campaign could not be determined.')
+
+            if campaign:
+                if self.userPileupConfigs is None:
+                    from PileupReweighting.AutoconfigurePRW import getConfigurationFiles
+                    toolConfigFiles = getConfigurationFiles(campaign=campaign, files=self.files, useDefaultConfig=self.useDefaultConfig)
+                    log.info('Setting PRW configuration based on input files')
+
+                    if toolConfigFiles:
+                        log.info(f'Using PRW configuration: {", ".join(toolConfigFiles)}')
+                else:
+                    log.info('Using user provided PRW configuration')
+
+        if self.userPileupConfigs is not None:
+            toolConfigFiles = self.userPileupConfigs[:]
+
+        if self.userLumicalcFiles is not None:
+            log.info('Using user-provided lumicalc files')
+            toolLumicalcFiles = self.userLumicalcFiles[:]
+        else:
+            from PileupReweighting.AutoconfigurePRW import getLumicalcFiles
+            toolLumicalcFiles = getLumicalcFiles(campaign)
+
+        # Set up the only algorithm of the sequence:
+        alg = config.createAlgorithm( 'CP::PileupReweightingAlg', 'PileupReweightingAlg' )
+        config.addPrivateTool( 'pileupReweightingTool', 'CP::PileupReweightingTool' )
+        alg.pileupReweightingTool.ConfigFiles = toolConfigFiles
+        if not toolConfigFiles and dataType != "data":
+            log.info("No PRW config files provided. Disabling reweighting")
+            # Setting the weight decoration to the empty string disables the reweighting
+            alg.pileupWeightDecoration = ""
+        alg.pileupReweightingTool.LumiCalcFiles = toolLumicalcFiles
+
+
+
 class PtEtaSelectionBlock (ConfigBlock):
     """the ConfigBlock for a pt-eta selection"""
 
@@ -83,6 +152,23 @@ class OutputThinningBlock (ConfigBlock):
 
 
 
+def makePileupReweightingConfig( seq, campaign=None, files=None, useDefaultConfig=False, userLumicalcFiles=None, userPileupConfigs=None ):
+    """Create a PRW analysis config
+
+    Keyword arguments:
+    """
+    # TO DO: add explanation of the keyword arguments, left to experts
+
+    config = PileupReweightingBlock ()
+    config.campaign = campaign
+    config.files = files
+    config.useDefaultConfig = useDefaultConfig
+    config.userLumicalcFiles = userLumicalcFiles
+    config.userPileupConfigs = userPileupConfigs
+    seq.append (config)
+
+
+
 def makePtEtaSelectionConfig( seq, containerName,
                               *, postfix = '', minPt = None, maxEta = None,
                               selectionDecoration):