diff --git a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/hlt2_b2oc_example.py b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/hlt2_b2oc_example.py
index 9c808936fa5c33b8cd3f31407096dca2564d856e..4cf8cc17e8c655a63c703c31872c673377ebadd4 100644
--- a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/hlt2_b2oc_example.py
+++ b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/hlt2_b2oc_example.py
@@ -39,28 +39,35 @@ make_hlt2_lines(
 # configure which lines to test
 ###############################################################################
 # Run on ALL B2OC lines
+from DDDB.CheckDD4Hep import UseDD4Hep
 from Hlt2Conf.lines.b_to_open_charm import all_lines
+from Hlt2Conf.settings.hlt2_binds import config_pp_2024
 from Moore import options, run_moore
-from RecoConf.global_tools import stateProvider_with_simplified_geom
+from Moore.streams import DETECTORS, Stream, Streams
+from RecoConf.global_tools import (
+    stateProvider_with_simplified_geom,
+    trackMasterExtrapolator_with_simplified_geom,
+)
 from RecoConf.reconstruction_objects import reconstruction
 
 ###############################################################################
 # configure input data set
 ###############################################################################
 
-options.set_input_and_conds_from_testfiledb("expected_2024_min_bias_hlt1_filtered")
+options.set_input_and_conds_from_testfiledb("hlt2_bandwidth_input_2024")
 options.input_raw_format = 0.5
+options.ioalg_buffer_nb_events = 300
 
 # Set a reasonable number of events
-options.evt_max = 100
+options.evt_max = 1000
 
 ###############################################################################
 # configure output files
 ###############################################################################
 
 # Write the output file
-options.output_file = "hlt2_b2oc_lines.dst"
-options.output_type = "ROOT"
+options.output_file = "hlt2_{stream}.mdf"
+options.output_type = "MDF"
 options.output_manifest_file = "hlt2_b2oc_lines.tck.json"
 # Hlt2 monitoring histos
 options.histo_file = "hlt2_b2oc_monitoring.root"
@@ -70,11 +77,37 @@ options.histo_file = "hlt2_b2oc_monitoring.root"
 ###############################################################################
 
 
-def make_lines():
-    lines = [builder() for builder in all_lines.values()]
-    return lines
+def make_streams() -> Streams:
+    streams = [
+        Stream(
+            "b2oc",
+            lines=[builder() for builder in all_lines.values()],  # whole module
+            routing_bit=85,  # some dummy value != 94 or 95
+            # lines=[line_to_run()] # single line
+            detectors=[],
+        )  # Turbo and Full case - no detector raw banks
+        # detectors=DETECTORS) # if persisting detector raw banks i.e. special cases or TurCal lines
+    ]
+    return Streams(streams=streams)
+
+
+options.scheduler_legacy_mode = False
+if UseDD4Hep:
+    # This needs to happen before the public tools are instantiated,
+    # which means we cannot put it inside make_streams().
+    from PyConf.Tools import TrackMasterExtrapolator, TrackMasterFitter
 
+    TrackMasterExtrapolator.global_bind(
+        ApplyMultScattCorr=False,
+        ApplyEnergyLossCorr=False,
+        ApplyElectronEnergyLossCorr=False,
+    )
+    TrackMasterFitter.global_bind(ApplyMaterialCorrections=False)
 
-public_tools = [stateProvider_with_simplified_geom()]
-with reconstruction.bind(from_file=False):
-    config = run_moore(options, make_lines, public_tools, exclude_incompatible=True)
+
+public_tools = [
+    trackMasterExtrapolator_with_simplified_geom(),
+    stateProvider_with_simplified_geom(),
+]
+with reconstruction.bind(from_file=False), config_pp_2024():
+    config = run_moore(options, make_streams, public_tools, exclude_incompatible=True)
diff --git a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_example.py b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_example.py
index 9832c3c921a76e0a0e962565adc69eca469fd047..85faa5fc847da6b76c26b562d8e1d9eae6bf2577 100644
--- a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_example.py
+++ b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_example.py
@@ -60,33 +60,20 @@ from SprucingConfig.Spruce24.fullline_config.pp_Collision24c4 import (
 ###############################################################################
 
 # Configure input data from testfiledb
-input_files = [
-    "mdf:root://eoslhcb.cern.ch//eos/lhcb/wg/dpa/wp1/data/EoY-spruce-2024/307781_00090010_0105.raw",
-    "mdf:root://eoslhcb.cern.ch//eos/lhcb/wg/dpa/wp1/data/EoY-spruce-2024/307781_00090011_0074.raw",
-    "mdf:root://eoslhcb.cern.ch//eos/lhcb/wg/dpa/wp1/data/EoY-spruce-2024/307781_00090012_0106.raw",
-    "mdf:root://eoslhcb.cern.ch//eos/lhcb/wg/dpa/wp1/data/EoY-spruce-2024/307781_00090015_0004.raw",
-    "mdf:root://eoslhcb.cern.ch//eos/lhcb/wg/dpa/wp1/data/EoY-spruce-2024/307781_00090015_0073.raw",
-]
-options.input_files = input_files
-
+options.set_input_and_conds_from_testfiledb("spruce_bandwidth_input")
 options.input_raw_format = 0.5
-options.input_type = "RAW"
-options.simulation = False
-options.data_type = "Upgrade"
-options.geometry_version = "run3/2024.Q1.2-v00.00"
-options.conditions_version = "master"
+options.ioalg_buffer_nb_events = 300
 options.input_process = "Hlt2"
-options.scheduler_legacy_mode = False
 
 # Set a reasonable number of events
-options.evt_max = 100
+options.evt_max = 1000
 
 ###############################################################################
 # configure output files
 ###############################################################################
 
 # Write the output file
-options.output_file = "spruce_b2oc_lines.dst"
+options.output_file = "spruce_{stream}.dst"
 options.output_type = "ROOT"
 options.output_manifest_file = "spruce_b2oc_lines.tck.json"
 # Hlt2 monitoring histos
@@ -111,6 +98,7 @@ def make_streams() -> Streams:
 
 from DDDB.CheckDD4Hep import UseDD4Hep
 
+options.scheduler_legacy_mode = False
 if UseDD4Hep:
     from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
 
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_ddh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_ddh.py
index 891eb7bf567cf1dbb405044ac8316d3767b4a724..f7e516384d5d53cf1b330ad62f8f7766b60323c0 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_ddh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_ddh.py
@@ -40,12 +40,12 @@ def make_BdToD0D0Kst_D0ToHH(process, MVACut=0.5):  # 2x2-body D0 decay modes (is
 
 
 @check_process
-def make_BdToD0D0Kst_D0ToHH_D0ToHHHH(
+def make_BdToD0D0Kst_D0ToHH_D0ToKPiPiPi(
     process, MVACut=0.5
 ):  # 2x4-body D0 decay modes (isolated)
     kst = basic_builder.make_kstar0(am_min=600, am_max=1600, k_pidk_min=-2)
     dzero_hh = d_builder.make_dzero_to_hh(k_pidk_min=-2)
-    dzero_hhhh = d_builder.make_dzero_to_hhhh(k_pidk_min=-2)
+    dzero_hhhh = d_builder.make_dzero_to_kmpimpippip(k_pidk_min=-2)
     b = b_builder.make_b2cch(
         particles=[dzero_hh, dzero_hhhh, kst],
         descriptors=["B0 -> D0 D0 K*(892)0", "B0 -> D0 D0 K*(892)~0"],
@@ -219,8 +219,11 @@ def make_BdToDstD0K_DstToD0Pi_D0ToHH_D0ToHH(process):
 
 
 #############################################################################
+
+
+############################################################
 # Form the Tbc -> D0 D+ pi-, D0 --> Kpi & K3pi, D+ --> Kpipi
-##############################################################################
+############################################################
 
 
 @check_process
@@ -235,18 +238,20 @@ def make_TbcToD0DpPim_D0ToKPiOrKPiPiPi(process):
     return line_alg
 
 
-######################################################################
-######################################################################
+#########################################################################################
+# Form the B0/B+ -> D-/D0/D*- D_s1(2460)+, D_s1(2460)+ -> D_s+ pi+ pi-, D_s+ -> K+ K- pi+
+#########################################################################################
 @check_process
 def make_BuToD0Ds2460p_Ds2460pToDsPiPi_DsToKHH_D0ToKPi(process, MVACut=0.2):
-    dz = d_builder.make_dzero_to_kpi()
+    dz = d_builder.make_dzero_to_kpi(
+        am_min=1784.84,
+        am_max=1944.84,
+    )
     ds = d_builder.make_dsplus_to_hhh(
-        am_min=1868.35,
-        am_max=2068.35,
-        k_pidk_min=0,
         DsToKKPi=True,
-        DsToKPiPi=True,
+        DsToKPiPi=False,
         DsToPiPiPi=False,
+        k_pidk_min=0,
     )
     ds1 = d_builder.make_ds2460_to_dspipi(ds)
 
@@ -260,14 +265,15 @@ def make_BuToD0Ds2460p_Ds2460pToDsPiPi_DsToKHH_D0ToKPi(process, MVACut=0.2):
 
 @check_process
 def make_BuToD0Ds2460p_Ds2460pToDsPiPi_DsToKHH_D0ToKPiPiPi(process, MVACut=0.2):
-    dz = d_builder.make_dzero_to_kpipipi()
+    dz = d_builder.make_dzero_to_kpipipi(
+        am_min=1784.84,
+        am_max=1944.84,
+    )
     ds = d_builder.make_dsplus_to_hhh(
-        am_min=1868.35,
-        am_max=2068.35,
-        k_pidk_min=0,
         DsToKKPi=True,
-        DsToKPiPi=True,
+        DsToKPiPi=False,
         DsToPiPiPi=False,
+        k_pidk_min=0,
     )
     ds1 = d_builder.make_ds2460_to_dspipi(ds)
 
@@ -282,16 +288,14 @@ def make_BuToD0Ds2460p_Ds2460pToDsPiPi_DsToKHH_D0ToKPiPiPi(process, MVACut=0.2):
 @check_process
 def make_BdToDmDs2460p_Ds2460pToDsPiPi_DsToKHH_DmToHHH(process, MVACut=0.2):
     dm = d_builder.make_dplus_to_kpipi_or_kkpi(
-        am_min=1769.66,
-        am_max=1969.66,
+        am_min=1789.66,
+        am_max=1949.66,
     )
     ds = d_builder.make_dsplus_to_hhh(
-        am_min=1868.35,
-        am_max=2068.35,
-        k_pidk_min=0,
         DsToKKPi=True,
-        DsToKPiPi=True,
+        DsToKPiPi=False,
         DsToPiPiPi=False,
+        k_pidk_min=0,
     )
     ds1 = d_builder.make_ds2460_to_dspipi(ds)
 
@@ -306,16 +310,14 @@ def make_BdToDmDs2460p_Ds2460pToDsPiPi_DsToKHH_DmToHHH(process, MVACut=0.2):
 @check_process
 def make_BdToDstmDs2460p_DstmToD0Pi_Ds2460pToDsPiPi_DsToKHH(process, MVACut=0.2):
     dstm = d_builder.make_dstar_to_dzeropi_cf(
-        am_min=1764.84,
-        am_max=1964.84,
+        am_min=1784.84,
+        am_max=1944.84,
     )
     ds = d_builder.make_dsplus_to_hhh(
-        am_min=1868.35,
-        am_max=2068.35,
-        k_pidk_min=0,
         DsToKKPi=True,
-        DsToKPiPi=True,
+        DsToKPiPi=False,
         DsToPiPiPi=False,
+        k_pidk_min=0,
     )
     ds1 = d_builder.make_ds2460_to_dspipi(ds)
 
@@ -328,30 +330,30 @@ def make_BdToDstmDs2460p_DstmToD0Pi_Ds2460pToDsPiPi_DsToKHH(process, MVACut=0.2)
 
 
 @check_process
-def make_BdToDst0DsPi_Dst0ToD0Pi0Merged_D0ToKPiOrKPiPiPi_DsToHHH(process):
-    if process == "spruce":
-        dz = d_builder.make_dzero_to_kpi_or_kpipipi(pi_pidk_max=None, k_pidk_min=None)
-        ds = d_builder.make_dsplus_to_hhh(pi_pidk_max=None, k_pidk_min=None)
-        pion = basic_builder.make_tight_pions(pi_pidk_max=None)
-    elif process == "hlt2":
-        dz = d_builder.make_dzero_to_kpi_or_kpipipi()
-        ds = d_builder.make_dsplus_to_hhh()
-        pion = basic_builder.make_tight_pions()
-    pi0 = basic_builder.make_merged_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz, pi0)
+def make_BdToDsDs2460p_Ds2460pToDsPiPi_DsToKKPi(process, MVACut=0.2):
+    ds = d_builder.make_dsplus_to_hhh(
+        k_pidk_min=0,
+        DsToKKPi=True,
+        DsToKPiPi=False,
+        DsToPiPiPi=False,
+    )
+    ds1 = d_builder.make_ds2460_to_dspipi(ds)
+
     line_alg = b_builder.make_b2x(
-        particles=[dst, ds, pion],
-        descriptors=["B0 -> D*(2007)0 D_s+ pi-", "B0 -> D*(2007)0 D_s- pi+"],
+        particles=[ds, ds1],
+        descriptors=["B0 -> D_s- D_s1(2460)+", "B0 -> D_s+ D_s1(2460)-"],
         sum_pt_min=6 * GeV,
     )
     return line_alg
 
 
-#############################################################################
+################################################################################
 # Moved from b_to_ddh_standalone because these lines do not require make_b2ddh()
-##############################################################################
+################################################################################
 
-# BuToD0D0K lines
+##################################################################
+############## B+ -> D0 D0 K+ lines ##############################
+##################################################################
 
 
 @check_process
@@ -459,9 +461,9 @@ def make_BuToD0D0K_D0ToHH_D0ToKsDDHH(process, MVACut=0.2):  # 2x3(DD)-body
 
 
 @check_process
-def make_BuToD0D0K_D0ToHH_D0ToHHHH(process, MVACut=0.2):  # 2x4-body
+def make_BuToD0D0K_D0ToHH_D0ToKPiPiPi(process, MVACut=0.2):  # 2x4-body
     dz_hh = d_builder.make_dzero_to_hh()
-    dzb_hhhh = d_builder.make_dzero_to_hhhh()
+    dzb_hhhh = d_builder.make_dzero_to_kmpimpippip()
     kaon = basic_builder.make_tight_kaons()
 
     line_alg = b_builder.make_b2x(
@@ -532,7 +534,9 @@ def make_BuToD0D0K_D0ToKsDDHH_D0ToHHHH(process, MVACut=0.2):  # 3x(DD)x4-body
     return line_alg
 
 
-# BuToD0D0Pi lines
+##############################################################
+############ B+ -> D0 D0 pi+ lines ###########################
+##############################################################
 
 
 @check_process
@@ -640,9 +644,9 @@ def make_BuToD0D0Pi_D0ToHH_D0ToKsDDHH(process, MVACut=0.2):  # 2x3(DD)-body
 
 
 @check_process
-def make_BuToD0D0Pi_D0ToHH_D0ToHHHH(process, MVACut=0.2):  # 2x4-body
+def make_BuToD0D0Pi_D0ToHH_D0ToKPiPiPi(process, MVACut=0.2):  # 2x4-body
     dz_hh = d_builder.make_dzero_to_hh()
-    dzb_hhhh = d_builder.make_dzero_to_hhhh()
+    dzb_hhhh = d_builder.make_dzero_to_kmpimpippip()
     pion = basic_builder.make_tight_pions()
 
     line_alg = b_builder.make_b2x(
@@ -714,39 +718,9 @@ def make_BuToD0D0Pi_D0ToKsDDHH_D0ToHHHH(process, MVACut=0.2):  # 3x(DD)x4-body
 
 
 # excited dst to d gamma/pi0 lines
-
-
-@check_process
-def make_BdToDst0DspPi_Dst0ToD0Gamma_D0ToKPiOrKPiPiPi_DspToHHH(process, MVACut=0.2):
-    if process == "spruce":
-        dz = d_builder.make_dzero_to_kpi_or_kpipipi(
-            k_pidk_min=0,
-        )
-        ds = d_builder.make_dsplus_to_hhh(
-            k_pidk_min=0,
-            am_min=1868.35,
-            am_max=2068.35,
-        )
-        pion = basic_builder.make_tight_pions(pi_pidk_max=None)
-    elif process == "hlt2":
-        dz = d_builder.make_dzero_to_kpi_or_kpipipi(
-            k_pidk_min=0,
-        )
-        ds = d_builder.make_dsplus_to_hhh(
-            k_pidk_min=0,
-            am_min=1878.35,
-            am_max=2058.35,
-        )
-        pion = basic_builder.make_tight_pions()
-    dst = d_builder.make_dzerost_to_dzerogamma(dz)
-
-    line_alg = b_builder.make_b2x(
-        particles=[dst, ds, pion],
-        descriptors=["B0 -> D*(2007)0 D_s+ pi-", "B0 -> D*(2007)0 D_s- pi+"],
-        sum_pt_min=6 * GeV,
-        b2dstdh_sep_min=(0) * mm,
-    )
-    return line_alg
+##########################################################
+############## B0 -> D*_s+ D0 pi- ########################
+##########################################################
 
 
 @check_process
@@ -782,6 +756,11 @@ def make_BdToDsstpD0Pi_DsstpToDspGamma_DspToHHH_D0ToKPiOrKPiPiPi(process, MVACut
     return line_alg
 
 
+##########################################################
+############## B+ -> D*_s+ D- pi+ ########################
+##########################################################
+
+
 @check_process
 def make_BuToDsstpDmPi_DsstpToDspGamma_DspToHHH_DmToHHH(process, MVACut=0.2):
     if process == "spruce":
@@ -819,26 +798,25 @@ def make_BuToDsstpDmPi_DsstpToDspGamma_DspToHHH_DmToHHH(process, MVACut=0.2):
     return line_alg
 
 
-# BuToDst0D0K (Dst0ToD0Gamma) lines
+########################################################
+###### B+ -> D*(2007)0 D0 K+ ###########################
+########################################################
+
+################## Dst0ToD0Gamma #######################
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHH_D0ToHH(
-    process, MVACut=0.2
-):  # 2x2-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-        )
-        kaon = basic_builder.make_tight_kaons()
-    dst = d_builder.make_dzerost_to_dzerogamma(dz_hh)
+def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHH_D0ToHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hh)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hh, kaon],
+        particles=[dst0, dz_hh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -847,26 +825,16 @@ def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHH_D0ToHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsLLHH_D0ToKsLLHH(
-    process, MVACut=0.2
-):  # 3(LL)x3(LL)-body D0 decays
-    if process == "spruce":
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons()
-    dst = d_builder.make_dzerost_to_dzerogamma(dz_KshhLL)
+def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsLLHH_D0ToKsLLHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksllhh)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhLL, kaon],
+        particles=[dst0, dz_ksllhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -875,26 +843,16 @@ def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsLLHH_D0ToKsLLHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsDDHH_D0ToKsDDHH(
-    process, MVACut=0.2
-):  # 3(DD)x3(DD)-body D0 decays
-    if process == "spruce":
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons()
-    dst = d_builder.make_dzerost_to_dzerogamma(dz_KshhDD)
+def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsDDHH_D0ToKsDDHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksddhh)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhDD, kaon],
+        particles=[dst0, dz_ksddhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -903,22 +861,19 @@ def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsDDHH_D0ToKsDDHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHHHH_D0ToHHHH(
-    process, MVACut=0.2
-):  # 4x4-body D0 decays
-    if process == "spruce":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-        )
-        kaon = basic_builder.make_tight_kaons()
-    dst = d_builder.make_dzerost_to_dzerogamma(dz_hhhh)
+def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHHHH_D0ToHHHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hhhh)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hhhh, kaon],
+        particles=[dst0, dz_hhhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -927,32 +882,20 @@ def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHHHH_D0ToHHHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHH_D0ToKsLLHH(
-    process, MVACut=0.2
-):  # 2_D0fromDstx3_D0(LL)-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons()
-    dst = d_builder.make_dzerost_to_dzerogamma(dz_hh)
+def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHH_D0ToKsLLHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hh)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhLL, kaon],
+        particles=[dst0, dz_ksllhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -961,32 +904,20 @@ def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHH_D0ToKsLLHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsLLHH_D0ToHH(
-    process, MVACut=0.2
-):  # 3_D0fromDst(LL)x2_D0-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons()
-    dst = d_builder.make_dzerost_to_dzerogamma(dz_KshhLL)
+def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsLLHH_D0ToHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksllhh)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hh, kaon],
+        particles=[dst0, dz_hh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -995,32 +926,20 @@ def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsLLHH_D0ToHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHH_D0ToKsDDHH(
-    process, MVACut=0.2
-):  # 2_D0fromDstx3_D0(DD)-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons()
-    dst = d_builder.make_dzerost_to_dzerogamma(dz_hh)
+def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHH_D0ToKsDDHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hh)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhDD, kaon],
+        particles=[dst0, dz_ksddhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -1029,32 +948,20 @@ def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHH_D0ToKsDDHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsDDHH_D0ToHH(
-    process, MVACut=0.2
-):  # 3_D0fromDst(DD)x2_D0-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons()
-    dst = d_builder.make_dzerost_to_dzerogamma(dz_KshhDD)
+def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsDDHH_D0ToHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksddhh)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hh, kaon],
+        particles=[dst0, dz_hh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -1063,36 +970,19 @@ def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsDDHH_D0ToHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsLLHH_D0ToKsDDHH(
-    process, MVACut=0.2
-):  # 3_D0fromDst(LL)x3_D0(DD)-body D0 decays
-    if process == "spruce":
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons()
-    dst = d_builder.make_dzerost_to_dzerogamma(dz_KshhLL)
+def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsLLHH_D0ToKsDDHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksllhh)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhDD, kaon],
+        particles=[dst0, dz_ksddhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -1101,36 +991,19 @@ def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsLLHH_D0ToKsDDHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsDDHH_D0ToKsLLHH(
-    process, MVACut=0.2
-):  # 3_D0fromDst(DD)x3_D0(LL)-body D0 decays
-    if process == "spruce":
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons()
-    dst = d_builder.make_dzerost_to_dzerogamma(dz_KshhDD)
+def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsDDHH_D0ToKsLLHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksddhh)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhLL, kaon],
+        particles=[dst0, dz_ksllhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -1139,28 +1012,23 @@ def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsDDHH_D0ToKsLLHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHH_D0ToHHHH(
-    process, MVACut=0.2
-):  # 2_D0fromDstx4_D0-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-        )
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-        )
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-        )
-        kaon = basic_builder.make_tight_kaons()
-    dst = d_builder.make_dzerost_to_dzerogamma(dz_hh)
+def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHH_D0ToHHHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hh)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hhhh, kaon],
+        particles=[dst0, dz_hhhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -1169,28 +1037,23 @@ def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHH_D0ToHHHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHHHH_D0ToHH(
-    process, MVACut=0.2
-):  # 4_D0fromDstx2_D0-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-        )
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-        )
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-        )
-        kaon = basic_builder.make_tight_kaons()
-    dst = d_builder.make_dzerost_to_dzerogamma(dz_hhhh)
+def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHHHH_D0ToHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hhhh)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hh, kaon],
+        particles=[dst0, dz_hh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -1199,32 +1062,22 @@ def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHHHH_D0ToHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHHHH_D0ToKsLLHH(
-    process, MVACut=0.2
-):  # 4_D0fromDstx3_D0(LL)-body D0 decays
-    if process == "spruce":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons()
-    dst = d_builder.make_dzerost_to_dzerogamma(dz_hhhh)
+def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHHHH_D0ToKsLLHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hhhh)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhLL, kaon],
+        particles=[dst0, dz_ksllhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -1233,32 +1086,22 @@ def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHHHH_D0ToKsLLHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsLLHH_D0ToHHHH(
-    process, MVACut=0.2
-):  # 3_D0fromDst(LL)x4_D0-body D0 decays
-    if process == "spruce":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons()
-    dst = d_builder.make_dzerost_to_dzerogamma(dz_KshhLL)
+def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsLLHH_D0ToHHHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksllhh)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hhhh, kaon],
+        particles=[dst0, dz_hhhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -1267,32 +1110,22 @@ def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsLLHH_D0ToHHHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHHHH_D0ToKsDDHH(
-    process, MVACut=0.2
-):  # 4_D0fromDstx3_D0(DD)-body D0 decays
-    if process == "spruce":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons()
-    dst = d_builder.make_dzerost_to_dzerogamma(dz_hhhh)
+def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHHHH_D0ToKsDDHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hhhh)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhDD, kaon],
+        particles=[dst0, dz_ksddhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -1301,32 +1134,22 @@ def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToHHHH_D0ToKsDDHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsDDHH_D0ToHHHH(
-    process, MVACut=0.2
-):  # 3_D0fromDst(DD)x4_D0-body D0 decays
-    if process == "spruce":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(),
-            pi_pidk_max=20,
-            k_pidk_min=-10,
-        )
-        kaon = basic_builder.make_tight_kaons()
-    dst = d_builder.make_dzerost_to_dzerogamma(dz_KshhDD)
+def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsDDHH_D0ToHHHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksddhh)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hhhh, kaon],
+        particles=[dst0, dz_hhhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -1334,432 +1157,393 @@ def make_BuToDst0D0K_Dst0ToD0Gamma_D0ToKsDDHH_D0ToHHHH(
     return line_alg
 
 
-# BuToDst0D0K (Dst0ToD0Pi0Merged) lines
+################## Dst0ToD0Pi0Merged #######################
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHH_D0ToHH(process):  # 2x2-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(pi_pidk_max=None, k_pidk_min=None)
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh()
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHH_D0ToHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_merged_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hh, kaon],
+        particles=[dst0, dz_hh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsLLHH_D0ToKsLLHH(
-    process,
-):  # 3(LL)x3(LL)-body D0 decays
-    if process == "spruce":
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsLLHH_D0ToKsLLHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_merged_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_KshhLL, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhLL, kaon],
+        particles=[dst0, dz_ksllhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsDDHH_D0ToKsDDHH(
-    process,
-):  # 3(DD)x3(DD)-body D0 decays
-    if process == "spruce":
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsDDHH_D0ToKsDDHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_merged_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_KshhDD, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhDD, kaon],
+        particles=[dst0, dz_ksddhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHHHH_D0ToHHHH(process):  # 4x4-body D0 decays
-    if process == "spruce":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(pi_pidk_max=None, k_pidk_min=None)
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hhhh = d_builder.make_dzero_to_hhhh()
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHHHH_D0ToHHHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_merged_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hhhh, kaon],
+        particles=[dst0, dz_hhhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHH_D0ToKsLLHH(
-    process,
-):  # 2_D0fromDstx3_D0(LL)-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(pi_pidk_max=None, k_pidk_min=None)
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh()
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHH_D0ToKsLLHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_merged_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhLL, kaon],
+        particles=[dst0, dz_ksllhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsLLHH_D0ToHH(
-    process,
-):  # 3_D0fromDst(LL)x2_D0-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(pi_pidk_max=None, k_pidk_min=None)
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh()
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsLLHH_D0ToHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_merged_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_KshhLL, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hh, kaon],
+        particles=[dst0, dz_hh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHH_D0ToKsDDHH(
-    process,
-):  # 2_D0fromDstx3_D0(DD)-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(pi_pidk_max=None, k_pidk_min=None)
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh()
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHH_D0ToKsDDHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_merged_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhDD, kaon],
+        particles=[dst0, dz_ksddhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsDDHH_D0ToHH(
-    process,
-):  # 3_D0fromDst(DD)x2_D0-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(pi_pidk_max=None, k_pidk_min=None)
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh()
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsDDHH_D0ToHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_merged_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_KshhDD, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hh, kaon],
+        particles=[dst0, dz_hh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsLLHH_D0ToKsDDHH(
-    process,
-):  # 3_D0fromDst(LL)x3_D0(DD)-body D0 decays
-    if process == "spruce":
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsLLHH_D0ToKsDDHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_merged_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_KshhLL, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhDD, kaon],
+        particles=[dst0, dz_ksddhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsDDHH_D0ToKsLLHH(
-    process,
-):  # 3_D0fromDst(DD)x3_D0(LL)-body D0 decays
-    if process == "spruce":
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsDDHH_D0ToKsLLHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_merged_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_KshhDD, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhLL, kaon],
+        particles=[dst0, dz_ksllhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHH_D0ToHHHH(
-    process,
-):  # 2_D0fromDstx4_D0-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(pi_pidk_max=None, k_pidk_min=None)
-        dz_hhhh = d_builder.make_dzero_to_hhhh(pi_pidk_max=None, k_pidk_min=None)
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh()
-        dz_hhhh = d_builder.make_dzero_to_hhhh()
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHH_D0ToHHHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_merged_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hhhh, kaon],
+        particles=[dst0, dz_hhhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHHHH_D0ToHH(
-    process,
-):  # 4_D0fromDstx2_D0-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(pi_pidk_max=None, k_pidk_min=None)
-        dz_hhhh = d_builder.make_dzero_to_hhhh(pi_pidk_max=None, k_pidk_min=None)
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh()
-        dz_hhhh = d_builder.make_dzero_to_hhhh()
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHHHH_D0ToHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_merged_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hh, kaon],
+        particles=[dst0, dz_hh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHHHH_D0ToKsLLHH(
-    process,
-):  # 4_D0fromDstx3_D0(LL)-body D0 decays
-    if process == "spruce":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(pi_pidk_max=None, k_pidk_min=None)
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hhhh = d_builder.make_dzero_to_hhhh()
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHHHH_D0ToKsLLHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_merged_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhLL, kaon],
+        particles=[dst0, dz_ksllhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsLLHH_D0ToHHHH(
-    process,
-):  # 3_D0fromDst(LL)x4_D0-body D0 decays
-    if process == "spruce":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(pi_pidk_max=None, k_pidk_min=None)
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hhhh = d_builder.make_dzero_to_hhhh()
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsLLHH_D0ToHHHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_merged_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_KshhLL, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hhhh, kaon],
+        particles=[dst0, dz_hhhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHHHH_D0ToKsDDHH(
-    process,
-):  # 4_D0fromDstx3_D0(DD)-body D0 decays
-    if process == "spruce":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(pi_pidk_max=None, k_pidk_min=None)
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hhhh = d_builder.make_dzero_to_hhhh()
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHHHH_D0ToKsDDHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_merged_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhDD, kaon],
+        particles=[dst0, dz_ksddhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsDDHH_D0ToHHHH(
-    process,
-):  # 3_D0fromDst(DD)x4_D0-body D0 decays
-    if process == "spruce":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(pi_pidk_max=None, k_pidk_min=None)
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz_hhhh = d_builder.make_dzero_to_hhhh()
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsDDHH_D0ToHHHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_merged_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_KshhDD, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hhhh, kaon],
+        particles=[dst0, dz_hhhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
 
 
-# BuToDst0D0K (Dst0ToD0Pi0Resolved) lines
+################## Dst0ToD0Pi0Resolved #######################
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHH_D0ToHH(
-    process, MVACut=0.2
-):  # 2x2-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=-5,
-            pi_pidk_max=5,
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
+def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHH_D0ToHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_resolved_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hh, kaon],
+        particles=[dst0, dz_hh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -1768,27 +1552,17 @@ def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHH_D0ToHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsLLHH_D0ToKsLLHH(
-    process, MVACut=0.2
-):  # 3(LL)x3(LL)-body D0 decays
-    if process == "spruce":
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
-    elif process == "hlt2":
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
+def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsLLHH_D0ToKsLLHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_resolved_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_KshhLL, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhLL, kaon],
+        particles=[dst0, dz_ksllhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -1797,27 +1571,17 @@ def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsLLHH_D0ToKsLLHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsDDHH_D0ToKsDDHH(
-    process, MVACut=0.2
-):  # 3(DD)x3(DD)-body D0 decays
-    if process == "spruce":
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
-    elif process == "hlt2":
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
+def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsDDHH_D0ToKsDDHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_resolved_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_KshhDD, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhDD, kaon],
+        particles=[dst0, dz_ksddhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -1826,29 +1590,20 @@ def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsDDHH_D0ToKsDDHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHHHH_D0ToHHHH(
-    process, MVACut=0.2
-):  # 4x4-body D0 decays
-    if process == "spruce":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=-5,
-            pi_pidk_max=5,
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
-    elif process == "hlt2":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
+def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHHHH_D0ToHHHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_resolved_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hhhh, kaon],
+        particles=[dst0, dz_hhhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -1857,35 +1612,21 @@ def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHHHH_D0ToHHHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHH_D0ToKsLLHH(
-    process, MVACut=0.2
-):  # 2_D0fromDstx3_D0(LL)-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=-5,
-            pi_pidk_max=5,
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
+def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHH_D0ToKsLLHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_resolved_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhLL, kaon],
+        particles=[dst0, dz_ksllhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -1894,36 +1635,22 @@ def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHH_D0ToKsLLHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsLLHH_D0ToHH(
-    process, MVACut=0.2
-):  # 3_D0fromDst(LL)x2_D0-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=-5,
-            pi_pidk_max=5,
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
-    pi0 = basic_builder.make_resolved_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_KshhLL, pi0)
-    line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hh, kaon],
-        descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
+def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsLLHH_D0ToHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dz_hh, kaon],
+        descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
     )
@@ -1931,35 +1658,21 @@ def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsLLHH_D0ToHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHH_D0ToKsDDHH(
-    process, MVACut=0.2
-):  # 2_D0fromDstx3_D0(DD)-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=-5,
-            pi_pidk_max=5,
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
+def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHH_D0ToKsDDHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_resolved_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhDD, kaon],
+        particles=[dst0, dz_ksddhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -1968,35 +1681,21 @@ def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHH_D0ToKsDDHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsDDHH_D0ToHH(
-    process, MVACut=0.2
-):  # 3_D0fromDst(DD)x2_D0-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=-5,
-            pi_pidk_max=5,
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
+def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsDDHH_D0ToHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_resolved_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_KshhDD, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hh, kaon],
+        particles=[dst0, dz_hh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -2005,33 +1704,20 @@ def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsDDHH_D0ToHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsLLHH_D0ToKsDDHH(
-    process, MVACut=0.2
-):  # 3_D0fromDst(LL)x3_D0(DD)-body D0 decays
-    if process == "spruce":
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
-    elif process == "hlt2":
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
+def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsLLHH_D0ToKsDDHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_resolved_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_KshhLL, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhDD, kaon],
+        particles=[dst0, dz_ksddhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -2040,33 +1726,20 @@ def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsLLHH_D0ToKsDDHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsDDHH_D0ToKsLLHH(
-    process, MVACut=0.2
-):  # 3_D0fromDst(DD)x3_D0(LL)-body D0 decays
-    if process == "spruce":
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
-    elif process == "hlt2":
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
+def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsDDHH_D0ToKsLLHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_resolved_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_KshhDD, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhLL, kaon],
+        particles=[dst0, dz_ksllhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -2075,35 +1748,24 @@ def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsDDHH_D0ToKsLLHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHH_D0ToHHHH(
-    process, MVACut=0.2
-):  # 2_D0fromDstx4_D0-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=-5,
-            pi_pidk_max=5,
-        )
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=-5,
-            pi_pidk_max=5,
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHH_D0ToHHHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_resolved_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hhhh, kaon],
+        particles=[dst0, dz_hhhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -2112,35 +1774,24 @@ def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHH_D0ToHHHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHHHH_D0ToHH(
-    process, MVACut=0.2
-):  # 4_D0fromDstx2_D0-body D0 decays
-    if process == "spruce":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=-5,
-            pi_pidk_max=5,
-        )
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=-5,
-            pi_pidk_max=5,
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
-    elif process == "hlt2":
-        dz_hh = d_builder.make_dzero_to_hh(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHHHH_D0ToHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_resolved_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hh, kaon],
+        particles=[dst0, dz_hh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -2149,33 +1800,23 @@ def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHHHH_D0ToHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHHHH_D0ToKsLLHH(
-    process, MVACut=0.2
-):  # 4_D0fromDstx3_D0(LL)-body D0 decays
-    if process == "spruce":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=-5,
-            pi_pidk_max=5,
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
-    elif process == "hlt2":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHHHH_D0ToKsLLHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_resolved_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhLL, kaon],
+        particles=[dst0, dz_ksllhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -2184,33 +1825,23 @@ def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHHHH_D0ToKsLLHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsLLHH_D0ToHHHH(
-    process, MVACut=0.2
-):  # 3_D0fromDst(LL)x4_D0-body D0 decays
-    if process == "spruce":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=-5,
-            pi_pidk_max=5,
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
-    elif process == "hlt2":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        dz_KshhLL = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsLLHH_D0ToHHHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_resolved_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_KshhLL, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hhhh, kaon],
+        particles=[dst0, dz_hhhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -2219,33 +1850,23 @@ def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsLLHH_D0ToHHHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHHHH_D0ToKsDDHH(
-    process, MVACut=0.2
-):  # 4_D0fromDstx3_D0(DD)-body D0 decays
-    if process == "spruce":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=-5,
-            pi_pidk_max=5,
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
-    elif process == "hlt2":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHHHH_D0ToKsDDHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_resolved_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_KshhDD, kaon],
+        particles=[dst0, dz_ksddhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -2254,33 +1875,23 @@ def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHHHH_D0ToKsDDHH(
 
 
 @check_process
-def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsDDHH_D0ToHHHH(
-    process, MVACut=0.2
-):  # 3_D0fromDst(DD)x4_D0-body D0 decays
-    if process == "spruce":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=-5,
-            pi_pidk_max=5,
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons(
-            k_pidk_min=0,
-        )
-    elif process == "hlt2":
-        dz_hhhh = d_builder.make_dzero_to_hhhh(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        dz_KshhDD = d_builder.make_dzero_to_kshh(
-            k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
-        )
-        kaon = basic_builder.make_tight_kaons()
+def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsDDHH_D0ToHHHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
     pi0 = basic_builder.make_resolved_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz_KshhDD, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dz_hhhh, kaon],
+        particles=[dst0, dz_hhhh, kaon],
         descriptors=["B+ -> D*(2007)0 D0 K+", "B- -> D*(2007)0 D0 K-"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -2288,128 +1899,1740 @@ def make_BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsDDHH_D0ToHHHH(
     return line_alg
 
 
-# BuToDsD0Pi0 lines
+############################################################
+################ B0 -> D*(2007)0 D*(2010)- K+ ##############
+############################################################
+
+###################### Dst0ToD0Gamma #######################
 
 
 @check_process
-def make_BuToDsD0Pi0Merged_DsToKKPi_D0ToKPiOrKPiPiPi(process, MVACut=0.2):
-    if process == "spruce":
-        dz = d_builder.make_dzero_to_kpi_or_kpipipi(
-            k_pidk_min=-5,
-            pi_pidk_max=5,
-        )
-        ds = d_builder.make_dsplus_to_kpkmpip(
-            k_pidk_min=-5,
-            pi_pidk_max=5,
-        )
-    else:
-        dz = d_builder.make_dzero_to_kpi_or_kpipipi(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        ds = d_builder.make_dsplus_to_kpkmpip(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-    pi0 = basic_builder.make_merged_pi0s()
+def make_BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToHH_D0ToHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hh)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hh)
     line_alg = b_builder.make_b2x(
-        particles=[ds, dz, pi0],
-        descriptors=["B+ -> D_s+ D0 pi0", "B- -> D_s- D0 pi0"],
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
         sum_pt_min=6 * GeV,
-        b2ddh_sep_min=(0) * mm,
+        b2dstdsth_sep_min=(0) * mm,
     )
     return line_alg
 
 
 @check_process
-def make_BuToDsD0Pi0Resolved_DsToKKPi_D0ToKPi(process, MVACut=0.2):
-    if process == "spruce":
-        dz = d_builder.make_dzero_to_kpi(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        ds = d_builder.make_dsplus_to_kpkmpip(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-    else:
-        dz = d_builder.make_dzero_to_kpi(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        ds = d_builder.make_dsplus_to_kpkmpip(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-    pi0 = basic_builder.make_resolved_pi0s()
+def make_BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToKsLLHH_D0ToKsLLHH(
+    process, MVACut=0.2
+):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksllhh)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksllhh)
     line_alg = b_builder.make_b2x(
-        particles=[ds, dz, pi0],
-        descriptors=["B+ -> D_s+ D0 pi0", "B- -> D_s- D0 pi0"],
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
         sum_pt_min=6 * GeV,
-        b2ddh_sep_min=(0) * mm,
+        b2dstdsth_sep_min=(0) * mm,
     )
     return line_alg
 
 
 @check_process
-def make_BuToDsD0Pi0Resolved_DsToKKPi_D0ToKPiPiPi(process, MVACut=0.2):
-    if process == "spruce":
-        dz = d_builder.make_dzero_to_kpipipi(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        ds = d_builder.make_dsplus_to_kpkmpip(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-    else:
-        dz = d_builder.make_dzero_to_kpipipi(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        ds = d_builder.make_dsplus_to_kpkmpip(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-    pi0 = basic_builder.make_resolved_pi0s()
+def make_BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToKsDDHH_D0ToKsDDHH(
+    process, MVACut=0.2
+):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksddhh)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksddhh)
     line_alg = b_builder.make_b2x(
-        particles=[ds, dz, pi0],
-        descriptors=["B+ -> D_s+ D0 pi0", "B- -> D_s- D0 pi0"],
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
         sum_pt_min=6 * GeV,
-        b2ddh_sep_min=(0) * mm,
+        b2dstdsth_sep_min=(0) * mm,
     )
     return line_alg
 
 
-# BdToDst0DK (Dst0ToD0Gamma) line
-
-
 @check_process
-def make_BdToDst0DK_Dst0ToD0Gamma_D0ToKPiOrKPiPiPi_DToHHH(process, MVACut=0.2):
-    if process == "spruce":
-        dz = d_builder.make_dzero_to_kpi_or_kpipipi(
+def make_BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToHHHH_D0ToHHHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hhhh)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hhhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToHH_D0ToKsLLHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hh)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksllhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToKsLLHH_D0ToHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksllhh)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToHH_D0ToKsDDHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hh)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksddhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToKsDDHH_D0ToHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksddhh)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToKsLLHH_D0ToKsDDHH(
+    process, MVACut=0.2
+):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksllhh)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksddhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToKsDDHH_D0ToKsLLHH(
+    process, MVACut=0.2
+):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksddhh)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksllhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToHH_D0ToHHHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hh)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hhhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToHHHH_D0ToHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hhhh)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToHHHH_D0ToKsLLHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hhhh)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksllhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToKsLLHH_D0ToHHHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksllhh)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hhhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToHHHH_D0ToKsDDHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hhhh)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksddhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToKsDDHH_D0ToHHHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksddhh)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hhhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+######################Dst0ToD0Pi0 Merged#######################
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToHH_D0ToHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToKsLLHH_D0ToKsLLHH(
+    process, MVACut=0.2
+):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksllhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToKsDDHH_D0ToKsDDHH(
+    process, MVACut=0.2
+):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksddhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToHHHH_D0ToHHHH(
+    process, MVACut=0.2
+):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hhhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToHH_D0ToKsLLHH(
+    process, MVACut=0.2
+):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksllhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToKsLLHH_D0ToHH(
+    process, MVACut=0.2
+):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToHH_D0ToKsDDHH(
+    process, MVACut=0.2
+):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksddhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToKsDDHH_D0ToHH(
+    process, MVACut=0.2
+):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToKsLLHH_D0ToKsDDHH(
+    process, MVACut=0.2
+):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksddhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToKsDDHH_D0ToKsLLHH(
+    process, MVACut=0.2
+):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksllhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToHH_D0ToHHHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hhhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToHHHH_D0ToHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToHHHH_D0ToKsLLHH(
+    process, MVACut=0.2
+):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksllhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToKsLLHH_D0ToHHHH(
+    process, MVACut=0.2
+):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hhhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToHHHH_D0ToKsDDHH(
+    process, MVACut=0.2
+):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksddhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToKsDDHH_D0ToHHHH(
+    process, MVACut=0.2
+):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hhhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+######################Dst0ToD0Pi0 Resolved#######################
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToHH_D0ToHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToKsLLHH_D0ToKsLLHH(
+    process, MVACut=0.2
+):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksllhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToKsDDHH_D0ToKsDDHH(
+    process, MVACut=0.2
+):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksddhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToHHHH_D0ToHHHH(
+    process, MVACut=0.2
+):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hhhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToHH_D0ToKsLLHH(
+    process, MVACut=0.2
+):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksllhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToKsLLHH_D0ToHH(
+    process, MVACut=0.2
+):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToHH_D0ToKsDDHH(
+    process, MVACut=0.2
+):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksddhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToKsDDHH_D0ToHH(
+    process, MVACut=0.2
+):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToKsLLHH_D0ToKsDDHH(
+    process, MVACut=0.2
+):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksddhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToKsDDHH_D0ToKsLLHH(
+    process, MVACut=0.2
+):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksllhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToHH_D0ToHHHH(
+    process, MVACut=0.2
+):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hhhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToHHHH_D0ToHH(
+    process, MVACut=0.2
+):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToHHHH_D0ToKsLLHH(
+    process, MVACut=0.2
+):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksllhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToKsLLHH_D0ToHHHH(
+    process, MVACut=0.2
+):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hhhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToHHHH_D0ToKsDDHH(
+    process, MVACut=0.2
+):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_ksddhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToKsDDHH_D0ToHHHH(
+    process, MVACut=0.2
+):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
+    dst = d_builder.make_dstar_to_dzeropi(dz_hhhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dst, kaon],
+        descriptors=["B0 -> D*(2007)0 D*(2010)- K+", "B0 -> D*(2007)0 D*(2010)+ K-"],
+        sum_pt_min=6 * GeV,
+        b2dstdsth_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+######################################################
+############## B0->D_s+ D- Pi0 #######################
+######################################################
+
+
+############### Pi0 Merged ###########################
+@check_process
+def make_BdToDsDmPi0Merged_DsToKKPi_DToHHH(process, MVACut=0.2):
+    if process == "spruce":
+        dm = d_builder.make_dplus_to_kpipi_or_kkpi(
+            k_pidk_min=-5,
+            pi_pidk_max=5,
+        )
+        ds = d_builder.make_dsplus_to_hhh(
+            k_pidk_min=-5,
+            pi_pidk_max=5,
+            DsToKKPi=True,
+            DsToKPiPi=False,
+            DsToPiPiPi=False,
+        )
+    else:
+        dm = d_builder.make_dplus_to_kpipi_or_kkpi(
+            k_pidk_min=0,
+            pi_pidk_max=5,
+        )
+        ds = d_builder.make_dsplus_to_hhh(
+            k_pidk_min=0,
+            pi_pidk_max=5,
+            DsToKKPi=True,
+            DsToKPiPi=False,
+            DsToPiPiPi=False,
+        )
+    pi0 = basic_builder.make_merged_pi0s()
+    line_alg = b_builder.make_b2x(
+        particles=[ds, dm, pi0],
+        descriptors=["B0 -> D_s+ D- pi0", "B0 -> D_s- D+ pi0"],
+        sum_pt_min=6 * GeV,
+        b2ddh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+############### Pi0 Resolved ###########################
+
+
+@check_process
+def make_BdToDsDmPi0Resolved_DsToKKPi_DToHHH(process, MVACut=0.2):
+    if process == "spruce":
+        dm = d_builder.make_dplus_to_kpipi_or_kkpi(
+            k_pidk_min=0,
+            pi_pidk_max=5,
+        )
+        ds = d_builder.make_dsplus_to_hhh(
+            k_pidk_min=0,
+            pi_pidk_max=5,
+            DsToKKPi=True,
+            DsToKPiPi=False,
+            DsToPiPiPi=False,
+        )
+    else:
+        dm = d_builder.make_dplus_to_kpipi_or_kkpi(
+            k_pidk_min=0,
+            pi_pidk_max=5,
+        )
+        ds = d_builder.make_dsplus_to_hhh(
+            k_pidk_min=0,
+            pi_pidk_max=5,
+            DsToKKPi=True,
+            DsToKPiPi=False,
+            DsToPiPiPi=False,
+        )
+    pi0 = basic_builder.make_resolved_pi0s()
+    line_alg = b_builder.make_b2x(
+        particles=[ds, dm, pi0],
+        descriptors=["B0 -> D_s+ D- pi0", "B0 -> D_s- D+ pi0"],
+        sum_pt_min=6 * GeV,
+        b2ddh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+######################################################
+############## B+->D_s+ D0 Pi0 #######################
+######################################################
+
+
+############### Pi0 Merged ###########################
+@check_process
+def make_BuToDsD0Pi0Merged_DsToKKPi_D0ToKPi(process, MVACut=0.2):
+    if process == "spruce":
+        dz = d_builder.make_dzero_to_kpi(
+            k_pidk_min=-5,
+            pi_pidk_max=5,
+        )
+        ds = d_builder.make_dsplus_to_hhh(
+            k_pidk_min=-5,
+            pi_pidk_max=5,
+            DsToKKPi=True,
+            DsToKPiPi=False,
+            DsToPiPiPi=False,
+        )
+    else:
+        dz = d_builder.make_dzero_to_kpi(
             k_pidk_min=0,
+            pi_pidk_max=5,
         )
-        dp = d_builder.make_dplus_to_kpipi_or_kkpi(
+        ds = d_builder.make_dsplus_to_hhh(
             k_pidk_min=0,
-            am_min=1769.66,
-            am_max=1969.66,
+            pi_pidk_max=5,
+            DsToKKPi=True,
+            DsToKPiPi=False,
+            DsToPiPiPi=False,
         )
-        kaon = basic_builder.make_tight_kaons(k_pidk_min=None)
-    elif process == "hlt2":
-        dz = d_builder.make_dzero_to_kpi_or_kpipipi(
+    pi0 = basic_builder.make_merged_pi0s()
+    line_alg = b_builder.make_b2x(
+        particles=[ds, dz, pi0],
+        descriptors=["B+ -> D_s+ D0 pi0", "B- -> D_s- D0 pi0"],
+        sum_pt_min=6 * GeV,
+        b2ddh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BuToDsD0Pi0Merged_DsToKKPi_D0ToKPiPiPi(process, MVACut=0.2):
+    if process == "spruce":
+        dz = d_builder.make_dzero_to_kpipipi(
+            k_pidk_min=-5,
+            pi_pidk_max=5,
+        )
+        ds = d_builder.make_dsplus_to_hhh(
+            k_pidk_min=-5,
+            pi_pidk_max=5,
+            DsToKKPi=True,
+            DsToKPiPi=False,
+            DsToPiPiPi=False,
+        )
+    else:
+        dz = d_builder.make_dzero_to_kpipipi(
             k_pidk_min=0,
+            pi_pidk_max=5,
         )
-        dp = d_builder.make_dplus_to_kpipi_or_kkpi(
+        ds = d_builder.make_dsplus_to_hhh(
             k_pidk_min=0,
-            am_min=1769.66,
-            am_max=1969.66,
+            pi_pidk_max=5,
+            DsToKKPi=True,
+            DsToKPiPi=False,
+            DsToPiPiPi=False,
+        )
+    pi0 = basic_builder.make_merged_pi0s()
+    line_alg = b_builder.make_b2x(
+        particles=[ds, dz, pi0],
+        descriptors=["B+ -> D_s+ D0 pi0", "B- -> D_s- D0 pi0"],
+        sum_pt_min=6 * GeV,
+        b2ddh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+############### Pi0 Resolved ###########################
+
+
+@check_process
+def make_BuToDsD0Pi0Resolved_DsToKKPi_D0ToKPi(process, MVACut=0.2):
+    if process == "spruce":
+        dz = d_builder.make_dzero_to_kpi(
+            k_pidk_min=0,
+            pi_pidk_max=5,
+        )
+        ds = d_builder.make_dsplus_to_hhh(
+            k_pidk_min=0,
+            pi_pidk_max=5,
+            DsToKKPi=True,
+            DsToKPiPi=False,
+            DsToPiPiPi=False,
+        )
+    else:
+        dz = d_builder.make_dzero_to_kpi(
+            k_pidk_min=0,
+            pi_pidk_max=5,
         )
-        kaon = basic_builder.make_tight_kaons()
-    dst = d_builder.make_dzerost_to_dzerogamma(dz)
+        ds = d_builder.make_dsplus_to_hhh(
+            k_pidk_min=0,
+            pi_pidk_max=5,
+            DsToKKPi=True,
+            DsToKPiPi=False,
+            DsToPiPiPi=False,
+        )
+    pi0 = basic_builder.make_resolved_pi0s()
+    line_alg = b_builder.make_b2x(
+        particles=[ds, dz, pi0],
+        descriptors=["B+ -> D_s+ D0 pi0", "B- -> D_s- D0 pi0"],
+        sum_pt_min=6 * GeV,
+        b2ddh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BuToDsD0Pi0Resolved_DsToKKPi_D0ToKPiPiPi(process, MVACut=0.2):
+    if process == "spruce":
+        dz = d_builder.make_dzero_to_kpipipi(
+            k_pidk_min=0,
+            pi_pidk_max=5,
+        )
+        ds = d_builder.make_dsplus_to_hhh(
+            k_pidk_min=0,
+            pi_pidk_max=5,
+            DsToKKPi=True,
+            DsToKPiPi=False,
+            DsToPiPiPi=False,
+        )
+    else:
+        dz = d_builder.make_dzero_to_kpipipi(
+            k_pidk_min=0,
+            pi_pidk_max=5,
+        )
+        ds = d_builder.make_dsplus_to_hhh(
+            k_pidk_min=0,
+            pi_pidk_max=5,
+            DsToKKPi=True,
+            DsToKPiPi=False,
+            DsToPiPiPi=False,
+        )
+    pi0 = basic_builder.make_resolved_pi0s()
+    line_alg = b_builder.make_b2x(
+        particles=[ds, dz, pi0],
+        descriptors=["B+ -> D_s+ D0 pi0", "B- -> D_s- D0 pi0"],
+        sum_pt_min=6 * GeV,
+        b2ddh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+##########################################################
+########### B0 -> D*(2007)0 D+ K #########################
+##########################################################
+
+
+###################Dst0ToD0Gamma##########################
+@check_process
+def make_BdToDst0DK_Dst0ToD0Gamma_D0ToHH_DToHHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dp = d_builder.make_dplus_to_kpipi_or_kkpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dp, kaon],
+        descriptors=["B0 -> D*(2007)0 D+ K-", "B0 -> D*(2007)0 D- K+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DK_Dst0ToD0Gamma_D0ToKsLLHH_DToHHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dp = d_builder.make_dplus_to_kpipi_or_kkpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksllhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dp, kaon],
+        descriptors=["B0 -> D*(2007)0 D+ K-", "B0 -> D*(2007)0 D- K+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DK_Dst0ToD0Gamma_D0ToKsDDHH_DToHHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dp = d_builder.make_dplus_to_kpipi_or_kkpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksddhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dp, kaon],
+        descriptors=["B0 -> D*(2007)0 D+ K-", "B0 -> D*(2007)0 D- K+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DK_Dst0ToD0Gamma_D0ToHHHH_DToHHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dp = d_builder.make_dplus_to_kpipi_or_kkpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hhhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dp, kaon],
+        descriptors=["B0 -> D*(2007)0 D+ K-", "B0 -> D*(2007)0 D- K+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+###################Dst0ToD0Pi0 Merged##########################
+
+
+@check_process
+def make_BdToDst0DK_Dst0ToD0Pi0Merged_D0ToHH_DToHHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dp = d_builder.make_dplus_to_kpipi_or_kkpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dp, kaon],
+        descriptors=["B0 -> D*(2007)0 D+ K-", "B0 -> D*(2007)0 D- K+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DK_Dst0ToD0Pi0Merged_D0ToKsLLHH_DToHHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dp = d_builder.make_dplus_to_kpipi_or_kkpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dp, kaon],
+        descriptors=["B0 -> D*(2007)0 D+ K-", "B0 -> D*(2007)0 D- K+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DK_Dst0ToD0Pi0Merged_D0ToKsDDHH_DToHHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dp = d_builder.make_dplus_to_kpipi_or_kkpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dp, kaon],
+        descriptors=["B0 -> D*(2007)0 D+ K-", "B0 -> D*(2007)0 D- K+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DK_Dst0ToD0Pi0Merged_D0ToHHHH_DToHHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dp = d_builder.make_dplus_to_kpipi_or_kkpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dp, kaon],
+        descriptors=["B0 -> D*(2007)0 D+ K-", "B0 -> D*(2007)0 D- K+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+###################Dst0ToD0Pi0 Resolved##########################
+
+
+@check_process
+def make_BdToDst0DK_Dst0ToD0Pi0Resolved_D0ToHH_DToHHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    dp = d_builder.make_dplus_to_kpipi_or_kkpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dp, kaon],
+        descriptors=["B0 -> D*(2007)0 D+ K-", "B0 -> D*(2007)0 D- K+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DK_Dst0ToD0Pi0Resolved_D0ToKsLLHH_DToHHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dp = d_builder.make_dplus_to_kpipi_or_kkpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dp, kaon],
+        descriptors=["B0 -> D*(2007)0 D+ K-", "B0 -> D*(2007)0 D- K+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DK_Dst0ToD0Pi0Resolved_D0ToKsDDHH_DToHHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    dp = d_builder.make_dplus_to_kpipi_or_kkpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, dp, kaon],
+        descriptors=["B0 -> D*(2007)0 D+ K-", "B0 -> D*(2007)0 D- K+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
 
+
+@check_process
+def make_BdToDst0DK_Dst0ToD0Pi0Resolved_D0ToHHHH_DToHHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    dp = d_builder.make_dplus_to_kpipi_or_kkpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    kaon = basic_builder.make_tight_kaons(
+        k_pidk_min=0,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dp, kaon],
+        particles=[dst0, dp, kaon],
         descriptors=["B0 -> D*(2007)0 D+ K-", "B0 -> D*(2007)0 D- K+"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
@@ -2417,76 +3640,383 @@ def make_BdToDst0DK_Dst0ToD0Gamma_D0ToKPiOrKPiPiPi_DToHHH(process, MVACut=0.2):
     return line_alg
 
 
-# BdToDst0DK (Dst0ToD0Pi0) lines
+###########################################################
+################ B0 -> D*(2007)0 D_s+ pi- #################
+###########################################################
+
+###################Dst0ToD0Gamma##########################
+
+
+@check_process
+def make_BdToDst0DsPi_Dst0ToD0Gamma_D0ToHH_DsToHHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    ds = d_builder.make_dsplus_to_hhh(
+        k_pidk_min=0,
+        DsToKKPi=True,
+        DsToKPiPi=False,
+        DsToPiPiPi=False,
+    )
+    pion = basic_builder.make_tight_pions(
+        pi_pidk_max=5,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, ds, pion],
+        descriptors=["B0 -> D*(2007)0 D_s+ pi-", "B0 -> D*(2007)0 D_s- pi+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DsPi_Dst0ToD0Gamma_D0ToKsLLHH_DsToHHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    ds = d_builder.make_dsplus_to_hhh(
+        k_pidk_min=0,
+        DsToKKPi=True,
+        DsToKPiPi=False,
+        DsToPiPiPi=False,
+    )
+    pion = basic_builder.make_tight_pions(
+        pi_pidk_max=5,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksllhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, ds, pion],
+        descriptors=["B0 -> D*(2007)0 D_s+ pi-", "B0 -> D*(2007)0 D_s- pi+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DsPi_Dst0ToD0Gamma_D0ToKsDDHH_DsToHHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    ds = d_builder.make_dsplus_to_hhh(
+        k_pidk_min=0,
+        DsToKKPi=True,
+        DsToKPiPi=False,
+        DsToPiPiPi=False,
+    )
+    pion = basic_builder.make_tight_pions(
+        pi_pidk_max=5,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_ksddhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, ds, pion],
+        descriptors=["B0 -> D*(2007)0 D_s+ pi-", "B0 -> D*(2007)0 D_s- pi+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DsPi_Dst0ToD0Gamma_D0ToHHHH_DsToHHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    ds = d_builder.make_dsplus_to_hhh(
+        k_pidk_min=0,
+        DsToKKPi=True,
+        DsToKPiPi=False,
+        DsToPiPiPi=False,
+    )
+    pion = basic_builder.make_tight_pions(
+        pi_pidk_max=5,
+    )
+    dst0 = d_builder.make_dzerost_to_dzerogamma(dz_hhhh)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, ds, pion],
+        descriptors=["B0 -> D*(2007)0 D_s+ pi-", "B0 -> D*(2007)0 D_s- pi+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+###################Dst0ToD0Pi0 Merged##########################
 
 
 @check_process
-def make_BdToDst0DK_Dst0ToD0Pi0Merged_D0ToKPiOrKPiPiPi_DToHHH(process):
-    dz = d_builder.make_dzero_to_kpi_or_kpipipi()
-    dp = d_builder.make_dplus_to_kpipi_or_kkpi()
-    kaon = basic_builder.make_tightpid_tight_kaons()
+def make_BdToDst0DsPi_Dst0ToD0Pi0Merged_D0ToHH_DsToHHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    ds = d_builder.make_dsplus_to_hhh(
+        k_pidk_min=0,
+        DsToKKPi=True,
+        DsToKPiPi=False,
+        DsToPiPiPi=False,
+    )
+    pion = basic_builder.make_tight_pions(
+        pi_pidk_max=5,
+    )
     pi0 = basic_builder.make_merged_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dp, kaon],
-        descriptors=["B0 -> D*(2007)0 D+ K-", "B0 -> D*(2007)0 D- K+"],
+        particles=[dst0, ds, pion],
+        descriptors=["B0 -> D*(2007)0 D_s+ pi-", "B0 -> D*(2007)0 D_s- pi+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DsPi_Dst0ToD0Pi0Merged_D0ToKsLLHH_DsToHHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    ds = d_builder.make_dsplus_to_hhh(
+        k_pidk_min=0,
+        DsToKKPi=True,
+        DsToKPiPi=False,
+        DsToPiPiPi=False,
+    )
+    pion = basic_builder.make_tight_pions(
+        pi_pidk_max=5,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, ds, pion],
+        descriptors=["B0 -> D*(2007)0 D_s+ pi-", "B0 -> D*(2007)0 D_s- pi+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DsPi_Dst0ToD0Pi0Merged_D0ToKsDDHH_DsToHHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    ds = d_builder.make_dsplus_to_hhh(
+        k_pidk_min=0,
+        DsToKKPi=True,
+        DsToKPiPi=False,
+        DsToPiPiPi=False,
+    )
+    pion = basic_builder.make_tight_pions(
+        pi_pidk_max=5,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, ds, pion],
+        descriptors=["B0 -> D*(2007)0 D_s+ pi-", "B0 -> D*(2007)0 D_s- pi+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DsPi_Dst0ToD0Pi0Merged_D0ToHHHH_DsToHHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    ds = d_builder.make_dsplus_to_hhh(
+        k_pidk_min=0,
+        DsToKKPi=True,
+        DsToKPiPi=False,
+        DsToPiPiPi=False,
+    )
+    pion = basic_builder.make_tight_pions(
+        pi_pidk_max=5,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, ds, pion],
+        descriptors=["B0 -> D*(2007)0 D_s+ pi-", "B0 -> D*(2007)0 D_s- pi+"],
         sum_pt_min=6 * GeV,
-        b2dstdh_sep_min=(-0.5) * mm,
+        b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
 
 
+###################Dst0ToD0Pi0 Resolved##########################
+
+
 @check_process
-def make_BdToDst0DK_Dst0ToD0Pi0Resolved_D0ToKPiOrKPiPiPi_DToHHH(process):
-    dz = d_builder.make_dzero_to_kpi_or_kpipipi()
-    dp = d_builder.make_dplus_to_kpipi_or_kkpi()
-    kaon = basic_builder.make_tightpid_tight_kaons()
+def make_BdToDst0DsPi_Dst0ToD0Pi0Resolved_D0ToHH_DsToHHH(process, MVACut=0.2):
+    dz_hh = d_builder.make_dzero_to_kpi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+    )
+    ds = d_builder.make_dsplus_to_hhh(
+        k_pidk_min=0,
+        DsToKKPi=True,
+        DsToKPiPi=False,
+        DsToPiPiPi=False,
+    )
+    pion = basic_builder.make_tight_pions(
+        pi_pidk_max=5,
+    )
     pi0 = basic_builder.make_resolved_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, dp, kaon],
-        descriptors=["B0 -> D*(2007)0 D+ K-", "B0 -> D*(2007)0 D- K+"],
+        particles=[dst0, ds, pion],
+        descriptors=["B0 -> D*(2007)0 D_s+ pi-", "B0 -> D*(2007)0 D_s- pi+"],
         sum_pt_min=6 * GeV,
-        b2dstdh_sep_min=(-0.5) * mm,
+        b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
 
 
-# BdToDst0DsPi (Dst0ToD0Pi0Resolved) line
+@check_process
+def make_BdToDst0DsPi_Dst0ToD0Pi0Resolved_D0ToKsLLHH_DsToHHH(process, MVACut=0.2):
+    dz_ksllhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_LL(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    ds = d_builder.make_dsplus_to_hhh(
+        k_pidk_min=0,
+        DsToKKPi=True,
+        DsToKPiPi=False,
+        DsToPiPiPi=False,
+    )
+    pion = basic_builder.make_tight_pions(
+        pi_pidk_max=5,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksllhh, pi0)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, ds, pion],
+        descriptors=["B0 -> D*(2007)0 D_s+ pi-", "B0 -> D*(2007)0 D_s- pi+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
 
 
 @check_process
-def make_BdToDst0DsPi_Dst0ToD0Pi0Resolved_D0ToKPiOrKPiPiPi_DsToHHH(process, MVACut=0.2):
-    if process == "spruce":
-        dz = d_builder.make_dzero_to_kpi_or_kpipipi(
-            k_pidk_min=-5,
-            pi_pidk_max=5,
-        )
-        ds = d_builder.make_dsplus_to_hhh(
-            k_pidk_min=-5,
-            pi_pidk_max=5,
-        )
-        pion = basic_builder.make_tight_pions(
-            pi_pidk_max=1,
-        )
-    elif process == "hlt2":
-        dz = d_builder.make_dzero_to_kpi_or_kpipipi(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        ds = d_builder.make_dsplus_to_hhh(
-            k_pidk_min=0,
-            pi_pidk_max=1,
-        )
-        pion = basic_builder.make_tight_pions(
-            pi_pidk_max=1,
-        )
+def make_BdToDst0DsPi_Dst0ToD0Pi0Resolved_D0ToKsDDHH_DsToHHH(process, MVACut=0.2):
+    dz_ksddhh = d_builder.make_dzero_to_kshh(
+        k_shorts=basic_builder.make_ks_DD(), pi_pidk_max=20, k_pidk_min=-10
+    )
+    ds = d_builder.make_dsplus_to_hhh(
+        k_pidk_min=0,
+        DsToKKPi=True,
+        DsToKPiPi=False,
+        DsToPiPiPi=False,
+    )
+    pion = basic_builder.make_tight_pions(
+        pi_pidk_max=5,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_ksddhh, pi0)
+    line_alg = b_builder.make_b2x(
+        particles=[dst0, ds, pion],
+        descriptors=["B0 -> D*(2007)0 D_s+ pi-", "B0 -> D*(2007)0 D_s- pi+"],
+        sum_pt_min=6 * GeV,
+        b2dstdh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDst0DsPi_Dst0ToD0Pi0Resolved_D0ToHHHH_DsToHHH(process, MVACut=0.2):
+    dz_hhhh = d_builder.make_dzero_to_kpipipi(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        am_min=1774.84,
+        am_max=1954.84,
+    )
+    ds = d_builder.make_dsplus_to_hhh(
+        k_pidk_min=0,
+        DsToKKPi=True,
+        DsToKPiPi=False,
+        DsToPiPiPi=False,
+    )
+    pion = basic_builder.make_tight_pions(
+        pi_pidk_max=5,
+    )
     pi0 = basic_builder.make_resolved_pi0s()
-    dst = d_builder.make_dzerost_to_dzeropi0(dz, pi0)
+    dst0 = d_builder.make_dzerost_to_dzeropi0(dz_hhhh, pi0)
     line_alg = b_builder.make_b2x(
-        particles=[dst, ds, pion],
+        particles=[dst0, ds, pion],
         descriptors=["B0 -> D*(2007)0 D_s+ pi-", "B0 -> D*(2007)0 D_s- pi+"],
         sum_pt_min=6 * GeV,
         b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
+
+
+######################################################
+############## B0->D_s+ D_s- Pi0 #####################
+######################################################
+
+
+############### Pi0 Merged ###########################
+@check_process
+def make_BdToDspDsmPi0Merged_DsToKKPi(process, MVACut=0.2):
+    dsp = d_builder.make_dsplus_to_hhh(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        DsToKKPi=True,
+        DsToKPiPi=False,
+        DsToPiPiPi=False,
+    )
+    dsm = d_builder.make_dsplus_to_hhh(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        DsToKKPi=True,
+        DsToKPiPi=False,
+        DsToPiPiPi=False,
+    )
+    pi0 = basic_builder.make_merged_pi0s()
+    line_alg = b_builder.make_b2x(
+        particles=[dsp, dsm, pi0],
+        descriptors=["B0 -> D_s+ D_s- pi0", "B0 -> D_s- D_s+ pi0"],
+        sum_pt_min=6 * GeV,
+        b2ddh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+############### Pi0 Resolved ###########################
+
+
+@check_process
+def make_BdToDspDsmPi0Resolved_DsToKKPi(process, MVACut=0.2):
+    dsp = d_builder.make_dsplus_to_hhh(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        DsToKKPi=True,
+        DsToKPiPi=False,
+        DsToPiPiPi=False,
+    )
+    dsm = d_builder.make_dsplus_to_hhh(
+        k_pidk_min=-5,
+        pi_pidk_max=5,
+        DsToKKPi=True,
+        DsToKPiPi=False,
+        DsToPiPiPi=False,
+    )
+    pi0 = basic_builder.make_resolved_pi0s()
+    line_alg = b_builder.make_b2x(
+        particles=[dsp, dsm, pi0],
+        descriptors=["B0 -> D_s+ D_s- pi0", "B0 -> D_s- D_s+ pi0"],
+        sum_pt_min=6 * GeV,
+        b2ddh_sep_min=(0) * mm,
+    )
+    return line_alg
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_ddh_standalone.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_ddh_standalone.py
index e6c50e4b3b279e13b13217e9690e453503637ebe..8da53d41c3f2887f77d9188f9f014882081a8e14 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_ddh_standalone.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_ddh_standalone.py
@@ -117,20 +117,6 @@ dplus_tight_cut = {
     },
 }
 
-dzero_loose_cut = {
-    "D0": {
-        "am_min": 1764.84,
-        "am_max": 1964.84,
-    },
-}
-
-dstar_loose_cut = {
-    "D*(2010)+": {
-        "am_min": 1764.84,
-        "am_max": 1964.84,
-    }
-}
-
 ds_loose_cut = {
     "D_s+": {
         "am_min": 1868.35,
@@ -141,8 +127,6 @@ ds_loose_cut = {
 dzero_tight_cut = {
     "D0": {
         "k_pidk_min": 0,
-        "am_min": 1764.84,
-        "am_max": 1964.84,
     },
 }
 
@@ -150,8 +134,6 @@ dstar_tight_cut = {
     "D*(2010)+": {
         "soft_pi_pidk_max": 10,
         "k_pidk_min": 0,
-        "am_min": 1764.84,
-        "am_max": 1964.84,
     }
 }
 
@@ -176,6 +158,7 @@ def make_b2ddh(
     D0ToKsDDHH=False,
     D0ToHHHH=False,
     DsToKHH=False,
+    DsToKKpi=False,
     D0ToKpi=False,
     D0ToK3pi=False,
     DstarToKpi1=False,
@@ -185,6 +168,8 @@ def make_b2ddh(
     b2dstdsth_sep_min=None,
     b2dstdh_sep_min=None,
     b2ddh_sep_min=None,
+    vdrho_min=0.2,
+    particles_require_vdrho=["D+", "D-"],
     AllowDiffInputsForSameIDChildren=False,
     DoubleDstar=False,
 ):
@@ -214,6 +199,10 @@ def make_b2ddh(
                 builders[dau] = b2ddh_builders["D_s+"](
                     **kwargs, DsToKKPi=True, DsToKPiPi=True, DsToPiPiPi=False
                 )
+            elif (dau == "D_s+" and DsToKKpi) or (dau == "D_s-" and DsToKKpi):
+                builders[dau] = b2ddh_builders["D_s+"](
+                    **kwargs, DsToKKPi=True, DsToKPiPi=False, DsToPiPiPi=False
+                )
             elif dau == "D0" and D0ToKpi:
                 builders[dau] = b2ddh_builders["D0kpi"](**kwargs)
             elif dau == "D0" and D0ToK3pi:
@@ -228,6 +217,12 @@ def make_b2ddh(
                 )
             elif dau == "D0" and D0ToHHHH:  # 4x4-body
                 builders[dau] = b2ddh_builders["D0_hhhh"](**kwargs)
+            elif (
+                vdrho_min is not None
+                and "vdrho_min" not in kwargs
+                and dau in particles_require_vdrho
+            ):
+                builders[dau] = b2ddh_builders[dau](vdrho_min=vdrho_min, **kwargs)
             else:
                 builders[dau] = b2ddh_builders[dau](**kwargs)
         particles = [builders[dau] for dau in daughters]
@@ -282,6 +277,12 @@ def make_b2ddh(
                 )
             elif dau == "D0_1" and D0ToKsDDHH and D0ToHHHH:
                 builders[dau] = b2ddh_builders["D0_hhhh"](**kwargs)
+            elif (
+                vdrho_min is not None
+                and "vdrho_min" not in kwargs
+                and dau in particles_require_vdrho
+            ):
+                builders[dau] = b2ddh_builders[dau](vdrho_min=vdrho_min, **kwargs)
             else:
                 builders[dau] = b2ddh_builders[dau](**kwargs)
         particles = [builders[dau] for dau in daughters]
@@ -360,7 +361,6 @@ def make_BdToD0DK_D0ToKPiOrKPiPiPi_DToHHH(process, MVACut=0.2):
         cuts={
             **b2ddh_hlt2_kwargs,
             **dplus_loose_cut,
-            **dzero_loose_cut,
         },
         b2ddh_sep_min=(0) * mm,
     )
@@ -376,7 +376,6 @@ def make_BdToD0DPi_D0ToKPi_DToHHH(process, MVACut=0.2):
         cuts={
             **b2ddh_hlt2_kwargs,
             **dplus_loose_cut,
-            **dzero_loose_cut,
         },
         D0ToKpi=True,
         b2ddh_sep_min=(0) * mm,
@@ -393,7 +392,6 @@ def make_BdToD0DPi_D0ToKPiPiPi_DToHHH(process, MVACut=0.2):
         cuts={
             **b2ddh_hlt2_kwargs,
             **dplus_loose_cut,
-            **dzero_loose_cut,
         },
         D0ToK3pi=True,
         b2ddh_sep_min=(0) * mm,
@@ -466,6 +464,40 @@ def make_BdToDpDmKsLL_DpToHHH(process, MVACut=0.2):
     return line_alg
 
 
+@check_process
+def make_BdToDspDmKsDD_DpToHHH(process, MVACut=0.2):
+    line_alg = make_b2ddh(
+        process=process,
+        descriptors=["B0 -> D_s+ D- KS0", "B0 -> D_s- D+ KS0"],
+        KS0="DD",
+        cuts={
+            **b2ddh_hlt2_kwargs,
+            **dplus_tight_cut,
+            **ds_loose_cut,
+        },
+        b2ddh_sep_min=(0) * mm,
+    )
+
+    return line_alg
+
+
+@check_process
+def make_BdToDspDmKsLL_DpToHHH(process, MVACut=0.2):
+    line_alg = make_b2ddh(
+        process=process,
+        descriptors=["B0 -> D_s+ D- KS0", "B0 -> D_s- D+ KS0"],
+        KS0="LL",
+        cuts={
+            **b2ddh_hlt2_kwargs,
+            **dplus_tight_cut,
+            **ds_loose_cut,
+        },
+        b2ddh_sep_min=(0) * mm,
+    )
+
+    return line_alg
+
+
 @check_process
 def make_BdToDstDmKsDD_DstToD0Pi_D0ToKPiOrKPiPiPi_DmToHHH(process, MVACut=0.2):
     line_alg = make_b2ddh(
@@ -484,7 +516,7 @@ def make_BdToDstDmKsDD_DstToD0Pi_D0ToKPiOrKPiPiPi_DmToHHH(process, MVACut=0.2):
 
 
 @check_process
-def make_BdToDstDmKSLL_DstToD0Pi_D0ToKPiOrKPiPiPi_DmToHHH(process, MVACut=0.2):
+def make_BdToDstDmKsLL_DstToD0Pi_D0ToKPiOrKPiPiPi_DmToHHH(process, MVACut=0.2):
     line_alg = make_b2ddh(
         process=process,
         descriptors=["B0 -> D*(2010)+ D- KS0", "B0 -> D*(2010)- D+ KS0"],
@@ -500,6 +532,40 @@ def make_BdToDstDmKSLL_DstToD0Pi_D0ToKPiOrKPiPiPi_DmToHHH(process, MVACut=0.2):
     return line_alg
 
 
+@check_process
+def make_BdToDstDsmKsDD_DstToD0Pi_D0ToKPiOrKPiPiPi_DmToHHH(process, MVACut=0.2):
+    line_alg = make_b2ddh(
+        process=process,
+        descriptors=["B0 -> D*(2010)+ D_s- KS0", "B0 -> D*(2010)- D_s+ KS0"],
+        KS0="DD",
+        cuts={
+            **b2ddh_hlt2_kwargs,
+            **ds_tight_cut,
+            **dstar_tight_cut,
+        },
+        b2dstdh_sep_min=(0) * mm,
+    )
+
+    return line_alg
+
+
+@check_process
+def make_BdToDstDsmKsLL_DstToD0Pi_D0ToKPiOrKPiPiPi_DmToHHH(process, MVACut=0.2):
+    line_alg = make_b2ddh(
+        process=process,
+        descriptors=["B0 -> D*(2010)+ D_s- KS0", "B0 -> D*(2010)- D_s+ KS0"],
+        KS0="LL",
+        cuts={
+            **b2ddh_hlt2_kwargs,
+            **ds_tight_cut,
+            **dstar_tight_cut,
+        },
+        b2dstdh_sep_min=(0) * mm,
+    )
+
+    return line_alg
+
+
 @check_process
 def make_BdToDstpDstmKsDD_DstpToD0Pi_D0ToKPiorKPiPiPi(process, MVACut=0.2):
     line_alg = make_b2ddh(
@@ -897,7 +963,6 @@ def make_BdToDstpDmKst_DstpToD0Pi_D0ToKPiOrKPiPiPi_DmToHHH(process, MVACut=0.2):
         cuts={
             **b2ddh_hlt2_kwargs,
             **dplus_loose_cut,
-            **dstar_loose_cut,
         },
         b2dstdh_sep_min=(0) * mm,
     )
@@ -913,7 +978,6 @@ def make_BdToDstmDpKst_DstmToD0Pi_D0ToKPiOrKPiPiPi_DpToHHH(process, MVACut=0.2):
         cuts={
             **b2ddh_hlt2_kwargs,
             **dplus_loose_cut,
-            **dstar_loose_cut,
         },
         b2dstdh_sep_min=(0) * mm,
     )
@@ -922,7 +986,7 @@ def make_BdToDstmDpKst_DstmToD0Pi_D0ToKPiOrKPiPiPi_DpToHHH(process, MVACut=0.2):
 
 
 @check_process
-def make_BdToDspDsmKst_DspToKHH(process, MVACut=0.2):
+def make_BdToDspDsmKst_DspToKKPi(process, MVACut=0.2):
     line_alg = make_b2ddh(
         process=process,
         descriptors=["B0 -> D_s+ D_s- K*(892)0", "B0 -> D_s- D_s+ K*(892)~0"],
@@ -930,7 +994,25 @@ def make_BdToDspDsmKst_DspToKHH(process, MVACut=0.2):
             **b2ddh_hlt2_kwargs,
             **ds_loose_cut,
         },
-        DsToKHH=True,
+        DsToKKpi=True,
+        b2ddh_sep_min=(0) * mm,
+    )
+    return line_alg
+
+
+@check_process
+def make_BdToDspDmKst_DspToKKPi(process, MVACut=0.2):
+    kst_cut = {"K*(892)0": {"k_pidk_min": 0.0}}
+    line_alg = make_b2ddh(
+        process=process,
+        descriptors=["B0 -> D_s+ D- K*(892)0", "B0 -> D_s- D+ K*(892)~0"],
+        cuts={
+            **b2ddh_hlt2_kwargs,
+            **ds_loose_cut,
+            **dplus_loose_cut,
+            **kst_cut,
+        },
+        DsToKKpi=True,
         b2ddh_sep_min=(0) * mm,
     )
     return line_alg
@@ -1054,7 +1136,7 @@ def make_BuToDstpDstmPi_DstpToD0Pi_D0ToKPiOrKPiPiPi(process):
 
 
 @check_process
-def make_BuToDspDsmPi_DspToKHH(process, MVACut=0.2):
+def make_BuToDspDsmPi_DspToKKPi(process, MVACut=0.2):
     line_alg = make_b2ddh(
         process=process,
         descriptors=["[B+ -> D_s+ D_s- pi+]cc"],
@@ -1062,7 +1144,7 @@ def make_BuToDspDsmPi_DspToKHH(process, MVACut=0.2):
             **b2ddh_hlt2_kwargs,
             **ds_loose_cut,
         },
-        DsToKHH=True,
+        DsToKKpi=True,
         b2ddh_sep_min=(0) * mm,
     )
 
@@ -1129,7 +1211,7 @@ def make_BuToDstpD0KsLL_DstpToD0Pi_D0ToKPiOrKPiPiPi_D0ToKPiOrKPiPiPi(
     line_alg = make_b2ddh(
         process=process,
         descriptors=["B+ -> D*(2010)+ D0 KS0", "B- -> D*(2010)- D0 KS0"],
-        KS0="DD",
+        KS0="LL",
         cuts={
             **b2ddh_hlt2_kwargs,
             **dzero_tight_cut,
@@ -1214,7 +1296,6 @@ def make_BuToDstmDspPi_DstmToD0Pi_D0ToKPiOrKPiPiPi_DspToHHH(process, MVACut=0.2)
         descriptors=["[B+ -> D*(2010)- D_s+ pi+]cc"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dstar_loose_cut,
             **ds_loose_cut,
         },
         b2dstdh_sep_min=(0) * mm,
@@ -1229,7 +1310,6 @@ def make_BdToDsD0Pi_DsToHHH_D0ToKPi(process, MVACut=0.2):
         descriptors=["B0 -> D_s+ D0 pi-", "B0 -> D_s- D0 pi+"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
             **ds_loose_cut,
         },
         D0ToKpi=True,
@@ -1246,7 +1326,38 @@ def make_BdToDsD0Pi_DsToHHH_D0ToKPiPiPi(process, MVACut=0.2):
         descriptors=["B0 -> D_s+ D0 pi-", "B0 -> D_s- D0 pi+"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
+            **ds_loose_cut,
+        },
+        D0ToK3pi=True,
+        b2ddh_sep_min=(0) * mm,
+    )
+
+    return line_alg
+
+
+@check_process
+def make_BdToDsD0K_DsToHHH_D0ToKPi(process, MVACut=0.2):
+    line_alg = make_b2ddh(
+        process=process,
+        descriptors=["B0 -> D_s+ D0 K-", "B0 -> D_s- D0 K+"],
+        cuts={
+            **b2ddh_hlt2_kwargs,
+            **ds_loose_cut,
+        },
+        D0ToKpi=True,
+        b2ddh_sep_min=(0) * mm,
+    )
+
+    return line_alg
+
+
+@check_process
+def make_BdToDsD0K_DsToHHH_D0ToKPiPiPi(process, MVACut=0.2):
+    line_alg = make_b2ddh(
+        process=process,
+        descriptors=["B0 -> D_s+ D0 K-", "B0 -> D_s- D0 K+"],
+        cuts={
+            **b2ddh_hlt2_kwargs,
             **ds_loose_cut,
         },
         D0ToK3pi=True,
@@ -1263,7 +1374,6 @@ def make_BuToDsD0Phi_DspToKHH_D0ToKPi(process, MVACut=0.2):
         descriptors=["B+ -> D_s+ D0 phi(1020)", "B- -> D_s- D0 phi(1020)"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
             **ds_loose_cut,
         },
         D0ToKpi=True,
@@ -1280,7 +1390,6 @@ def make_BuToDsD0Phi_DspToKHH_D0ToKPiPiPi(process, MVACut=0.2):
         descriptors=["B+ -> D_s+ D0 phi(1020)", "B- -> D_s- D0 phi(1020)"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
             **ds_loose_cut,
         },
         D0ToK3pi=True,
@@ -1297,7 +1406,6 @@ def make_BdToD0D0Phi_D0ToHH(process, MVACut=0.2):  # 2x2-body
         descriptors=["B0 -> D0 D0 phi(1020)"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
         },
         b2ddh_sep_min=(0) * mm,
         D0ToHH=True,
@@ -1312,7 +1420,6 @@ def make_BdToD0D0Phi_D0ToKsLLHH(process, MVACut=0.2):  # 3(LL)x3(LL)-body
         descriptors=["B0 -> D0 D0 phi(1020)"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
         },
         b2ddh_sep_min=(0) * mm,
         D0ToKsLLHH=True,
@@ -1327,7 +1434,6 @@ def make_BdToD0D0Phi_D0ToKsDDHH(process, MVACut=0.2):  # 3(LL)x3(DD)-body
         descriptors=["B0 -> D0 D0 phi(1020)"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
         },
         b2ddh_sep_min=(0) * mm,
         D0ToKsDDHH=True,
@@ -1342,7 +1448,6 @@ def make_BdToD0D0Phi_D0ToHHHH(process, MVACut=0.2):  # 4x4-body
         descriptors=["B0 -> D0 D0 phi(1020)"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
         },
         b2ddh_sep_min=(0) * mm,
         D0ToHHHH=True,
@@ -1357,7 +1462,6 @@ def make_BdToD0D0Phi_D0ToHH_D0ToKsLLHH(process, MVACut=0.2):  # 2x3(LL)-body
         descriptors=["B0 -> D0 D0 phi(1020)"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
         },
         b2ddh_sep_min=(0) * mm,
         D0ToHH=True,
@@ -1374,7 +1478,6 @@ def make_BdToD0D0Phi_D0ToHH_D0ToKsDDHH(process, MVACut=0.2):  # 2x3(DD)-body
         descriptors=["B0 -> D0 D0 phi(1020)"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
         },
         b2ddh_sep_min=(0) * mm,
         D0ToHH=True,
@@ -1391,7 +1494,6 @@ def make_BdToD0D0Phi_D0ToHH_D0ToHHHH(process, MVACut=0.2):  # 2x4-body
         descriptors=["B0 -> D0 D0 phi(1020)"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
         },
         b2ddh_sep_min=(0) * mm,
         D0ToHH=True,
@@ -1408,7 +1510,6 @@ def make_BdToD0D0Phi_D0ToKsLLHH_D0ToKsDDHH(process, MVACut=0.2):  # 3(LL)x3(DD)-
         descriptors=["B0 -> D0 D0 phi(1020)"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
         },
         b2ddh_sep_min=(0) * mm,
         D0ToKsLLHH=True,
@@ -1425,7 +1526,6 @@ def make_BdToD0D0Phi_D0ToKsLLHH_D0ToHHHH(process, MVACut=0.2):  # 3(LL)x4-body
         descriptors=["B0 -> D0 D0 phi(1020)"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
         },
         b2ddh_sep_min=(0) * mm,
         D0ToKsLLHH=True,
@@ -1442,7 +1542,6 @@ def make_BdToD0D0Phi_D0ToKsDDHH_D0ToHHHH(process, MVACut=0.2):  # 3(LL)x4-body
         descriptors=["B0 -> D0 D0 phi(1020)"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
         },
         b2ddh_sep_min=(0) * mm,
         D0ToKsDDHH=True,
@@ -1505,7 +1604,6 @@ def make_BdToDstDsPhi_DstToD0Pi_D0ToKPiOrKPiPiPi_DsToHHH(process, MVACut=0.2):
         ],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dstar_loose_cut,
             **ds_loose_cut,
         },
         b2dstdh_sep_min=(0) * mm,
@@ -1520,7 +1618,6 @@ def make_BuToD0DPhi_D0ToKPi_DToHHH(process, MVACut=0.2):  # 2x2-body
         descriptors=["B+ -> D0 D+ phi(1020)", "B- -> D0 D- phi(1020)"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
         },
         b2ddh_sep_min=(0) * mm,
         D0ToKpi=True,
@@ -1535,7 +1632,6 @@ def make_BuToD0DPhi_D0ToKPiPiPi_DToHHH(process, MVACut=0.2):  # 2x2-body
         descriptors=["B+ -> D0 D+ phi(1020)", "B- -> D0 D- phi(1020)"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
         },
         b2ddh_sep_min=(0) * mm,
         D0ToK3pi=True,
@@ -1552,7 +1648,6 @@ def make_BuToDstD0Phi_DstToD0Pi_D0ToKPiorKPiPiPi_D0ToKPiorKPiPiPi(
         descriptors=["B+ -> D*(2010)+ D0 phi(1020)", "B- -> D*(2010)- D0 phi(1020)"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
         },
         b2ddh_sep_min=(0) * mm,
     )
@@ -1566,7 +1661,6 @@ def make_BdToDstDPhi_DstToD0Pi_D0ToKPiorKPiPiPi_DToHHH(process, MVACut=0.2):  #
         descriptors=["B0 -> D*(2010)+ D- phi(1020)", "B0 -> D*(2010)- D+ phi(1020)"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
         },
         b2ddh_sep_min=(0) * mm,
         D0ToK3pi=True,
@@ -1685,7 +1779,6 @@ def make_BuToDsD0Rho0_DspToKHH_D0ToKPi(process, MVACut=0.2):
         descriptors=["B+ -> D_s+ D0 rho(770)0", "B- -> D_s- D0 rho(770)0"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
             **ds_loose_cut,
         },
         DsToKHH=True,
@@ -1702,7 +1795,6 @@ def make_BuToDsD0Rho0_DspToKHH_D0ToKPiPiPi(process, MVACut=0.2):
         descriptors=["B+ -> D_s+ D0 rho(770)0", "B- -> D_s- D0 rho(770)0"],
         cuts={
             **b2ddh_hlt2_kwargs,
-            **dzero_loose_cut,
             **ds_loose_cut,
         },
         DsToKHH=True,
@@ -1713,7 +1805,7 @@ def make_BuToDsD0Rho0_DspToKHH_D0ToKPiPiPi(process, MVACut=0.2):
 
 
 @check_process
-def make_BdToDspDmRho0_DspToKHH_DmToHHH(process, MVACut=0.2):
+def make_BdToDspDmRho0_DspToKKPi_DmToHHH(process, MVACut=0.2):
     line_alg = make_b2ddh(
         process=process,
         descriptors=["B0 -> D_s+ D- rho(770)0", "B0 -> D_s- D+ rho(770)0"],
@@ -1722,7 +1814,7 @@ def make_BdToDspDmRho0_DspToKHH_DmToHHH(process, MVACut=0.2):
             **ds_loose_cut,
             **dplus_loose_cut,
         },
-        DsToKHH=True,
+        DsToKKpi=True,
         b2ddh_sep_min=(0) * mm,
     )
     return line_alg
@@ -1739,9 +1831,29 @@ def make_BdToDstmDspRho0_DstmToD0Pi_D0ToKPiOrKPiPiPi_DspToKHH(process, MVACut=0.
         cuts={
             **b2ddh_hlt2_kwargs,
             **ds_loose_cut,
-            **dstar_loose_cut,
         },
         DsToKHH=True,
         b2dstdh_sep_min=(0) * mm,
     )
     return line_alg
+
+
+@check_process
+def make_BdToDspDsmRho_DspToKKPi(process, MVACut=0.2):
+    ds_cut = {
+        "D_s+": {
+            "am_min": 1908.35,
+            "am_max": 2028.35,
+        }
+    }
+    line_alg = make_b2ddh(
+        process=process,
+        descriptors=["B0 -> D_s+ D_s- rho(770)0"],
+        cuts={
+            **b2ddh_hlt2_kwargs,
+            **ds_cut,
+        },
+        DsToKKpi=True,
+        b2ddh_sep_min=(0) * mm,
+    )
+    return line_alg
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_dh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_dh.py
index 9c908b7fc5d3d9e663224dcffc581d73ba28e1a8..883a95a92c99c0979333a22fd766aae5930a28a0 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_dh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_dh.py
@@ -18,8 +18,12 @@ every function returns a line_alg
 
 """
 
+import Functors as F
+from Functors import require_all
+from Functors.math import in_range
 from GaudiKernel.SystemOfUnits import GeV, MeV, mm, picosecond
 from RecoConf import standard_particles
+from RecoConf.algorithms_thor import ParticleFilter
 
 from Hlt2Conf.lines.b_to_open_charm.builders import b_builder, basic_builder, d_builder
 from Hlt2Conf.lines.b_to_open_charm.filters import b_sigmanet_filter
@@ -38,8 +42,12 @@ def make_BdToDsmK_DsmToKpKmPim(process, MVACut=0.25):
     elif process == "hlt2":
         kaon = basic_builder.make_tight_kaons(k_pidk_min=0)
         d = d_builder.make_dsplus_to_kpkmpip()
+    code = require_all(
+        in_range(1930.0, F.MASS, 2025.0),
+    )
+    d_narrow = ParticleFilter(d, F.FILTER(code))
     b = b_builder.make_b2x(
-        particles=[d, kaon],
+        particles=[d_narrow, kaon],
         descriptors=["[B0 -> D_s- K+]cc"],
         am_min=5000 * MeV,
         am_max=7000 * MeV,
@@ -61,8 +69,12 @@ def make_BdToDsmK_DsmToKpPipPim(process, MVACut=0.25):
     elif process == "hlt2":
         kaon = basic_builder.make_tight_kaons(k_pidk_min=0)
         d = d_builder.make_dsplus_to_kppippim()
+    code = require_all(
+        in_range(1930.0, F.MASS, 2025.0),
+    )
+    d_narrow = ParticleFilter(d, F.FILTER(code))
     b = b_builder.make_b2x(
-        particles=[d, kaon],
+        particles=[d_narrow, kaon],
         descriptors=["[B0 -> D_s- K+]cc"],
         am_min=5000 * MeV,
         am_max=7000 * MeV,
@@ -84,8 +96,12 @@ def make_BdToDsmK_DsmToPipPipPim(process, MVACut=0.25):
     elif process == "hlt2":
         kaon = basic_builder.make_tight_kaons(k_pidk_min=0)
         d = d_builder.make_dsplus_to_pippippim()
+    code = require_all(
+        in_range(1930.0, F.MASS, 2025.0),
+    )
+    d_narrow = ParticleFilter(d, F.FILTER(code))
     b = b_builder.make_b2x(
-        particles=[d, kaon],
+        particles=[d_narrow, kaon],
         descriptors=["[B0 -> D_s- K+]cc"],
         am_min=5000 * MeV,
         am_max=7000 * MeV,
@@ -107,8 +123,12 @@ def make_BdToDsmPi_DsmToKpKmPim(process, MVACut=0.25):
     elif process == "hlt2":
         pion = basic_builder.make_tight_pions(pi_pidk_max=0)
         d = d_builder.make_dsplus_to_kpkmpip()
+    code = require_all(
+        in_range(1930.0, F.MASS, 2025.0),
+    )
+    d_narrow = ParticleFilter(d, F.FILTER(code))
     b = b_builder.make_b2x(
-        particles=[d, pion],
+        particles=[d_narrow, pion],
         descriptors=["[B0 -> D_s- pi+]cc"],
         am_min=5000 * MeV,
         am_max=7000 * MeV,
@@ -130,8 +150,12 @@ def make_BdToDsmPi_DsmToKpPipPim(process, MVACut=0.25):
     elif process == "hlt2":
         pion = basic_builder.make_tight_pions(pi_pidk_max=0)
         d = d_builder.make_dsplus_to_kppippim()
+    code = require_all(
+        in_range(1930.0, F.MASS, 2025.0),
+    )
+    d_narrow = ParticleFilter(d, F.FILTER(code))
     b = b_builder.make_b2x(
-        particles=[d, pion],
+        particles=[d_narrow, pion],
         descriptors=["[B0 -> D_s- pi+]cc"],
         am_min=5000 * MeV,
         am_max=7000 * MeV,
@@ -153,8 +177,12 @@ def make_BdToDsmPi_DsmToPipPipPim(process, MVACut=0.25):
     elif process == "hlt2":
         pion = basic_builder.make_tight_pions(pi_pidk_max=0)
         d = d_builder.make_dsplus_to_pippippim()
+    code = require_all(
+        in_range(1930.0, F.MASS, 2025.0),
+    )
+    d_narrow = ParticleFilter(d, F.FILTER(code))
     b = b_builder.make_b2x(
-        particles=[d, pion],
+        particles=[d_narrow, pion],
         descriptors=["[B0 -> D_s- pi+]cc"],
         am_min=5000 * MeV,
         am_max=7000 * MeV,
@@ -175,8 +203,12 @@ def make_BdToDsmPi_DsmToKpKmPim_Calib(process, MVACut=0.5):  # request from Vava
         d = d_builder.make_dsplus_to_kppippim(pi_pidk_max=0.0, k_pidk_min=5.0)
     elif process == "hlt2":
         d = d_builder.make_dsplus_to_kpkmpip()
+    code = require_all(
+        in_range(1930.0, F.MASS, 2025.0),
+    )
+    d_narrow = ParticleFilter(d, F.FILTER(code))
     b = b_builder.make_b2x(
-        particles=[d, pion],
+        particles=[d_narrow, pion],
         descriptors=["[B0 -> D_s- pi+]cc"],
         am_min=5000 * MeV,
         am_max=6000 * MeV,
@@ -195,8 +227,12 @@ def make_BdToDmPi_DmToPimPimKp(process, MVACut=0.25):
     elif process == "hlt2":
         pion = basic_builder.make_tight_pions(pi_pidk_max=0)
         d = d_builder.make_dplus_to_kmpippip()
+    code = require_all(
+        in_range(1830.0, F.MASS, 1920.0),
+    )
+    d_narrow = ParticleFilter(d, F.FILTER(code))
     b = b_builder.make_b2x(
-        particles=[d, pion],
+        particles=[d_narrow, pion],
         descriptors=["[B0 -> D- pi+]cc"],
         am_min=4950 * MeV,
         am_max=6000 * MeV,
@@ -214,8 +250,12 @@ def make_BdToDmPi_DmToPimPimKp(process, MVACut=0.25):
 def make_BdToDmPiSB_DmToPimPimKp(process):
     pion = basic_builder.make_tight_pions(pi_pidk_max=0)
     d = d_builder.make_dplus_to_kmpippip()
+    code = require_all(
+        in_range(1830.0, F.MASS, 1920.0),
+    )
+    d_narrow = ParticleFilter(d, F.FILTER(code))
     line_alg = b_builder.make_b2x(
-        particles=[d, pion],
+        particles=[d_narrow, pion],
         descriptors=["[B0 -> D- pi+]cc"],
         am_min=5500 * MeV,
         am_max=6000 * MeV,
@@ -232,8 +272,12 @@ def make_BdToDmPi_DmToPimPimKp_Calib(process, MVACut=0.5):
         d = d_builder.make_dplus_to_kmpippip(k_pidk_min=5, pi_pidk_max=0)
     elif process == "hlt2":
         d = d_builder.make_dplus_to_kmpippip()
+    code = require_all(
+        in_range(1830.0, F.MASS, 1920.0),
+    )
+    d_narrow = ParticleFilter(d, F.FILTER(code))
     b = b_builder.make_b2x(
-        particles=[d, pion],
+        particles=[d_narrow, pion],
         descriptors=["[B0 -> D- pi+]cc"],
         am_min=4950 * MeV,
         am_max=6000 * MeV,
@@ -252,8 +296,12 @@ def make_BdToDmK_DmToPimPimKp(process, MVACut=0.25):
     elif process == "hlt2":
         kaon = basic_builder.make_tight_kaons(k_pidk_min=0)
         d = d_builder.make_dplus_to_kmpippip()
+    code = require_all(
+        in_range(1830.0, F.MASS, 1920.0),
+    )
+    d_narrow = ParticleFilter(d, F.FILTER(code))
     b = b_builder.make_b2x(
-        particles=[d, kaon],
+        particles=[d_narrow, kaon],
         descriptors=["[B0 -> D- K+]cc"],
         am_min=4950 * MeV,
         am_max=6000 * MeV,
@@ -1595,8 +1643,8 @@ def make_BuToD0Pi_D0ToKsLLHHPi0Resolved(process, MVACut=0.7):
         pi0=pi0,
         pi_pidk_max=0,
         k_pidk_min=0,
-        am_min=1814.84,
-        am_max=1914.84,
+        am_min=1764.84,
+        am_max=1964.84,
     )
     line_alg = b_builder.make_loose_mass_b2x(
         particles=[d, pion],
@@ -1620,8 +1668,8 @@ def make_BuToD0Pi_D0ToKsDDHHPi0Resolved(process, MVACut=0.7):
         pi0=pi0,
         pi_pidk_max=0,
         k_pidk_min=0,
-        am_min=1814.84,
-        am_max=1914.84,
+        am_min=1764.84,
+        am_max=1964.84,
     )
     line_alg = b_builder.make_loose_mass_b2x(
         particles=[d, pion],
@@ -1645,8 +1693,8 @@ def make_BuToD0K_D0ToKsLLHHPi0Resolved(process, MVACut=0.7):
         pi0=pi0,
         pi_pidk_max=0,
         k_pidk_min=0,
-        am_min=1814.84,
-        am_max=1914.84,
+        am_min=1764.84,
+        am_max=1964.84,
     )
     line_alg = b_builder.make_loose_mass_b2x(
         particles=[d, kaon],
@@ -1670,8 +1718,8 @@ def make_BuToD0K_D0ToKsDDHHPi0Resolved(process, MVACut=0.7):
         pi0=pi0,
         pi_pidk_max=0,
         k_pidk_min=0,
-        am_min=1814.84,
-        am_max=1914.84,
+        am_min=1764.84,
+        am_max=1964.84,
     )
     line_alg = b_builder.make_loose_mass_b2x(
         particles=[d, kaon],
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_dhh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_dhh.py
index 86ae06ceebfa30ece51dd6d8cb2c45a521c6d587..8d12e00cf955aafe54f1688a87ffe26b652074a9 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_dhh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_dhh.py
@@ -26,13 +26,17 @@ from Hlt2Conf.lines.b_to_open_charm.utils import check_process
 
 ### 2-body lines ###
 @check_process
-def make_BdToD0PiPi_D0ToHH(process, MVACut=0.3):
-    pion = basic_builder.make_soft_pions(pi_pidk_max=0)
+def make_BdToD0PiPi_D0ToHH(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
     d = d_builder.make_tight_dzero_to_hh()
     # note the order we write the decay descriptor in because the b2chh builder makes a
     # cut on the 1,2 i.e. pi+pi- combination
     b = b_builder.make_b2chh(
-        particles=[pion, pion, d], descriptors=["B0 -> pi+ pi- D0"]
+        particles=[pion, pion, d],
+        descriptors=["B0 -> pi+ pi- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     line_alg = b_sigmanet_filter(b, MVACut)
     return line_alg
@@ -56,65 +60,79 @@ def make_BdToD0PiPiSB_D0ToHH(process):
 
 
 @check_process
-def make_BdToD0PiPiWS_D0ToHH(process, MVACut=0.3):
-    pion = basic_builder.make_soft_pions(pi_pidk_max=0)
+def make_BdToD0PiPiWS_D0ToHH(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
     d = d_builder.make_tight_dzero_to_hh()
     # note the order we write the decay descriptor in because the b2chh builder makes a
     # cut on the 1,2 i.e. pi+pi- combination
     b = b_builder.make_b2chh(
-        particles=[pion, pion, d], descriptors=["B0 -> pi+ pi+ D0", "B0 -> pi- pi- D0"]
+        particles=[pion, pion, d],
+        descriptors=["B0 -> pi+ pi+ D0", "B0 -> pi- pi- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     line_alg = b_sigmanet_filter(b, MVACut)
     return line_alg
 
 
 @check_process
-def make_BdToD0KPi_D0ToHH(process, MVACut=0.3):
-    pion = basic_builder.make_soft_pions(pi_pidk_max=0)
-    kaon = basic_builder.make_soft_kaons(k_pidk_min=0)
+def make_BdToD0KPi_D0ToHH(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     d = d_builder.make_tight_dzero_to_hh()
     b = b_builder.make_b2chh(
-        particles=[kaon, pion, d], descriptors=["B0 -> K+ pi- D0", "B0 -> K- pi+ D0"]
+        particles=[kaon, pion, d],
+        descriptors=["B0 -> K+ pi- D0", "B0 -> K- pi+ D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     line_alg = b_sigmanet_filter(b, MVACut)
     return line_alg
 
 
 @check_process
-def make_BdToD0KPiWS_D0ToHH(process, MVACut=0.3):
-    pion = basic_builder.make_soft_pions(pi_pidk_max=0)
-    kaon = basic_builder.make_soft_kaons(k_pidk_min=0)
+def make_BdToD0KPiWS_D0ToHH(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     d = d_builder.make_tight_dzero_to_hh()
     b = b_builder.make_b2chh(
-        particles=[kaon, pion, d], descriptors=["B0 -> K+ pi+ D0", "B0 -> K- pi- D0"]
+        particles=[kaon, pion, d],
+        descriptors=["B0 -> K+ pi+ D0", "B0 -> K- pi- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     line_alg = b_sigmanet_filter(b, MVACut)
     return line_alg
 
 
 @check_process
-def make_BdToD0KK_D0ToHH(process, MVACut=0.3):
-    kaon = basic_builder.make_soft_kaons(k_pidk_min=0)
+def make_BdToD0KK_D0ToHH(process, MVACut=0.5):
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     d = d_builder.make_tight_dzero_to_hh()
     b = b_builder.make_b2chh(
         particles=[kaon, kaon, d],
         descriptors=["B0 -> K+ K- D0"],
         am_min=4750 * MeV,
         am_min_vtx=4750 * MeV,
+        sum_pt_min=6.5 * GeV,
     )
     line_alg = b_sigmanet_filter(b, MVACut)
     return line_alg
 
 
 @check_process
-def make_BdToD0KKWS_D0ToHH(process, MVACut=0.3):
-    kaon = basic_builder.make_soft_kaons(k_pidk_min=0)
+def make_BdToD0KKWS_D0ToHH(process, MVACut=0.5):
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     d = d_builder.make_tight_dzero_to_hh()
     b = b_builder.make_b2chh(
         particles=[kaon, kaon, d],
         descriptors=["B0 -> K+ K+ D0", "B0 -> K- K- D0"],
         am_min=4750 * MeV,
         am_min_vtx=4750 * MeV,
+        sum_pt_min=6.5 * GeV,
     )
     line_alg = b_sigmanet_filter(b, MVACut)
     return line_alg
@@ -203,12 +221,16 @@ def make_BdToDstpKsDDK_DstpToD0Pi_D0ToHH(process):
 ### 4-body lines ###
 @check_process
 def make_BdToD0PiPi_D0ToHHHH(process, MVACut=0.5):
-    pion = basic_builder.make_soft_pions(pi_pidk_max=0)
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
     d = d_builder.make_tight_dzero_to_hhhh()
     # note the order we write the decay descriptor in because the b2chh builder makes a
     # cut on the 1,2 i.e. pi+pi- combination
     b = b_builder.make_b2chh(
-        particles=[pion, pion, d], descriptors=["B0 -> pi+ pi- D0"]
+        particles=[pion, pion, d],
+        descriptors=["B0 -> pi+ pi- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     line_alg = b_sigmanet_filter(b, MVACut)
     return line_alg
@@ -216,12 +238,16 @@ def make_BdToD0PiPi_D0ToHHHH(process, MVACut=0.5):
 
 @check_process
 def make_BdToD0PiPiWS_D0ToHHHH(process, MVACut=0.5):
-    pion = basic_builder.make_soft_pions(pi_pidk_max=0)
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
     d = d_builder.make_tight_dzero_to_hhhh()
     # note the order we write the decay descriptor in because the b2chh builder makes a
     # cut on the 1,2 i.e. pi+pi- combination
     b = b_builder.make_b2chh(
-        particles=[pion, pion, d], descriptors=["B0 -> pi+ pi+ D0", "B0 -> pi- pi- D0"]
+        particles=[pion, pion, d],
+        descriptors=["B0 -> pi+ pi+ D0", "B0 -> pi- pi- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     line_alg = b_sigmanet_filter(b, MVACut)
     return line_alg
@@ -229,11 +255,15 @@ def make_BdToD0PiPiWS_D0ToHHHH(process, MVACut=0.5):
 
 @check_process
 def make_BdToD0KPi_D0ToHHHH(process, MVACut=0.5):
-    pion = basic_builder.make_soft_pions(pi_pidk_max=0)
-    kaon = basic_builder.make_soft_kaons(k_pidk_min=0)
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     d = d_builder.make_tight_dzero_to_hhhh()
     b = b_builder.make_b2chh(
-        particles=[kaon, pion, d], descriptors=["B0 -> K+ pi- D0", "B0 -> K- pi+ D0"]
+        particles=[kaon, pion, d],
+        descriptors=["B0 -> K+ pi- D0", "B0 -> K- pi+ D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     line_alg = b_sigmanet_filter(b, MVACut)
     return line_alg
@@ -241,11 +271,15 @@ def make_BdToD0KPi_D0ToHHHH(process, MVACut=0.5):
 
 @check_process
 def make_BdToD0KPiWS_D0ToHHHH(process, MVACut=0.5):
-    pion = basic_builder.make_soft_pions(pi_pidk_max=0)
-    kaon = basic_builder.make_soft_kaons(k_pidk_min=0)
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     d = d_builder.make_tight_dzero_to_hhhh()
     b = b_builder.make_b2chh(
-        particles=[kaon, pion, d], descriptors=["B0 -> K+ pi+ D0", "B0 -> K- pi- D0"]
+        particles=[kaon, pion, d],
+        descriptors=["B0 -> K+ pi+ D0", "B0 -> K- pi- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     line_alg = b_sigmanet_filter(b, MVACut)
     return line_alg
@@ -253,19 +287,29 @@ def make_BdToD0KPiWS_D0ToHHHH(process, MVACut=0.5):
 
 @check_process
 def make_BdToD0KK_D0ToHHHH(process, MVACut=0.5):
-    kaon = basic_builder.make_soft_kaons(k_pidk_min=0)
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     d = d_builder.make_tight_dzero_to_hhhh()
-    b = b_builder.make_b2chh(particles=[kaon, kaon, d], descriptors=["B0 -> K+ K- D0"])
+    b = b_builder.make_b2chh(
+        particles=[kaon, kaon, d],
+        descriptors=["B0 -> K+ K- D0"],
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
+        sum_pt_min=6.5 * GeV,
+    )
     line_alg = b_sigmanet_filter(b, MVACut)
     return line_alg
 
 
 @check_process
 def make_BdToD0KKWS_D0ToHHHH(process, MVACut=0.5):
-    kaon = basic_builder.make_soft_kaons(k_pidk_min=0)
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     d = d_builder.make_tight_dzero_to_hhhh()
     b = b_builder.make_b2chh(
-        particles=[kaon, kaon, d], descriptors=["B0 -> K+ K+ D0", "B0 -> K- K- D0"]
+        particles=[kaon, kaon, d],
+        descriptors=["B0 -> K+ K+ D0", "B0 -> K- K- D0"],
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
+        sum_pt_min=6.5 * GeV,
     )
     line_alg = b_sigmanet_filter(b, MVACut)
     return line_alg
@@ -348,134 +392,182 @@ def make_BdToDstpKsDDPi_DstpToD0Pi_D0ToHHHH(process):
 
 ### KsHH (LL) lines ###
 @check_process
-def make_BdToD0PiPi_D0ToKsLLHH(process):
-    pion = basic_builder.make_soft_pions()
+def make_BdToD0PiPi_D0ToKsLLHH(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
     d = d_builder.make_dzero_to_kshh(k_shorts=basic_builder.make_ks_LL())
     # note the order we write the decay descriptor in because the b2chh builder makes a
     # cut on the 1,2 i.e. pi+pi- combination
     line_alg = b_builder.make_b2chh(
-        particles=[pion, pion, d], descriptors=["B0 -> pi+ pi- D0"]
+        particles=[pion, pion, d],
+        descriptors=["B0 -> pi+ pi- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0PiPiWS_D0ToKsLLHH(process):
-    pion = basic_builder.make_soft_pions()
+def make_BdToD0PiPiWS_D0ToKsLLHH(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
     d = d_builder.make_dzero_to_kshh(k_shorts=basic_builder.make_ks_LL())
     # note the order we write the decay descriptor in because the b2chh builder makes a
     # cut on the 1,2 i.e. pi+pi- combination
     line_alg = b_builder.make_b2chh(
-        particles=[pion, pion, d], descriptors=["B0 -> pi+ pi+ D0", "B0 -> pi- pi- D0"]
+        particles=[pion, pion, d],
+        descriptors=["B0 -> pi+ pi+ D0", "B0 -> pi- pi- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0KPi_D0ToKsLLHH(process):
-    pion = basic_builder.make_soft_pions()
-    kaon = basic_builder.make_soft_kaons()
+def make_BdToD0KPi_D0ToKsLLHH(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     d = d_builder.make_dzero_to_kshh(k_shorts=basic_builder.make_ks_LL())
     line_alg = b_builder.make_b2chh(
-        particles=[kaon, pion, d], descriptors=["B0 -> K+ pi- D0", "B0 -> K- pi+ D0"]
+        particles=[kaon, pion, d],
+        descriptors=["B0 -> K+ pi- D0", "B0 -> K- pi+ D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0KPiWS_D0ToKsLLHH(process):
-    pion = basic_builder.make_soft_pions()
-    kaon = basic_builder.make_soft_kaons()
+def make_BdToD0KPiWS_D0ToKsLLHH(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     d = d_builder.make_dzero_to_kshh(k_shorts=basic_builder.make_ks_LL())
     line_alg = b_builder.make_b2chh(
-        particles=[kaon, pion, d], descriptors=["B0 -> K+ pi+ D0", "B0 -> K- pi- D0"]
+        particles=[kaon, pion, d],
+        descriptors=["B0 -> K+ pi+ D0", "B0 -> K- pi- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0KK_D0ToKsLLHH(process):
-    kaon = basic_builder.make_soft_kaons()
+def make_BdToD0KK_D0ToKsLLHH(process, MVACut=0.5):
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     d = d_builder.make_dzero_to_kshh(k_shorts=basic_builder.make_ks_LL())
     line_alg = b_builder.make_b2chh(
-        particles=[kaon, kaon, d], descriptors=["B0 -> K+ K- D0"]
+        particles=[kaon, kaon, d],
+        descriptors=["B0 -> K+ K- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0KKWS_D0ToKsLLHH(process):
-    kaon = basic_builder.make_soft_kaons()
+def make_BdToD0KKWS_D0ToKsLLHH(process, MVACut=0.5):
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     d = d_builder.make_dzero_to_kshh(k_shorts=basic_builder.make_ks_LL())
     line_alg = b_builder.make_b2chh(
-        particles=[kaon, kaon, d], descriptors=["B0 -> K+ K+ D0", "B0 -> K- K- D0"]
+        particles=[kaon, kaon, d],
+        descriptors=["B0 -> K+ K+ D0", "B0 -> K- K- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 ### KsHH (DD) lines ###
 @check_process
-def make_BdToD0PiPi_D0ToKsDDHH(process):
-    pion = basic_builder.make_soft_pions()
+def make_BdToD0PiPi_D0ToKsDDHH(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
     d = d_builder.make_dzero_to_kshh(k_shorts=basic_builder.make_ks_DD())
     # note the order we write the decay descriptor in because the b2chh builder makes a
     # cut on the 1,2 i.e. pi+pi- combination
     line_alg = b_builder.make_b2chh(
-        particles=[pion, pion, d], descriptors=["B0 -> pi+ pi- D0"]
+        particles=[pion, pion, d],
+        descriptors=["B0 -> pi+ pi- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0PiPiWS_D0ToKsDDHH(process):
-    pion = basic_builder.make_soft_pions()
+def make_BdToD0PiPiWS_D0ToKsDDHH(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
     d = d_builder.make_dzero_to_kshh(k_shorts=basic_builder.make_ks_DD())
     # note the order we write the decay descriptor in because the b2chh builder makes a
     # cut on the 1,2 i.e. pi+pi- combination
     line_alg = b_builder.make_b2chh(
-        particles=[pion, pion, d], descriptors=["B0 -> pi+ pi+ D0", "B0 -> pi- pi- D0"]
+        particles=[pion, pion, d],
+        descriptors=["B0 -> pi+ pi+ D0", "B0 -> pi- pi- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0KPi_D0ToKsDDHH(process):
-    pion = basic_builder.make_soft_pions()
-    kaon = basic_builder.make_soft_kaons()
+def make_BdToD0KPi_D0ToKsDDHH(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     d = d_builder.make_dzero_to_kshh(k_shorts=basic_builder.make_ks_DD())
     line_alg = b_builder.make_b2chh(
-        particles=[kaon, pion, d], descriptors=["B0 -> K+ pi- D0", "B0 -> K- pi+ D0"]
+        particles=[kaon, pion, d],
+        descriptors=["B0 -> K+ pi- D0", "B0 -> K- pi+ D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0KPiWS_D0ToKsDDHH(process):
-    pion = basic_builder.make_soft_pions()
-    kaon = basic_builder.make_soft_kaons()
+def make_BdToD0KPiWS_D0ToKsDDHH(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     d = d_builder.make_dzero_to_kshh(k_shorts=basic_builder.make_ks_DD())
     line_alg = b_builder.make_b2chh(
-        particles=[kaon, pion, d], descriptors=["B0 -> K+ pi+ D0", "B0 -> K- pi- D0"]
+        particles=[kaon, pion, d],
+        descriptors=["B0 -> K+ pi+ D0", "B0 -> K- pi- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0KK_D0ToKsDDHH(process):
-    kaon = basic_builder.make_soft_kaons()
+def make_BdToD0KK_D0ToKsDDHH(process, MVACut=0.5):
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     d = d_builder.make_dzero_to_kshh(k_shorts=basic_builder.make_ks_DD())
     line_alg = b_builder.make_b2chh(
-        particles=[kaon, kaon, d], descriptors=["B0 -> K+ K- D0"]
+        particles=[kaon, kaon, d],
+        descriptors=["B0 -> K+ K- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0KKWS_D0ToKsDDHH(process):
-    kaon = basic_builder.make_soft_kaons()
+def make_BdToD0KKWS_D0ToKsDDHH(process, MVACut=0.5):
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     d = d_builder.make_dzero_to_kshh(k_shorts=basic_builder.make_ks_DD())
     line_alg = b_builder.make_b2chh(
-        particles=[kaon, kaon, d], descriptors=["B0 -> K+ K+ D0", "B0 -> K- K- D0"]
+        particles=[kaon, kaon, d],
+        descriptors=["B0 -> K+ K+ D0", "B0 -> K- K- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
@@ -2611,145 +2703,193 @@ def make_BuToD0PiPi0Merged_D0ToHHHHWS(process, MVACut=0.7):
 
 
 @check_process
-def make_BdToD0PiPi_D0ToHHPi0Resolved(process):
-    pion = basic_builder.make_soft_pions()
+def make_BdToD0PiPi_D0ToHHPi0Resolved(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
     pi0 = basic_builder.make_resolved_pi0s()
     d = d_builder.make_dzero_to_hhpi0(pi0)
     # note the order we write the decay descriptor in because the b2chh builder makes a
     # cut on the 1,2 i.e. pi+pi- combination
     line_alg = b_builder.make_b2chh(
-        particles=[pion, pion, d], descriptors=["B0 -> pi+ pi- D0"]
+        particles=[pion, pion, d],
+        descriptors=["B0 -> pi+ pi- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0KPi_D0ToHHPi0Resolved(process):
-    pion = basic_builder.make_soft_pions()
-    kaon = basic_builder.make_soft_kaons()
+def make_BdToD0KPi_D0ToHHPi0Resolved(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     pi0 = basic_builder.make_resolved_pi0s()
     d = d_builder.make_dzero_to_hhpi0(pi0)
     line_alg = b_builder.make_b2chh(
-        particles=[kaon, pion, d], descriptors=["B0 -> K+ pi- D0", "B0 -> K- pi+ D0"]
+        particles=[kaon, pion, d],
+        descriptors=["B0 -> K+ pi- D0", "B0 -> K- pi+ D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0KK_D0ToHHPi0Resolved(process):
-    kaon = basic_builder.make_soft_kaons()
+def make_BdToD0KK_D0ToHHPi0Resolved(process, MVACut=0.5):
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     pi0 = basic_builder.make_resolved_pi0s()
     d = d_builder.make_dzero_to_hhpi0(pi0)
     line_alg = b_builder.make_b2chh(
-        particles=[kaon, kaon, d], descriptors=["B0 -> K+ K- D0"]
+        particles=[kaon, kaon, d],
+        descriptors=["B0 -> K+ K- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0PiPi_D0ToHHPi0Merged(process):
-    pion = basic_builder.make_soft_pions()
+def make_BdToD0PiPi_D0ToHHPi0Merged(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
     pi0 = basic_builder.make_merged_pi0s()
     d = d_builder.make_dzero_to_hhpi0(pi0)
     # note the order we write the decay descriptor in because the b2chh builder makes a
     # cut on the 1,2 i.e. pi+pi- combination
     line_alg = b_builder.make_b2chh(
-        particles=[pion, pion, d], descriptors=["B0 -> pi+ pi- D0"]
+        particles=[pion, pion, d],
+        descriptors=["B0 -> pi+ pi- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0KPi_D0ToHHPi0Merged(process):
-    pion = basic_builder.make_soft_pions()
-    kaon = basic_builder.make_soft_kaons()
+def make_BdToD0KPi_D0ToHHPi0Merged(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     pi0 = basic_builder.make_merged_pi0s()
     d = d_builder.make_dzero_to_hhpi0(pi0)
     line_alg = b_builder.make_b2chh(
-        particles=[kaon, pion, d], descriptors=["B0 -> K+ pi- D0", "B0 -> K- pi+ D0"]
+        particles=[kaon, pion, d],
+        descriptors=["B0 -> K+ pi- D0", "B0 -> K- pi+ D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0KK_D0ToHHPi0Merged(process):
-    kaon = basic_builder.make_soft_kaons()
+def make_BdToD0KK_D0ToHHPi0Merged(process, MVACut=0.5):
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     pi0 = basic_builder.make_merged_pi0s()
     d = d_builder.make_dzero_to_hhpi0(pi0)
     line_alg = b_builder.make_b2chh(
-        particles=[kaon, kaon, d], descriptors=["B0 -> K+ K- D0"]
+        particles=[kaon, kaon, d],
+        descriptors=["B0 -> K+ K- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0PiPiWS_D0ToHHPi0Resolved(process):
-    pion = basic_builder.make_soft_pions()
+def make_BdToD0PiPiWS_D0ToHHPi0Resolved(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
     pi0 = basic_builder.make_resolved_pi0s()
     d = d_builder.make_dzero_to_hhpi0(pi0)
     # note the order we write the decay descriptor in because the b2chh builder makes a
     # cut on the 1,2 i.e. pi+pi- combination
     line_alg = b_builder.make_b2chh(
-        particles=[pion, pion, d], descriptors=["B0 -> pi+ pi+ D0", "B0 -> pi- pi- D0"]
+        particles=[pion, pion, d],
+        descriptors=["B0 -> pi+ pi+ D0", "B0 -> pi- pi- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0KPiWS_D0ToHHPi0Resolved(process):
-    pion = basic_builder.make_soft_pions()
-    kaon = basic_builder.make_soft_kaons()
+def make_BdToD0KPiWS_D0ToHHPi0Resolved(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     pi0 = basic_builder.make_resolved_pi0s()
     d = d_builder.make_dzero_to_hhpi0(pi0)
     line_alg = b_builder.make_b2chh(
-        particles=[kaon, pion, d], descriptors=["B0 -> K+ pi+ D0", "B0 -> K- pi- D0"]
+        particles=[kaon, pion, d],
+        descriptors=["B0 -> K+ pi+ D0", "B0 -> K- pi- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0KKWS_D0ToHHPi0Resolved(process):
-    kaon = basic_builder.make_soft_kaons()
+def make_BdToD0KKWS_D0ToHHPi0Resolved(process, MVACut=0.5):
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     pi0 = basic_builder.make_resolved_pi0s()
     d = d_builder.make_dzero_to_hhpi0(pi0)
     line_alg = b_builder.make_b2chh(
-        particles=[kaon, kaon, d], descriptors=["B0 -> K+ K+ D0", "B0 -> K- K- D0"]
+        particles=[kaon, kaon, d],
+        descriptors=["B0 -> K+ K+ D0", "B0 -> K- K- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0PiPiWS_D0ToHHPi0Merged(process):
-    pion = basic_builder.make_soft_pions()
+def make_BdToD0PiPiWS_D0ToHHPi0Merged(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
     pi0 = basic_builder.make_merged_pi0s()
     d = d_builder.make_dzero_to_hhpi0(pi0)
     # note the order we write the decay descriptor in because the b2chh builder makes a
     # cut on the 1,2 i.e. pi+pi- combination
     line_alg = b_builder.make_b2chh(
-        particles=[pion, pion, d], descriptors=["B0 -> pi+ pi+ D0", "B0 -> pi- pi- D0"]
+        particles=[pion, pion, d],
+        descriptors=["B0 -> pi+ pi+ D0", "B0 -> pi- pi- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0KPiWS_D0ToHHPi0Merged(process):
-    pion = basic_builder.make_soft_pions()
-    kaon = basic_builder.make_soft_kaons()
+def make_BdToD0KPiWS_D0ToHHPi0Merged(process, MVACut=0.5):
+    pion = basic_builder.make_soft_pions(pi_pidk_max=0, pt_min=150 * MeV)
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     pi0 = basic_builder.make_merged_pi0s()
     d = d_builder.make_dzero_to_hhpi0(pi0)
     line_alg = b_builder.make_b2chh(
-        particles=[kaon, pion, d], descriptors=["B0 -> K+ pi+ D0", "B0 -> K- pi- D0"]
+        particles=[kaon, pion, d],
+        descriptors=["B0 -> K+ pi+ D0", "B0 -> K- pi- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
 
 @check_process
-def make_BdToD0KKWS_D0ToHHPi0Merged(process):
-    kaon = basic_builder.make_soft_kaons()
+def make_BdToD0KKWS_D0ToHHPi0Merged(process, MVACut=0.5):
+    kaon = basic_builder.make_soft_kaons(k_pidk_min=0, pt_min=150 * MeV)
     pi0 = basic_builder.make_merged_pi0s()
     d = d_builder.make_dzero_to_hhpi0(pi0)
     line_alg = b_builder.make_b2chh(
-        particles=[kaon, kaon, d], descriptors=["B0 -> K+ K+ D0", "B0 -> K- K- D0"]
+        particles=[kaon, kaon, d],
+        descriptors=["B0 -> K+ K+ D0", "B0 -> K- K- D0"],
+        sum_pt_min=6.5 * GeV,
+        am_min=4750 * MeV,
+        am_min_vtx=4750 * MeV,
     )
     return line_alg
 
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_dx_ltu.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_dx_ltu.py
index 546da896fc1c27507e6c2ef722841ba2f2b4bda2..8d8524d612cf3bb71cd3f81e17935b0b7d058c94 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_dx_ltu.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/b_to_dx_ltu.py
@@ -13,7 +13,11 @@
 * do NOT use SigmaNet NN here, these lines are instead prescaled
 """
 
+import Functors as F
+from Functors import require_all
+from Functors.math import in_range
 from GaudiKernel.SystemOfUnits import MeV
+from RecoConf.algorithms_thor import ParticleFilter
 
 from Hlt2Conf.lines.b_to_open_charm.builders import b_builder, basic_builder, d_builder
 from Hlt2Conf.lines.b_to_open_charm.utils import check_process
@@ -30,8 +34,12 @@ https://gitlab.cern.ch/lhcb/Stripping/-/blob/run2-patches/Phys/StrippingSelectio
 def make_BdToDsmK_DsmToKpKmPim_LTU(process):
     kaon = basic_builder.make_tight_kaons(k_pidk_min=None, mipchi2_min=0)
     d = d_builder.make_dsplus_to_kpkmpip(bpvvdchi2_min=0)
+    code = require_all(
+        in_range(1930.0, F.MASS, 2025.0),
+    )
+    d_narrow = ParticleFilter(d, F.FILTER(code))
     line_alg = b_builder.make_lifetime_unbiased_b2x(
-        particles=[d, kaon], descriptors=["[B0 -> D_s- K+]cc"]
+        particles=[d_narrow, kaon], descriptors=["[B0 -> D_s- K+]cc"]
     )
     return line_alg
 
@@ -40,8 +48,12 @@ def make_BdToDsmK_DsmToKpKmPim_LTU(process):
 def make_BdToDmPi_DmToPimPimKp_LTU(process):
     pion = basic_builder.make_tight_pions(pi_pidk_max=0, mipchi2_min=0)
     d = d_builder.make_dplus_to_kmpippip(bpvvdchi2_min=0)
+    code = require_all(
+        in_range(1830.0, F.MASS, 1920.0),
+    )
+    d_narrow = ParticleFilter(d, F.FILTER(code))
     line_alg = b_builder.make_lifetime_unbiased_b2x(
-        particles=[d, pion],
+        particles=[d_narrow, pion],
         descriptors=["[B0 -> D- pi+]cc"],
         am_min=4950 * MeV,
         am_min_vtx=4950 * MeV,
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/bbaryon_to_cbaryons_h.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/bbaryon_to_cbaryons_h.py
index e9f21416a4b19aedbbc82ee154977217f148dba6..b474ef65af57efb6ed1ccdcb144ca68e3677a6b1 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/bbaryon_to_cbaryons_h.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/bbaryon_to_cbaryons_h.py
@@ -24,7 +24,7 @@ from Hlt2Conf.lines.b_to_open_charm.utils import check_process
 # Author: juan.baptista.leite@cern.ch
 # https://lhcbdoc.web.cern.ch/lhcbdoc/stripping/config/stripping34r0p3/bhadroncompleteevent/strippinglb2lclcnlc2pkpibeauty2charmline.html
 @check_process
-def make_Lb0ToLcpLcmN0(process):
+def make_LbToLcpLcmN0(process):
     if process == "spruce":
         lc = cbaryon_builder.make_lc_to_pkpi(  # make_lc_to_pkpi
             pi_pidk_max=10,
@@ -57,7 +57,7 @@ def make_Lb0ToLcpLcmN0(process):
 
 # Author: juan.baptista.leite@cern.ch
 @check_process
-def make_Lb0ToPbarPN0(process):
+def make_LbToPbarPN0(process):
     line_alg = None
     if process == "spruce":
         proton = basic_builder.make_tight_protons(p_pidkmp_max=20.0, pt_min=750 * MeV)
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/builders/b_builder.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/builders/b_builder.py
index 6c1db847a072915a7af76d727a9a23da157483e4..5d9cdbb29af282f496193c169286ddaa1bf75891 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/builders/b_builder.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/builders/b_builder.py
@@ -30,7 +30,7 @@ def _make_b2x(
     am_min_vtx=5050 * MeV,
     am_max_vtx=5650 * MeV,
     sum_pt_min=5 * GeV,
-    vtx_chi2pdof_max=20.0,  # was 10 in Run1+2
+    vtx_chi2pdof_max=10.0,
     bpvipchi2_max=25.0,
     bpvltime_min=0.2 * picosecond,
     bpvdira_min=0.999,
@@ -146,8 +146,8 @@ def _make_lifetime_unbiased_b2x(
     am_min_vtx=5050 * MeV,
     am_max_vtx=5650 * MeV,
     sum_pt_min=5 * GeV,
-    vtx_chi2pdof_max=20.0,
-):  # was 10 in Run1+2
+    vtx_chi2pdof_max=10.0,
+):
     """
     LifeTime Unbiased B decay maker: defines default cuts and B mass range.
     """
@@ -196,7 +196,7 @@ def _make_b2chh(
     am_min_vtx=5000 * MeV,
     am_max_vtx=6000 * MeV,
     sum_pt_min=5.5 * GeV,
-    vtx_chi2pdof_max=20,  # was 10 in Run1+2
+    vtx_chi2pdof_max=10,
     bpvipchi2_max=9,
     bpvltime_min=0.2 * picosecond,
     bpvdira_min=0.99995,
@@ -273,13 +273,14 @@ def _make_b2cch(
     am_min_vtx=5000 * MeV,
     am_max_vtx=5800 * MeV,
     sum_pt_min=5.5 * GeV,
-    vtx_chi2pdof_max=20,  # was 10 in Run1+2
+    vtx_chi2pdof_max=10,
     bpvipchi2_max=9,
     bpvltime_min=0.2 * picosecond,
     bpvdira_min=0.99995,
     hbach_pt_min=500 * MeV,
     hbach_p_min=5 * GeV,
     bcvtx_sep_min=-0.5 * mm,
+    vdrho_min=0.2,
     AllowDiffInputsForSameIDChildren=False,
 ):
     """
@@ -295,6 +296,8 @@ def _make_b2cch(
         F.CHI2DOF < vtx_chi2pdof_max,
         (F.CHILD(1, F.END_VZ) - F.END_VZ) > bcvtx_sep_min,
         (F.CHILD(2, F.END_VZ) - F.END_VZ) > bcvtx_sep_min,
+        F.CHILD(1, F.OWNPVVDRHO) > vdrho_min,
+        F.CHILD(2, F.OWNPVVDRHO) > vdrho_min,
         F.OWNPVIPCHI2 < bpvipchi2_max,
         F.OWNPVLTIME > bpvltime_min,
         F.OWNPVDIRA > bpvdira_min,
@@ -355,7 +358,7 @@ def _make_b2chhh(
     am_min_vtx=5100 * MeV,
     am_max_vtx=5700 * MeV,
     sum_pt_min=5 * GeV,
-    vtx_chi2pdof_max=10,  # was 10 in Run1+2
+    vtx_chi2pdof_max=10,
     bpvipchi2_max=9,
     bpvltime_min=0.2 * picosecond,
     bpvdira_min=0.99993,
@@ -439,7 +442,7 @@ def _make_b2dd(
     am_min_vtx=4800 * MeV,
     am_max_vtx=5650 * MeV,
     sum_pt_min=5 * GeV,
-    vtx_chi2pdof_max=20.0,  # was 10 in Run1+2
+    vtx_chi2pdof_max=10.0,
     bpvipchi2_max=20.0,
     bpvltime_min=0.05 * picosecond,
     bpvdira_min=0.999,
@@ -494,7 +497,7 @@ def _make_b2dstd(
     am_min_vtx=4800 * MeV,
     am_max_vtx=5650 * MeV,
     sum_pt_min=5 * GeV,
-    vtx_chi2pdof_max=20.0,  # was 10 in Run1+2
+    vtx_chi2pdof_max=10.0,
     bpvipchi2_max=20.0,
     bpvltime_min=0.05 * picosecond,
     bpvdira_min=0.999,
@@ -551,7 +554,7 @@ def make_bc2x(
     am_min_vtx=6000 * MeV,
     am_max_vtx=6600 * MeV,
     sum_pt_min=5 * GeV,
-    vtx_chi2pdof_max=20,
+    vtx_chi2pdof_max=10,
     bpvipchi2_max=20,
     bpvltime_min=0.05 * picosecond,
     bpvdira_min=0.999,
@@ -862,7 +865,7 @@ def _make_xibc2x(
     am_min_vtx=6400 * MeV,
     am_max_vtx=7800 * MeV,
     sum_pt_min=6.0 * GeV,
-    vtx_chi2pdof_max=10,  # was 10 in Run1+2
+    vtx_chi2pdof_max=10,
     bpvipchi2_max=16,
     bpvltime_min=0.1 * picosecond,  # reduced from 0.2 ps for regular b-hadron
     bpvdira_min=0.999,
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 94c889433dc1e85109d4c5531a6d1474c87a3344..94a6d9582f7650905d16a501323551955e0faf9b 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
@@ -298,6 +298,7 @@ def make_twobody(
     bpvvdchi2_min=36,
     bpvipchi2_min=0,
     bpvdira_min=0,
+    vdrho_min=None,
 ):
     """
     A generic 2body decay maker.
@@ -324,6 +325,9 @@ def make_twobody(
         in_range(am_min, F.MASS, am_max),
     )
 
+    if vdrho_min is not None:
+        vertex_code &= F.OWNPVVDRHO > vdrho_min
+
     return ParticleCombiner(
         particles,
         name=name,
@@ -373,7 +377,7 @@ def _make_threebody(
     )
     for i in range(1, 4):
         for j in range(i + 1, 4):
-            combination_code &= 1.0 - F.ALV(i, j) > 1.4e-7
+            combination_code &= (1.0 - F.ALV(i, j)) > 1.4e-7
     if adoca13_max is not None:
         combination_code &= F.SDOCA(1, 3) < adoca13_max
     if adoca23_max is not None:
@@ -410,6 +414,7 @@ def make_threebody(
     bpvvdchi2_min=36,
     bpvipchi2_min=0,
     bpvdira_min=0,
+    vdrho_min=None,
 ):
     preselected = _make_threebody(
         particles,
@@ -436,6 +441,8 @@ def make_threebody(
         code &= F.OWNPVIPCHI2 > bpvipchi2_min
     if bpvdira_min > 0:
         code &= F.OWNPVDIRA > bpvdira_min
+    if vdrho_min is not None:
+        code &= F.OWNPVVDRHO > vdrho_min
 
     return ParticleFilter(preselected, F.FILTER(code))
 
@@ -482,7 +489,7 @@ def _make_fourbody(
     )
     for i in range(1, 5):
         for j in range(i + 1, 5):
-            combination_code &= 1.0 - F.ALV(i, j) > 1.4e-7
+            combination_code &= (1.0 - F.ALV(i, j)) > 1.4e-7
     if adoca12_max is not None:
         combination_code &= F.SDOCA(1, 2) < adoca12_max
     if adoca13_max is not None:
@@ -534,6 +541,7 @@ def make_fourbody(
     bpvvdchi2_min=36,
     bpvipchi2_min=0,
     bpvdira_min=0,
+    vdrho_min=None,
 ):
     preselected = _make_fourbody(
         particles,
@@ -563,6 +571,8 @@ def make_fourbody(
         code &= F.OWNPVIPCHI2 > bpvipchi2_min
     if bpvdira_min > 0:
         code &= F.OWNPVDIRA > bpvdira_min
+    if vdrho_min is not None:
+        code &= F.OWNPVVDRHO > vdrho_min
 
     return ParticleFilter(preselected, F.FILTER(code))
 
@@ -686,8 +696,8 @@ def make_rho0(
     make_pions=make_pions,
     am_min=250 * MeV,
     am_max=3000 * MeV,
-    pi_p_min=1 * GeV,
-    pi_pt_min=100 * MeV,
+    pi_p_min=2 * GeV,
+    pi_pt_min=200 * MeV,
     pi_pidk_max=20,
     adoca12_max=0.5 * mm,
     asumpt_min=500 * MeV,
@@ -726,9 +736,9 @@ def make_kstar0(
     pi_pidk_max=5,
     k_pidk_min=-5,
     pi_p_min=2 * GeV,
-    pi_pt_min=100 * MeV,
+    pi_pt_min=200 * MeV,
     k_p_min=2 * GeV,
-    k_pt_min=100 * MeV,
+    k_pt_min=200 * MeV,
     adoca12_max=0.5 * mm,
     asumpt_min=1000 * MeV,
     bpvvdchi2_min=16,
@@ -784,7 +794,7 @@ def make_phi2kk(
         F.SUM(F.PT) > asumpt_min,
         F.MAXSDOCACUT(adoca12_max),
     )
-    combination_code &= 1.0 - F.ALV(1, 2) > 1.4e-7
+    combination_code &= (1.0 - F.ALV(1, 2)) > 1.4e-7
     vertex_code = F.require_all(F.MASS < am_max, F.CHI2 < vchi2)
     if mipchi2_min is not None:
         vertex_code &= F.OWNPVIPCHI2 > mipchi2_min
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/builders/d_builder.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/builders/d_builder.py
index 4b9dd75f6a60668c40d5eed5fbb333e54e6adf31..623022a109f946198ec70fe94ad6c47fc7595ea7 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/builders/d_builder.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/builders/d_builder.py
@@ -164,8 +164,15 @@ def make_dzero_to_hh(
     dzero_to_kpkm = make_dzero_to_kpkm(
         k_pidk_min=k_pidk_min, k_p_min=k_p_min, k_pt_min=k_pt_min, **decay_arguments
     )
+
     return ParticleContainersMerger(
-        [dzero_to_kmpip, dzero_to_kppim, dzero_to_pippim, dzero_to_kpkm], name=name
+        [
+            dzero_to_kmpip,
+            dzero_to_kppim,
+            dzero_to_kpkm,
+            dzero_to_pippim,
+        ],
+        name=name,
     )
 
 
@@ -549,8 +556,8 @@ def make_dzero_to_kshh(
 
 @configurable
 def make_dplus_to_pippippim(
-    am_min=1830 * MeV,
-    am_max=1920 * MeV,
+    am_min=1790 * MeV,
+    am_max=1950 * MeV,
     pi_p_min=2 * GeV,
     pi_pt_min=250 * MeV,
     pi_pidk_max=5,
@@ -571,8 +578,8 @@ def make_dplus_to_pippippim(
 
 @configurable
 def make_dplus_to_kmpippip(
-    am_min=1830 * MeV,
-    am_max=1920 * MeV,
+    am_min=1790 * MeV,
+    am_max=1950 * MeV,
     pi_p_min=2 * GeV,
     pi_pt_min=250 * MeV,
     pi_pidk_max=5,
@@ -599,8 +606,8 @@ def make_dplus_to_kmpippip(
 
 @configurable
 def make_dplus_to_kpkmpip(
-    am_min=1830 * MeV,
-    am_max=1920 * MeV,
+    am_min=1790 * MeV,
+    am_max=1950 * MeV,
     pi_p_min=2 * GeV,
     pi_pt_min=250 * MeV,
     pi_pidk_max=5,
@@ -703,8 +710,8 @@ def make_tight_dplus_to_kmpippip_for_xibc(**decay_arguments):
 
 @configurable
 def make_dsplus_to_pippippim(
-    am_min=1930 * MeV,
-    am_max=2020 * MeV,
+    am_min=1890 * MeV,
+    am_max=2050 * MeV,
     pi_p_min=2 * GeV,
     pi_pt_min=250 * MeV,
     pi_pidk_max=5,
@@ -725,8 +732,8 @@ def make_dsplus_to_pippippim(
 
 @configurable
 def make_dsplus_to_kppippim(
-    am_min=1930 * MeV,
-    am_max=2020 * MeV,
+    am_min=1890 * MeV,
+    am_max=2050 * MeV,
     pi_p_min=2 * GeV,
     pi_pt_min=250 * MeV,
     pi_pidk_max=5,
@@ -753,8 +760,8 @@ def make_dsplus_to_kppippim(
 
 @configurable
 def make_dsplus_to_kpkmpip(
-    am_min=1930 * MeV,
-    am_max=2020 * MeV,
+    am_min=1890 * MeV,
+    am_max=2050 * MeV,
     pi_p_min=2 * GeV,
     pi_pt_min=250 * MeV,
     pi_pidk_max=5,
@@ -831,7 +838,7 @@ def make_dsplus_to_hhh(
 # D -> hhh WS KKPi, KPiPi, PiPiPi #
 @configurable
 def _make_dplus_to_hhh_ws(
-    name, particles, descriptor, am_min=1830 * MeV, am_max=1920 * MeV, **decay_arguments
+    name, particles, descriptor, am_min=1790 * MeV, am_max=1950 * MeV, **decay_arguments
 ):
     return basic_builder.make_threebody(
         particles=particles,
@@ -886,7 +893,7 @@ def make_dplus_to_hhh_ws(
 # Ds -> hhh WS KKPi, KPiPi, PiPiPi #
 @configurable
 def _make_dsplus_to_hhh_ws(
-    name, particles, descriptor, am_min=1930 * MeV, am_max=2020 * MeV, **decay_arguments
+    name, particles, descriptor, am_min=1890 * MeV, am_max=2050 * MeV, **decay_arguments
 ):
     return basic_builder.make_threebody(
         particles=particles,
@@ -1412,12 +1419,13 @@ def make_dzero_to_hhhh(
         k_pt_min=k_pt_min,
         **decay_arguments,
     )
+
     return ParticleContainersMerger(
         [
-            dzero_to_pippippimpim,
             dzero_to_kppippimpim,
             dzero_to_kmpimpippip,
             dzero_to_kpkmpippim,
+            dzero_to_pippippimpim,
         ],
         name=name,
     )
@@ -1878,9 +1886,9 @@ def make_dstar_to_dzeropi_cf(
         F.CHI2DOF < vchi2pdof_max, F.MASS - F.CHILD(1, F.MASS) < deltamass_max
     )
     if bpvvdchi2_min is not None:
-        vertex_code &= F.OWNFDCHI2 > bpvvdchi2_min
+        vertex_code &= F.OWNPVFDCHI2 > bpvvdchi2_min
     if bpvdira_min is not None:
-        vertex_code &= F.OWNDIRA > bpvdira_min
+        vertex_code &= F.OWNPVDIRA > bpvdira_min
 
     doca_args_k3pi = {
         "adoca12_max": 0.2 * mm,
@@ -1960,8 +1968,8 @@ def make_ds2460_to_dspipi(
     am_min=2200 * MeV,
     am_max=2700 * MeV,
     soft_pi_pidk_max=5,
-    soft_pi_p_min=1 * GeV,
-    soft_pi_pt_min=100 * MeV,
+    soft_pi_p_min=2.0 * GeV,
+    soft_pi_pt_min=150 * MeV,
     soft_pi_mipchi2_min=0,
 ):
     """
@@ -1974,10 +1982,13 @@ def make_ds2460_to_dspipi(
         F.SDOCA(1, 3) < adoca13_max,
         F.SDOCA(2, 3) < adoca23_max,
     )
-    combination_code &= 1.0 - F.ALV(2, 3) > 1.4e-7
+    combination_code &= (1.0 - F.ALV(2, 3)) > 1.4e-7
     M12 = F.SUBCOMB(Functor=F.MASS, Indices=[1, 2])
     combination12_code = M12 < am_max
     combination_code &= combination12_code
+    M13 = F.SUBCOMB(Functor=F.MASS, Indices=[1, 3])
+    combination13_code = M13 < am_max
+    combination_code &= combination13_code
 
     soft_pions = basic_builder.make_pions(
         pi_pidk_max=soft_pi_pidk_max,
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/filters.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/filters.py
index 9166ec243946f1442bef2ae9e6a9fed040ec45a5..ac398343342c9d0aad7e78e8c35601c25c4408d6 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/filters.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/filters.py
@@ -29,7 +29,7 @@ def b_sigmanet_filter(particles, MVACut=0.0):
         F.MVA(
             MVAType="SigmaNet",
             Config={
-                "File": "paramfile://data/Hlt2B2OC_B_SigmaNet_Run3-v2.json",
+                "File": "paramfile://data/Hlt2B2OC_B_SigmaNet_Run3-v3.json",
                 "Name": "B2OC_SigmaNet_Generic",
                 "Lambda": "2.0",
                 "NLayers": "3",
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/hlt2_b2oc.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/hlt2_b2oc.py
index b4459bca1c66350ee3bf55688f3e3692f79be648..3d239be53b6ccc0e3850d8c346b218fb1e76001f 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/hlt2_b2oc.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/hlt2_b2oc.py
@@ -58,6 +58,7 @@ from Hlt2Conf.lines.b_to_open_charm import (
     prefilters,
 )
 from Hlt2Conf.lines.b_to_open_charm.filters import b_sigmanet_filter
+from Hlt2Conf.lines.b_to_open_charm.persistency import make_iso_particles
 from Hlt2Conf.lines.b_to_open_charm.utils import update_makers, validate_config
 
 PROCESS = "hlt2"
@@ -119,6 +120,7 @@ def make_hlt2_lines(
     custom_mva = extra_config.get("mva", {})
     flavour_tagging = extra_config.get("flavour_tagging", [])
     pv_unbiasing = extra_config.get("pv_unbiasing", [])
+    isolation = extra_config.get("isolation", [])
 
     for decay in all_lines:
         # default configs
@@ -126,6 +128,7 @@ def make_hlt2_lines(
         MVACut = -1
         include_ft = False
         include_pv_tracks = False
+        include_isolation = False
 
         # custom configs
         if decay in custom_prescales.keys():
@@ -137,6 +140,8 @@ def make_hlt2_lines(
             MVACut = custom_mva[decay]  # can be None or a non-default value
         if decay in pv_unbiasing:
             include_pv_tracks = True
+        if decay in isolation:
+            include_isolation = True
 
         @register_line_builder(line_dict)
         def make_hlt2_line(
@@ -146,7 +151,9 @@ def make_hlt2_lines(
             MVACut=MVACut,
             include_ft=include_ft,
             include_pv_tracks=include_pv_tracks,
+            include_isolation=include_isolation,
         ):
+            extra_outputs = []
             if MVACut == -1:  # use default MVA
                 b = line_makers[maker_name](process=PROCESS)
                 line_alg = b_sigmanet_filter(b, default_MVACut)
@@ -154,10 +161,13 @@ def make_hlt2_lines(
                 line_alg = line_makers[maker_name](process=PROCESS)
             else:  # use custom MVA
                 line_alg = line_makers[maker_name](process=PROCESS, MVACut=MVACut)
+            if include_isolation:
+                extra_outputs += make_iso_particles(line_alg, name="B")
             return Hlt2Line(
                 name=name,
                 prescale=prescale,
                 algs=prefilters.b2oc_prefilters() + [line_alg],
+                extra_outputs=extra_outputs,
                 tagging_particles=include_ft,
                 pv_tracks=include_pv_tracks,
             )
@@ -180,22 +190,22 @@ all_lines = [
     "BdToDmK_DmToPimPimKp",
     "BdToDsmPi_DsmToKpKmPim",
     "BdToDsmK_DsmToKpKmPim",
-    #'BuToD0Pi_D0ToKsLLPi0Resolved',
-    #'BuToD0Pi_D0ToKsDDPi0Resolved',
+    "BuToD0Pi_D0ToKsLLPi0Resolved",
+    "BuToD0Pi_D0ToKsDDPi0Resolved",
     #'BuToD0Pi_D0ToKsLLPi0Merged',
     #'BuToD0Pi_D0ToKsDDPi0Merged',
-    #'BuToD0K_D0ToKsLLPi0Resolved',
-    #'BuToD0K_D0ToKsDDPi0Resolved',
+    "BuToD0K_D0ToKsLLPi0Resolved",
+    "BuToD0K_D0ToKsDDPi0Resolved",
     #'BuToD0K_D0ToKsLLPi0Merged',
     #'BuToD0K_D0ToKsDDPi0Merged',
     "BuToDst0Pi_Dst0ToD0Pi0Resolved_D0ToHH",
     "BuToDst0Pi_Dst0ToD0Gamma_D0ToHH",
-    #'BuToDst0K_Dst0ToD0Pi0Resolved_D0ToHH',
-    #'BuToDst0K_Dst0ToD0Gamma_D0ToHH',
-    #'BuToDst0Pi_Dst0ToD0Pi0Resolved_D0ToHHWS',
-    #'BuToDst0Pi_Dst0ToD0Gamma_D0ToHHWS',
-    #'BuToDst0K_Dst0ToD0Pi0Resolved_D0ToHHWS',
-    #'BuToDst0K_Dst0ToD0Gamma_D0ToHHWS',
+    "BuToDst0K_Dst0ToD0Pi0Resolved_D0ToHH",
+    "BuToDst0K_Dst0ToD0Gamma_D0ToHH",
+    "BuToDst0Pi_Dst0ToD0Pi0Resolved_D0ToHHWS",
+    "BuToDst0Pi_Dst0ToD0Gamma_D0ToHHWS",
+    "BuToDst0K_Dst0ToD0Pi0Resolved_D0ToHHWS",
+    "BuToDst0K_Dst0ToD0Gamma_D0ToHHWS",
     "BuToD0Pi_D0ToKsLLHH",
     "BuToD0Pi_D0ToKsDDHH",
     "BuToD0K_D0ToKsLLHH",
@@ -204,13 +214,13 @@ all_lines = [
     "BuToD0Pi_D0ToKsDDHHWS",
     "BuToD0K_D0ToKsLLHHWS",
     "BuToD0K_D0ToKsDDHHWS",
-    #'BuToD0K_D0ToHHPi0Resolved',
-    #'BuToD0Pi_D0ToHHPi0Resolved',
+    "BuToD0K_D0ToHHPi0Resolved",
+    "BuToD0Pi_D0ToHHPi0Resolved",
     #'BuToD0K_D0ToHHPi0Merged',
     #'BuToD0Pi_D0ToHHPi0Merged',
-    #'BuToD0Pi_D0ToHHPi0ResolvedWS',
+    "BuToD0Pi_D0ToHHPi0ResolvedWS",
     #'BuToD0Pi_D0ToHHPi0MergedWS',
-    #'BuToD0K_D0ToHHPi0ResolvedWS',
+    "BuToD0K_D0ToHHPi0ResolvedWS",
     #'BuToD0K_D0ToHHPi0MergedWS',
     "BuToD0Pi_D0ToHHHH",
     "BuToD0K_D0ToHHHH",
@@ -224,12 +234,12 @@ all_lines = [
     "BuToD0K_D0ToKsDDHHPi0Resolved",  # rate checked to be fine, jessy.daniel@cern.ch
     #'BuToD0K_D0ToKsLLHHPi0Merged',
     #'BuToD0K_D0ToKsDDHHPi0Merged',
-    #'BuToD0Pi_D0ToKsLLHHWSPi0Resolved',
-    #'BuToD0Pi_D0ToKsDDHHWSPi0Resolved',
+    "BuToD0Pi_D0ToKsLLHHWSPi0Resolved",
+    "BuToD0Pi_D0ToKsDDHHWSPi0Resolved",
     #'BuToD0Pi_D0ToKsLLHHWSPi0Merged',
     #'BuToD0Pi_D0ToKsDDHHWSPi0Merged',
-    #'BuToD0K_D0ToKsLLHHWSPi0Resolved',
-    #'BuToD0K_D0ToKsDDHHWSPi0Resolved',
+    "BuToD0K_D0ToKsLLHHWSPi0Resolved",
+    "BuToD0K_D0ToKsDDHHWSPi0Resolved",
     #'BuToD0K_D0ToKsLLHHWSPi0Merged',
     #'BuToD0K_D0ToKsDDHHWSPi0Merged',
     "TbcToDpKm_DpToKmPipPip",
@@ -256,7 +266,6 @@ all_lines = [
     #'BdToD0KPi_D0ToHHPi0Merged',
     #'BdToD0KK_D0ToHHPi0Resolved',
     #'BdToD0KK_D0ToHHPi0Merged',
-    "BdToD0KK_D0ToHHHH",
     "BdToD0PbarP_D0ToHHHH",
     "BdToD0PiPiWS_D0ToHH",
     "BdToD0KPiWS_D0ToHH",
@@ -268,9 +277,6 @@ all_lines = [
     "BdToD0KPiWS_D0ToKsDDHH",
     "BdToD0KKWS_D0ToKsLLHH",
     "BdToD0KKWS_D0ToKsDDHH",
-    "BdToD0PiPiWS_D0ToHHHH",
-    "BdToD0KPiWS_D0ToHHHH",
-    "BdToD0KKWS_D0ToHHHH",
     "BdToD0PbarPWS_D0ToHHHH",
     #'BdToDst0KK_Dst0ToD0Gamma_D0ToHH',
     #'BdToDst0KK_Dst0ToD0Gamma_D0ToHHHH',
@@ -407,11 +413,53 @@ all_lines = [
     # lines from b_to_ddh
     "BdToDstD0K_DstToD0Pi_D0ToHH_D0ToHH",
     "TbcToD0DpPim_D0ToKPiOrKPiPiPi",
+    "BuToD0Ds2460p_Ds2460pToDsPiPi_DsToKHH_D0ToKPi",
+    "BuToD0Ds2460p_Ds2460pToDsPiPi_DsToKHH_D0ToKPiPiPi",
+    "BdToDmDs2460p_Ds2460pToDsPiPi_DsToKHH_DmToHHH",
+    "BdToDstmDs2460p_DstmToD0Pi_Ds2460pToDsPiPi_DsToKHH",
+    "BdToDsDs2460p_Ds2460pToDsPiPi_DsToKKPi",
+    "BdToD0D0Kst_D0ToHH",
+    "BdToD0D0Kst_D0ToHH_D0ToKPiPiPi",
+    "BdToD0D0Kst_D0ToHHHH",
+    "BdToD0D0Kst_D0ToHH_D0ToKsLLHH",
+    "BdToD0D0Kst_D0ToHH_D0ToKsDDHH",
+    "BdToD0D0Kst_D0ToKsLLHH",
+    "BdToD0D0Kst_D0ToKsLLHH_D0ToKsDDHH",
+    "BdToD0D0Kst_D0ToKsDDHH",
+    "BdToD0D0Kst_D0ToKsLLHH_D0ToHHHH",
+    "BdToD0D0Kst_D0ToKsDDHH_D0ToHHHH",
+    "BuToD0D0K_D0ToHH",
+    "BuToD0D0K_D0ToKsLLHH",
+    "BuToD0D0K_D0ToKsDDHH",
+    "BuToD0D0K_D0ToHHHH",
+    "BuToD0D0K_D0ToHH_D0ToKsLLHH",
+    "BuToD0D0K_D0ToHH_D0ToKsDDHH",
+    "BuToD0D0K_D0ToHH_D0ToKPiPiPi",
+    "BuToD0D0K_D0ToKsLLHH_D0ToKsDDHH",
+    "BuToD0D0K_D0ToKsLLHH_D0ToHHHH",
+    "BuToD0D0K_D0ToKsDDHH_D0ToHHHH",
+    "BuToD0D0Pi_D0ToHH",
+    "BuToD0D0Pi_D0ToKsLLHH",
+    "BuToD0D0Pi_D0ToKsDDHH",
+    "BuToD0D0Pi_D0ToHHHH",
+    "BuToD0D0Pi_D0ToHH_D0ToKsLLHH",
+    "BuToD0D0Pi_D0ToHH_D0ToKsDDHH",
+    "BuToD0D0Pi_D0ToHH_D0ToKPiPiPi",
+    "BuToD0D0Pi_D0ToKsLLHH_D0ToKsDDHH",
+    "BuToD0D0Pi_D0ToKsLLHH_D0ToHHHH",
+    "BuToD0D0Pi_D0ToKsDDHH_D0ToHHHH",
+    "BdToD0DK_D0ToKPiOrKPiPiPi_DToHHH",
+    "BdToD0DPi_D0ToKPi_DToHHH",
+    "BdToD0DPi_D0ToKPiPiPi_DToHHH",
     # lines from b_to_ddh_standalone
     "BdToDpDmKsDD_DpToHHH",
     "BdToDpDmKsLL_DpToHHH",
+    "BdToDspDmKsDD_DpToHHH",
+    "BdToDspDmKsLL_DpToHHH",
     "BdToDstDmKsDD_DstToD0Pi_D0ToKPiOrKPiPiPi_DmToHHH",
-    "BdToDstDmKSLL_DstToD0Pi_D0ToKPiOrKPiPiPi_DmToHHH",
+    "BdToDstDmKsLL_DstToD0Pi_D0ToKPiOrKPiPiPi_DmToHHH",
+    "BdToDstDsmKsDD_DstToD0Pi_D0ToKPiOrKPiPiPi_DmToHHH",
+    "BdToDstDsmKsLL_DstToD0Pi_D0ToKPiOrKPiPiPi_DmToHHH",
     "BdToDstpDstmKsDD_DstpToD0Pi_D0ToKPiorKPiPiPi",
     "BdToDstpDstmKsLL_DstpToD0Pi_D0ToKPiorKPiPiPi",
     "BdToD0D0KsDD_D0ToHH",
@@ -435,6 +483,7 @@ all_lines = [
     "BdToD0D0KsLL_D0ToKsLLHH_D0ToHHHH",
     "BdToD0D0KsLL_D0ToKsDDHH_D0ToHHHH",
     "BuToDpDmK_DpToHHH",
+    "BdToDspDmKst_DspToKKPi",
     "BuToDstDK_DstToD0Pi_D0ToKPiOrKPiPiPi_DToHHH",
     "BuToDspDsmK_DspToKHH",
     "BuToDpDmPi_DpToHHH",
@@ -446,6 +495,51 @@ all_lines = [
     "BdToDstpDstmPhi_DstpToD0Pi_D0ToKPi_D0ToKPiPiPi",
     "BdToDstpDstmPhi_DstpToD0Pi_D0ToKPiPiPi_D0ToKPi",
     "BdToDstpDstmPhi_DstpToD0Pi_D0ToKPiPiPi_D0ToKPiPiPi",
+    "BdToDstD0K_DstToD0Pi_D0ToKPiOrKPiPiPi_D0ToKPiOrKPiPiPi",
+    "BuToDstpDstmK_DstToD0Pi_D0ToKPiOrKPiPiPi",
+    "BdToDsD0Pi_DsToHHH_D0ToKPi",
+    "BdToDsD0Pi_DsToHHH_D0ToKPiPiPi",
+    "BdToDsD0K_DsToHHH_D0ToKPi",
+    "BdToDsD0K_DsToHHH_D0ToKPiPiPi",
+    "BuToDsD0Rho0_DspToKHH_D0ToKPi",
+    "BuToDsD0Rho0_DspToKHH_D0ToKPiPiPi",
+    "BdToDspDsmRho_DspToKKPi",
+    "BdToDstD0Pi_DstToD0Pi_D0ToKPiOrKPiPiPi_D0ToKPiOrKPiPiPi",
+    "BdToDpDmKst_DpToHHH",
+    "BdToDstpDmKst_DstpToD0Pi_D0ToKPiOrKPiPiPi_DmToHHH",
+    "BdToDstmDpKst_DstmToD0Pi_D0ToKPiOrKPiPiPi_DpToHHH",
+    "BdToDspDsmKst_DspToKKPi",
+    "BuToDstDPi_DstToD0Pi_D0ToKPiOrKPiPiPi_DToHHH",
+    "BuToDstpDstmPi_DstpToD0Pi_D0ToKPiOrKPiPiPi",
+    "BuToDspDsmPi_DspToKKPi",
+    "BuToD0DpKst_D0ToKPi_DpToHHH",
+    "BuToD0DpKst_D0ToKPiPiPi_DpToHHH",
+    "BuToDstpD0Kst_DstpToD0Pi_D0ToKPiOrKPiPiPi_D0ToKPiOrKPiPiPi",
+    "BuToDspDmPi_DspToHHH_DmToHHH",
+    "BuToDstmDspPi_DstmToD0Pi_D0ToKPiOrKPiPiPi_DspToHHH",
+    "BuToDsD0Phi_DspToKHH_D0ToKPi",
+    "BuToDsD0Phi_DspToKHH_D0ToKPiPiPi",
+    "BdToD0D0Phi_D0ToHH",
+    "BdToD0D0Phi_D0ToKsLLHH",
+    "BdToD0D0Phi_D0ToKsDDHH",
+    "BdToD0D0Phi_D0ToHHHH",
+    "BdToD0D0Phi_D0ToHH_D0ToKsLLHH",
+    "BdToD0D0Phi_D0ToHH_D0ToKsDDHH",
+    "BdToD0D0Phi_D0ToHH_D0ToHHHH",
+    "BdToD0D0Phi_D0ToKsLLHH_D0ToKsDDHH",
+    "BdToD0D0Phi_D0ToKsLLHH_D0ToHHHH",
+    "BdToD0D0Phi_D0ToKsDDHH_D0ToHHHH",
+    "BdToDpDmPhi_DpToHHH",
+    "BdToDsDPhi_DsToHHH_DToHHH",
+    "BdToDspDsmPhi_DspToHHH",
+    "BdToDstDsPhi_DstToD0Pi_D0ToKPiOrKPiPiPi_DsToHHH",
+    "BuToD0DPhi_D0ToKPi_DToHHH",
+    "BuToD0DPhi_D0ToKPiPiPi_DToHHH",
+    "BuToDstD0Phi_DstToD0Pi_D0ToKPiorKPiPiPi_D0ToKPiorKPiPiPi",
+    "BdToDstDPhi_DstToD0Pi_D0ToKPiorKPiPiPi_DToHHH",
+    "BuToDstpDstmKst_DstpToD0Pi_D0ToKPiOrKPiPiPi",
+    "BdToDspDmRho0_DspToKKPi_DmToHHH",
+    "BdToDstmDspRho0_DstmToD0Pi_D0ToKPiOrKPiPiPi_DspToKHH",
     # lines from b_to_ddhh
     "TbcToD0D0PipPim_D0ToKPiOrKPiPiPi",
     # lines from b_to_cbaryon_h
@@ -468,8 +562,8 @@ all_lines = [
     "BuToLcpXicmPi_LcpToPKPi_XicmToPKPi",
     "BdToScmmLcpK_ScmmToLcmPi_LcmToPKPi_LcpToPKPi",
     # lines from bbaryon_to_cbaryons_h
-    "Lb0ToLcpLcmN0",
-    "Lb0ToPbarPN0",
+    "LbToLcpLcmN0",
+    "LbToPbarPN0",
     # lines from bbaryon_to_cbaryon_h
     "LbToLcpPi_LcpToPKPi",
     "LbToLcpPi_LcpToPPiPi",
@@ -567,11 +661,18 @@ all_lines = [
     "LbToLambdaTTD0_D0ToKsLLHHWS",
     "LbToLambdaLLD0_D0ToHH",
     "LbToLambdaLLD0_D0ToHHHH",
-    "LbToLambdaLLD0_D0ToHHHHWS",
+    "LbToLambdaDDD0_D0ToHH",
+    "LbToLambdaDDD0_D0ToHHHH",
     "LbToLambdaLLD0_D0ToKsLLHH",
     "LbToLambdaLLD0_D0ToKsDDHH",
     "LbToLambdaDDD0_D0ToKsLLHH",
     "LbToLambdaDDD0_D0ToKsDDHH",
+    "LbToLambdaLLD0_D0ToHHHHWS",
+    "LbToLambdaDDD0_D0ToHHHHWS",
+    "LbToLambdaLLD0_D0ToKsLLHHWS",
+    "LbToLambdaLLD0_D0ToKsDDHHWS",
+    "LbToLambdaDDD0_D0ToKsLLHHWS",
+    "LbToLambdaDDD0_D0ToKsDDHHWS",
     "LbToXimDsp_DspToKKPi_XimToLambdaLLPi",
     "LbToXimDsp_DspToKKPi_XimToLambdaDDPi",
     "Xib0ToXimDp_DpToKPiPi_XimToLambdaLLPi",
@@ -620,6 +721,7 @@ all_lines = [
     "XibcpToD0LambdaDDPip_D0ToKPiOrKPiPiPi",
     # lines from bbaryon_to_lightbaryon_dd
     "XibcpToPD0D0_D0ToKPiOrKPiPiPi",
+    "LbToD0DsmP_D0ToKPiOrKPiPiPi_DsmToHHH",
     # lines from bbaryon_to_lightbaryon_ddh
     "LbToDpDmPK_DpToHHH",
     "Xibc0ToD0D0PPim_D0ToKPiOrKPiPiPi",
@@ -673,9 +775,6 @@ extra_config = {
         "BdToD0KPiWS_D0ToKsDDHH": 0.1,
         "BdToD0KKWS_D0ToKsLLHH": 0.1,
         "BdToD0KKWS_D0ToKsDDHH": 0.1,
-        "BdToD0PiPiWS_D0ToHHHH": 0.1,
-        "BdToD0KPiWS_D0ToHHHH": 0.1,
-        "BdToD0KKWS_D0ToHHHH": 0.1,
         "BdToD0PbarPWS_D0ToHHHH": 0.1,
         #'BdToD0PiPiWS_D0ToHHPi0Resolved': 0.1,
         #'BdToD0PiPiWS_D0ToHHPi0Merged': 0.1,
@@ -731,6 +830,13 @@ extra_config = {
         "LbToLcpPiPiPiWS_LcpToPPiPi": 0.1,
         "LbToLcpPiPiPiWS_LcpToPKK": 0.1,
         "OmbmToOmc0PiPiPiWS_Omc0ToPKKPi": 0.1,
+        # lines from bbaryon_to_lightbaryon_d
+        "LbToLambdaLLD0_D0ToHHHHWS": 0.1,
+        "LbToLambdaDDD0_D0ToHHHHWS": 0.1,
+        "LbToLambdaLLD0_D0ToKsLLHHWS": 0.1,
+        "LbToLambdaLLD0_D0ToKsDDHHWS": 0.1,
+        "LbToLambdaDDD0_D0ToKsLLHHWS": 0.1,
+        "LbToLambdaDDD0_D0ToKsDDHHWS": 0.1,
         # lines from bbaryon_to_lightbaryon_dh
         "LbToD0PPi_D0ToKsLLHHWS": 0.1,
         "LbToD0PPi_D0ToKsDDHHWS": 0.1,
@@ -745,10 +851,10 @@ extra_config = {
         "LbToD0PPiWS_D0ToHHHH": 0.1,
         "LbToD0PKWS_D0ToHHHH": 0.1,
         # lines for SigmaNet background
-        "BdToDmPiSB_DmToPimPimKp": 0.5,
+        "BdToDmPiSB_DmToPimPimKp": 0.25,
         "LbToLcpPiSB_LcpToPKPi": 1.0,
-        "BuToD0PiSB_D0ToHH": 0.25,
-        "BdToD0PiPiSB_D0ToHH": 1.0,
+        "BuToD0PiSB_D0ToHH": 0.125,
+        "BdToD0PiPiSB_D0ToHH": 0.25,
     },
     # custom MVA cut
     # `None` means MVA-unfiltered
@@ -773,7 +879,6 @@ extra_config = {
         "BdToDsmK_DsmToKpKmPim",
         # lines from b_to_dhh
         "BdToD0KK_D0ToHH",
-        "BdToD0KK_D0ToHHHH",
         #'BdToD0KK_D0ToHHPi0Resolved',
         #'BdToD0KK_D0ToHHPi0Merged',
         "BdToD0KK_D0ToKsLLHH",
@@ -828,6 +933,16 @@ extra_config = {
         "BdToD0D0KsDD_D0ToKsLLHH_D0ToKsDDHH",
         "BdToD0D0KsDD_D0ToKsLLHH_D0ToHHHH",
         "BdToD0D0KsDD_D0ToKsDDHH_D0ToHHHH",
+        "BdToD0D0Phi_D0ToHH",
+        "BdToD0D0Phi_D0ToKsLLHH",
+        "BdToD0D0Phi_D0ToKsDDHH",
+        "BdToD0D0Phi_D0ToHHHH",
+        "BdToD0D0Phi_D0ToHH_D0ToKsLLHH",
+        "BdToD0D0Phi_D0ToHH_D0ToKsDDHH",
+        "BdToD0D0Phi_D0ToHH_D0ToHHHH",
+        "BdToD0D0Phi_D0ToKsLLHH_D0ToKsDDHH",
+        "BdToD0D0Phi_D0ToKsLLHH_D0ToHHHH",
+        "BdToD0D0Phi_D0ToKsDDHH_D0ToHHHH",
     ],
     "pv_unbiasing": [
         # PV-unbiasing is automatically added for all FT lines,
@@ -835,6 +950,74 @@ extra_config = {
         "BdToDmPi_DmToPimPimKp_LTU",
         "BdToDsmK_DsmToKpKmPim_LTU",
         "BdToDsmKPiPi_DsmToKmKpPim_LTU",
+        "BuToD0Pi_D0ToHH",
+        "LbToLcpPi_LcpToPKPi",
+        "OmbmToOmc0Pi_Omc0ToPKKPi",
+        "Xib0ToXicpPi_XicpToPKPi",
+        "XibmToXic0Pi_Xic0ToPKKPi",
+        "XibmToLcpKK_LcpToPKPi",
+        "XibmToLcpKPi_LcpToPKPi",
+        "XibmToLcpPiPi_LcpToPKPi",
+        "XibmToXicpKPi_XicpToPKPi",
+        "OmbmToOmc0PiPiPi_Omc0ToPKKPi",
+        "XibmToXic0PiPiPi_Xic0ToPKKPi",
+    ],
+    "isolation": [
+        "BuToD0Pi_D0ToHH",
+        "BuToD0K_D0ToHH",
+        "BuToD0Pi_D0ToHHWS",
+        "BuToD0K_D0ToHHWS",
+        "BuToDst0Pi_Dst0ToD0Pi0Resolved_D0ToHH",
+        "BuToDst0Pi_Dst0ToD0Gamma_D0ToHH",
+        "BuToDst0K_Dst0ToD0Pi0Resolved_D0ToHH",
+        "BuToDst0K_Dst0ToD0Gamma_D0ToHH",
+        "BuToDst0Pi_Dst0ToD0Pi0Resolved_D0ToHHWS",
+        "BuToDst0Pi_Dst0ToD0Gamma_D0ToHHWS",
+        "BuToDst0K_Dst0ToD0Pi0Resolved_D0ToHHWS",
+        "BuToDst0K_Dst0ToD0Gamma_D0ToHHWS",
+        "BuToD0Pi_D0ToKsLLHH",
+        "BuToD0Pi_D0ToKsDDHH",
+        "BuToD0K_D0ToKsLLHH",
+        "BuToD0K_D0ToKsDDHH",
+        "BuToD0Pi_D0ToKsLLHHWS",
+        "BuToD0Pi_D0ToKsDDHHWS",
+        "BuToD0K_D0ToKsLLHHWS",
+        "BuToD0K_D0ToKsDDHHWS",
+        "BuToD0K_D0ToHHPi0Resolved",
+        "BuToD0Pi_D0ToHHPi0Resolved",
+        #'BuToD0K_D0ToHHPi0Merged',
+        #'BuToD0Pi_D0ToHHPi0Merged',
+        "BuToD0Pi_D0ToHHPi0ResolvedWS",
+        #'BuToD0Pi_D0ToHHPi0MergedWS',
+        "BuToD0K_D0ToHHPi0ResolvedWS",
+        #'BuToD0K_D0ToHHPi0MergedWS',
+        "BuToD0Pi_D0ToHHHH",
+        "BuToD0K_D0ToHHHH",
+        "BuToD0Pi_D0ToHHHHWS",
+        "BuToD0K_D0ToHHHHWS",
+        "BuToD0Pi_D0ToKsLLHHPi0Resolved",
+        "BuToD0Pi_D0ToKsDDHHPi0Resolved",  # rate checked to be fine, jessy.daniel@cern.ch
+        #'BuToD0Pi_D0ToKsLLHHPi0Merged',
+        #'BuToD0Pi_D0ToKsDDHHPi0Merged',
+        "BuToD0K_D0ToKsLLHHPi0Resolved",
+        "BuToD0K_D0ToKsDDHHPi0Resolved",  # rate checked to be fine, jessy.daniel@cern.ch
+        #'BuToD0K_D0ToKsLLHHPi0Merged',
+        #'BuToD0K_D0ToKsDDHHPi0Merged',
+        "BuToD0Pi_D0ToKsLLHHWSPi0Resolved",
+        "BuToD0Pi_D0ToKsDDHHWSPi0Resolved",
+        #'BuToD0Pi_D0ToKsLLHHWSPi0Merged',
+        #'BuToD0Pi_D0ToKsDDHHWSPi0Merged',
+        "BuToD0K_D0ToKsLLHHWSPi0Resolved",
+        "BuToD0K_D0ToKsDDHHWSPi0Resolved",
+        #'BuToD0K_D0ToKsLLHHWSPi0Merged',
+        #'BuToD0K_D0ToKsDDHHWSPi0Merged',
+        "BuToD0K_D0ToKsDDPi0Resolved",
+        "BuToD0K_D0ToKsLLPi0Resolved",
+        "BuToD0Pi_D0ToKsDDPi0Resolved",
+        "BuToD0Pi_D0ToKsLLPi0Resolved",
+        "BdToDstmMuNu_DstmToD0Pi_D0ToHHHH",
+        "BdToDstmMuNu_DstmToD0Pi_D0ToKsDDHH",
+        "BdToDstmMuNu_DstmToD0Pi_D0ToKsLLHH",
     ],
 }
 
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/persistency.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/persistency.py
index 0cfbe67ac941a23a7940f067e18b7721d381b3c5..8fa08d946ce3571445eaea2841c2ecaee49e9d0a 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/persistency.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/persistency.py
@@ -98,7 +98,7 @@ def select_parts_for_isolation(
 def make_iso_particles(
     line_alg,
     name="B",
-    coneangle=2.5,
+    coneangle=1.0,
     LongTrackIso=True,
     TTrackIso=False,
     DownstreamTrackIso=False,
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/spruce_b2oc.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/spruce_b2oc.py
index 8d0a64019f633478e420ad19542e795bb1f003e1..8f39809110fa8f917ea554f04a473f6dd5c33535 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/spruce_b2oc.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_open_charm/spruce_b2oc.py
@@ -319,18 +319,6 @@ all_lines = [
     #'BdToD0KPiWS_D0ToHH',
     #'BdToD0KKWS_D0ToHH',
     #'BdToD0PbarPWS_D0ToHH',
-    "BdToD0PiPi_D0ToKsLLHH",
-    "BdToD0PiPi_D0ToKsDDHH",
-    "BdToD0KPi_D0ToKsLLHH",
-    "BdToD0KPi_D0ToKsDDHH",
-    "BdToD0KK_D0ToKsLLHH",
-    "BdToD0KK_D0ToKsDDHH",
-    "BdToD0PiPiWS_D0ToKsLLHH",
-    "BdToD0PiPiWS_D0ToKsDDHH",
-    "BdToD0KPiWS_D0ToKsLLHH",
-    "BdToD0KPiWS_D0ToKsDDHH",
-    "BdToD0KKWS_D0ToKsLLHH",
-    "BdToD0KKWS_D0ToKsDDHH",
     "BdToD0PiPi_D0ToHHHH",
     "BdToD0KPi_D0ToHHHH",
     "BdToD0KK_D0ToHHHH",
@@ -468,145 +456,137 @@ all_lines = [
     "BdToDstpDstm_DstpToD0Pi_D0ToHHHH",
     "BdToDstpDstm_DstpToD0Pi_D0ToHH_D0ToHHHH",
     # lines from b_to_ddh
-    "BdToD0D0Kst_D0ToHH",
-    "BdToD0D0Kst_D0ToHH_D0ToHHHH",
-    "BdToD0D0Kst_D0ToHHHH",
-    "BdToD0D0Kst_D0ToHH_D0ToKsLLHH",
-    "BdToD0D0Kst_D0ToHH_D0ToKsDDHH",
-    "BdToD0D0Kst_D0ToKsLLHH",
-    "BdToD0D0Kst_D0ToKsLLHH_D0ToKsDDHH",
-    "BdToD0D0Kst_D0ToKsDDHH",
-    "BdToD0D0Kst_D0ToKsLLHH_D0ToHHHH",
-    "BdToD0D0Kst_D0ToKsDDHH_D0ToHHHH",
-    "BuToD0Ds2460p_Ds2460pToDsPiPi_DsToKHH_D0ToKPi",
-    "BuToD0Ds2460p_Ds2460pToDsPiPi_DsToKHH_D0ToKPiPiPi",
-    "BdToDmDs2460p_Ds2460pToDsPiPi_DsToKHH_DmToHHH",
-    "BdToDstmDs2460p_DstmToD0Pi_Ds2460pToDsPiPi_DsToKHH",
-    "BdToDst0DsPi_Dst0ToD0Pi0Merged_D0ToKPiOrKPiPiPi_DsToHHH",
-    "BuToD0D0K_D0ToHH",
-    "BuToD0D0K_D0ToKsLLHH",
-    "BuToD0D0K_D0ToKsDDHH",
-    "BuToD0D0K_D0ToHHHH",
-    "BuToD0D0K_D0ToHH_D0ToKsLLHH",
-    "BuToD0D0K_D0ToHH_D0ToKsDDHH",
-    "BuToD0D0K_D0ToHH_D0ToHHHH",
-    "BuToD0D0K_D0ToKsLLHH_D0ToKsDDHH",
-    "BuToD0D0K_D0ToKsLLHH_D0ToHHHH",
-    "BuToD0D0K_D0ToKsDDHH_D0ToHHHH",
-    "BuToD0D0Pi_D0ToHH",
-    "BuToD0D0Pi_D0ToKsLLHH",
-    "BuToD0D0Pi_D0ToKsDDHH",
-    "BuToD0D0Pi_D0ToHHHH",
-    "BuToD0D0Pi_D0ToHH_D0ToKsLLHH",
-    "BuToD0D0Pi_D0ToHH_D0ToKsDDHH",
-    "BuToD0D0Pi_D0ToHH_D0ToHHHH",
-    "BuToD0D0Pi_D0ToKsLLHH_D0ToKsDDHH",
-    "BuToD0D0Pi_D0ToKsLLHH_D0ToHHHH",
-    "BuToD0D0Pi_D0ToKsDDHH_D0ToHHHH",
-    "BdToDst0DspPi_Dst0ToD0Gamma_D0ToKPiOrKPiPiPi_DspToHHH",
     "BdToDsstpD0Pi_DsstpToDspGamma_DspToHHH_D0ToKPiOrKPiPiPi",
     "BuToDsstpDmPi_DsstpToDspGamma_DspToHHH_DmToHHH",
     "BuToDst0D0K_Dst0ToD0Gamma_D0ToHH_D0ToHH",
-    "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHH_D0ToHH",
+    # "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHH_D0ToHH",
     "BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHH_D0ToHH",
     "BuToDst0D0K_Dst0ToD0Gamma_D0ToKsLLHH_D0ToKsLLHH",
-    "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsLLHH_D0ToKsLLHH",
+    # "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsLLHH_D0ToKsLLHH",
     "BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsLLHH_D0ToKsLLHH",
     "BuToDst0D0K_Dst0ToD0Gamma_D0ToKsDDHH_D0ToKsDDHH",
-    "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsDDHH_D0ToKsDDHH",
+    # "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsDDHH_D0ToKsDDHH",
     "BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsDDHH_D0ToKsDDHH",
     "BuToDst0D0K_Dst0ToD0Gamma_D0ToHHHH_D0ToHHHH",
-    "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHHHH_D0ToHHHH",
+    # "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHHHH_D0ToHHHH",
     "BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHHHH_D0ToHHHH",
     "BuToDst0D0K_Dst0ToD0Gamma_D0ToHH_D0ToKsLLHH",
-    "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHH_D0ToKsLLHH",
+    # "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHH_D0ToKsLLHH",
     "BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHH_D0ToKsLLHH",
     "BuToDst0D0K_Dst0ToD0Gamma_D0ToKsLLHH_D0ToHH",
-    "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsLLHH_D0ToHH",
+    # "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsLLHH_D0ToHH",
     "BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsLLHH_D0ToHH",
     "BuToDst0D0K_Dst0ToD0Gamma_D0ToHH_D0ToKsDDHH",
-    "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHH_D0ToKsDDHH",
+    # "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHH_D0ToKsDDHH",
     "BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHH_D0ToKsDDHH",
     "BuToDst0D0K_Dst0ToD0Gamma_D0ToKsDDHH_D0ToHH",
-    "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsDDHH_D0ToHH",
+    # "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsDDHH_D0ToHH",
     "BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsDDHH_D0ToHH",
     "BuToDst0D0K_Dst0ToD0Gamma_D0ToHH_D0ToHHHH",
-    "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHH_D0ToHHHH",
+    # "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHH_D0ToHHHH",
     "BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHH_D0ToHHHH",
     "BuToDst0D0K_Dst0ToD0Gamma_D0ToHHHH_D0ToHH",
-    "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHHHH_D0ToHH",
+    # "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHHHH_D0ToHH",
     "BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHHHH_D0ToHH",
     "BuToDst0D0K_Dst0ToD0Gamma_D0ToKsLLHH_D0ToKsDDHH",
-    "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsLLHH_D0ToKsDDHH",
+    # "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsLLHH_D0ToKsDDHH",
     "BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsLLHH_D0ToKsDDHH",
     "BuToDst0D0K_Dst0ToD0Gamma_D0ToKsDDHH_D0ToKsLLHH",
-    "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsDDHH_D0ToKsLLHH",
+    # "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsDDHH_D0ToKsLLHH",
     "BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsDDHH_D0ToKsLLHH",
     "BuToDst0D0K_Dst0ToD0Gamma_D0ToHHHH_D0ToKsLLHH",
-    "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHHHH_D0ToKsLLHH",
+    # "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHHHH_D0ToKsLLHH",
     "BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHHHH_D0ToKsLLHH",
     "BuToDst0D0K_Dst0ToD0Gamma_D0ToKsLLHH_D0ToHHHH",
-    "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsLLHH_D0ToHHHH",
+    # "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsLLHH_D0ToHHHH",
     "BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsLLHH_D0ToHHHH",
     "BuToDst0D0K_Dst0ToD0Gamma_D0ToHHHH_D0ToKsDDHH",
-    "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHHHH_D0ToKsDDHH",
+    # "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToHHHH_D0ToKsDDHH",
     "BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToHHHH_D0ToKsDDHH",
     "BuToDst0D0K_Dst0ToD0Gamma_D0ToKsDDHH_D0ToHHHH",
-    "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsDDHH_D0ToHHHH",
+    # "BuToDst0D0K_Dst0ToD0Pi0Merged_D0ToKsDDHH_D0ToHHHH",
     "BuToDst0D0K_Dst0ToD0Pi0Resolved_D0ToKsDDHH_D0ToHHHH",
-    "BuToDsD0Pi0Merged_DsToKKPi_D0ToKPiOrKPiPiPi",
+    "BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToHH_D0ToHH",
+    "BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToKsLLHH_D0ToKsLLHH",
+    "BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToKsDDHH_D0ToKsDDHH",
+    "BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToHHHH_D0ToHHHH",
+    "BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToHH_D0ToKsLLHH",
+    "BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToKsLLHH_D0ToHH",
+    "BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToHH_D0ToKsDDHH",
+    "BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToKsDDHH_D0ToHH",
+    "BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToKsLLHH_D0ToKsDDHH",
+    "BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToKsDDHH_D0ToKsLLHH",
+    "BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToHH_D0ToHHHH",
+    "BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToHHHH_D0ToHH",
+    "BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToHHHH_D0ToKsLLHH",
+    "BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToKsLLHH_D0ToHHHH",
+    "BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToHHHH_D0ToKsDDHH",
+    "BdToDst0DstK_Dst0ToD0Gamma_DstToD0Pi_D0ToKsDDHH_D0ToHHHH",
+    # "BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToHH_D0ToHH",
+    # "BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToKsLLHH_D0ToKsLLHH",
+    # "BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToKsDDHH_D0ToKsDDHH",
+    # "BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToHHHH_D0ToHHHH",
+    # "BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToHH_D0ToKsLLHH",
+    # "BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToKsLLHH_D0ToHH",
+    # "BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToHH_D0ToKsDDHH",
+    # "BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToKsDDHH_D0ToHH",
+    # "BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToKsLLHH_D0ToKsDDHH",
+    # "BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToKsDDHH_D0ToKsLLHH",
+    # "BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToHH_D0ToHHHH",
+    # "BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToHHHH_D0ToHH",
+    # "BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToHHHH_D0ToKsLLHH",
+    # "BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToKsLLHH_D0ToHHHH",
+    # "BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToHHHH_D0ToKsDDHH",
+    # "BdToDst0DstK_Dst0ToD0Pi0Merged_DstToD0Pi_D0ToKsDDHH_D0ToHHHH",
+    "BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToHH_D0ToHH",
+    "BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToKsLLHH_D0ToKsLLHH",
+    "BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToKsDDHH_D0ToKsDDHH",
+    "BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToHHHH_D0ToHHHH",
+    "BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToHH_D0ToKsLLHH",
+    "BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToKsLLHH_D0ToHH",
+    "BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToHH_D0ToKsDDHH",
+    "BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToKsDDHH_D0ToHH",
+    "BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToKsLLHH_D0ToKsDDHH",
+    "BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToKsDDHH_D0ToKsLLHH",
+    "BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToHH_D0ToHHHH",
+    "BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToHHHH_D0ToHH",
+    "BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToHHHH_D0ToKsLLHH",
+    "BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToKsLLHH_D0ToHHHH",
+    "BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToHHHH_D0ToKsDDHH",
+    "BdToDst0DstK_Dst0ToD0Pi0Resolved_DstToD0Pi_D0ToKsDDHH_D0ToHHHH",
+    # "BuToDsD0Pi0Merged_DsToKKPi_D0ToKPi",
+    # "BuToDsD0Pi0Merged_DsToKKPi_D0ToKPiPiPi",
     "BuToDsD0Pi0Resolved_DsToKKPi_D0ToKPi",
     "BuToDsD0Pi0Resolved_DsToKKPi_D0ToKPiPiPi",
-    "BdToDst0DK_Dst0ToD0Gamma_D0ToKPiOrKPiPiPi_DToHHH",
-    "BdToDst0DK_Dst0ToD0Pi0Merged_D0ToKPiOrKPiPiPi_DToHHH",
-    "BdToDst0DK_Dst0ToD0Pi0Resolved_D0ToKPiOrKPiPiPi_DToHHH",
-    "BdToDst0DsPi_Dst0ToD0Pi0Resolved_D0ToKPiOrKPiPiPi_DsToHHH",
+    # "BdToDsDmPi0Merged_DsToKKPi_DToHHH",
+    "BdToDsDmPi0Resolved_DsToKKPi_DToHHH",
+    "BdToDst0DK_Dst0ToD0Gamma_D0ToHH_DToHHH",
+    "BdToDst0DK_Dst0ToD0Gamma_D0ToHHHH_DToHHH",
+    "BdToDst0DK_Dst0ToD0Gamma_D0ToKsLLHH_DToHHH",
+    "BdToDst0DK_Dst0ToD0Gamma_D0ToKsDDHH_DToHHH",
+    # "BdToDst0DK_Dst0ToD0Pi0Merged_D0ToHH_DToHHH",
+    # "BdToDst0DK_Dst0ToD0Pi0Merged_D0ToHHHH_DToHHH",
+    # "BdToDst0DK_Dst0ToD0Pi0Merged_D0ToKsLLHH_DToHHH",
+    # "BdToDst0DK_Dst0ToD0Pi0Merged_D0ToKsDDHH_DToHHH",
+    "BdToDst0DK_Dst0ToD0Pi0Resolved_D0ToHH_DToHHH",
+    "BdToDst0DK_Dst0ToD0Pi0Resolved_D0ToHHHH_DToHHH",
+    "BdToDst0DK_Dst0ToD0Pi0Resolved_D0ToKsLLHH_DToHHH",
+    "BdToDst0DK_Dst0ToD0Pi0Resolved_D0ToKsDDHH_DToHHH",
+    # "BdToDst0DsPi_Dst0ToD0Pi0Merged_D0ToHH_DsToHHH",
+    # "BdToDst0DsPi_Dst0ToD0Pi0Merged_D0ToHHHH_DsToHHH",
+    # "BdToDst0DsPi_Dst0ToD0Pi0Merged_D0ToKsLLHH_DsToHHH",
+    # "BdToDst0DsPi_Dst0ToD0Pi0Merged_D0ToKsDDHH_DsToHHH",
+    "BdToDst0DsPi_Dst0ToD0Pi0Resolved_D0ToHH_DsToHHH",
+    "BdToDst0DsPi_Dst0ToD0Pi0Resolved_D0ToHHHH_DsToHHH",
+    "BdToDst0DsPi_Dst0ToD0Pi0Resolved_D0ToKsLLHH_DsToHHH",
+    "BdToDst0DsPi_Dst0ToD0Pi0Resolved_D0ToKsDDHH_DsToHHH",
+    "BdToDst0DsPi_Dst0ToD0Gamma_D0ToHH_DsToHHH",
+    "BdToDst0DsPi_Dst0ToD0Gamma_D0ToHHHH_DsToHHH",
+    "BdToDst0DsPi_Dst0ToD0Gamma_D0ToKsLLHH_DsToHHH",
+    "BdToDst0DsPi_Dst0ToD0Gamma_D0ToKsDDHH_DsToHHH",
+    # "BdToDspDsmPi0Merged_DsToKKPi",
+    "BdToDspDsmPi0Resolved_DsToKKPi",
     # lines from b_to_ddh_standalone
-    "BdToD0DK_D0ToKPiOrKPiPiPi_DToHHH",
-    "BdToD0DPi_D0ToKPi_DToHHH",
-    "BdToD0DPi_D0ToKPiPiPi_DToHHH",
-    "BdToDstD0K_DstToD0Pi_D0ToKPiOrKPiPiPi_D0ToKPiOrKPiPiPi",
-    "BdToDstD0Pi_DstToD0Pi_D0ToKPiOrKPiPiPi_D0ToKPiOrKPiPiPi",
-    "BdToDpDmKst_DpToHHH",
-    "BdToDstpDmKst_DstpToD0Pi_D0ToKPiOrKPiPiPi_DmToHHH",
-    "BdToDstmDpKst_DstmToD0Pi_D0ToKPiOrKPiPiPi_DpToHHH",
-    "BdToDspDsmKst_DspToKHH",
-    "BuToDstpDstmK_DstToD0Pi_D0ToKPiOrKPiPiPi",
-    "BuToDstDPi_DstToD0Pi_D0ToKPiOrKPiPiPi_DToHHH",
-    "BuToDstpDstmPi_DstpToD0Pi_D0ToKPiOrKPiPiPi",
-    "BuToDspDsmPi_DspToKHH",
-    "BuToD0DpKst_D0ToKPi_DpToHHH",
-    "BuToD0DpKst_D0ToKPiPiPi_DpToHHH",
-    "BuToDstpD0Kst_DstpToD0Pi_D0ToKPiOrKPiPiPi_D0ToKPiOrKPiPiPi",
-    "BuToDspDmPi_DspToHHH_DmToHHH",
-    "BuToDstmDspPi_DstmToD0Pi_D0ToKPiOrKPiPiPi_DspToHHH",
-    "BdToDsD0Pi_DsToHHH_D0ToKPi",
-    "BdToDsD0Pi_DsToHHH_D0ToKPiPiPi",
-    "BuToDsD0Phi_DspToKHH_D0ToKPi",
-    "BuToDsD0Phi_DspToKHH_D0ToKPiPiPi",
-    "BdToD0D0Phi_D0ToHH",
-    "BdToD0D0Phi_D0ToKsLLHH",
-    "BdToD0D0Phi_D0ToKsDDHH",
-    "BdToD0D0Phi_D0ToHHHH",
-    "BdToD0D0Phi_D0ToHH_D0ToKsLLHH",
-    "BdToD0D0Phi_D0ToHH_D0ToKsDDHH",
-    "BdToD0D0Phi_D0ToHH_D0ToHHHH",
-    "BdToD0D0Phi_D0ToKsLLHH_D0ToKsDDHH",
-    "BdToD0D0Phi_D0ToKsLLHH_D0ToHHHH",
-    "BdToD0D0Phi_D0ToKsDDHH_D0ToHHHH",
-    "BdToDpDmPhi_DpToHHH",
-    "BdToDsDPhi_DsToHHH_DToHHH",
-    "BdToDspDsmPhi_DspToHHH",
-    "BdToDstDsPhi_DstToD0Pi_D0ToKPiOrKPiPiPi_DsToHHH",
-    "BuToD0DPhi_D0ToKPi_DToHHH",
-    "BuToD0DPhi_D0ToKPiPiPi_DToHHH",
-    "BuToDstD0Phi_DstToD0Pi_D0ToKPiorKPiPiPi_D0ToKPiorKPiPiPi",
-    "BdToDstDPhi_DstToD0Pi_D0ToKPiorKPiPiPi_DToHHH",
-    "BuToDstpDstmKst_DstpToD0Pi_D0ToKPiOrKPiPiPi",
-    "BuToDsD0Rho0_DspToKHH_D0ToKPi",
-    "BuToDsD0Rho0_DspToKHH_D0ToKPiPiPi",
-    "BdToDspDmRho0_DspToKHH_DmToHHH",
-    "BdToDstmDspRho0_DstmToD0Pi_D0ToKPiOrKPiPiPi_DspToKHH",
     # lines from bbaryon_to_cbaryon_h
     #'OmbmToOmc0PiGammaWS_Omc0ToPKKPi',
     #'OmbmToOmc0PiGamma_Omc0ToPKKPi',
@@ -649,20 +629,6 @@ all_lines = [
     "LbToLcpDmPipKm_LcpToPKPi_DmToKPiPi",
     # lines from bbaryon_to_lightbaryon_d
     "LbToDsmP_DsmToHHH",
-    "LbToLambdaLLD0_D0ToHH",
-    "LbToLambdaLLD0_D0ToHHHH",
-    "LbToLambdaDDD0_D0ToHH",
-    "LbToLambdaDDD0_D0ToHHHH",
-    "LbToLambdaLLD0_D0ToKsLLHH",
-    "LbToLambdaLLD0_D0ToKsDDHH",
-    "LbToLambdaDDD0_D0ToKsLLHH",
-    "LbToLambdaDDD0_D0ToKsDDHH",
-    "LbToLambdaLLD0_D0ToHHHHWS",
-    "LbToLambdaDDD0_D0ToHHHHWS",
-    "LbToLambdaLLD0_D0ToKsLLHHWS",
-    "LbToLambdaLLD0_D0ToKsDDHHWS",
-    "LbToLambdaDDD0_D0ToKsLLHHWS",
-    "LbToLambdaDDD0_D0ToKsDDHHWS",
     # lines from bbaryon_to_lightbaryon_dh
     "XibmToDmPK_DmToHHH",
     "XibmToDmPPi_DmToHHH",
@@ -701,10 +667,6 @@ all_lines = [
     "LbToDstDLambdaDD_DstToD0Pi_D0ToHH_DToHHH",
     "LbToDstDLambdaLL_DstToD0Pi_D0ToKPiPiPi_DToHHH",
     "LbToDstDLambdaDD_DstToD0Pi_D0ToKPiPiPi_DToHHH",
-    "LbToD0DsmP_D0ToKPiOrKPiPiPi_DsmToHHH",
-    # lines from bbaryon_to_cbaryons_h
-    "Lb0ToLcpLcmN0",
-    "Lb0ToPbarPN0",
     # lines from b_to_cbaryons
     "BdToLcpLcm_LcpToPHH",
     "BdToXicpXicm_XicpToPKPi",
@@ -780,13 +742,6 @@ extra_config = {
         "BuToD0KsDDPi_D0ToKsDDHHWS": 0.1,
         "BuToD0KsLLPi_D0ToHHHHWS": 0.1,
         "BuToD0KsDDPi_D0ToHHHHWS": 0.1,
-        # lines from bbaryon_to_lightbaryon_d
-        "LbToLambdaLLD0_D0ToHHHHWS": 0.1,
-        "LbToLambdaDDD0_D0ToHHHHWS": 0.1,
-        "LbToLambdaLLD0_D0ToKsLLHHWS": 0.1,
-        "LbToLambdaLLD0_D0ToKsDDHHWS": 0.1,
-        "LbToLambdaDDD0_D0ToKsLLHHWS": 0.1,
-        "LbToLambdaDDD0_D0ToKsDDHHWS": 0.1,
         #'BuToD0PiPi0Resolved_D0ToHH': 0.1,
         #'BuToD0PiPi0Merged_D0ToHH': 0.1,
         #'BuToD0KPi0Resolved_D0ToHH': 0.1,
@@ -842,12 +797,7 @@ extra_config = {
         # lines from b_to_dhh
         #'BdToD0KK_D0ToHH',
         "BdToD0KK_D0ToHHHH",
-        "BdToD0KK_D0ToKsLLHH",
-        "BdToD0KK_D0ToKsDDHH",
-        #'BdToD0PiPi_D0ToHH',
         "BdToD0PiPi_D0ToHHHH",
-        "BdToD0PiPi_D0ToKsLLHH",
-        "BdToD0PiPi_D0ToKsDDHH",
         #'BdToDst0KK_Dst0ToD0Gamma_D0ToHH',
         #'BdToDst0KK_Dst0ToD0Pi0Resolved_D0ToHH',
         #'BdToDst0PiPi_Dst0ToD0Gamma_D0ToHH',
@@ -883,21 +833,22 @@ extra_config = {
         "BdToDstpDstm_DstpToD0Pi_D0ToHHHH",
         "BdToDstpDstm_DstpToD0Pi_D0ToHH_D0ToHHHH",
         # lines from b_to_ddh_standalone
-        "BdToD0D0Phi_D0ToHH",
-        "BdToD0D0Phi_D0ToKsLLHH",
-        "BdToD0D0Phi_D0ToKsDDHH",
-        "BdToD0D0Phi_D0ToHHHH",
-        "BdToD0D0Phi_D0ToHH_D0ToKsLLHH",
-        "BdToD0D0Phi_D0ToHH_D0ToKsDDHH",
-        "BdToD0D0Phi_D0ToHH_D0ToHHHH",
-        "BdToD0D0Phi_D0ToKsLLHH_D0ToKsDDHH",
-        "BdToD0D0Phi_D0ToKsLLHH_D0ToHHHH",
-        "BdToD0D0Phi_D0ToKsDDHH_D0ToHHHH",
+        "BdToDsstmPi_DsstmToDsmGamma_DsmToHHH",
+        "BdToDmKsLLPi_DmToHHH",
     ],
     "pv_unbiasing": [
         # PV-unbiasing is automatically added for all FT lines,
         # book line here if FT is not required but PV-unbiasing is required.
         "BdToDsmK_DsmToKpKmPim_LTU",
+        "BdToDmPiPiPi_DmToPimPimKp",
+        "BdToDsmPiPiPi_DsmToKmKpPim",
+        "BuToD0PiPiPi_D0ToHH",
+        "XibmToLcpKK_LcpToPKPi",
+        "XibmToLcpKPi_LcpToPKPi",
+        "XibmToLcpPiPi_LcpToPKPi",
+        "XibmToXicpKPi_XicpToPKPi",
+        "LbToLcpPiPiPi_LcpToPKPi",
+        "Xib0ToXicpPiPiPi_XicpToPKPi",
     ],
     "isolation": [
         "BuToD0Pi_D0ToHH",
@@ -908,6 +859,44 @@ extra_config = {
         "BuToD0K_D0ToKsDDHH",
         "BuToD0Pi_D0ToHHHH",
         "BuToD0K_D0ToHHHH",
+        "BuToD0K_PartialD0ToKsDDHH",
+        "BuToD0K_PartialD0ToKsDDHHWS",
+        "BuToD0K_PartialD0ToKsLLHH",
+        "BuToD0K_PartialD0ToKsLLHHWS",
+        "BuToD0Pi_PartialD0ToKsDDHH",
+        "BuToD0Pi_PartialD0ToKsDDHHWS",
+        "BuToD0Pi_PartialD0ToKsLLHH",
+        "BuToD0Pi_PartialD0ToKsLLHHWS",
+        "BuToDst0K_Dst0ToD0Gamma_D0ToKsDDHH",
+        "BuToDst0K_Dst0ToD0Gamma_D0ToKsLLHH",
+        "BuToDst0K_Dst0ToD0Pi0Merged_D0ToKsDDHH",
+        "BuToDst0K_Dst0ToD0Pi0Merged_D0ToKsLLHH",
+        "BuToDst0K_Dst0ToD0Pi0Resolved_D0ToKsDDHH",
+        "BuToDst0K_Dst0ToD0Pi0Resolved_D0ToKsLLHH",
+        "BuToDst0Pi_Dst0ToD0Pi0Merged_D0ToKsDDHH",
+        "BuToDst0Pi_Dst0ToD0Pi0Merged_D0ToKsLLHH",
+        "BuToD0KsDDPi_D0ToHH",
+        "BuToD0KsDDPi_D0ToHHHH",
+        "BuToD0KsDDPi_D0ToHHHHWS",
+        "BuToD0KsDDPi_D0ToHHWS",
+        "BuToD0KsDDPi_D0ToKsDDHH",
+        "BuToD0KsDDPi_D0ToKsDDHHWS",
+        "BuToD0KsDDPi_D0ToKsLLHH",
+        "BuToD0KsDDPi_D0ToKsLLHHWS",
+        "BuToD0KsLLPi_D0ToHH",
+        "BuToD0KsLLPi_D0ToHHHH",
+        "BuToD0KsLLPi_D0ToHHHHWS",
+        "BuToD0KsLLPi_D0ToHHWS",
+        "BuToD0KsLLPi_D0ToKsDDHH",
+        "BuToD0KsLLPi_D0ToKsDDHHWS",
+        "BuToD0KsLLPi_D0ToKsLLHH",
+        "BuToD0KsLLPi_D0ToKsLLHHWS",
+        "BuToD0KPiPi_D0ToHHHH",
+        "BuToD0KPiPi_D0ToHHHHWS",
+        "BuToD0KPiPi_D0ToHHWS",
+        "BuToD0PiPiPi_D0ToHHHH",
+        "BuToD0PiPiPi_D0ToHHHHWS",
+        "BuToD0PiPiPi_D0ToHHWS",
     ],
 }
 
diff --git a/Hlt/Moore/tests/qmtest/test_lbexec_spruce_pp_2024_flagging_mc.qmt b/Hlt/Moore/tests/qmtest/test_lbexec_spruce_pp_2024_flagging_mc.qmt
index ca0672517af96b9731cdb6adf5008ffbf6d169e9..43fd6afd8851bf336cc8082797871afbe7a9a952 100644
--- a/Hlt/Moore/tests/qmtest/test_lbexec_spruce_pp_2024_flagging_mc.qmt
+++ b/Hlt/Moore/tests/qmtest/test_lbexec_spruce_pp_2024_flagging_mc.qmt
@@ -35,11 +35,11 @@ countErrorLines({"FATAL": 0, "ERROR": 0, "WARNING": 0},
 
 findReferenceBlock("""
 HLTControlFlowMgr                      INFO StateTree: CFNode   #executed  #passed
-LAZY_AND: moore                                                                                                   #=20      Sum=20          Eff=|( 100.0000 +- 0.00000 )%|
- NONLAZY_OR: lines                                                                                                #=20      Sum=20          Eff=|( 100.0000 +- 0.00000 )%|
-  NONLAZY_OR: hlt_decision                                                                                        #=20      Sum=20          Eff=|( 100.0000 +- 0.00000 )%|
-   LAZY_AND: SpruceB2CC_BsToJpsiKstarWideDecisionWithOutput                                                       #=20      Sum=0           Eff=|( 0.000000 +- 0.00000 )%|
-    LAZY_AND: SpruceB2CC_BsToJpsiKstarWide                                                                        #=20      Sum=0           Eff=|( 0.000000 +- 0.00000 )%|
+LAZY_AND: moore                                                                                                    #=20      Sum=20          Eff=|( 100.0000 +- 0.00000 )%|
+ NONLAZY_OR: lines                                                                                                 #=20      Sum=20          Eff=|( 100.0000 +- 0.00000 )%|
+  NONLAZY_OR: hlt_decision                                                                                         #=20      Sum=20          Eff=|( 100.0000 +- 0.00000 )%|
+   LAZY_AND: SpruceB2CC_BsToJpsiKstarWideDecisionWithOutput                                                        #=20      Sum=0           Eff=|( 0.000000 +- 0.00000 )%|
+    LAZY_AND: SpruceB2CC_BsToJpsiKstarWide                                                                         #=20      Sum=0           Eff=|( 0.000000 +- 0.00000 )%|
  """)
 
 
diff --git a/Hlt/Moore/tests/qmtest/test_lbexec_spruce_pp_2024_noflagging_mc.qmt b/Hlt/Moore/tests/qmtest/test_lbexec_spruce_pp_2024_noflagging_mc.qmt
index 190aa6bfe4dafe6153e94d50cd824da4019f5aac..938876a1d0a9e497b958aaae2a8eaa8f085779b3 100644
--- a/Hlt/Moore/tests/qmtest/test_lbexec_spruce_pp_2024_noflagging_mc.qmt
+++ b/Hlt/Moore/tests/qmtest/test_lbexec_spruce_pp_2024_noflagging_mc.qmt
@@ -29,11 +29,11 @@ Test that Spruce can run from LHCbDirac and that it produces the expected output
 
 findReferenceBlock("""
 HLTControlFlowMgr                      INFO StateTree: CFNode   #executed  #passed
-LAZY_AND: MC_spruce_control_node                                                                                   #=20      Sum=1           Eff=|( 5.000000 +- 4.87340 )%|
- VoidFilter/full_stream_filter                                                                                     #=20      Sum=10          Eff=|( 50.00000 +- 11.1803 )%|
- LAZY_AND: moore                                                                                                   #=10      Sum=1           Eff=|( 10.00000 +- 9.48683 )%|
-  NONLAZY_OR: lines                                                                                                #=10      Sum=1           Eff=|( 10.00000 +- 9.48683 )%|
-   NONLAZY_OR: hlt_decision                                                                                        #=10      Sum=1           Eff=|( 10.00000 +- 9.48683 )%|
+LAZY_AND: MC_spruce_control_node                                                                                    #=20      Sum=1           Eff=|( 5.000000 +- 4.87340 )%|
+ VoidFilter/full_stream_filter                                                                                      #=20      Sum=10          Eff=|( 50.00000 +- 11.1803 )%|
+ LAZY_AND: moore                                                                                                    #=10      Sum=1           Eff=|( 10.00000 +- 9.48683 )%|
+  NONLAZY_OR: lines                                                                                                 #=10      Sum=1           Eff=|( 10.00000 +- 9.48683 )%|
+   NONLAZY_OR: hlt_decision                                                                                         #=10      Sum=1           Eff=|( 10.00000 +- 9.48683 )%|
 """)
 
 from Moore.qmtest.exclusions import remove_known_warnings
diff --git a/Hlt/Moore/tests/qmtest/test_lbexec_spruce_pp_default_flagging_persistreco_mc.qmt b/Hlt/Moore/tests/qmtest/test_lbexec_spruce_pp_default_flagging_persistreco_mc.qmt
index a433bc5fafc29c6d03946f467416c85c731c2c80..0bc4ce1716a0f3a7dbec0d1d9e1f03e0a9fedf80 100644
--- a/Hlt/Moore/tests/qmtest/test_lbexec_spruce_pp_default_flagging_persistreco_mc.qmt
+++ b/Hlt/Moore/tests/qmtest/test_lbexec_spruce_pp_default_flagging_persistreco_mc.qmt
@@ -30,9 +30,9 @@
 <argument name="use_temp_dir"><enumeral>true</enumeral></argument>
 <argument name="validator"><text>
 
-findReferenceBlock("""   LAZY_AND: SpruceMCPassThroughPersistRecoDecisionWithOutput                                                     #=20      Sum=20          Eff=|( 100.0000 +- 0.00000 )%|
-    LAZY_AND: SpruceMCPassThroughPersistReco                                                                      #=20      Sum=20          Eff=|( 100.0000 +- 0.00000 )%|
-     DeterministicPrescaler/SpruceMCPassThroughPersistReco_Prescaler                                              #=20      Sum=20          Eff=|( 100.0000 +- 0.00000 )%|
+findReferenceBlock("""   LAZY_AND: SpruceMCPassThroughPersistRecoDecisionWithOutput                                                      #=20      Sum=20          Eff=|( 100.0000 +- 0.00000 )%|
+    LAZY_AND: SpruceMCPassThroughPersistReco                                                                       #=20      Sum=20          Eff=|( 100.0000 +- 0.00000 )%|
+     DeterministicPrescaler/SpruceMCPassThroughPersistReco_Prescaler                                               #=20      Sum=20          Eff=|( 100.0000 +- 0.00000 )%|
 """)
 
 from Moore.qmtest.exclusions import remove_known_warnings