diff --git a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/CalibrationDataInterface/CalibrationDataEigenVariations.h b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/CalibrationDataInterface/CalibrationDataEigenVariations.h
index 94b332549990cf2b58c79c5b994dce04fe0353fd..c2eb5e166a586c1c497779d48004f24de5a09618 100644
--- a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/CalibrationDataInterface/CalibrationDataEigenVariations.h
+++ b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/CalibrationDataInterface/CalibrationDataEigenVariations.h
@@ -103,6 +103,9 @@ namespace Analysis
     /** eigenvector variations */
     std::vector<std::pair<TH1*, TH1*> > m_eigen;
 
+    /** indicate whether statistical uncertainties are stored as variations */
+    bool m_statVariations;
+    
     // /** @ data members needed for eigenvector method **/
     // /** the map stores the int which is needed to access the other vector<> objects **/
     // mutable std::map<std::string, unsigned int> m_eigenvectorMethod_index;
diff --git a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/CalibrationDataInterface/CalibrationDataInterfaceROOT.h b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/CalibrationDataInterface/CalibrationDataInterfaceROOT.h
index 1a6590e9964b82d9cbc3d80096f68e4bd6560c14..d7683803a042ac75b350f87837c1f83892788f9e 100644
--- a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/CalibrationDataInterface/CalibrationDataInterfaceROOT.h
+++ b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/CalibrationDataInterface/CalibrationDataInterfaceROOT.h
@@ -99,7 +99,8 @@ namespace Analysis
 				   const std::map<std::string, std::vector<std::string> >& excludeFromEV,
 				   const std::map<std::string, Analysis::EVReductionStrategy> EVReductions,
 				   bool useEV = true, bool useMCMCSF = true,
-				   bool useTopologyRescaling = false, bool useRecommendedEVExclusions = false);
+				   bool useTopologyRescaling = false, bool useRecommendedEVExclusions = false,
+				   bool verbose = true);
 
       /** default constructor for PROOF object retrieval */
       CalibrationDataInterfaceROOT();
@@ -412,6 +413,9 @@ namespace Analysis
 
       /** if true, exclude pre-recommended lists of uncertainties from the covariance matrix building, in addition to the above user specified lists **/
       bool m_useRecommendedEVExclusions;
+      
+      /** if true, allow also for some informational (and not only error/warning) messages **/
+      bool m_verbose;
 
       // ------------------------------------------------------------------------------------------
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/Root/CalibrationDataEigenVariations.cxx b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/Root/CalibrationDataEigenVariations.cxx
index 824c1f8011b16bdf3f45c8b2a6d3c05c9dbaf1d4..31375312c8240a29323360ea85055ddead9ff2c8 100644
--- a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/Root/CalibrationDataEigenVariations.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/Root/CalibrationDataEigenVariations.cxx
@@ -15,6 +15,7 @@
 #include <limits>
 #include <set>
 #include <algorithm>
+#include <string>
 #include <cmath>
 
 #include "TH1.h"
@@ -38,7 +39,10 @@ namespace {
   // But in order to avoid unnecessary overhead, the actual dimensionality of the histograms is accounted for.
 
   // Construct the (diagonal) covariance matrix for the statistical uncertainties on the "ref" results
-  TMatrixDSym getStatCovarianceMatrix(const TH1* hist) {
+  // Note that when statistical uncertainties are stored as variations, they are already accounted for and hence should not be duplicated; hence they are dummy here
+  // (this is not very nice, in that the result of this function will technically be wrong,
+  // but the statistical uncertainty covariance matrix is anyway not separately visible to the outside world)
+  TMatrixDSym getStatCovarianceMatrix(const TH1* hist, bool zero) {
     Int_t nbinx = hist->GetNbinsX()+2, nbiny = hist->GetNbinsY()+2, nbinz = hist->GetNbinsZ()+2;
     Int_t rows = nbinx;
     if (hist->GetDimension() > 1) rows *= nbiny;
@@ -54,7 +58,7 @@ namespace {
       for (Int_t biny = 1; biny < nbiny-1; ++biny)
 	for (Int_t binz = 1; binz < nbinz-1; ++binz) {
 	  Int_t bin = hist->GetBin(binx, biny, binz);
-	  double err = hist->GetBinError(bin);
+	  double err = zero ? 0 : hist->GetBinError(bin);
 	  stat(bin, bin) = err*err;
 	}
     return stat;
@@ -198,7 +202,7 @@ ClassImp(CalibrationDataEigenVariations)
 //________________________________________________________________________________
 CalibrationDataEigenVariations::CalibrationDataEigenVariations(const CalibrationDataHistogramContainer* cnt,
 							       bool excludeRecommendedUncertaintySet) :
-  m_cnt(cnt), m_initialized(false), m_namedExtrapolation(-1)
+m_cnt(cnt), m_initialized(false), m_namedExtrapolation(-1), m_statVariations(false)
 {
   // if specified, add items recommended for exclusion from EV decomposition by the calibration group to the 'named uncertainties' list
   if (excludeRecommendedUncertaintySet) {
@@ -208,6 +212,11 @@ CalibrationDataEigenVariations::CalibrationDataEigenVariations(const Calibration
       std::cerr << "CalibrationDataEigenVariations warning: exclusion of pre-set uncertainties list requested but no (or empty) list found" << std::endl;
     }
   }
+  // also flag if statistical uncertainties stored as variations (this typically happens as a result of smoothing / pruning of SF results)
+  vector<string> uncs = m_cnt->listUncertainties();
+  for (auto name : uncs) {
+    if (name.find("stat_np") != string::npos) m_statVariations = true;
+  }
 }
 
 //________________________________________________________________________________
@@ -284,7 +293,9 @@ CalibrationDataEigenVariations::getEigenCovarianceMatrix() const
   // First, treat the statistics separately.
   // Account for the possibility that this is handled as a (non-trivial) covariance matrix
   TMatrixDSym* sCov = dynamic_cast<TMatrixDSym*>(m_cnt->GetValue("statistics"));
-  TMatrixDSym cov = (sCov) ? *sCov : getStatCovarianceMatrix(result);
+  // Alternatively, statistical uncertainties may be accounted for as variations (i.e., much like systematic uncertainties).
+  // In that case, we create a null matrix here and add the statistical contributions along with the systematic ones.
+  TMatrixDSym cov = (sCov) ? *sCov : getStatCovarianceMatrix(result, m_statVariations);
 
   // Then loop through the list of (other) uncertainties
   std::vector<string> uncs = m_cnt->listUncertainties();
diff --git a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/Root/CalibrationDataInterfaceROOT.cxx b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/Root/CalibrationDataInterfaceROOT.cxx
index 08149d577387c831d77b4fb4f29c6c85958cb61e..708fcd7cb0f1acd58306733c4f50a2d3f8687e1c 100644
--- a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/Root/CalibrationDataInterfaceROOT.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/Root/CalibrationDataInterfaceROOT.cxx
@@ -289,8 +289,9 @@ ClassImp(Analysis::CalibrationDataInterfaceROOT)
 #endif
 
 //________________________________________________________________________________
-Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const string& taggerName, string configname, string pathname)
-  :     m_runEigenVectorMethod(false), m_useRecommendedEVExclusions(false), m_absEtaStrategy(GiveUp), m_otherStrategy(Flag)
+Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const string& taggerName, string configname, string pathname) :
+  m_runEigenVectorMethod(false), m_useRecommendedEVExclusions(false), m_verbose(true),
+  m_absEtaStrategy(GiveUp), m_otherStrategy(Flag)
 {
   // Normal constructor.
   //
@@ -313,11 +314,13 @@ Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const strin
     m_filenameSF = pathname + filename.Data();
   }
 
-  cout << "=== CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT ===" << endl;
-  cout << " Config name          : " << configname << endl;
-  cout << " taggerName           : " << taggerName << endl;
-  cout << " Efficiency file name : " << m_filenameEff << endl 
-       << " SF         file name : " << m_filenameSF << endl;
+  if (m_verbose) {
+    cout << "=== CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT ===" << endl;
+    cout << " Config name          : " << configname << endl;
+    cout << " taggerName           : " << taggerName << endl;
+    cout << " Efficiency file name : " << m_filenameEff << endl 
+	 << " SF         file name : " << m_filenameSF << endl;
+  }
 
   m_fileEff = TFile::Open(m_filenameEff.c_str(), "READ");
   if (m_filenameEff == m_filenameSF)
@@ -325,10 +328,12 @@ Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const strin
   else
     m_fileSF = TFile::Open(m_filenameSF.c_str(), "READ");
 
-  TObjString* s;
-  m_fileSF->GetObject("VersionInfo/BuildNumber", s);
-  if (s) cout << " CDI file build number: " << s->GetName() << endl;
-  cout << endl;
+  if (m_verbose) {
+    TObjString* s;
+    m_fileSF->GetObject("VersionInfo/BuildNumber", s);
+    if (s) cout << " CDI file build number: " << s->GetName() << endl;
+    cout << endl;
+  }
 
   std::string flavours[] = { "B", "C", "T", "Light" };
   string testPrefix(taggerName); testPrefix += ".";
@@ -396,23 +401,25 @@ Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const strin
       m_excludeFromCovMatrix[flavour].insert(m_excludeFromCovMatrix[flavour].end(), to_exclude.begin(), to_exclude.end());
     }
     
-    cout << " List of uncertainties to exclude:";
     unsigned int n_excluded = 0;
     for (auto const& flavour : flavours) {
       n_excluded += m_excludeFromCovMatrix[flavour].size();
     }
-    if (n_excluded == 0) cout << " none";
-    for (auto const& flavour : flavours) {
-      if (m_excludeFromCovMatrix[flavour].size() > 0) {
-	cout << "\n\t" << flavour << ":\t";
-	for (unsigned int i = 0; i < m_excludeFromCovMatrix[flavour].size(); ++i) {
-	  cout << m_excludeFromCovMatrix[flavour][i];
-	  if (i+1 != m_excludeFromCovMatrix[flavour].size()) cout << ";  ";
+    if (m_verbose) {
+      cout << " List of uncertainties to exclude:";
+      if (n_excluded == 0) cout << " none";
+      for (auto const& flavour : flavours) {
+	if (m_excludeFromCovMatrix[flavour].size() > 0) {
+	  cout << "\n\t" << flavour << ":\t";
+	  for (unsigned int i = 0; i < m_excludeFromCovMatrix[flavour].size(); ++i) {
+	    cout << m_excludeFromCovMatrix[flavour][i];
+	    if (i+1 != m_excludeFromCovMatrix[flavour].size()) cout << ";  ";
+	  }
+	  cout << endl;
 	}
-	cout << endl;
       }
+      cout << endl;
     }
-    cout << endl;
 
     // The following determines whether also pre-determined (recommended) lists of uncertainties are to be excluded from EV decomposition.
     // These lists are stored with the CalibrationDataContainers, which have not been instantiated yet (so we cannot show them at this point).
@@ -463,7 +470,7 @@ Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const strin
   // MC/MC (topology) scale factors: making this user-steerable is intended to be *temporary* only
   m_useTopologyRescaling = (bool) env.GetValue("useTopologySF", 0);
 
-  cout << "======= end of CalibrationDataInterfaceROOT instantiation ========" << endl;
+  if (m_verbose) cout << "======= end of CalibrationDataInterfaceROOT instantiation ========" << endl;
 }
 
 
@@ -476,10 +483,10 @@ Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const std::
 								     const std::map<std::string, std::vector<std::string> >& excludeFromEV,
 								     const std::map<std::string, EVReductionStrategy> EVReductions,
 								     bool useEV, bool useMCMCSF, bool useTopologyRescaling,
-								     bool useRecommendedEEVExclusions) :
+								     bool useRecommendedEEVExclusions, bool verbose) :
   m_filenameSF(fileSF), m_filenameEff(""),
   m_runEigenVectorMethod(useEV), m_EVReductions(EVReductions),
-  m_useRecommendedEVExclusions(useRecommendedEEVExclusions),
+  m_useRecommendedEVExclusions(useRecommendedEEVExclusions), m_verbose(verbose),
   m_useMCMCSF(useMCMCSF), m_useTopologyRescaling(useTopologyRescaling),
   m_maxAbsEta(2.5), m_absEtaStrategy(GiveUp),
   m_otherStrategy(Flag), m_maxTagWeight(10.0)
@@ -512,11 +519,13 @@ Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const std::
   // Note: at present, the means to change the strategies and maximum values initialized above do not exist
   // when using this constructor
 
-  cout << "=== CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT ===" << endl;
-  cout << " taggerName           : " << taggerName.c_str() << endl;
-  if (fileEff) cout << " Efficiency file name : " << fileEff << endl;
-  cout << " SF         file name : " << fileSF << endl
-       << endl;
+  if (m_verbose) {
+    cout << "=== CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT ===" << endl;
+    cout << " taggerName           : " << taggerName.c_str() << endl;
+    if (fileEff) cout << " Efficiency file name : " << fileEff << endl;
+    cout << " SF         file name : " << fileSF << endl
+	 << endl;
+  }
 
   m_taggerName = taggerName;
 
@@ -527,11 +536,13 @@ Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const std::
   } else
     m_fileEff = m_fileSF;
 
-  TObjString* s;
-  m_fileSF->GetObject("VersionInfo/BuildNumber", s);
-  if (s) cout << " CDI file build number: " << s->GetName() << endl;
-  cout << endl;
-
+  if (m_verbose) {
+    TObjString* s;
+    m_fileSF->GetObject("VersionInfo/BuildNumber", s);
+    if (s) cout << " CDI file build number: " << s->GetName() << endl;
+    cout << endl;
+  }
+  
   for (unsigned int i = 0; i < jetAliases.size(); ++i) {
     // Each alias specification uses an arrow ("->"). Forget about entries
     // not properly following this specification.
@@ -546,26 +557,29 @@ Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const std::
   if (m_runEigenVectorMethod) {
     m_excludeFromCovMatrix = excludeFromEV;
 
-    cout << " List of uncertainties to exclude:";
     std::string flavours[] = { "B", "C", "T", "Light" };
     unsigned int n_excluded = 0;
     for (auto const& flavour : flavours) {
       n_excluded += m_excludeFromCovMatrix[flavour].size();
     }
-    if (n_excluded == 0) cout << " none";
-    for (auto const& flavour : flavours) {
-      if (m_excludeFromCovMatrix[flavour].size() > 0) {
-	cout << "\n\t" << flavour << ":\t";
-	for (unsigned int i = 0; i < m_excludeFromCovMatrix[flavour].size(); ++i) {
-	  cout << m_excludeFromCovMatrix[flavour][i];
-	  if (i+1 != m_excludeFromCovMatrix[flavour].size()) cout << ";  ";
+    if (m_verbose) {
+      cout << " List of uncertainties to exclude:";
+      if (n_excluded == 0) cout << " none";
+      for (auto const& flavour : flavours) {
+	if (m_excludeFromCovMatrix[flavour].size() > 0) {
+	  cout << "\n\t" << flavour << ":\t";
+	  for (unsigned int i = 0; i < m_excludeFromCovMatrix[flavour].size(); ++i) {
+	    cout << m_excludeFromCovMatrix[flavour][i];
+	    if (i+1 != m_excludeFromCovMatrix[flavour].size()) cout << ";  ";
+	  }
+	  cout << endl;
 	}
-	cout << endl;
       }
+      cout << endl;
     }
-    cout << endl;
   }
-  cout << "======= end of CalibrationDataInterfaceROOT instantiation ========" << endl;
+  
+  if (m_verbose) cout << "======= end of CalibrationDataInterfaceROOT instantiation ========" << endl;
 }
 
 //________________________________________________________________________________
@@ -631,7 +645,7 @@ Analysis::CalibrationDataInterfaceROOT::~CalibrationDataInterfaceROOT()
   }
 
   // Print summary output on out-of-bounds issues
-  if (m_absEtaStrategy == Flag) {
+  if (m_absEtaStrategy == Flag && m_verbose) {
     bool found = false;
     cout << "\t\tCalibrationDataInterfaceROOT |eta| out-of-bounds summary:" << endl;
     for (unsigned int index = 0; index < m_mainCounters.size(); ++index)
@@ -641,7 +655,7 @@ Analysis::CalibrationDataInterfaceROOT::~CalibrationDataInterfaceROOT()
       }
     if (!found) cout << "\t\t\tNo issues found" << endl;
   }
-  if (m_otherStrategy == Flag) {
+  if (m_otherStrategy == Flag && m_verbose) {
     bool found = false;
     cout << "\t\tCalibrationDataInterfaceROOT object out-of-bounds summary:" << endl;
     for (unsigned int index = 0; index < m_mainCounters.size(); ++index)
@@ -694,7 +708,7 @@ Analysis::CalibrationDataInterfaceROOT::retrieveCalibrationIndex (const std::str
     string flavour = (label == "N/A") ? "Light" : label;
     string dirname = m_taggerName + "/" + getAlias(author) + "/" + OP + "/" + flavour;
     string cntname = getContainername(flavour, isSF, mapIndex);
-    const_cast<Analysis::CalibrationDataInterfaceROOT*>(this)->retrieveContainer(dirname, cntname, isSF);
+    const_cast<Analysis::CalibrationDataInterfaceROOT*>(this)->retrieveContainer(dirname, cntname, isSF, m_verbose);
     it = m_objectIndices.find(name);
     if (it == m_objectIndices.end()) return false;
   }
@@ -793,8 +807,8 @@ Analysis::CalibrationDataInterfaceROOT::getScaleFactor (const CalibrationDataVar
 
   if (!m_runEigenVectorMethod && (unc == SFEigen || unc == SFNamed))
   {
-     cerr << " ERROR. Trying to call eigenvector method but initialization not switched on in b-tagging .env config file." << endl;
-     cerr << " Please correct your .env config file first. Nominal uncertainties used. " << endl;
+     cerr << " ERROR. Trying to call eigenvector method but initialization not switched on in b-tagging configuration." << endl;
+     cerr << " Please correct your configuration first. Nominal uncertainties used. " << endl;
   }
   if (unc == SFEigen || unc == SFNamed) {
     const CalibrationDataEigenVariations* eigenVariation=m_eigenVariationsMap[container];
@@ -2340,6 +2354,8 @@ Analysis::CalibrationDataInterfaceROOT::retrieveContainer(const string& dir, con
   //              file (the calibration scale factor file). Note that it is assumed that scale
   //              factor objects will always be retrieved from the calibration scale factor file.
   //     doPrint: if true, print out some basic information about the successfully retrieved container
+  //              (note that this is typically steered by the m_verbose setting;
+  //               only for the retrieval of the maps used for MC/MC SF calculations, this printout is always switched off)
 
   // construct the full object name
   string name = dir + "/" + cntname;
@@ -2359,7 +2375,7 @@ Analysis::CalibrationDataInterfaceROOT::retrieveContainer(const string& dir, con
   if (!isSF && !cnt && m_fileSF != m_fileEff) m_fileSF->GetObject(name.c_str(), cnt);
   m_objects.push_back(cnt);
   if (!cnt) {
-    cout << "btag Calib: retrieveContainer: failed to retrieve container named " << name.c_str() << " from file" << endl;
+    cerr << "btag Calib: retrieveContainer: failed to retrieve container named " << name.c_str() << " from file" << endl;
     return 0;
   }
 
@@ -2385,7 +2401,7 @@ Analysis::CalibrationDataInterfaceROOT::retrieveContainer(const string& dir, con
       delete mapEff;
     } else {
       string SFCalibName = getContainername(getBasename(dir), true);
-      if (m_objectIndices.find(SFCalibName) == m_objectIndices.end()) retrieveContainer(dir, SFCalibName, true);
+      if (m_objectIndices.find(SFCalibName) == m_objectIndices.end()) retrieveContainer(dir, SFCalibName, true, doPrint);
     }
   }
 
@@ -2414,13 +2430,13 @@ Analysis::CalibrationDataInterfaceROOT::retrieveContainer(const string& dir, con
 	m_hadronisationReference[idx] = it->second;
       }
     } else if (m_useMCMCSF)
-      cout << "btag Calib: retrieveContainer: MC hadronisation reference map not found -- this should not happen!" << endl;
+      cerr << "btag Calib: retrieveContainer: MC hadronisation reference map not found -- this should not happen!" << endl;
   }
   if (m_hadronisationReference[idx] == -1 || ! m_objects[m_hadronisationReference[idx]])
     // Not being able to construct the MC/MC scale factors will lead to a potential bias.
     // However, this is not considered sufficiently severe that we will flag it as an error.
     if (m_useMCMCSF)
-      cout << "btag Calib: retrieveContainer: warning: unable to apply MC/MC scale factors for container "
+      cerr << "btag Calib: retrieveContainer: warning: unable to apply MC/MC scale factors for container "
 	   << name << " with hadronisation reference = '" << spec << "'" << endl;
 
   // Initialize the Eigenvector variation object corresponding to this object, if applicable. Notes:
@@ -2445,7 +2461,7 @@ Analysis::CalibrationDataInterfaceROOT::retrieveContainer(const string& dir, con
     newEigenVariation->initialize();
     int to_retain = histoContainer->getEigenvectorReduction(m_EVReductions[flavour]);
     if (to_retain > -1) {
-      cout << "btag Calib: reducing number of eigenvector variations for flavour " << flavour << " to " << to_retain << endl;
+      if (m_verbose) cout << "btag Calib: reducing number of eigenvector variations for flavour " << flavour << " to " << to_retain << endl;
       // The merged variations will end up as the first entry in the specified list, i.e., as the last of the variations to be "retained"
       newEigenVariation->mergeVariationsFrom(size_t(to_retain-1));
     } else if (m_EVReductions[flavour] != Loose)
diff --git a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/Root/BTaggingEfficiencyTool.cxx b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/Root/BTaggingEfficiencyTool.cxx
index 55d071d4851473e183f8215ac6ca879e35b016f0..a7571748508afcb31aecfab4d69d1445b0bad255 100644
--- a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/Root/BTaggingEfficiencyTool.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/Root/BTaggingEfficiencyTool.cxx
@@ -150,6 +150,7 @@ BTaggingEfficiencyTool::BTaggingEfficiencyTool( const std::string & name) : asg:
   declareProperty("ExtendedFlavourLabel",                m_extFlavourLabel = false,     "specify whether or not to use an 'extended' flavour labelling (allowing for multiple HF hadrons or perhaps partons)");
   declareProperty("OldConeFlavourLabel",                 m_oldConeFlavourLabel = false, "when using cone-based flavour labelling, specify whether or not to use the (deprecated) Run-1 legacy labelling");
   declareProperty("IgnoreOutOfValidityRange",            m_ignoreOutOfValidityRange = false, "ignore out-of-extrapolation-range errors as returned by the underlying tool");
+  declareProperty("VerboseCDITool",                      m_verboseCDITool = true,       "specify whether or not to retain 'normal' printout from the underlying tool");
   // initialise some variables needed for caching
   // TODO : add configuration of the mapIndices - rather than just using the default of 0
   //m_mapIndices["Light"] = m_mapIndices["T"] = m_mapIndices["C"] = m_mapIndices["B"] = 0;
@@ -318,7 +319,8 @@ StatusCode BTaggingEfficiencyTool::initialize() {
 						     m_systStrategy != "Envelope",              // assume that eigenvector variations will be used unless the "Envelope" model is used
 						     true,                                      // use MC/MC scale factors
 						     false,                                     // do not use topology rescaling (only relevant for pseudo-continuous tagging)
-						     m_useRecommendedEVExclusions);             // if true, add pre-set lists of uncertainties to be excluded from EV decomposition
+						     m_useRecommendedEVExclusions,              // if true, add pre-set lists of uncertainties to be excluded from EV decomposition
+						     m_verboseCDITool);                         // if false, suppress any non-error/warning messages
 
   setMapIndex("Light",0);
   setMapIndex("C",0);
diff --git a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/util/BTaggingEfficiencyToolTester.cxx b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/util/BTaggingEfficiencyToolTester.cxx
index d3edc7a96a295c7979ceb6808d20fcc43c142d4c..3aebe5cec7bde09e01bf4c156a542badd52fd4fb 100644
--- a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/util/BTaggingEfficiencyToolTester.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/util/BTaggingEfficiencyToolTester.cxx
@@ -25,10 +25,10 @@ int main() {
   std::string workingPointName = "FixedCutBEff_70";
 
   asg::AnaToolHandle<IBTaggingEfficiencyTool> tool("BTaggingEfficiencyTool/BTagEffTest");
-  StatusCode code1 = tool.setProperty("ScaleFactorFileName","xAODBTaggingEfficiency/13TeV/2017-21-13TeV-MC16-CDI-2018-02-09_v1.root" );
+  StatusCode code1 = tool.setProperty("ScaleFactorFileName","xAODBTaggingEfficiency/13TeV/2019-21-13TeV-MC16-CDI-2019-10-07_v1.root" );
   StatusCode code2 = tool.setProperty("TaggerName",    taggerName  );
   StatusCode code3 = tool.setProperty("OperatingPoint", workingPointName);
-  StatusCode code4 = tool.setProperty("JetAuthor",      "AntiKt4EMTopoJets" );
+  StatusCode code4 = tool.setProperty("JetAuthor",      "AntiKt4EMPFlowJets_BTagging201810" );
   
   //provide a file which tells the tool which efficiency maps to use, and connects sample DSIDs to the right efficiency map.
   //you can find a tool to automatically create this config file here: https://gitlab.cern.ch/mstamenk/automate-hadronisation-information
@@ -56,7 +56,7 @@ int main() {
 
 
   // select your efficiency map based on the DSID of your sample:
-  unsigned int sample_dsid = 410501;
+  unsigned int sample_dsid = 410470;
 
   tool->setMapIndex(sample_dsid);
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/xAODBTaggingEfficiency/BTaggingEfficiencyTool.h b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/xAODBTaggingEfficiency/BTaggingEfficiencyTool.h
index 594d3316ecfc7192ff206b7d6c14cce6d30048db..91c824ea9303e27e5c17246c53f15d8982389941 100644
--- a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/xAODBTaggingEfficiency/BTaggingEfficiencyTool.h
+++ b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/xAODBTaggingEfficiency/BTaggingEfficiencyTool.h
@@ -312,6 +312,8 @@ private:
   bool m_useRecommendedEVExclusions;
   /// if true, ignore out-of-extrapolation range errors (i.e., return CorrectionCode::Ok if these are encountered)
   bool m_ignoreOutOfValidityRange;
+  /// if false, suppress any non-error/warning printout from the underlying tool
+  bool m_verboseCDITool;
   /// @}
 
   /// @name Cached variables