diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/semileptonic/HbToTauNu_BTracking.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/semileptonic/HbToTauNu_BTracking.py
index fc9cc9de33787e72053f600db4dc316da69a2319..6014afb887410f8fa43c9534a24ee531e7544f40 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/semileptonic/HbToTauNu_BTracking.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/semileptonic/HbToTauNu_BTracking.py
@@ -19,6 +19,8 @@ from Hlt2Conf.algorithms_thor import ParticleFilter, ParticleCombiner, require_a
 from RecoConf.reconstruction_objects import make_pvs
 from Hlt2Conf.standard_particles import (make_has_rich_long_pions,
                                          make_has_rich_long_kaons)
+
+from RecoConf.hlt2_tracking import make_veloheavyflavourtracks
 """
 SL lines for the B->taunu decays (and control modes) with purpose of using charged 
 B tracking, hence large transverse flight distance requirements and VELO raw banks
@@ -30,15 +32,16 @@ def make_candidate_btracking(name,
                              make_particles,
                              make_pvs=make_pvs,
                              p_min=10 * GeV,
-                             pt_min=1 * GeV,
-                             ip_min=0.1 * mm,
+                             pt_min=0.5 * GeV,
+                             mipchi2_min=4,
                              pid=None):
     """
     base candidates for btracking
     note: note extra track quality (based) cuts due to possible B hits in tracks
     """
     pvs = make_pvs()
-    code = require_all(F.P > p_min, F.PT > pt_min, F.MINIP(pvs) > ip_min)
+    code = require_all(F.P > p_min, F.PT > pt_min,
+                       F.MINIPCHI2(pvs) > mipchi2_min)
     if pid is not None:
         code = require_all(code, pid)
     return ParticleFilter(make_particles(), F.FILTER(code), name=name)
@@ -49,18 +52,17 @@ def make_x23prong_btracking(name="SLB_ThreeProng_BTracking",
                             particles=make_has_rich_long_pions,
                             descriptor="[tau+ -> pi- pi+ pi+]cc",
                             make_pvs=make_pvs,
-                            comb_doca_max=0.15 * mm,
-                            pt_min=2.0 * GeV,
-                            mipchi2_min=4,
-                            vchi2_max=16,
-                            m_min=400. * MeV,
+                            pt_min=5.0 * GeV,
+                            comb_doca_max=0.1 * mm,
+                            mipchi2_min=10,
+                            vchi2_max=12,
+                            m_min=500. * MeV,
                             m_max=3500. * MeV,
-                            fdt_min=4. * mm,
+                            fdt_min=5. * mm,
                             mcorr_min=None,
                             twobody_m_max=1670 * MeV):
     """
     3-prong decay for B tracking purposes, with large transverse flight distance (fdt)
-    and no track quality (based) requirements
     """
     pvs = make_pvs()
 
@@ -70,8 +72,7 @@ def make_x23prong_btracking(name="SLB_ThreeProng_BTracking",
     # three-body selection
     combination_code = require_all(
         in_range(m_min - 50 * MeV, F.MASS, m_max + 50 * MeV),
-        F.MAXDOCACUT(comb_doca_max),
-        F.SUBCOMB(Functor=F.MASS < twobody_m_max, Indices=(1, 3)))
+        F.MAXDOCACUT(comb_doca_max))
     if mipchi2_min is not None:
         combination_code = require_all(
             combination_code, 1 < F.SUM(F.MINIPCHI2(pvs) > mipchi2_min))
@@ -82,21 +83,23 @@ def make_x23prong_btracking(name="SLB_ThreeProng_BTracking",
     if mcorr_min is not None:
         vertex_code = require_all(vertex_code, F.BPVCORRM(pvs) > mcorr_min)
     if fdt_min is not None:
-        vertex_code = require_all(vertex_code, F > F.BPVVDRHO(pvs) > fdt_min)
+        vertex_code = require_all(vertex_code, F.BPVVDRHO(pvs) > fdt_min)
 
     return ParticleCombiner(
         particles,
         DecayDescriptor=descriptor,
         Combination12Cut=twobody_code,
         CombinationCut=combination_code,
-        CompositeCut=vertex_code)
+        CompositeCut=vertex_code,
+        name=name)
 
 
 def make_twopions(pions,
                   mother_id="rho(770)0",
                   m_max=3.5 * GeV,
-                  comb_doca_max=0.15 * mm,
-                  vchi2_max=16):
+                  comb_doca_max=0.1 * mm,
+                  vchi2_max=12,
+                  name='SLB_BTracking_TwoPions'):
     """
     for pions from B+->D-pi+pi+ dalitz decays, these pions form the B vertex
     """
@@ -107,7 +110,8 @@ def make_twopions(pions,
     return ParticleCombiner([pions, pions],
                             DecayDescriptor=f"[{mother_id} -> pi+ pi+]cc",
                             CombinationCut=combination_code,
-                            CompositeCut=vertex_code)
+                            CompositeCut=vertex_code,
+                            name=name)
 
 
 def make_b2taunu_tau2pipipi(process):
@@ -118,18 +122,30 @@ def make_b2taunu_tau2pipipi(process):
     assert process in ['hlt2', 'spruce'
                        ], 'Line must be defined as Hlt2 or Sprucing line!'
 
-    pions = make_candidate_btracking()
+    pions = make_candidate_btracking(
+        name="SLB_BTracking_Pions",
+        make_particles=make_has_rich_long_pions,
+        pid=(F.PID_K < 2))
 
     return make_x23prong_btracking(
-        name="SLB_TauToThreePion_BTracking",
+        name="SLB_BTracking_TauToThreePion",
         particles=[pions, pions, pions],
-        descriptor="[tau+ -> pi- pi+ pi+]cc")
+        descriptor="[tau+ -> pi- pi+ pi+]cc",
+        m_max=1825. * MeV)
+
+
+def make_b2taunu_tau2pipipi_with_tracking(process):
+    parts = make_b2taunu_tau2pipipi(process)
+    pvs = make_pvs()
+    btracks = make_veloheavyflavourtracks(composites=parts, pvs=pvs)
+    return parts, btracks
 
 
 def make_b2dpipi_d2kpipi(process,
                          vchi2_max=16,
                          m_min=5.0 * GeV,
-                         m_max=5.7 * GeV):
+                         m_max=5.7 * GeV,
+                         name='SLB_BTracking_B2DPiPi'):
     """
     for candidates for B+ -> D- ( -> K+ pi- pi- ) pi+ pi+ with B tracking (control channel)
     """
@@ -137,20 +153,25 @@ def make_b2dpipi_d2kpipi(process,
                        ], 'Line must be defined as Hlt2 or Sprucing line!'
 
     pions = make_candidate_btracking(
-        name="SLB_Pions_BTracking", particles=make_has_rich_long_pions)
+        name="SLB_BTracking_Pions",
+        make_particles=make_has_rich_long_pions,
+        pid=(F.PID_K < 2))
     kaons = make_candidate_btracking(
-        name="SLB_Kaons_BTracking", particles=make_has_rich_long_kaons)
+        name="SLB_BTracking_Kaons",
+        make_particles=make_has_rich_long_kaons,
+        pid=(F.PID_K > 4))
 
     # input D-, same selection as tau23pi aside from mass window
     dps = make_x23prong_btracking(
-        name="SLB_DToKaonTwoPion_BTracking",
+        name="SLB_BTracking_DToKaonTwoPion",
         particles=[kaons, pions, pions],
         descriptor="[D- -> K+ pi- pi-]cc",
         m_min=1830 * MeV,
         m_max=1910 * MeV)
 
     twopions_id = "rho(770)0"
-    twopions = make_twopions(pions, mother_id=twopions_id)
+    twopions = make_twopions(
+        pions, mother_id=twopions_id, name="SLB_BTracking_TwoPion_For_B")
 
     # combine to form full B
     combination_code = require_all(
@@ -162,4 +183,5 @@ def make_b2dpipi_d2kpipi(process,
     return ParticleCombiner([dps, twopions],
                             DecayDescriptor=f"[B+ -> D- {twopions_id}]cc",
                             CombinationCut=combination_code,
-                            CompositeCut=vertex_code)
+                            CompositeCut=vertex_code,
+                            name=name)
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/semileptonic/hlt2_semileptonic.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/semileptonic/hlt2_semileptonic.py
index 67c0f730429ea32d2ba3091e25fc940ed96cefb1..fc93db548222e3f05c8e8787a7e9027af449d1e2 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/semileptonic/hlt2_semileptonic.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/semileptonic/hlt2_semileptonic.py
@@ -117,7 +117,8 @@ from .HbToLLLNu import (
     make_b2emumunu_fakeelectron, make_b2mueenu_fakemuon,
     make_b2eeenu_trifakeelectron, make_b2eeenu_onefakeelectron)
 from .HbToTauNu_BTracking import (
-    make_x23prong_btracking, make_b2dpipi_d2kpipi, make_b2taunu_tau2pipipi)
+    make_x23prong_btracking, make_b2dpipi_d2kpipi, make_b2taunu_tau2pipipi,
+    make_b2taunu_tau2pipipi_with_tracking)
 from PyConf.application import default_raw_event
 
 PROCESS = 'hlt2'
@@ -2699,12 +2700,14 @@ def hlt2_btotaunu_tautopipipinu_btracking_line(
     """
     SL Hlt2 line for B+(c)->Tau+(->Pi+Pi+Pi-Nu)Nu + c.c. with ability for B+(c) tracking
     """
-    line_alg = make_b2taunu_tau2pipipi(process=PROCESS)
+    line_alg, btracking = make_b2taunu_tau2pipipi_with_tracking(
+        process=PROCESS)
     return HltLine(
         name=name,
         prescale=prescale,
-        algs=sl_line_prefilter() + [line_alg],
-        extra_outputs=[("RawBankVP", make_raw(["VP"]))],
+        algs=sl_line_prefilter() + [line_alg, btracking],
+        extra_outputs=[("RawBankVP", make_raw(["VP"])),
+                       ("HeavyFlavourTrackingInfo", btracking.OutputLocation)],
         persistreco=persistreco)
 
 
@@ -2730,7 +2733,7 @@ def hlt2_btodpipi_dtokpipi_btracking_line(
 @register_line_builder(hlt2_lines)
 def hlt2_btodpipi_dtokpipi_btracking_loose_line(
         name="Hlt2SLB_BToDPiPi_DToKPiPi_BTracking_LooseMinFDT_Line",
-        prescale=0.1,
+        prescale=1,
         make_raw=default_raw_event,
         persistreco=True):
     """
diff --git a/Hlt/RecoConf/python/RecoConf/hlt2_tracking.py b/Hlt/RecoConf/python/RecoConf/hlt2_tracking.py
index 6d088a8809e20f7b5f274c20c5388f823689712a..f010340fb598b172d89bd8ccb209138ca85a4985 100644
--- a/Hlt/RecoConf/python/RecoConf/hlt2_tracking.py
+++ b/Hlt/RecoConf/python/RecoConf/hlt2_tracking.py
@@ -39,7 +39,8 @@ from PyConf.Algorithms import (
     LHCb__Converters__Track__SOA__fromV1Track as TrackSOAFromV1,
     LHCb__Converters__Track__SOA__fromSharedV1Track as TrackSOAFromSharedV1,
     PrKalmanFilter, PrKalmanFilter_noUT, PrKalmanFilter_Seed,
-    PrKalmanFilter_Velo, PrKalmanFilter_Downstream, PrKalmanFilter_Upstream)
+    PrKalmanFilter_Velo, PrKalmanFilter_Downstream, PrKalmanFilter_Upstream,
+    VeloHeavyFlavourTracking)
 
 from PyConf.Tools import (PrAddUTHitsTool, PrIgnoreUTHitsTool, UpgradeGhostId,
                           TrackMasterExtrapolator, TrackLinearExtrapolator)
@@ -1503,3 +1504,9 @@ def convert_tracks_to_v3_from_v1(tracks_v1,
         tracks[tracktype] = trackconverter.OutputTracks
         trackrels[tracktype] = trackconverter.Relations
     return tracks, trackrels
+
+
+def make_veloheavyflavourtracks(composites, pvs):
+    vp_hits = make_VeloClusterTrackingSIMD_hits()
+    return VeloHeavyFlavourTracking(
+        Composites=composites, PVs=pvs, Hits=vp_hits)