diff --git a/Phys/DecayTreeFitter/include/DecayTreeFitter/Fitter.h b/Phys/DecayTreeFitter/include/DecayTreeFitter/Fitter.h
index d3509542628c3f0eb766dd290e4f534871dadb7b..273a139e5766ef562db05b9ed47c31f33b222e70 100644
--- a/Phys/DecayTreeFitter/include/DecayTreeFitter/Fitter.h
+++ b/Phys/DecayTreeFitter/include/DecayTreeFitter/Fitter.h
@@ -43,21 +43,21 @@ namespace DecayTreeFitter {
 
   public:
     /// constructor from the particle (decay head)
-    Fitter( const LHCb::Particle& bc, const bool forceFitAll = true, const ITrackStateProvider* extrapolator = 0 );
+    Fitter( const LHCb::Particle& bc, const bool forceFitAll = true, const ITrackStateProvider* extrapolator = 0, bool useTrackTraj = true);
     /// constructor from the particle (decay head)
-    Fitter( const LHCb::Particle& bc, const ITrackStateProvider* extrapolator, const bool forceFitAll = true );
+    Fitter( const LHCb::Particle& bc, const ITrackStateProvider* extrapolator, const bool forceFitAll = true, bool useTrackTraj = true);
     /// constructor from the particle (decay head) and primary vertex
     Fitter( const LHCb::Particle& bc, const LHCb::VertexBase& pv, const bool forceFitAll = true,
-            const ITrackStateProvider* extrapolator = 0 );
+            const ITrackStateProvider* extrapolator = 0, bool useTrackTraj = true);
     /// constructor from the particle (decay head) and v2 primary vertex
     Fitter( const LHCb::Particle& bc, const LHCb::Event::v2::RecVertex& pv, const bool forceFitAll = true,
-            const ITrackStateProvider* extrapolator = 0 );
+            const ITrackStateProvider* extrapolator = 0, bool useTrackTraj = true);
     /// constructor from the particle (decay head) and primary vertex
     Fitter( const LHCb::Particle& bc, const LHCb::VertexBase& pv, const ITrackStateProvider* extrapolator,
-            const bool forceFitAll = true );
+            const bool forceFitAll = true, bool useTrackTraj = true);
     /// constructor from the particle (decay head) and v2 primary vertex
     Fitter( const LHCb::Particle& bc, const LHCb::Event::v2::RecVertex& pv, const ITrackStateProvider* extrapolator,
-            const bool forceFitAll = true );
+            const bool forceFitAll = true, bool useTrackTraj = true);
     /// destructor
     ~Fitter(); // destructor
 
diff --git a/Phys/DecayTreeFitter/src/component/DecayTreeFitterAlg.cpp b/Phys/DecayTreeFitter/src/component/DecayTreeFitterAlg.cpp
index e3cbb32b7d7918842d2cd570b1ba8659ecada971..0277a2c0d9fa1aa6ab60c4a5ef5ebcd985e2d5eb 100644
--- a/Phys/DecayTreeFitter/src/component/DecayTreeFitterAlg.cpp
+++ b/Phys/DecayTreeFitter/src/component/DecayTreeFitterAlg.cpp
@@ -166,6 +166,8 @@ private:
 
   // properties
   Gaudi::Property<std::vector<std::string>> m_massConstraints{this, "MassConstraints"};
+  Gaudi::Property<bool> m_useTrackTraj{this, "useTrackTraj", true};
+  Gaudi::Property<bool> m_forceFitAll{this, "forceFitAll", true};
 
   // counters
   mutable Gaudi::Accumulators::Counter<>                 m_eventCount{this, "Events"};
@@ -197,7 +199,11 @@ typename GaudiSignature<NoPV, LHCb::Particle::Range>::Output_t DecayTreeFitterAl
   NIter_t           niter_out;
 
   for ( auto* p : parts ) {
-    auto fitter = DecayTreeFitter::Fitter( *p, m_stateprovider );
+    if (!m_stateprovider.retrieve().isSuccess())
+    {
+      warning() << "Can not retrive StateProvider correctly." << endmsg;
+    }
+    auto fitter = DecayTreeFitter::Fitter( *p, m_stateprovider.get(), m_forceFitAll.value(), m_useTrackTraj.value() );
     for ( const auto& C : m_massConstraints ) {
       const LHCb::ParticleProperty* p_prop = m_particlePropertySvc->find( C );
       fitter.setMassConstraint( p_prop->particleID() );
@@ -251,7 +257,11 @@ operator()( const LHCb::Particle::Range& parts, const LHCb::Event::PV::PrimaryVe
   NIter_t           niter_out;
 
   for ( const auto& p : parts ) {
-    auto fitter = DecayTreeFitter::Fitter( *p, Sel::getBestPV( *p, vertices ), m_stateprovider );
+    if (!m_stateprovider.retrieve().isSuccess())
+    {
+      warning() << "Can not retrive StateProvider correctly." << endmsg;
+    }
+    auto fitter = DecayTreeFitter::Fitter( *p, Sel::getBestPV( *p, vertices ), m_stateprovider.get(), m_forceFitAll.value(), m_useTrackTraj.value() );
     for ( const auto& C : m_massConstraints ) {
       const LHCb::ParticleProperty* p_prop = m_particlePropertySvc->find( C );
       fitter.setMassConstraint( p_prop->particleID() );
@@ -308,7 +318,11 @@ operator()( const LHCb::Particle::Range& parts, const LHCb::Event::PV::PrimaryVe
   for ( const auto& p : parts ) {
 
     for ( const auto& v : vertices ) {
-      auto fitter = DecayTreeFitter::Fitter( *p, v, m_stateprovider );
+      if (!m_stateprovider.retrieve().isSuccess())
+      {
+        warning() << "Can not retrive StateProvider correctly." << endmsg;
+      }
+      auto fitter = DecayTreeFitter::Fitter( *p, v, m_stateprovider.get(), m_forceFitAll.value(), m_useTrackTraj.value() );
       for ( const auto& C : m_massConstraints ) {
         const LHCb::ParticleProperty* p_prop = m_particlePropertySvc->find( C );
         fitter.setMassConstraint( p_prop->particleID() );
diff --git a/Phys/DecayTreeFitter/src/lib/Configuration.h b/Phys/DecayTreeFitter/src/lib/Configuration.h
index 8d7b47fda9bcbc569998500a5b6657044623d91d..0f69e775f6a713acb03ee9e3abc763a667ff8c02 100644
--- a/Phys/DecayTreeFitter/src/lib/Configuration.h
+++ b/Phys/DecayTreeFitter/src/lib/Configuration.h
@@ -16,8 +16,8 @@ struct ITrackStateProvider;
 namespace DecayTreeFitter {
   class Configuration {
   public:
-    Configuration( bool forceFitAll = true, const ITrackStateProvider* stateprovider = 0 )
-        : m_forceFitAll( forceFitAll ), m_stateprovider( stateprovider ), m_useTrackTraj( true ) {}
+    Configuration( bool forceFitAll = true, const ITrackStateProvider* stateprovider = 0, bool useTrackTraj = true)
+        : m_forceFitAll( forceFitAll ), m_stateprovider( stateprovider ), m_useTrackTraj( useTrackTraj ) {}
 
     const ITrackStateProvider* stateProvider() const { return m_stateprovider; }
 
diff --git a/Phys/DecayTreeFitter/src/lib/Fitter.cpp b/Phys/DecayTreeFitter/src/lib/Fitter.cpp
index 62f373ac1de1835db5807d29e94317ea6e46d220..a9af784c3c586766a735534dd5ee842ef73c4e26 100644
--- a/Phys/DecayTreeFitter/src/lib/Fitter.cpp
+++ b/Phys/DecayTreeFitter/src/lib/Fitter.cpp
@@ -39,14 +39,14 @@ namespace DecayTreeFitter {
   // ==========================================================================
   // constructor from the particle (decay head)
   // ==========================================================================
-  Fitter::Fitter( const LHCb::Particle& bc, const bool forceFitAll, const ITrackStateProvider* extrapolator )
+  Fitter::Fitter( const LHCb::Particle& bc, const bool forceFitAll, const ITrackStateProvider* extrapolator, bool useTrackTraj)
       : m_particle( &bc )
       , m_status( UnFitted )
       , m_chiSquare( -1 )
       , m_niter( -1 )
       , m_errCode( 0 )
       , m_extrapolator( const_cast<ITrackStateProvider*>( extrapolator ) ) {
-    Configuration config( forceFitAll, extrapolator );
+    Configuration config( forceFitAll, extrapolator, useTrackTraj );
     // build the tree
     m_decaychain = std::make_unique<DecayChain>( bc, config );
     // allocate the fit parameters
@@ -55,14 +55,14 @@ namespace DecayTreeFitter {
   // ==========================================================================
   // constructor from the particle (decay head)
   // ==========================================================================
-  Fitter::Fitter( const LHCb::Particle& bc, const ITrackStateProvider* extrapolator, const bool forceFitAll )
+  Fitter::Fitter( const LHCb::Particle& bc, const ITrackStateProvider* extrapolator, const bool forceFitAll, bool useTrackTraj)
       : m_particle( &bc )
       , m_status( UnFitted )
       , m_chiSquare( -1 )
       , m_niter( -1 )
       , m_errCode( 0 )
       , m_extrapolator( const_cast<ITrackStateProvider*>( extrapolator ) ) {
-    Configuration config( forceFitAll, extrapolator );
+    Configuration config( forceFitAll, extrapolator, useTrackTraj );
     // build the tree
     m_decaychain = std::make_unique<DecayChain>( bc, config );
     // allocate the fit parameters
@@ -72,7 +72,7 @@ namespace DecayTreeFitter {
   // constructor from the particle (decay head) and primary vertex
   // ==========================================================================
   Fitter::Fitter( const LHCb::Particle& bc, const LHCb::VertexBase& pv, const bool forceFitAll,
-                  const ITrackStateProvider* extrapolator )
+                  const ITrackStateProvider* extrapolator, bool useTrackTraj)
       : m_particle( &bc )
       , m_status( UnFitted )
       , m_chiSquare( -1 )
@@ -82,7 +82,7 @@ namespace DecayTreeFitter {
       , m_extrapolator( const_cast<ITrackStateProvider*>( extrapolator ) )
   //
   {
-    Configuration config( forceFitAll, extrapolator );
+    Configuration config( forceFitAll, extrapolator, useTrackTraj );
     m_decaychain = std::make_unique<DecayChain>( bc, pv, config );
     m_fitparams  = std::make_unique<FitParams>( m_decaychain->dim() );
   }
@@ -90,7 +90,7 @@ namespace DecayTreeFitter {
   // constructor from the particle (decay head) and v2 primary vertex
   // ==========================================================================
   Fitter::Fitter( const LHCb::Particle& bc, const LHCb::Event::v2::RecVertex& pv, const bool forceFitAll,
-                  const ITrackStateProvider* extrapolator )
+                  const ITrackStateProvider* extrapolator, bool useTrackTraj)
       : m_particle( &bc )
       , m_status( UnFitted )
       , m_chiSquare( -1 )
@@ -100,7 +100,7 @@ namespace DecayTreeFitter {
       , m_extrapolator( const_cast<ITrackStateProvider*>( extrapolator ) )
   //
   {
-    Configuration config( forceFitAll, extrapolator );
+    Configuration config( forceFitAll, extrapolator, useTrackTraj );
     m_decaychain = std::make_unique<DecayChain>( bc, pv, config );
     m_fitparams  = std::make_unique<FitParams>( m_decaychain->dim() );
   }
@@ -108,7 +108,7 @@ namespace DecayTreeFitter {
   // constructor from the particle (decay head) and primary vertex
   // ==========================================================================
   Fitter::Fitter( const LHCb::Particle& bc, const LHCb::VertexBase& pv, const ITrackStateProvider* extrapolator,
-                  const bool forceFitAll )
+                  const bool forceFitAll, bool useTrackTraj)
       : m_particle( &bc )
       , m_status( UnFitted )
       , m_chiSquare( -1 )
@@ -118,7 +118,7 @@ namespace DecayTreeFitter {
       , m_extrapolator( const_cast<ITrackStateProvider*>( extrapolator ) )
   //
   {
-    Configuration config( forceFitAll, extrapolator );
+    Configuration config( forceFitAll, extrapolator, useTrackTraj );
     m_decaychain = std::make_unique<DecayChain>( bc, pv, config );
     m_fitparams  = std::make_unique<FitParams>( m_decaychain->dim() );
   }
@@ -126,7 +126,7 @@ namespace DecayTreeFitter {
   // constructor from the particle (decay head) and v2 primary vertex
   // ==========================================================================
   Fitter::Fitter( const LHCb::Particle& bc, const LHCb::Event::v2::RecVertex& pv,
-                  const ITrackStateProvider* extrapolator, const bool forceFitAll )
+                  const ITrackStateProvider* extrapolator, const bool forceFitAll, bool useTrackTraj)
       : m_particle( &bc )
       , m_status( UnFitted )
       , m_chiSquare( -1 )
@@ -136,7 +136,7 @@ namespace DecayTreeFitter {
       , m_extrapolator( const_cast<ITrackStateProvider*>( extrapolator ) )
   //
   {
-    Configuration config( forceFitAll, extrapolator );
+    Configuration config( forceFitAll, extrapolator, useTrackTraj );
     m_decaychain = std::make_unique<DecayChain>( bc, pv, config );
     m_fitparams  = std::make_unique<FitParams>( m_decaychain->dim() );
   }