diff --git a/InnerDetector/InDetConfig/python/SiSpacePointsSeedToolConfig.py b/InnerDetector/InDetConfig/python/SiSpacePointsSeedToolConfig.py
index e567de15dc41971ba679573b1b3b9b1975230043..7a8180581ead2fe8b9268b438ddb3a418457f419 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 8255dc87a3fdcebc9c242ce42c0a0b710cc40396..e909a175f49ef65cf262c43271501a1005efd628 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/src/RadDamageUtil.cxx
+++ b/InnerDetector/InDetDigitization/PixelDigitization/src/RadDamageUtil.cxx
@@ -287,7 +287,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 41ac761b6d58a8e0ec986d5415cae8768d12595b..a77280a057de66f643fdddc6e2edff73af06112b 100644
--- a/Tracking/TrkConfig/python/TrackingPassFlags.py
+++ b/Tracking/TrkConfig/python/TrackingPassFlags.py
@@ -29,8 +29,9 @@ def createTrackingPassFlags():
     icf.addFlag("doAmbiguityProcessorTrackFit", True)
 
     # --- first set kinematic defaults
-    icf.addFlag("minPT", lambda pcf: (0.4 * Units.GeV if pcf.Tracking.doLowMu else
-                                      0.5 * Units.GeV))
+    icf.addFlag("minPT", lambda pcf: (pcf.BField.configuredSolenoidFieldScale *
+                                      (0.4 * Units.GeV if pcf.Tracking.doLowMu else
+                                       0.5 * Units.GeV)))
     icf.addFlag("maxPT", 1000.0 * Units.TeV) # off!
     icf.addFlag("minEta", -1) # off!
     icf.addFlag("maxEta", 2.7)
@@ -90,7 +91,8 @@ 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))
 
     # --- Z Boundary Seeding
     icf.addFlag("doZBoundary", lambda pcf:
@@ -138,12 +140,16 @@ def createITkTrackingPassFlags():
     icf.addFlag("etaBins"                   , [-1.0, 2.0, 2.6, 9999.0])
     icf.addFlag("maxEta"                    , 4.0)
     icf.addFlag("minPT"                     , lambda pcf :
-                [0.2 * Units.GeV] if pcf.Tracking.doLowMu
-                else [0.9 * Units.GeV, 0.4 * Units.GeV, 0.4 * Units.GeV])
-
-    icf.addFlag("minPTSeed"                 , lambda pcf :
-                0.2 * Units.GeV if pcf.Tracking.doLowMu
-                else 0.9 * Units.GeV)
+                [0.2 * Units.GeV * pcf.BField.configuredSolenoidFieldScale]
+                if pcf.Tracking.doLowMu else
+                [0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale,
+                 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale,
+                 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale])
+
+    icf.addFlag("minPTSeed"                 , lambda pcf : (
+        pcf.BField.configuredSolenoidFieldScale *
+        (0.2 * Units.GeV if pcf.Tracking.doLowMu
+         else 0.9 * Units.GeV)))
     icf.addFlag("maxPrimaryImpactSeed"      , 2.0 * Units.mm)
     icf.addFlag("maxZImpactSeed"            , 200.0 * Units.mm)
     icf.addFlag("useSeedFilter"             , True)
@@ -177,7 +183,8 @@ def createITkTrackingPassFlags():
 
     # --- min pt cut for brem
     icf.addFlag("doBremRecoverySi", lambda pcf: pcf.Tracking.doBremRecovery)
-    icf.addFlag("minPTBrem"               , [1. * Units.GeV])
+    icf.addFlag("minPTBrem", lambda pcf: (
+        [1. * Units.GeV * pcf.BField.configuredSolenoidFieldScale]))
 
     # -- use of calo information
     icf.addFlag("doCaloSeededBremSi", lambda pcf: pcf.Tracking.doCaloSeededBrem)
@@ -227,8 +234,10 @@ def createITkHeavyIonTrackingPassFlags():
     icf = createITkTrackingPassFlags()
     icf.extension        = "HeavyIon"
     icf.maxPrimaryImpact = [2.0 * Units.mm]
-    icf.minPT            = [0.4 *Units.GeV]
-    icf.minPTSeed        = 0.4 * Units.GeV
+    icf.minPT            = lambda pcf : (
+        [0.4 *Units.GeV * pcf.BField.configuredSolenoidFieldScale])
+    icf.minPTSeed        = lambda pcf : (
+        0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
     icf.minClusters      = [6]
     icf.minSiNotShared   = [6]
     icf.Xi2max           = [6.]
@@ -244,12 +253,16 @@ def createITkFastTrackingPassFlags():
 
     icf = createITkTrackingPassFlags()
 
-    icf.minPT                 = [1.0 * Units.GeV, 0.4 * Units.GeV, 0.4 * Units.GeV]
+    icf.minPT                 = lambda pcf : (
+        [1.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale,
+         0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale,
+         0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale])
     icf.maxZImpact            = [150.0 * Units.mm]
     icf.minPixel              = [3]
     icf.nHolesMax             = [1]
     icf.nHolesGapMax          = [1]
-    icf.minPTSeed             = 1.0 * Units.GeV
+    icf.minPTSeed             = lambda pcf: (
+        1.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
     icf.maxZImpactSeed        = 150.0 * Units.mm
     icf.useITkStripSeeding    = False
 
@@ -263,8 +276,12 @@ def createITkFTFPassFlags():
     icf.addFlag("doHitDV"            , False)
     icf.addFlag("doDisappearingTrk"  , False)
     icf.useSeedFilter         = False
-    icf.minPT                 = [0.9 * Units.GeV, 0.4 * Units.GeV, 0.4 * Units.GeV]
-    icf.minPTSeed             = 0.9 * Units.GeV
+    icf.minPT                 = lambda pcf : (
+        [0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale,
+         0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale,
+         0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale])
+    icf.minPTSeed             = lambda pcf : (
+        0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
 
     return icf
 
@@ -277,7 +294,8 @@ def createITkLargeD0TrackingPassFlags():
     icf.usePrdAssociationTool = True
     icf.storeSeparateContainer = lambda pcf : pcf.Tracking.storeSeparateLargeD0Container
 
-    icf.minPT              = [1000 * Units.MeV]
+    icf.minPT              = lambda pcf : (
+        [1000 * Units.MeV * pcf.BField.configuredSolenoidFieldScale])
     icf.maxEta             = 4.0
     icf.etaBins            = [-1.0, 4.0]
     icf.maxPrimaryImpact   = [300 * Units.mm]
@@ -293,7 +311,8 @@ def createITkLargeD0TrackingPassFlags():
 
     icf.maxZImpactSeed     = 500.0 * Units.mm
     icf.maxPrimaryImpactSeed = 300.0 * Units.mm
-    icf.minPTSeed          = 1000 * Units.MeV
+    icf.minPTSeed          = lambda pcf : (
+        1000 * Units.MeV * pcf.BField.configuredSolenoidFieldScale)
 
     icf.radMax             = 1100. * Units.mm
     icf.nHolesMax          = icf.maxHoles
@@ -321,8 +340,10 @@ def createITkLargeD0FastTrackingPassFlags():
 
     icf.maxEta             = 2.4
     icf.etaBins            = [-1.0, 2.4]
-    icf.minPT              = [5.0 * Units.GeV]
-    icf.minPTSeed          = 5.0 * Units.GeV
+    icf.minPT              = lambda pcf : (
+        [5.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale])
+    icf.minPTSeed          = lambda pcf : (
+        5.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
     icf.nWeightedClustersMin = [8]
     icf.maxPrimaryImpact   = [150 * Units.mm]
     icf.maxPrimaryImpactSeed = 150. * Units.mm
@@ -338,8 +359,10 @@ def createITkLowPtTrackingPassFlags():
 
     icf = createITkTrackingPassFlags()
     icf.extension          = "LowPt"
-    icf.minPT              = [0.4 * Units.GeV]
-    icf.minPTSeed          = 0.4 * Units.GeV
+    icf.minPT              = lambda pcf : (
+        [0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale])
+    icf.minPTSeed          = lambda pcf : (
+        0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
     icf.doBremRecoverySi   = False
 
     return icf
@@ -348,7 +371,8 @@ def createITkLowPtTrackingPassFlags():
 def createHighPileupTrackingPassFlags():
     icf = createTrackingPassFlags()
     icf.extension               = "HighPileup"
-    icf.minPT                   = 0.900 * Units.GeV
+    icf.minPT                   = lambda pcf : (
+        0.900 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
     icf.minClusters             = 9
     icf.maxPixelHoles           = 0
     icf.doBremRecoverySi        = False
@@ -359,7 +383,8 @@ 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.maxPrimaryImpact          = 10. * Units.mm
     icf.maxZImpact                = 250. * Units.mm
     icf.minClusters               = 5
@@ -376,7 +401,8 @@ 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
@@ -394,8 +420,10 @@ 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
@@ -424,8 +452,10 @@ 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
@@ -463,8 +493,10 @@ 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
@@ -493,9 +525,12 @@ def createLowPtTrackingPassFlags():
     icf.extension        = "LowPt"
     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.05 * Units.GeV
+    icf.maxPT            = lambda pcf: (
+        pcf.BField.configuredSolenoidFieldScale *
+        (1e6 if pcf.Tracking.doMinBias else
+         pcf.Tracking.MainPass.minPT + 0.3) * Units.GeV)
+    icf.minPT            = lambda pcf: (
+        0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
     icf.minClusters      = 5
     icf.minSiNotShared   = 4
     icf.maxShared        = 1   # cut is now on number of shared modules
@@ -520,7 +555,8 @@ def createITkConversionTrackingPassFlags():
     icf.usePrdAssociationTool   = True
 
     icf.etaBins                 = [-1.0,4.0]
-    icf.minPT                   = [0.9 * Units.GeV]
+    icf.minPT                   = lambda pcf: (
+        [0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale])
     icf.maxPrimaryImpact        = [10.0 * Units.mm]
     icf.maxZImpact              = [150.0 * Units.mm]
     icf.minClusters             = [6]
@@ -552,9 +588,12 @@ def createVeryLowPtTrackingPassFlags():
     icf.usePrdAssociationTool = True
     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
+    icf.maxPT            = lambda pcf : (
+        pcf.BField.configuredSolenoidFieldScale *
+        (1e6 if pcf.Tracking.doMinBias else 
+         pcf.Tracking.MainPass.minPT + 0.3) * Units.GeV)
+    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
@@ -580,7 +619,8 @@ def createForwardTracksTrackingPassFlags():
     icf.storeSeparateContainer = True
     icf.minEta           = 2.4 # restrict to minimal eta
     icf.maxEta           = 2.7
-    icf.minPT            = 2 * Units.GeV
+    icf.minPT            = lambda pcf: (
+        2 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
     icf.minClusters      = 3
     icf.minSiNotShared   = 3
     icf.maxShared        = 1
@@ -606,7 +646,8 @@ def createBeamGasTrackingPassFlags():
     icf = createTrackingPassFlags()
     icf.extension        = "BeamGas"
     icf.usePrdAssociationTool = True
-    icf.minPT            = 0.500 * Units.GeV
+    icf.minPT            = lambda pcf: (
+        0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
     icf.maxPrimaryImpact = 300. * Units.mm
     icf.maxZImpact       = 2000. * Units.mm
     icf.minClusters      = 6
@@ -624,7 +665,8 @@ def createBeamGasTrackingPassFlags():
 def createVtxLumiTrackingPassFlags():
     icf = createTrackingPassFlags()
     icf.extension               = "VtxLumi"
-    icf.minPT                   = 0.900 * Units.GeV
+    icf.minPT                   = lambda pcf: (
+        0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
     icf.minClusters             = 7
     icf.maxPixelHoles           = 1
     icf.radMax                  = 600. * Units.mm
@@ -639,7 +681,8 @@ def createVtxLumiTrackingPassFlags():
 def createVtxBeamSpotTrackingPassFlags():
     icf = createTrackingPassFlags()
     icf.extension               = "VtxBeamSpot"
-    icf.minPT                   = 0.900 * Units.GeV
+    icf.minPT                   = lambda pcf: (
+        0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
     icf.minClusters             = 9
     icf.maxPixelHoles           = 0
     icf.radMax                  = 320. * Units.mm
@@ -654,7 +697,8 @@ def createVtxBeamSpotTrackingPassFlags():
 def createCosmicsTrackingPassFlags():
     icf = createTrackingPassFlags()
     icf.extension        = "Cosmics"
-    icf.minPT            = 0.5 * Units.GeV
+    icf.minPT            = lambda pcf: (
+        0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
     icf.maxPrimaryImpact = 1000. * Units.mm
     icf.maxZImpact       = 10000. * Units.mm
     icf.minClusters      = 4
@@ -693,9 +737,10 @@ def createHeavyIonTrackingPassFlags():
     icf.Xi2max           = 6.
     icf.Xi2maxNoAdd      = 10.
 
+    icf.minPT              = lambda pcf: (
+        0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
+        
     icf.maxdImpactSSSSeeds =  20. * Units.mm
-    
-    icf.minPT = 0.5 * Units.GeV
     icf.maxdImpactPPSSeeds = 1.7
     
     icf.maxHoles = 2
@@ -722,14 +767,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
@@ -788,7 +833,8 @@ 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
@@ -821,18 +867,15 @@ 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            = _minpt
 
-    icf.minPT            = _pick( default = 0.1 * Units.GeV,
-                                  minbias=0.1 * Units.GeV,
-                                  cosmics = 0.5* Units.GeV )
     icf.maxPrimaryImpact = lambda pcf: (
         1000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics else
         10. * Units.mm if pcf.Tracking.doLowMu else
@@ -878,7 +921,8 @@ 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.doBremRecoverySi        = False
 
     icf.RunPixelPID             = False
@@ -932,6 +976,10 @@ if __name__ == "__main__":
   flags.Tracking.doBLS = True
   assert flags.Tracking.ActiveConfig.maxPrimaryImpact == 10.0 * Units.mm, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.maxPrimaryImpact)
 
+  assert flags.Tracking.ActiveConfig.minPT == 0.5 * Units.GeV, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.minPT)
+  flags.BField.configuredSolenoidFieldScale = 0.1
+  assert flags.Tracking.ActiveConfig.minPT == 0.05 * Units.GeV, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.minPT)      
+        
   l.info("flags.Tracking.ActiveConfig.minPT %f", flags.Tracking.ActiveConfig.minPT * 1.0)
   l.info("type(flags.Tracking.ActiveConfig.minPT) " + str(type(flags.Tracking.ActiveConfig.minPT)))
 
diff --git a/Tracking/TrkConfig/python/TrkConfigFlags.py b/Tracking/TrkConfig/python/TrkConfigFlags.py
index ca038764350e5bbc153e0b7716c78b323fc6e83e..cddae441cfb61018b16f6912210cb096353cb503 100644
--- a/Tracking/TrkConfig/python/TrkConfigFlags.py
+++ b/Tracking/TrkConfig/python/TrkConfigFlags.py
@@ -194,13 +194,13 @@ def createTrackingConfigFlags():
     # --- defaults for backtracking
     def BackTrackingMinPt(flags):
         if flags.Tracking.doMinBias:
-            return 0.4 * Units.GeV
+            return 0.4 * Units.GeV * flags.BField.configuredSolenoidFieldScale
         elif (flags.Tracking.doLowMu or
               flags.Tracking.PrimaryPassConfig is PrimaryPassConfig.HeavyIon or
               flags.Beam.Type is BeamType.Cosmics):
-            return 1.0 * Units.GeV
+            return 1.0 * Units.GeV * flags.BField.configuredSolenoidFieldScale
         else:
-            return 3.0 * Units.GeV
+            return 3.0 * Units.GeV * flags.BField.configuredSolenoidFieldScale
     icf.addFlag("Tracking.BackTracking.minPt", BackTrackingMinPt)
     icf.addFlag("Tracking.BackTracking.TRTSegFinderPtBins", 50)
     icf.addFlag("Tracking.BackTracking.maxTRTSharedFrac", 0.7)
@@ -260,17 +260,17 @@ def createTrackingConfigFlags():
                            PrimaryPassConfig.HeavyIon) or
                        prevFlags.Beam.Type is BeamType.Cosmics or
                        prevFlags.Tracking.doMinBias)
-                else 6.*Units.GeV)
+                else 6.*Units.GeV * prevFlags.BField.configuredSolenoidFieldScale)
 
     # TRT standalone configuration
     def TRTStandaloneMinPt(flags):
         if flags.Tracking.doMinBias:
-            return 0.4 * Units.GeV
+            return 0.4 * Units.GeV * flags.BField.configuredSolenoidFieldScale
         elif flags.Tracking.doLowMu or (
                 flags.Tracking.PrimaryPassConfig is PrimaryPassConfig.HeavyIon):
-            return 1.0 * Units.GeV
+            return 1.0 * Units.GeV * flags.BField.configuredSolenoidFieldScale
         else:
-            return 2.0 * Units.GeV
+            return 2.0 * Units.GeV * flags.BField.configuredSolenoidFieldScale
     icf.addFlag("Tracking.TRTStandalone.minPt", TRTStandaloneMinPt)
     icf.addFlag("Tracking.TRTStandalone.minTRTPrecFrac", 0.15)
     icf.addFlag("Tracking.TRTStandalone.minTRT", 15)