diff --git a/PhysicsAnalysis/Interfaces/TriggerAnalysisInterfaces/TriggerAnalysisInterfaces/ITrigGlobalEfficiencyCorrectionTool.h b/PhysicsAnalysis/Interfaces/TriggerAnalysisInterfaces/TriggerAnalysisInterfaces/ITrigGlobalEfficiencyCorrectionTool.h
index 5e32f6094536551a80cf6317e35936325de20d1a..f454d5a836311c6f8f164632b580533d041902fb 100644
--- a/PhysicsAnalysis/Interfaces/TriggerAnalysisInterfaces/TriggerAnalysisInterfaces/ITrigGlobalEfficiencyCorrectionTool.h
+++ b/PhysicsAnalysis/Interfaces/TriggerAnalysisInterfaces/TriggerAnalysisInterfaces/ITrigGlobalEfficiencyCorrectionTool.h
@@ -41,6 +41,9 @@ public:
 	template<typename... Args>
 	auto checkTriggerMatching(bool& matched, Args&... args) -> std::enable_if_t<validArgs<Args...>(0), CP::CorrectionCode>;
 	
+	/// This will fill the 'triggers' argument with the names of the triggers relevant for the current run number, among those specified in the tool configuration
+	virtual CP::CorrectionCode getRelevantTriggers(std::vector<std::string>& triggers) = 0;
+	
 	/// These should in principle not be used (except by unit tests), as the CP tools require the EventInfo decoration "RandomRunNumber" to be present 
 	virtual CP::CorrectionCode getEfficiencyScaleFactor(unsigned runNumber, const std::vector<const xAOD::IParticle*>& particles, double& efficiencyScaleFactor) = 0;
 	virtual CP::CorrectionCode getEfficiency(unsigned runNumber, const std::vector<const xAOD::IParticle*>& particles, double& efficiencyData, double& efficiencyMc) = 0;	
diff --git a/Trigger/TrigAnalysis/TrigGlobalEfficiencyCorrection/Root/Calculator.cxx b/Trigger/TrigAnalysis/TrigGlobalEfficiencyCorrection/Root/Calculator.cxx
index 44ed309cea9563b44af6cd172b262a3853499c68..f7feade5f1fa4035f03e277935db03c5505391a1 100644
--- a/Trigger/TrigAnalysis/TrigGlobalEfficiencyCorrection/Root/Calculator.cxx
+++ b/Trigger/TrigAnalysis/TrigGlobalEfficiencyCorrection/Root/Calculator.cxx
@@ -66,12 +66,15 @@ bool Calculator::addPeriod(ImportData& data, const std::pair<unsigned,unsigned>&
 	}
 	if(success)
 	{
-		if(m_parent->m_validTrigMatchTool)
+		if(data.adaptTriggerListForTriggerMatching(triggers))
 		{
-			if(!data.adaptTriggerListForTriggerMatching(triggers)) return false;
 			m_periods.emplace_back(boundaries, std::move(helper.m_formula), std::move(triggers));
 		}
-		else m_periods.emplace_back(boundaries, std::move(helper.m_formula));
+		else
+		{
+			if(m_parent->m_validTrigMatchTool) return false;
+			m_periods.emplace_back(boundaries, std::move(helper.m_formula));
+		}
 	}
 	else
 	{
@@ -201,6 +204,33 @@ bool Calculator::checkTriggerMatching(TrigGlobalEfficiencyCorrectionTool& parent
 	return true;
 }
 
+bool Calculator::getRelevantTriggersForUser(TrigGlobalEfficiencyCorrectionTool& parent, std::vector<std::string>& triggers, unsigned runNumber)
+{
+	triggers.clear();
+	m_parent = &parent;
+	auto period = getPeriod(runNumber);
+	if(!period) return false;
+	if(!period->m_triggers.size())
+	{
+		ATH_MSG_ERROR("Empty list of triggers for run number " << runNumber << " (was there a configuration issue? please check for warnings during initialization)");
+		return false;
+	}
+	bool success = true;
+	auto notfound = parent.m_dictionary.end();
+	for(auto& trig : period->m_triggers)
+	{
+		auto itr = parent.m_dictionary.find(trig.name);
+		if(itr == notfound)
+		{
+			ATH_MSG_ERROR("can't retrieve name of trigger with hash " << trig.name << " (shouldn't happen; contact tool developers!)");
+			success = false;
+		}
+		else triggers.push_back(itr->second);
+	}
+	if(!success) triggers.clear();
+	return success;
+}
+
 Efficiencies Calculator::getCachedTriggerLegEfficiencies(const Lepton& lepton, unsigned runNumber, std::size_t leg, bool& success)
 {
 	auto insertion = m_cachedEfficiencies.emplace(std::make_pair(&lepton, leg), Efficiencies());
diff --git a/Trigger/TrigAnalysis/TrigGlobalEfficiencyCorrection/Root/TrigGlobalEfficiencyCorrectionTool.cxx b/Trigger/TrigAnalysis/TrigGlobalEfficiencyCorrection/Root/TrigGlobalEfficiencyCorrectionTool.cxx
index ed6933de0039d36a477f8cf64f1318a07013df1f..513c3dc528f27c0b6afa1f2273dc23bf785cd806 100644
--- a/Trigger/TrigAnalysis/TrigGlobalEfficiencyCorrection/Root/TrigGlobalEfficiencyCorrectionTool.cxx
+++ b/Trigger/TrigAnalysis/TrigGlobalEfficiencyCorrection/Root/TrigGlobalEfficiencyCorrectionTool.cxx
@@ -647,14 +647,23 @@ bool TrigGlobalEfficiencyCorrectionTool::getTriggerLegEfficiencies(const xAOD::M
 
 bool TrigGlobalEfficiencyCorrectionTool::retrieveRunNumber(unsigned& runNumber)
 {
+	runNumber = 0;
 	auto eventInfo = evtStore()->retrieve<const xAOD::EventInfo>("EventInfo");
-	if(!eventInfo || !m_runNumberDecorator.isAvailable(*eventInfo))
+	if(!eventInfo)
 	{
-		ATH_MSG_ERROR("Can't retrieve run number from evtStore()");
-		runNumber = 0;
+		ATH_MSG_ERROR("Can't retrieve 'EventInfo' from evtStore()");
 		return false;
 	}
-	runNumber = m_runNumberDecorator(*eventInfo);
+	if(eventInfo->eventType(xAOD::EventInfo::IS_SIMULATION))
+	{
+		if(!m_runNumberDecorator.isAvailable(*eventInfo))
+		{
+			ATH_MSG_ERROR("Can't retrieve 'RandomRunNumber' from EventInfo");
+			return false;
+		}
+		runNumber = m_runNumberDecorator(*eventInfo);
+	}
+	else runNumber = eventInfo->runNumber();
 	return true;
 }
 
@@ -805,6 +814,17 @@ CP::CorrectionCode TrigGlobalEfficiencyCorrectionTool::checkTriggerMatching(bool
 	return m_calculator->checkTriggerMatching(*this, matched, leptons, runNumber)? CP::CorrectionCode::Ok : CP::CorrectionCode::Error;
 }
 
+CP::CorrectionCode TrigGlobalEfficiencyCorrectionTool::getRelevantTriggers(std::vector<std::string>& triggers)
+{
+	unsigned runNumber;
+	if(!retrieveRunNumber(runNumber))
+	{
+		ATH_MSG_ERROR("Unable to retrieve run number, aborting getRelevantTriggers()");
+		return CP::CorrectionCode::Error;
+	}
+	return m_calculator->getRelevantTriggersForUser(*this, triggers, runNumber)? CP::CorrectionCode::Ok : CP::CorrectionCode::Error;
+}
+
 bool TrigGlobalEfficiencyCorrectionTool::aboveThreshold(const Lepton& lepton, std::size_t leg) const
 {
 	bool decision = (lepton.pt() >= m_thresholds.at(leg));
diff --git a/Trigger/TrigAnalysis/TrigGlobalEfficiencyCorrection/TrigGlobalEfficiencyCorrection/Calculator.h b/Trigger/TrigAnalysis/TrigGlobalEfficiencyCorrection/TrigGlobalEfficiencyCorrection/Calculator.h
index f3947e2d6a46537823bd7670e01f70fbbfd1796f..df75a5562711721ca93728dfb7bf74214f7f886a 100644
--- a/Trigger/TrigAnalysis/TrigGlobalEfficiencyCorrection/TrigGlobalEfficiencyCorrection/Calculator.h
+++ b/Trigger/TrigAnalysis/TrigGlobalEfficiencyCorrection/TrigGlobalEfficiencyCorrection/Calculator.h
@@ -34,6 +34,7 @@ public:
 			bool useToys, std::size_t& uniqueElectronLeg, std::size_t& uniquePhotonLeg);
 	bool compute(TrigGlobalEfficiencyCorrectionTool& parent, const LeptonList& leptons, unsigned runNumber, Efficiencies& efficiencies);
 	bool checkTriggerMatching(TrigGlobalEfficiencyCorrectionTool& parent, bool& matched, const LeptonList& leptons, unsigned runNumber);
+	bool getRelevantTriggersForUser(TrigGlobalEfficiencyCorrectionTool& parent, std::vector<std::string>& triggers, unsigned runNumber);
 	
 	struct Period
 	{
diff --git a/Trigger/TrigAnalysis/TrigGlobalEfficiencyCorrection/TrigGlobalEfficiencyCorrection/TrigGlobalEfficiencyCorrectionTool.h b/Trigger/TrigAnalysis/TrigGlobalEfficiencyCorrection/TrigGlobalEfficiencyCorrection/TrigGlobalEfficiencyCorrectionTool.h
index ef259a3044f7e8ab64425fe6684a290ccb69065d..8d45ddc7f3398f5e93cfa153f3392d8c44a033a4 100644
--- a/Trigger/TrigAnalysis/TrigGlobalEfficiencyCorrection/TrigGlobalEfficiencyCorrection/TrigGlobalEfficiencyCorrectionTool.h
+++ b/Trigger/TrigAnalysis/TrigGlobalEfficiencyCorrection/TrigGlobalEfficiencyCorrection/TrigGlobalEfficiencyCorrectionTool.h
@@ -54,6 +54,7 @@ public:
 	virtual CP::SystematicCode applySystematicVariation(const CP::SystematicSet& systConfig) override;
 
 	virtual CP::CorrectionCode checkTriggerMatching(bool& matched, const std::vector<const xAOD::IParticle*>& particles) override;
+	virtual CP::CorrectionCode getRelevantTriggers(std::vector<std::string>& triggers) override;
 	
 	static CP::CorrectionCode suggestElectronMapKeys(const std::map<std::string,std::string>& triggerCombination,
 		const std::string& version, std::map<std::string,std::string>& legsPerKey);