diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/bbaryon_to_lightbaryon_dh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/bbaryon_to_lightbaryon_dh.py
index cbcc7a6ad8913fb4551af03cbfb7a13697347b96..4907edbe20867bd210e1a000073ae7aad41c5d52 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/bbaryon_to_lightbaryon_dh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/bbaryon_to_lightbaryon_dh.py
@@ -753,19 +753,20 @@ def make_LbToD0PPi_D0ToKsTTHH(process):
 @check_process
 def make_XibmToDmPPi_DmToHHH(process):
     if process == "spruce":
-        d = d_builder.make_dplus_to_hhh(pi_pidk_max=None, k_pidk_min=None)
-        proton = basic_builder.make_tightpid_soft_protons()
-        pion = basic_builder.make_soft_pions(pi_pidk_max=None)
+        d = d_builder.make_dplus_to_kmpippip(k_pidk_min=0, pi_pidk_max=0)
+        proton = basic_builder.make_tightpid_soft_protons(p_pidp_min=0, p_pidkmp_max=0)
+        pion = basic_builder.make_tightpid_soft_pions(pi_pidk_max=0)
     elif process == "hlt2":
-        d = d_builder.make_dplus_to_hhh()
-        proton = basic_builder.make_tightpid_soft_protons()
-        pion = basic_builder.make_tightpid_soft_pions()
+        d = d_builder.make_dplus_to_kmpippip(k_pidk_min=0, pi_pidk_max=0)
+        proton = basic_builder.make_tightpid_soft_protons(p_pidp_min=0, p_pidkmp_max=0)
+        pion = basic_builder.make_tightpid_soft_pions(pi_pidk_max=0)
     # note the order we write the decay descriptor in because the b2chh builder makes a
     # cut on the 1,2 i.e. h+h- combination
     line_alg = b_builder.make_xib2chh(
         particles=[proton, pion, d],
         descriptors=["[Xi_b- -> p+ pi- D-]cc"],
         sum_pt_min=6 * GeV,
+        bpvltime_min=0.3 * picosecond,
     )
     return line_alg
 
@@ -776,19 +777,20 @@ def make_XibmToDmPPi_DmToHHH(process):
 @check_process
 def make_XibmToDmPK_DmToHHH(process):
     if process == "spruce":
-        d = d_builder.make_dplus_to_hhh(pi_pidk_max=None, k_pidk_min=None)
-        proton = basic_builder.make_tightpid_soft_protons()
-        kaon = basic_builder.make_soft_kaons(k_pidk_min=None)
+        d = d_builder.make_dplus_to_kmpippip(k_pidk_min=0, pi_pidk_max=0)
+        proton = basic_builder.make_tightpid_soft_protons(p_pidp_min=0, p_pidkmp_max=0)
+        kaon = basic_builder.make_tightpid_soft_kaons(k_pidk_min=0)
     elif process == "hlt2":
-        d = d_builder.make_dplus_to_hhh()
-        proton = basic_builder.make_tightpid_soft_protons()
-        kaon = basic_builder.make_tightpid_soft_kaons()
+        d = d_builder.make_dplus_to_kmpippip(k_pidk_min=0, pi_pidk_max=0)
+        proton = basic_builder.make_tightpid_soft_protons(p_pidp_min=0, p_pidkmp_max=0)
+        kaon = basic_builder.make_tightpid_soft_kaons(k_pidk_min=0)
     # note the order we write the decay descriptor in because the b2chh builder makes a
     # cut on the 1,2 i.e. h+h- combination
     line_alg = b_builder.make_xib2chh(
         particles=[proton, kaon, d],
         descriptors=["[Xi_b- -> p+ K- D-]cc"],
         sum_pt_min=6 * GeV,
+        bpvltime_min=0.3 * picosecond,
     )
     return line_alg
 
@@ -799,13 +801,13 @@ def make_XibmToDmPK_DmToHHH(process):
 @check_process
 def make_XibmToDsmPPi_DsmToHHH(process):
     if process == "spruce":
-        ds = d_builder.make_dsplus_to_hhh(pi_pidk_max=None, k_pidk_min=None)
-        proton = basic_builder.make_tightpid_soft_protons()
-        pion = basic_builder.make_soft_pions(pi_pidk_max=None)
+        ds = d_builder.make_dsplus_to_kpkmpip(k_pidk_min=0, pi_pidk_max=0)
+        proton = basic_builder.make_tightpid_soft_protons(p_pidp_min=0, p_pidkmp_max=0)
+        pion = basic_builder.make_tightpid_soft_pions(pi_pidk_max=0)
     elif process == "hlt2":
-        ds = d_builder.make_dsplus_to_hhh()
-        proton = basic_builder.make_tightpid_soft_protons()
-        pion = basic_builder.make_tightpid_soft_pions()
+        ds = d_builder.make_dsplus_to_kpkmpip(k_pidk_min=0, pi_pidk_max=0)
+        proton = basic_builder.make_tightpid_soft_protons(p_pidp_min=0, p_pidkmp_max=0)
+        pion = basic_builder.make_tightpid_soft_pions(pi_pidk_max=0)
     # note the order we write the decay descriptor in because the b2chh builder makes a
     # cut on the 1,2 i.e. h+h- combination
     line_alg = b_builder.make_xib2chh(
@@ -823,13 +825,13 @@ def make_XibmToDsmPPi_DsmToHHH(process):
 @check_process
 def make_XibmToDsmPK_DsmToHHH(process):
     if process == "spruce":
-        ds = d_builder.make_dsplus_to_hhh(pi_pidk_max=None, k_pidk_min=None)
-        proton = basic_builder.make_tightpid_soft_protons()
-        kaon = basic_builder.make_soft_kaons(k_pidk_min=None)
+        ds = d_builder.make_dsplus_to_kpkmpip(k_pidk_min=0, pi_pidk_max=0)
+        proton = basic_builder.make_tightpid_soft_protons(p_pidp_min=0, p_pidkmp_max=0)
+        kaon = basic_builder.make_tightpid_soft_kaons(k_pidk_min=0)
     elif process == "hlt2":
-        ds = d_builder.make_dsplus_to_hhh()
-        proton = basic_builder.make_tightpid_soft_protons()
-        kaon = basic_builder.make_tightpid_soft_kaons()
+        ds = d_builder.make_dsplus_to_kpkmpip(k_pidk_min=0, pi_pidk_max=0)
+        proton = basic_builder.make_tightpid_soft_protons(p_pidp_min=0, p_pidkmp_max=0)
+        kaon = basic_builder.make_tightpid_soft_kaons(k_pidk_min=0)
     # note the order we write the decay descriptor in because the b2chh builder makes a
     # cut on the 1,2 i.e. h+h- combination
     line_alg = b_builder.make_xib2chh(
@@ -847,13 +849,13 @@ def make_XibmToDsmPK_DsmToHHH(process):
 @check_process
 def make_XibmToDstmPPi_DstmToD0Pi_D0ToHH(process, MVACut=0.35):
     if process == "spruce":
-        dzero = d_builder.make_dzero_to_hh(pi_pidk_max=None, k_pidk_min=None)
-        proton = basic_builder.make_tightpid_soft_protons()
-        pion = basic_builder.make_soft_pions(p_pidp_min=None)
+        dzero = d_builder.make_dzero_to_kpi(k_pidk_min=0, pi_pidk_max=0)
+        proton = basic_builder.make_tightpid_soft_protons(p_pidp_min=0, p_pidkmp_max=0)
+        pion = basic_builder.make_tightpid_soft_pions(pi_pidk_max=0)
     elif process == "hlt2":
-        dzero = d_builder.make_dzero_to_hh()
-        proton = basic_builder.make_tightpid_soft_protons()
-        pion = basic_builder.make_soft_pions()
+        dzero = d_builder.make_dzero_to_kpi(k_pidk_min=0, pi_pidk_max=0)
+        proton = basic_builder.make_tightpid_soft_protons(p_pidp_min=0, p_pidkmp_max=0)
+        pion = basic_builder.make_tightpid_soft_pions(pi_pidk_max=0)
     dstar = d_builder.make_dstar_to_dzeropi(dzero)
     # note the order we write the decay descriptor in because the b2chh builder makes a
     # cut on the 1,2 i.e. h+h- combination
@@ -870,13 +872,13 @@ def make_XibmToDstmPPi_DstmToD0Pi_D0ToHH(process, MVACut=0.35):
 @check_process
 def make_XibmToDstmPK_DstmToD0Pi_D0ToHH(process, MVACut=0.35):
     if process == "spruce":
-        dzero = d_builder.make_dzero_to_hh(pi_pidk_max=None, k_pidk_min=None)
-        proton = basic_builder.make_tightpid_soft_protons()
-        kaon = basic_builder.make_soft_kaons(k_pidk_min=None)
+        dzero = d_builder.make_dzero_to_kpi(k_pidk_min=0, pi_pidk_max=0)
+        proton = basic_builder.make_tightpid_soft_protons(p_pidp_min=0, p_pidkmp_max=0)
+        kaon = basic_builder.make_tightpid_soft_kaons(k_pidk_min=0)
     elif process == "hlt2":
-        dzero = d_builder.make_dzero_to_hh()
-        proton = basic_builder.make_tightpid_soft_protons()
-        kaon = basic_builder.make_soft_kaons()
+        dzero = d_builder.make_dzero_to_kpi(k_pidk_min=0, pi_pidk_max=0)
+        proton = basic_builder.make_tightpid_soft_protons(p_pidp_min=0, p_pidkmp_max=0)
+        kaon = basic_builder.make_tightpid_soft_kaons(k_pidk_min=0)
     dstar = d_builder.make_dstar_to_dzeropi(dzero)
     # note the order we write the decay descriptor in because the b2chh builder makes a
     # cut on the 1,2 i.e. h+h- combination
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/builders/basic_builder.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/builders/basic_builder.py
index 94a6d9582f7650905d16a501323551955e0faf9b..93539384ad0c7f8da2bf1aca430ea7d81cba079d 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/builders/basic_builder.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/builders/basic_builder.py
@@ -208,21 +208,25 @@ def make_tightpid_tight_protons(p_pidp_min=-5):
 
 
 @configurable
-def make_soft_protons(p_pidp_min=-10, p_min=2 * GeV, pt_min=100 * MeV):
-    """Return accompanyingprotons filtered by thresholds common to B2OC very soft selections."""
+def make_soft_protons(
+    p_pidp_min=-10, p_pidkmp_max=None, p_min=2 * GeV, pt_min=100 * MeV
+):
+    """Return accompanying protons filtered by thresholds common to B2OC very soft selections."""
     protons = filter_particles(
         make_particles=make_has_rich_long_protons, p_min=p_min, pt_min=pt_min
     )
     if p_pidp_min is not None:
         code = F.PID_P > p_pidp_min
+        if p_pidkmp_max is not None:
+            code &= (F.PID_K - F.PID_P) < p_pidkmp_max
         protons = ParticleFilter(protons, F.FILTER(code))
     return protons
 
 
 @configurable
-def make_tightpid_soft_protons(p_pidp_min=-5):
+def make_tightpid_soft_protons(p_pidp_min=-5, p_pidkmp_max=None):
     """Return soft accompanying protons filtered by thresholds with tightened PID cut."""
-    return make_soft_protons(p_pidp_min=p_pidp_min)
+    return make_soft_protons(p_pidp_min=p_pidp_min, p_pidkmp_max=p_pidkmp_max)
 
 
 @configurable