diff --git a/InnerDetector/InDetConfig/python/SiSpacePointsSeedToolConfig.py b/InnerDetector/InDetConfig/python/SiSpacePointsSeedToolConfig.py
index 2259d6e56bc5babe2036099efbacef6309969be5..f696c55af64c7bf8c0662e8223df8f548c086048 100644
--- a/InnerDetector/InDetConfig/python/SiSpacePointsSeedToolConfig.py
+++ b/InnerDetector/InDetConfig/python/SiSpacePointsSeedToolConfig.py
@@ -9,6 +9,8 @@ def SiSpacePointsSeedMaker_CosmicCfg(
         flags, name="InDetSpSeedsMaker_Cosmic", **kwargs):
     acc = ComponentAccumulator()
 
+    kwargs.setdefault("fieldScale",flags.BField.configuredSolenoidFieldScale)
+
     acc.setPrivateTools(CompFactory.InDet.SiSpacePointsSeedMaker_Cosmic(
         name, **kwargs))
     return acc
@@ -26,6 +28,7 @@ def SiSpacePointsSeedMaker_HeavyIonCfg(
                       flags.Tracking.ActiveConfig.maxdImpactPPSSeeds)
     kwargs.setdefault("maxdImpactSSS",
                       flags.Tracking.ActiveConfig.maxdImpactSSSSeeds)
+    kwargs.setdefault("fieldScale",flags.BField.configuredSolenoidFieldScale)
 
     acc.setPrivateTools(CompFactory.InDet.SiSpacePointsSeedMaker_HeavyIon(
         name+flags.Tracking.ActiveConfig.extension, **kwargs))
@@ -40,6 +43,7 @@ def SiSpacePointsSeedMaker_LowMomentumCfg(
                       flags.Tracking.ActiveConfig.maxPrimaryImpact)
     kwargs.setdefault("maxZ", flags.Tracking.ActiveConfig.maxZImpact)
     kwargs.setdefault("minZ", -flags.Tracking.ActiveConfig.maxZImpact)
+    kwargs.setdefault("fieldScale",flags.BField.configuredSolenoidFieldScale)
 
     kwargs.setdefault("maxRadius1",
                       0.75*flags.Tracking.ActiveConfig.radMax)
@@ -61,6 +65,7 @@ def SiSpacePointsSeedMaker_BeamGasCfg(
                       flags.Tracking.ActiveConfig.maxPrimaryImpact)
     kwargs.setdefault("maxZ", flags.Tracking.ActiveConfig.maxZImpact)
     kwargs.setdefault("minZ", -flags.Tracking.ActiveConfig.maxZImpact)
+    kwargs.setdefault("fieldScale",flags.BField.configuredSolenoidFieldScale)
 
     kwargs.setdefault("maxRadius1",
                       0.75*flags.Tracking.ActiveConfig.radMax)
@@ -82,6 +87,7 @@ def SiSpacePointsSeedMaker_ATLxkCfg(
                       flags.Tracking.ActiveConfig.maxPrimaryImpact)
     kwargs.setdefault("maxZ", flags.Tracking.ActiveConfig.maxZImpact)
     kwargs.setdefault("minZ", -flags.Tracking.ActiveConfig.maxZImpact)
+    kwargs.setdefault("fieldScale",flags.BField.configuredSolenoidFieldScale)
 
     if flags.Tracking.ActiveConfig.extension in ["", "Forward"]:
         kwargs.setdefault("maxdImpactSSS",
diff --git a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py
index 6ccd4988cc7cda26f68b13de5a9378cc79775868..77c170d6002a0a20a1049ed43f715ce5b01c7e03 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py
+++ b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py
@@ -45,6 +45,7 @@ def RadDamageUtilCfg(flags, name="RadDamageUtil", **kwargs):
     kwargs.setdefault("betaElectrons", 4.5e-16)
     kwargs.setdefault("betaHoles", 6.0e-16)
     kwargs.setdefault("saveDebugMaps", False)
+    kwargs.setdefault("fieldScale", flags.BField.configuredSolenoidFieldScale)   # to handle custom B field where nominal hardcoded
     RadDamageUtil = CompFactory.RadDamageUtil
     return RadDamageUtil(name, **kwargs)
 
diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/RadDamageUtil.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/RadDamageUtil.cxx
index b23b94e4df2c1ae7e90f354d1fd85257ffa809f8..e4ca833093fdaad2649210b5780e3cc2be6d127b 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/src/RadDamageUtil.cxx
+++ b/InnerDetector/InDetDigitization/PixelDigitization/src/RadDamageUtil.cxx
@@ -288,7 +288,7 @@ const StatusCode RadDamageUtil::generateDistanceTimeMap(TH2F*& distanceMap_e, TH
   //https://gitlab.cern.ch/radiationDamageDigitization/radDamage_athena_rel22/blob/rel22_radDamageDev_master/scripts/SaveMapsForAthena.C
   //TODO: From DB call each time
   double temperature = 300;
-  double bField = 2;//Tesla
+  double bField = 2*m_fieldScale;//Tesla
   //From PixelModuleDesign: TODO
   //FIXME workaround, if PixelModuleDesign not available: retrieve sensor thickness from E field
   //double sensorThickness = module->thickness() * 1000.0;//default is 200;
diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/RadDamageUtil.h b/InnerDetector/InDetDigitization/PixelDigitization/src/RadDamageUtil.h
index d23d772b0752cafaf5fcefcb0672f21673675731..b39d4870f42fd8d94c863bd91ec6325b05cefe72 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/src/RadDamageUtil.h
+++ b/InnerDetector/InDetDigitization/PixelDigitization/src/RadDamageUtil.h
@@ -74,6 +74,8 @@ private:
     this, "saveDebugMaps", false, "Flag to save map"
   };
 
+  Gaudi::Property<double> m_fieldScale{this, "fieldScale", 1.};
+
   static double alpha(int n, int Nrep, double a); //Poisson solution factor
   static double weighting3D(double x, double y, double z, int n, int m, int Nrep, double a, double b);
   static double weighting2D(double x, double z, double Lx, double sensorThickness);
diff --git a/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfig.py b/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfig.py
index 25e3b16175d3847da1b0041a31a888f075479a5c..e523ed046654d340ab775acbdb72794bdb87eebd 100644
--- a/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfig.py
+++ b/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfig.py
@@ -62,6 +62,9 @@ def TRT_DigitizationBasicToolCfg(flags, name="TRT_DigitizationBasicTool", **kwar
     if flags.Digitization.DoXingByXingPileUp:
         kwargs.setdefault("FirstXing", TRT_FirstXing())
         kwargs.setdefault("LastXing", TRT_LastXing())
+    if flags.BField.configuredSolenoidFieldScale>0 and flags.BField.configuredSolenoidFieldScale<1:
+        from AthenaCommon.SystemOfUnits import tesla
+        kwargs.setdefault("Override_solenoidFieldStrength",  flags.BField.configuredSolenoidFieldScale * 2.0 * tesla)
     from RngComps.RngCompsConfig import AthRNGSvcCfg
     kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
     TRTDigitizationTool = CompFactory.TRTDigitizationTool
diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_ATLxk.h b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_ATLxk.h
index d5563a7251c80f39eee0d78f469f385758ca09a9..292a663a7f711654266d031e7390e1fe30d1a8bb 100644
--- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_ATLxk.h
+++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_ATLxk.h
@@ -218,6 +218,7 @@ namespace InDet {
     FloatProperty m_dImpactCutSlopeUnconfirmedPPP{this, "dImpactCutSlopeUnconfirmedPPP", 0.};
     FloatProperty m_maxdImpactDecays{this, "maxdImpactForDecays", 20.};
     FloatProperty m_ptmin{this, "pTmin", 500.};
+    FloatProperty m_fieldScale{this, "fieldScale", 1.};
     //@}
 
     /// @name Properties, which can be updated in newEvent method. checketa is prepared in EventData.
diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_BeamGas.h b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_BeamGas.h
index 994d887ae53ab7fd2c78c1e62b587e0520e11e13..6337422a0d8ba601a6ce900541774bd992af868b 100644
--- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_BeamGas.h
+++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_BeamGas.h
@@ -175,6 +175,7 @@ namespace InDet {
     //@{
     FloatProperty m_ptmin{this, "pTmin", 1000.};
     FloatProperty m_etamax{this, "etaMax", 5.3};
+    FloatProperty m_fieldScale{this, "fieldScale", 1.};
     //@}
 
     /// @name Data members, which are updated in only initialize
diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_Cosmic.h b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_Cosmic.h
index ab5fddaeecad61a3ab8049e9c70848a1694a90b2..b19f2e6888d6c0e7de3f97724402cf95f8872fd3 100644
--- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_Cosmic.h
+++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_Cosmic.h
@@ -158,6 +158,7 @@ namespace InDet {
     //@{
     FloatProperty m_ptmin{this, "pTmin", 500.};
     FloatProperty m_etamax{this, "etaMax", 2.3};
+    FloatProperty m_fieldScale{this, "fieldScale", 1.};
     //@}
 
     /// @name Data members, which are updated in only initialize
diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_HeavyIon.h b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_HeavyIon.h
index 27584a7a8ad5e9f77f4a11c24c465f60f00872b3..d2fe6df8c9f03690c58a06a43809a3791b3f525a 100644
--- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_HeavyIon.h
+++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_HeavyIon.h
@@ -176,7 +176,8 @@ namespace InDet {
     //@{
     FloatProperty m_etamax{this, "etaMax", 2.7};
     FloatProperty m_ptmin{this, "pTmin", 500.};
-    //@}
+    FloatProperty m_fieldScale{this, "fieldScale", 1.};
+   //@}
 
     /// @name Data members, which are not updated at all
     //@{
diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_LowMomentum.h b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_LowMomentum.h
index c97d1e6c4fdaa79756f145d2e473280b07021777..972e92313c0c618d880ab13b20905c0e044db442 100644
--- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_LowMomentum.h
+++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_LowMomentum.h
@@ -172,6 +172,7 @@ namespace InDet {
     //@{
     FloatProperty m_etamax{this, "etaMax", 2.7};
     FloatProperty m_ptmin{this, "pTmin", 100.};
+    FloatProperty m_fieldScale{this, "fieldScale", 1.};
     //@}
 
     /// @name Data members, which are updated only in initialize
diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_ATLxk.cxx b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_ATLxk.cxx
index 681e88d3dd74f2eb8e7ac79a14c8ea92a57843aa..7b5213fa950cecd65bb75806d9cdd39651b33908 100644
--- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_ATLxk.cxx
+++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_ATLxk.cxx
@@ -907,11 +907,7 @@ bool InDet::SiSpacePointsSeedMaker_ATLxk::newVertices(EventData& data, const std
 
 void InDet::SiSpacePointsSeedMaker_ATLxk::buildFrameWork() 
 {
-  m_ptmin = std::abs(m_ptmin);
-  
-  if (m_ptmin < 100.) {
-    m_ptmin = 100.;
-  }
+  m_ptmin = std::max( std::abs(m_ptmin), float(100.*m_fieldScale));
   /// ensure consistency in the transverse IP cuts 
   if (m_maxdImpactSSS < m_maxdImpact   ) m_maxdImpactSSS = m_maxdImpact;
   if (m_maxdImpactDecays < m_maxdImpactSSS) m_maxdImpactDecays = m_maxdImpactSSS;
@@ -972,11 +968,11 @@ void InDet::SiSpacePointsSeedMaker_ATLxk::buildFrameWork()
     /// The factor 3 we divide by is motivated by the fact that we combine sets of
     /// three consecutive phi bins in the seed making step. So each individual bin should 
     /// be approximately a third of the maximum expected azimutal deflection
-    const float binSizePhi_PPP = m_pixel ? azimuthalStep(m_ptmin,m_maxdImpact,radiusPixelStart,radiusPixelEnd)/3.f : 0.f; 
+    const float binSizePhi_PPP = m_pixel ? azimuthalStep(m_ptmin/m_fieldScale,m_maxdImpact,radiusPixelStart,radiusPixelEnd)/3.f : 0.f; 
     /// case 2: SSS seeds, if we use them
     constexpr float radiusSctStart = 295.; ; /// approximate lowest R location of strip hits (driven by barrel)
     constexpr float radiusSctEnd = 560.; /// approximate largest R location of strip hits (driven by endcap)
-    const float binSizePhi_SSS = m_sct ? azimuthalStep(m_ptmin,m_maxdImpactSSS,radiusSctStart,radiusSctEnd)/3.f : 0.f; 
+    const float binSizePhi_SSS = m_sct ? azimuthalStep(m_ptmin/m_fieldScale,m_maxdImpactSSS,radiusSctStart,radiusSctEnd)/3.f : 0.f; 
     /// pick the larger of the two and invert
     m_inverseBinSizePhi = 1.f/std::max(binSizePhi_PPP, binSizePhi_SSS); 
   }
@@ -985,7 +981,7 @@ void InDet::SiSpacePointsSeedMaker_ATLxk::buildFrameWork()
     /// a trajectory with 400 MeV, from the origin, and Rmin = 0 / Rmax = 600mm   float ptm = 400.;
     float ptm = 400.; 
     /// if we cut below 400 MeV, adapt the ptm 
-    if (m_ptmin < ptm) ptm = m_ptmin;
+    if (m_ptmin/m_fieldScale < ptm) ptm = m_ptmin/m_fieldScale;
     m_inverseBinSizePhi = ptm /60.f;
   }
 
@@ -1002,7 +998,7 @@ void InDet::SiSpacePointsSeedMaker_ATLxk::buildFrameWork()
   /// same logic as for the space points above 
   const int   nPhiBinsVertexMax  = arraySizePhiV;
   const float inverseBinSizePhiVertexMax = static_cast<float>(nPhiBinsVertexMax)/twoPi;
-  m_inverseBinSizePhiVertex = m_ptmin/120.f;
+  m_inverseBinSizePhiVertex = m_ptmin/m_fieldScale/120.f;
   if (m_inverseBinSizePhiVertex > inverseBinSizePhiVertexMax) m_inverseBinSizePhiVertex = inverseBinSizePhiVertexMax;
   m_maxBinPhiVertex = static_cast<int>(twoPi*m_inverseBinSizePhiVertex);
   if (m_maxBinPhiVertex>=nPhiBinsVertexMax) m_maxBinPhiVertex = nPhiBinsVertexMax-1;
diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_BeamGas.cxx b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_BeamGas.cxx
index 04226e0b598f01e89019929ae1607610490fff91..6d94cda9024171c499f737707a206bda2cbf6639 100644
--- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_BeamGas.cxx
+++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_BeamGas.cxx
@@ -588,8 +588,7 @@ void InDet::SiSpacePointsSeedMaker_BeamGas::findNext(EventData& data) const
 
 void InDet::SiSpacePointsSeedMaker_BeamGas::buildFrameWork() 
 {
-  m_ptmin     = std::abs(m_ptmin);
-  if (m_ptmin < 300.) m_ptmin = 300.;
+  m_ptmin = std::max( std::abs(m_ptmin), float(300.*m_fieldScale));
   m_etamax    = std::abs(m_etamax);
   m_dzdrmax   = 1.f/std::tan(2.f*std::atan(std::exp(-m_etamax)));
   m_dzdrmin   =-m_dzdrmax;
@@ -608,7 +607,7 @@ void InDet::SiSpacePointsSeedMaker_BeamGas::buildFrameWork()
   const float sFmax   = static_cast<float>(NFmax)/pi2;
   const float sFmin = 100./60.;
 
-  m_sF = m_ptmin /60.f;
+  m_sF = m_ptmin/m_fieldScale /60.f;
   if (m_sF    >sFmax ) m_sF    = sFmax;
   else if (m_sF < sFmin) m_sF = sFmin;
   m_fNmax     = static_cast<int>(pi2*m_sF);
diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_Cosmic.cxx b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_Cosmic.cxx
index 48a489b9a6f8748d9e1a69228a5e5eb71af74ad8..1d2b9ef31a48736f34fb2b5bbfeaaf1decfe4033 100644
--- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_Cosmic.cxx
+++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_Cosmic.cxx
@@ -49,7 +49,7 @@ StatusCode InDet::SiSpacePointsSeedMaker_Cosmic::initialize()
   // Build framework
   //
   buildFrameWork();
-  if ( m_ptmin < 300.) m_ptmin = 300.;
+  if ( m_ptmin/m_fieldScale < 300.) m_ptmin = 300.*m_fieldScale;
 
   // Get output print level
   //
diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_HeavyIon.cxx b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_HeavyIon.cxx
index dcf839bdd8aa3ae719cce2757258c0bbabd1812f..be023f96a78cde852417a84daeffa1e7a80d7905 100644
--- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_HeavyIon.cxx
+++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_HeavyIon.cxx
@@ -583,8 +583,7 @@ bool InDet::SiSpacePointsSeedMaker_HeavyIon::newVertices(EventData& data, const
 
 void InDet::SiSpacePointsSeedMaker_HeavyIon::buildFrameWork() 
 {
-  m_ptmin     = std::abs(m_ptmin)                  ;
-  if (m_ptmin < 100.) m_ptmin = 100.;
+  m_ptmin = std::max( std::abs(m_ptmin), float(100.*m_fieldScale));
   m_etamax    = std::abs(m_etamax)                 ;
   m_dzdrmax   = 1.f/std::tan(2.f*std::atan(exp(-m_etamax)));
   m_dzdrmin   =-m_dzdrmax                      ;
@@ -603,7 +602,7 @@ void InDet::SiSpacePointsSeedMaker_HeavyIon::buildFrameWork()
   const float sFmax = static_cast<float>(NFmax)/pi2;
   const float sFmin = 100./60.;
 
-  m_sF = m_ptmin /60.;
+  m_sF = m_ptmin/m_fieldScale /60.;
   if (m_sF > sFmax ) m_sF = sFmax;
   else if (m_sF < sFmin) m_sF = sFmin;
   m_fNmax = static_cast<int>(pi2*m_sF);
@@ -613,7 +612,7 @@ void InDet::SiSpacePointsSeedMaker_HeavyIon::buildFrameWork()
   //
   const int   NFtmax = SizeRFV;
   const float sFvmax = static_cast<float>(NFtmax)/pi2;
-  m_sFv = m_ptmin/120.f;
+  m_sFv = m_ptmin/m_fieldScale /120.f;
   if (m_sFv > sFvmax) m_sFv = sFvmax; 
   m_fvNmax = static_cast<int>(pi2*m_sFv);
   if (m_fvNmax>=NFtmax) m_fvNmax = NFtmax-1;
diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_LowMomentum.cxx b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_LowMomentum.cxx
index 4a5b540b594fc7e597d016057a839daf5db2bb3a..b5e09ba9beed77f2c29f8094530efde8dc6fa68d 100644
--- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_LowMomentum.cxx
+++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_LowMomentum.cxx
@@ -567,8 +567,7 @@ bool InDet::SiSpacePointsSeedMaker_LowMomentum::newVertices(EventData& data, con
 
 void InDet::SiSpacePointsSeedMaker_LowMomentum::buildFrameWork() 
 {
-  m_ptmin     = std::abs(m_ptmin);
-  if (m_ptmin < 50.) m_ptmin = 50.;
+  m_ptmin = std::max( std::abs(m_ptmin), float(50.*m_fieldScale));
   m_iptmax  = 1.f/std::abs(m_ptmax);
   m_iptmin  = 1.f/std::abs(m_ptmin);
   m_etamax    = std::abs(m_etamax);
@@ -586,7 +585,7 @@ void InDet::SiSpacePointsSeedMaker_LowMomentum::buildFrameWork()
   const int   NFmax = SizeRF;
   const float sFmax   = static_cast<float>(NFmax )/pi2;
   const float sFmin   = 100./60.;
-  m_sF = m_ptmin /60.f;
+  m_sF = m_ptmin/m_fieldScale /60.f;
   if (m_sF > sFmax ) m_sF = sFmax;
   else if (m_sF < sFmin) m_sF = sFmin;
   m_fNmax = static_cast<int>(pi2*m_sF);
diff --git a/MagneticField/MagFieldConfig/python/BFieldConfigFlags.py b/MagneticField/MagFieldConfig/python/BFieldConfigFlags.py
index a00c47bb5f613c3e54ad9be70373f5093ae9a459..b3da490a38769b9ccca3ab47fa90324b242a8cc0 100644
--- a/MagneticField/MagFieldConfig/python/BFieldConfigFlags.py
+++ b/MagneticField/MagFieldConfig/python/BFieldConfigFlags.py
@@ -36,4 +36,6 @@ def createBFieldConfigFlags():
     bcf.addFlag("BField.barrelToroidOn", lambda prevFlags : _fieldAutoCfg(prevFlags)[1])
     # True when endcap toroid is on
     bcf.addFlag("BField.endcapToroidOn", lambda prevFlags : _fieldAutoCfg(prevFlags)[1])
+    # Solenoid field scale
+    bcf.addFlag("BField.configuredSolenoidFieldScale", 1.)
     return bcf
diff --git a/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py b/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py
index fbb5fa6fde730e17147a5359420b3a77207ce70d..136e0b0f7b9cb54e03941bdaa394aea14e8d4203 100644
--- a/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py
+++ b/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py
@@ -59,6 +59,12 @@ def AtlasFieldCacheCondAlgCfg(flags, **kwargs):
       # consider field off if current is below these values:
       afcArgs.update( SoleMinCurrent = 160 )  # Standby current is 150A
       afcArgs.update( ToroMinCurrent = 210 )  # Standby current is 200A
+    elif flags.Input.isMC:
+      if flags.BField.configuredSolenoidFieldScale>160/7730 and flags.BField.configuredSolenoidFieldScale<1:
+          afcArgs.update( UseDCS = False )
+          afcArgs.update( UseSoleCurrent = flags.BField.configuredSolenoidFieldScale * 7730 )
+      else:
+          afcArgs.update( UseDCS = True )
     else:
       afcArgs.update( UseDCS = True )
     # For test, UseDCS is set to False
diff --git a/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasFieldServices.py b/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasFieldServices.py
index 4907c274779d27edc3f33b62f110e06a2dad3ce3..cbadccdf716ba740a4c589018d0072cfa0b619ca 100644
--- a/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasFieldServices.py
+++ b/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasFieldServices.py
@@ -5,6 +5,8 @@ from AthenaConfiguration.ComponentFactory import CompFactory
 
 def StandardFieldSvcCfg(flags, name="StandardField", **kwargs):
     result = ComponentAccumulator()
+    if flags.BField.configuredSolenoidFieldScale>160/7730 and  flags.BField.configuredSolenoidFieldScale<1:    # custom field configuration
+        kwargs.setdefault("UseSoleCurrent", flags.BField.configuredSolenoidFieldScale * 7730)
     result.addService(CompFactory.StandardFieldSvc(name, **kwargs), primary=True)
     return result
 
diff --git a/Tools/Campaigns/python/MC23.py b/Tools/Campaigns/python/MC23.py
index 6dcda7f3cab1831a1ebaf530795493c9d2a645e3..5f95fc1e22a9b35b084c1eb79841f3c15fefd65e 100644
--- a/Tools/Campaigns/python/MC23.py
+++ b/Tools/Campaigns/python/MC23.py
@@ -251,7 +251,18 @@ def MC23NoPileUpLowMuRun(flags):
     MC23NoPileUp(flags)
     flags.Input.ConditionsRunNumber = 420000
 
+    
+def MC23NoPileUpLowMuLowB(flags):
+    """MC23d flags for MC to match special run 460348"""
+    MC23NoPileUp(flags)   
 
+    flags.Input.MCCampaign = Campaign.MC23d
+    flags.Input.ConditionsRunNumber = 465000
+
+    # B-field configuration
+    flags.BField.configuredSolenoidFieldScale = 0.4
+
+    
 def BeamspotSplitMC23a():
     """MC23a beamspot splitting configuration"""
     substeps = 4
@@ -326,6 +337,19 @@ def MC23Simulation2023HeavyIonRun(flags):
     flags.Input.LumiBlockNumbers = [1] # dummy value
 
 
+def MC23dSimulationLowMuLowB(flags):
+    """MC23 flags for simulation of special run 460348"""
+    MC23SimulationNoIoV(flags)
+    flags.Input.MCCampaign = Campaign.MC23d
+
+    flags.Input.RunNumber = [465000]
+    flags.Input.OverrideRunNumber = True
+    flags.Input.LumiBlockNumber = [1] # dummy value
+
+    # B-field configuration
+    flags.BField.configuredSolenoidFieldScale = 0.4
+
+    
 def MC23SimulationSingleIoV(flags):
     """MC23 flags for simulation"""
     MC23SimulationNoIoV(flags)
diff --git a/Tools/Campaigns/python/__init__.py b/Tools/Campaigns/python/__init__.py
index 345f8470d7352e19a4a4f4b81138164fa197f206..6fb66184b3ef37e963fdb9ec7903068f03810157 100644
--- a/Tools/Campaigns/python/__init__.py
+++ b/Tools/Campaigns/python/__init__.py
@@ -15,8 +15,8 @@ from .MC23 import (MC23a, MC23aSingleBeamspot, BeamspotSplitMC23a,
   MC23cSimulationMultipleIoV, MC23cSimulationMultipleIoVCalibrationHits,
   MC23d, MC23dSingleBeamspot, BeamspotSplitMC23d,
   MC23e, MC23eSingleBeamspot, BeamspotSplitMC23e,
-  MC23eSimulationMultipleIoV, MC23eSimulationMultipleIoVCalibrationHits,
-  MC23LowMu, MC23NoPileUp, MC23NoPileUpLowMuRun,
+  MC23eSimulationMultipleIoV, MC23eSimulationMultipleIoVCalibrationHits, MC23dSimulationLowMuLowB,
+  MC23LowMu, MC23NoPileUp, MC23NoPileUpLowMuRun, MC23NoPileUpLowMuLowB,
   MC23HeavyIons2023, MC23HeavyIons2023NoPileUp, MC23Simulation2023HeavyIonRun)
 from .PhaseII import (PhaseIIPileUp1, PhaseIIPileUp60, PhaseIIPileUp140, PhaseIIPileUp200,
   PhaseIIPileUpMC21a, PhaseIINoPileUp,
@@ -46,8 +46,8 @@ __all__ = [
   'MC23cSimulationMultipleIoV', 'MC23cSimulationMultipleIoVCalibrationHits',
   'MC23d', 'MC23dSingleBeamspot', 'BeamspotSplitMC23d',
   'MC23e', 'MC23eSingleBeamspot', 'BeamspotSplitMC23e',
-  'MC23eSimulationMultipleIoV', 'MC23eSimulationMultipleIoVCalibrationHits',
-  'MC23LowMu', 'MC23NoPileUp', 'MC23NoPileUpLowMuRun',
+  'MC23eSimulationMultipleIoV', 'MC23eSimulationMultipleIoVCalibrationHits', 'MC23dSimulationLowMuLowB',
+  'MC23LowMu', 'MC23NoPileUp', 'MC23NoPileUpLowMuRun', 'MC23NoPileUpLowMuLowB',
   'MC23HeavyIons2023', 'MC23HeavyIons2023NoPileUp' , 'MC23Simulation2023HeavyIonRun',
   'PhaseIIPileUp1', 'PhaseIIPileUp60', 'PhaseIIPileUp140', 'PhaseIIPileUp200',
   'PhaseIIPileUpMC21a', 'PhaseIINoPileUp',
diff --git a/Tracking/TrkConfig/python/TrackingPassFlags.py b/Tracking/TrkConfig/python/TrackingPassFlags.py
index ce588ef382f9c4cde63087e9eb97619acf6ff05a..b4542eae4f3d86bf4ae23793cf79c3cb31e77719 100644
--- a/Tracking/TrkConfig/python/TrackingPassFlags.py
+++ b/Tracking/TrkConfig/python/TrackingPassFlags.py
@@ -24,22 +24,25 @@ def select( selInd, valuesmap ):
     raise RuntimeError("No value can be selected from ranges {} given key {}".format( valuesmap.keys(), selInd ))
 
 def minPT_ranges( inflags ):
+    scale = inflags.BField.configuredSolenoidFieldScale
     return select( inflags.Tracking.cutLevel,
-    {'-1':   0.1 * Units.GeV,
-    '2-13': 0.4 * Units.GeV,
-    '14-':  0.5 * Units.GeV } )
+    {'-1':   scale * 0.1 * Units.GeV,
+    '2-13': scale * 0.4 * Units.GeV,
+    '14-':  scale * 0.5 * Units.GeV } )
 
 def minSecondaryPT_ranges( inflags ):
+    scale = inflags.BField.configuredSolenoidFieldScale
     return select( inflags.Tracking.cutLevel,
-    {'-1':   0.4 * Units.GeV,
-    '2-18': 1.0 * Units.GeV,
-    '19-': 3.0 * Units.GeV } )
+    {'-1':  scale * 0.4 * Units.GeV,
+    '2-18': scale * 1.0 * Units.GeV,
+    '19-': scale * 3.0 * Units.GeV } )
 
 def minTRTonlyPt_ranges( inflags ):
+    scale = inflags.BField.configuredSolenoidFieldScale
     return select( inflags.Tracking.cutLevel,
-    {'-1':   0.4 * Units.GeV,
-    '2-5': 1.0 * Units.GeV,
-    '6-': 2.0 * Units.GeV, } )
+    {'-1':   scale * 0.4 * Units.GeV,
+    '2-5': scale * 1.0 * Units.GeV,
+    '6-': scale * 2.0 * Units.GeV, } )
 
 def minClusters_ranges( inflags ):
     return select( inflags.Tracking.cutLevel,
@@ -272,7 +275,7 @@ def createTrackingPassFlags():
 
     # --- min pt cut for brem
     icf.addFlag("doBremRecoverySi", lambda pcf: pcf.Tracking.doBremRecovery)
-    icf.addFlag("minPTBrem", 1. * Units.GeV) # off
+    icf.addFlag("minPTBrem", lambda pcf: 1. * Units.GeV * pcf.BField.configuredSolenoidFieldScale ) # off
 
     # --- Z Boundary Seeding
     icf.addFlag("doZBoundary", doZBoundary_ranges)
@@ -589,11 +592,11 @@ def createHighPileupTrackingPassFlags():
 def createMinBiasTrackingPassFlags():
     icf = createTrackingPassFlags()
     icf.extension                 = "MinBias"
-    icf.minPT =                   0.1 * Units.GeV
+    icf.minPT =   lambda pcf:     0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
 
     icf.minClusters               = 5
-    icf.minSecondaryPt            = 0.4 * Units.GeV  # Pt cut for back tracking + segment finding for these
-    icf.minTRTonlyPt              = 0.4 * Units.GeV  # Pt cut for TRT only
+    icf.minSecondaryPt            = lambda pcf: 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale  # Pt cut for back tracking + segment finding for these
+    icf.minTRTonlyPt              = lambda pcf: 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale  # Pt cut for TRT only
     icf.TRTSegFinderPtBins        = 50
     icf.maxdImpactSSSSeeds        = 20.0    # apply cut on SSS seeds
     icf.excludeUsedTRToutliers    = False   # TRT outliers are added to the exclusion list
@@ -608,7 +611,7 @@ def createUPCTrackingPassFlags():
     icf = createMinBiasTrackingPassFlags()
     icf.extension                 = "UPC"
     # --- min pt cut for brem
-    icf.minPTBrem                 = 0.75 * Units.GeV
+    icf.minPTBrem                 = lambda pcf: 0.75 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
     # MinBias turns off Brem Recovery, turn it on here
     icf.doBremRecoverySi = lambda pcf: pcf.Tracking.doBremRecovery
     return icf
@@ -626,8 +629,8 @@ def createLowPtRoITrackingPassFlags():
     icf.extension          = "LowPtRoI"
     icf.usePrdAssociationTool = True
     icf.storeSeparateContainer = True
-    icf.maxPT              = 0.850 * Units.GeV
-    icf.minPT              = 0.050 * Units.GeV
+    icf.maxPT              = lambda pcf: 0.850 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
+    icf.minPT              = lambda pcf: 0.050 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
     icf.minClusters        = 5
     icf.minSiNotShared     = 4
     icf.maxShared          = 1   # cut is now on number of shared modules
@@ -655,13 +658,13 @@ def createLargeD0TrackingPassFlags():
     icf.extension          = "LargeD0"
     icf.usePrdAssociationTool = True
     icf.storeSeparateContainer = lambda pcf : pcf.Tracking.storeSeparateLargeD0Container
-    icf.maxPT              = 1.0 * Units.TeV
-    icf.minPT              = 900 * Units.MeV
+    icf.maxPT              = lambda pcf: 1.0 * Units.TeV * pcf.BField.configuredSolenoidFieldScale
+    icf.minPT              = lambda pcf: 900 * Units.MeV * pcf.BField.configuredSolenoidFieldScale
     icf.maxEta             = 5
     icf.maxPrimaryImpact   = 300.0 * Units.mm
     icf.maxZImpact         = 1500.0 * Units.mm
     icf.maxSecondaryImpact = 300.0 * Units.mm
-    icf.minSecondaryPt     = 500.0 * Units.MeV
+    icf.minSecondaryPt     = lambda pcf: 500.0 * Units.MeV * pcf.BField.configuredSolenoidFieldScale
     icf.minClusters        = 7
     icf.minSiNotShared     = 5
     icf.maxShared          = 2   # cut is now on number of shared modules
@@ -689,14 +692,14 @@ def createR3LargeD0TrackingPassFlags():
     icf.usePrdAssociationTool = True
     icf.usePixelSeeding    = False
     icf.storeSeparateContainer = lambda pcf : pcf.Tracking.storeSeparateLargeD0Container
-    icf.maxPT              = 1.0 * Units.TeV
-    icf.minPT              = 1.0 * Units.GeV                                                                                    
+    icf.maxPT              = lambda pcf: 1.0 * Units.TeV * pcf.BField.configuredSolenoidFieldScale
+    icf.minPT              = lambda pcf: 1.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
     icf.maxEta             = 3                                                                                                        
     icf.maxPrimaryImpact   = 300.0 * Units.mm
     icf.maxEMImpact        = 300 * Units.mm
     icf.maxZImpact         = 500 * Units.mm    
     icf.maxSecondaryImpact = 300.0 * Units.mm  
-    icf.minSecondaryPt     = 1000.0 * Units.MeV 
+    icf.minSecondaryPt     = lambda pcf: 1000.0 * Units.MeV * pcf.BField.configuredSolenoidFieldScale 
     icf.minClusters        = 8                  
     icf.minSiNotShared     = 6                 
     icf.maxShared          = 2   # cut is now on number of shared modules
@@ -730,13 +733,13 @@ def createLowPtLargeD0TrackingPassFlags():
     icf.extension          = "LowPtLargeD0"
     icf.usePrdAssociationTool = True
     icf.storeSeparateContainer = lambda pcf : pcf.Tracking.storeSeparateLargeD0Container
-    icf.maxPT              = 1.0 * Units.TeV
-    icf.minPT              = 100 * Units.MeV
+    icf.maxPT              = lambda pcf: 1.0 * Units.TeV * pcf.BField.configuredSolenoidFieldScale
+    icf.minPT              = lambda pcf: 100 * Units.MeV * pcf.BField.configuredSolenoidFieldScale
     icf.maxEta             = 5
     icf.maxPrimaryImpact   = 300.0 * Units.mm
     icf.maxZImpact         = 1500.0 * Units.mm
     icf.maxSecondaryImpact = 300.0 * Units.mm
-    icf.minSecondaryPt     = 400.0 * Units.MeV
+    icf.minSecondaryPt     = lambda pcf: 400.0 * Units.MeV * pcf.BField.configuredSolenoidFieldScale
     icf.minClusters        = 5
     icf.minSiNotShared     = 5
     icf.maxShared          = 2   # cut is now on number of shared modules
@@ -763,8 +766,8 @@ def createLowPtTrackingPassFlags():
     icf.usePrdAssociationTool = True
     icf.isLowPt          = True
     icf.maxPT = lambda pcf: (1e6 if pcf.Tracking.doMinBias else
-                             pcf.Tracking.MainPass.minPT + 0.3) * Units.GeV
-    icf.minPT            = 0.050 * Units.GeV
+                             pcf.Tracking.MainPass.minPT + 0.3) * Units.GeV * pcf.BField.configuredSolenoidFieldScale
+    icf.minPT            = lambda pcf: 0.050 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
     icf.minClusters      = 5
     icf.minSiNotShared   = 4
     icf.maxShared        = 1   # cut is now on number of shared modules
@@ -824,8 +827,8 @@ def createVeryLowPtTrackingPassFlags():
     icf.isLowPt          = True
     icf.useTRTExtension  = False
     icf.maxPT            = lambda pcf : (1e6 if pcf.Tracking.doMinBias else 
-                                         pcf.Tracking.MainPass.minPT + 0.3) * Units.GeV # some overlap
-    icf.minPT            = 0.050 * Units.GeV
+                                         pcf.Tracking.MainPass.minPT + 0.3) * Units.GeV  * pcf.BField.configuredSolenoidFieldScale # some overlap
+    icf.minPT            = lambda pcf : 0.050 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
     icf.minClusters      = 3
     icf.minSiNotShared   = 3
     icf.maxShared        = 1   # cut is now on number of shared modules
@@ -877,7 +880,7 @@ def createBeamGasTrackingPassFlags():
     icf = createTrackingPassFlags()
     icf.extension        = "BeamGas"
     icf.usePrdAssociationTool = True
-    icf.minPT            = 0.500 * Units.GeV
+    icf.minPT            = lambda pcf: 0.500 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
     icf.maxPrimaryImpact = 300. * Units.mm
     icf.maxZImpact       = 2000. * Units.mm
     icf.minClusters      = 6
@@ -895,7 +898,7 @@ def createBeamGasTrackingPassFlags():
 def createVtxLumiTrackingPassFlags():
     icf = createTrackingPassFlags()
     icf.extension               = "VtxLumi"
-    icf.minPT                   = 0.900 * Units.GeV
+    icf.minPT                   = lambda pcf: 0.900 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
     icf.minClusters             = 7
     icf.maxPixelHoles           = 1
     icf.radMax                  = 600. * Units.mm
@@ -910,7 +913,7 @@ def createVtxLumiTrackingPassFlags():
 def createVtxBeamSpotTrackingPassFlags():
     icf = createTrackingPassFlags()
     icf.extension               = "VtxBeamSpot"
-    icf.minPT                   = 0.900 * Units.GeV
+    icf.minPT                   = lambda pcf: 0.900 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
     icf.minClusters             = 9
     icf.maxPixelHoles           = 0
     icf.radMax                  = 320. * Units.mm
@@ -925,7 +928,7 @@ def createVtxBeamSpotTrackingPassFlags():
 def createCosmicsTrackingPassFlags():
     icf = createTrackingPassFlags()
     icf.extension        = "Cosmics"
-    icf.minPT            = 0.500 * Units.GeV
+    icf.minPT            = lambda pcf: 0.500 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
     icf.maxPrimaryImpact = 1000. * Units.mm
     icf.maxZImpact       = 10000. * Units.mm
     icf.minClusters      = 4
@@ -969,7 +972,7 @@ def createHeavyIonTrackingPassFlags():
                               20. if pcf.Tracking.cutLevel >= 2 else 1000.
     
     icf.minPT              = lambda pcf: \
-                             0.3 *Units.GeV  if pcf.Tracking.cutLevel in [3, 5] else 0.5 * Units.GeV
+                             0.3 *Units.GeV * pcf.BField.configuredSolenoidFieldScale  if pcf.Tracking.cutLevel in [3, 5] else 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
     icf.useParameterizedTRTCuts = lambda pcf: \
                                   False if pcf.Tracking.cutLevel >= 3 else True #Make these false on all HI cut levels >=3, since standard cut levels set it true from levels >=3
     icf.useNewParameterizationTRT = lambda pcf: \
@@ -999,14 +1002,14 @@ def createPixelTrackingPassFlags():
 
     def _minPt( pcf ):
         if pcf.Beam.Type is BeamType.Cosmics:
-            return 0.5 * Units.GeV
+            return 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
         if pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.UPC:
-            return 0.05 * Units.GeV
+            return 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
         if pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.HIP:
-            return 0.05 * Units.GeV
+            return 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
         if pcf.Tracking.doMinBias:
-            return 0.05 * Units.GeV
-        return 0.1 * Units.GeV
+            return 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
+        return 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
     
     icf.minPT            = _minPt
     icf.minClusters      = 3
@@ -1031,7 +1034,7 @@ def createPixelTrackingPassFlags():
     icf.useSCT           = False
     icf.useSCTSeeding    = False
     icf.useTRT           = False
-    icf.minSecondaryPt   = 3 * Units.GeV
+    icf.minSecondaryPt   = lambda pcf: 3 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
     icf.maxPrimaryImpact = lambda pcf: 1000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics \
                            else 10. * Units.mm if pcf.Tracking.doUPC \
                            else 5. * Units.mm
@@ -1057,7 +1060,7 @@ def createDisappearingTrackingPassFlags():
     icf.extension        = "Disappearing"
     icf.usePrdAssociationTool = True
     icf.storeSeparateContainer = True
-    icf.minPT            = 5 * Units.GeV
+    icf.minPT            = lambda pcf: 5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
     icf.minClusters      = 4
     icf.maxHoles         = 0
     icf.maxPixelHoles    = 0
@@ -1085,18 +1088,14 @@ def createSCTTrackingPassFlags():
     icf.usePixelSeeding  = False
     icf.useTRT           = False
 
-    def _pick( default, cosmics, minbias):
-        def _internal( pcf ):
-            if pcf.Beam.Type is BeamType.Cosmics:
-                return cosmics
-            if pcf.Tracking.doMinBias:
-                return minbias
-            return default
-        return _internal
+    def _minpt( pcf ):
+        if pcf.Beam.Type is BeamType.Cosmics:
+            return 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
+        if pcf.Tracking.doMinBias:
+            return 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
+        return 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
 
-    icf.minPT            = _pick( default = 0.1 * Units.GeV,
-                                  minbias=0.1 * Units.GeV,
-                                  cosmics = 0.5* Units.GeV )
+    icf.minPT            = _minpt
     icf.maxPrimaryImpact = lambda pcf: 1000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics \
                            else maxPrimaryImpact_ranges( pcf )
     icf.maxZImpact       = lambda pcf: 10000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics \
@@ -1137,7 +1136,7 @@ def createTRTTrackingPassFlags():
     icf.extension               = "TRT"
     icf.useTIDE_Ambi            = False
     icf.usePrdAssociationTool   = True
-    icf.minPT                   = 0.4 * Units.GeV
+    icf.minPT                   = lambda pcf: 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
     icf.minTRTonly              = 15
     icf.maxTRTonlyShared        = 0.7
     icf.doBremRecoverySi        = False