diff --git a/DaVinciExamples/python/DaVinciExamples/tupling/example-tupling-AllFunctors.py b/DaVinciExamples/python/DaVinciExamples/tupling/example-tupling-AllFunctors.py
index bd10770e0bd6a2edbe42dcd097fda75a45754e7d..13a6ee771d8346ea5e7d3d55b9d3731003556df8 100644
--- a/DaVinciExamples/python/DaVinciExamples/tupling/example-tupling-AllFunctors.py
+++ b/DaVinciExamples/python/DaVinciExamples/tupling/example-tupling-AllFunctors.py
@@ -12,7 +12,7 @@
 Example of a DaVinci job filling all available functors. This is obviously a stress test and not realistic.
 
  This example is meant to be run with
-    $ ./run davinci run-mc --inputfiledb Spruce_all_lines_dst Phys/DaVinci/options/DaVinciDB-Example.yaml --joboptfile DaVinciTests/tests/options/option_davinci_sprucing.yaml --user_algorithms  DaVinciExamples/python/DaVinciExamples/tupling/example-tupling-AllFunctors:alg_config --evt_max 100 |& cat | tee log
+    $ ./run davinci run-mc --inputfiledb Spruce_all_lines_dst Phys/DaVinci/options/DaVinciDB-Example.yaml --joboptfile DaVinciExamples/python/DaVinciExamples/tupling/option_davinci_tupling_from_spruce.yaml --user_algorithms  DaVinciExamples/python/DaVinciExamples/tupling/example-tupling-AllFunctors:alg_config --evt_max 100 |& cat | tee log
 """
 __author__ = "P. Koppenburg"
 __date__ = "2021-11-23"
@@ -40,85 +40,121 @@ _composite = 'composite'
 def all_variables(pvs, DTFR, ptype):
     """
     function that returns dictonary of functors that work.
+
+    functors are listed in order of https://gitlab.cern.ch/lhcb/Rec/-/blob/master/Phys/FunctorCore/python/Functors/__init__.py
     """
     if ptype not in [_basic, _composite]:
         Exception("I want {0} or {1}. Got {2}".format(_basic, _composite,
                                                       ptype))
-    vars = {}
-
-    vars['P'] = F.P
-    vars['PT'] = F.PT
-    vars['PHI'] = F.PHI
-    vars['ETA'] = F.ETA
-    vars['PX'] = F.PX
-    vars['PY'] = F.PY
-    vars['PZ'] = F.PZ
-    vars['ENERGY'] = F.ENERGY
-    vars['FOURMOMENTUM'] = F.FOURMOMENTUM
+    all_vars = {}
+
+    all_vars['REFERENCEPOINT_X'] = F.REFERENCEPOINT_X
+    all_vars['REFERENCEPOINT_Y'] = F.REFERENCEPOINT_Y
+    all_vars['REFERENCEPOINT_Z'] = F.REFERENCEPOINT_Z
+    all_vars['TX'] = F.TX
+    all_vars['TY'] = F.TY
+    # all_vars['COV'] = F.COV # 'Track__Covariance' object has no attribute 'to_json'
+    all_vars['P'] = F.P
+    all_vars['FOURMOMENTUM'] = F.FOURMOMENTUM
+    all_vars['PX'] = F.PX
+    all_vars['PY'] = F.PY
+    all_vars['PZ'] = F.PZ
+    all_vars['ENERGY'] = F.ENERGY
+    all_vars['PT'] = F.PT
+    all_vars['PHI'] = F.PHI
+    all_vars['ETA'] = F.ETA
 
     if (_basic == ptype):
-        vars['MINIP'] = F.MINIP(pvs)  # crashes on composites
-        vars['MINIPCHI2'] = F.MINIPCHI2(pvs)  # crashes on composites
-
-    # if (_composite == ptype):
-    #    vars['CHILD'] = F.CHILD(1,F.PT)    # Needs ParticleCombination
-    #    vars['SUBCOMB'] = F.SUBCOMB
-    #    vars['MASSWITHHYPOTHESES'] = F.MASSWITHHYPOTHESES([939.,939.])  relies on numChildren. Not in LHCb::Particle
-    vars['MASS'] = F.MASS
+        all_vars['ISMUON'] = F.ISMUON
+
+    #    all_vars['NDOF'] = F.NDOF # no member named 'nDoF' in 'LHCb::Particle
+
+    #if (_basic == ptype):
+    #   all_vars['QOVERP'] = F.QOVERP # no member named 'qOverP' in 'LHCb::Particle'
+
+    all_vars['CHI2DOF'] = F.CHI2DOF  # should work on both
+    all_vars['CHI2'] = F.CHI2  # should work on both
+
+    if (_basic == ptype):
+        all_vars['GHOSTPROB'] = F.GHOSTPROB
+    #    all_vars['CLOSESTTOBEAM'] = F.CLOSESTTOBEAM # 'Track__ClosestToBeamState' object has no attribute 'to_json'
+    #    all_vars['NHITS'] = F.NHITS  # 'no member named 'nHits' in 'LHCb::Particle''
+    #    all_vars['NVPHITS'] = F.NVPHITS
+    #    all_vars['NUTHITS'] = F.NUTHITS
+    #    all_vars['NFTHITS'] = F.NFTHITS
+    #    all_vars['TRACKHISTORY'] = F.TRACKHISTORY
+
+    all_vars['MINIP'] = F.MINIP(pvs)  # crashes on composites @CHECK
+    all_vars['MINIPCHI2'] = F.MINIPCHI2(pvs)  # crashes on composites @CHECK
+
     if (_composite == ptype):
-        vars['END_VX'] = F.END_VX
-        vars['END_VY'] = F.END_VY
-        vars['END_VZ'] = F.END_VZ
-        vars['END_VRho'] = F.END_VRho
-        vars['Ds_END_VZ'] = F.CHILD(1, F.END_VZ)
-        vars['Delta_END_VZ_DsB0'] = F.CHILD(1, F.END_VZ) - F.END_VZ
-
-    #    vars['DOCA'] = F.DOCA(Child1=1,Child2=2)    # no member named 'doca' in 'LHCb::Particle' (?)
-    #    vars['DOCACHI2'] = F.DOCACHI2(Child1=1,Child2=2)  # same here
-    #    vars['ALV'] = F.ALV(Child1=1,Child2=2)  # wants cos_angle_prod
-    #    vars['MAXDOCA'] = F.MAXDOCA    # does not work
-    #    vars['MAXDOCACHI2'] = F.MAXDOCACHI2
-    vars['CHARGE'] = F.CHARGE
-    #    vars['SIZE'] = F.SIZE(DTFParts)  # doesn't work
-
-    vars['BPVIP'] = F.BPVIP(pvs)
-    vars['BPVIPCHI2'] = F.BPVIPCHI2(pvs)
+        all_vars['CHILD'] = F.CHILD(1, F.PT)  # Needs ParticleCombination
+#        all_vars['SUBCOMB'] = F.SUBCOMB(1,2,F.PT)
+#        all_vars['MASSWITHHYPOTHESES'] = F.MASSWITHHYPOTHESES([939.,939.]) # relies on numChildren. Not in LHCb::Particle
+    all_vars['MASS'] = F.MASS
+
+    if (_composite == ptype):
+        all_vars['END_VX'] = F.END_VX
+        all_vars['END_VY'] = F.END_VY
+        all_vars['END_VZ'] = F.END_VZ
+        all_vars['END_VRho'] = F.END_VRho
+        all_vars['Ds_END_VZ'] = F.CHILD(1, F.END_VZ)
+        all_vars['Delta_END_VZ_DsB0'] = F.CHILD(1, F.END_VZ) - F.END_VZ
+
+    # https://gitlab.cern.ch/lhcb/DaVinci/-/merge_requests/656
+    #    all_vars['SDOCA'] = F.SDOCA(Child1=1,Child2=2)    # no member named 'doca' in 'LHCb::Particle' (?)
+    #    all_vars['DOCA'] = F.DOCA(Child1=1,Child2=2)    # no member named 'doca' in 'LHCb::Particle' (?)
+    #    all_vars['DOCACHI2'] = F.DOCACHI2(Child1=1,Child2=2)  # same here
+    #    all_vars['MAXDOCA'] = F.MAXDOCA    # does not work
+    #    all_vars['MAXDOCACHI2'] = F.MAXDOCACHI2
+    #    all_vars['ALV'] = F.ALV(Child1=1,Child2=2)  # wants cos_angle_prod
+
+    all_vars['CHARGE'] = F.CHARGE
+
+    if (_basic == ptype):
+        all_vars['PID_MU'] = F.PID_MU
+        all_vars['PID_PI'] = F.PID_PI
+        all_vars['PID_K'] = F.PID_K
+        all_vars['PID_P'] = F.PID_P
+        all_vars['PID_E'] = F.PID_E
+        all_vars['PROBNN_D'] = F.PROBNN_D
+        all_vars['PROBNN_E'] = F.PROBNN_E
+        all_vars['PROBNN_GHOST'] = F.PROBNN_GHOST
+        all_vars['PROBNN_K'] = F.PROBNN_K
+        all_vars['PROBNN_MU'] = F.PROBNN_MU
+        all_vars['PROBNN_P'] = F.PROBNN_P
+        all_vars['PROBNN_PI'] = F.PROBNN_PI
+
+
+#    all_vars['SIZE'] = F.SIZE(DTFR) # no matching function for call to 'invoke'
+
     if (_composite == ptype):  # all these require a vertex
-        vars['BPVETA'] = F.BPVETA(pvs)
-        vars['BPVCORRM'] = F.BPVCORRM(pvs)
-        vars['BPVDIRA'] = F.BPVDIRA(pvs)
-        vars['BPVFDCHI2'] = F.BPVFDCHI2(pvs)
-        vars['BPVVDZ'] = F.BPVVDZ(pvs)
-        vars['BPVVDRHO'] = F.BPVVDRHO(pvs)
-        vars['BPVLTIME'] = F.BPVLTIME(pvs)
-        vars['BPVDLS'] = F.BPVDLS(pvs)
-    #    vars['RUNNUMBER'] = F.RUNNUMBER(ODINLocation)    # doesn't work.
-    #    vars['EVENTNUMBER'] = F.EVENTNUMBER('/Event/DAQ/RawBanks/ODIN')
-    #    vars['EVENTTYPE'] = F.EVENTTYPE('/Event/DAQ/RawBanks/ODIN')
-    #    vars['MVA'] = F.MVA    # needs an MVA
-    #    vars['COMB'] = F.COMB  # starts from combination
-    #    vars['POD'] = F.POD    # starts from combination
-
-    vars['DTF_PT'] = F.MAP_INPUT(Functor=F.PT, Relations=DTFR)
-    vars['DTF_BPVIPCHI2'] = F.MAP_INPUT(
+        all_vars['BPVETA'] = F.BPVETA(pvs)
+        all_vars['BPVCORRM'] = F.BPVCORRM(pvs)
+        all_vars['BPVDIRA'] = F.BPVDIRA(pvs)
+
+    all_vars['BPVIP'] = F.BPVIP(pvs)
+    all_vars['BPVIPCHI2'] = F.BPVIPCHI2(pvs)
+
+    if (_composite == ptype):  # all these require a vertex
+        all_vars['BPVFDCHI2'] = F.BPVFDCHI2(pvs)
+        all_vars['BPVVDZ'] = F.BPVVDZ(pvs)
+        all_vars['BPVVDRHO'] = F.BPVVDRHO(pvs)
+        all_vars['BPVLTIME'] = F.BPVLTIME(pvs)
+        all_vars['BPVDLS'] = F.BPVDLS(pvs)
+    #    all_vars['RUNNUMBER'] = F.RUNNUMBER(ODINLocation)    # doesn't work.
+    #    all_vars['EVENTNUMBER'] = F.EVENTNUMBER('/Event/DAQ/RawBanks/ODIN')
+    #    all_vars['EVENTTYPE'] = F.EVENTTYPE('/Event/DAQ/RawBanks/ODIN')
+    #    all_vars['MVA'] = F.MVA    # needs an MVA
+    #    all_vars['COMB'] = F.COMB  # starts from combination
+    #    all_vars['POD'] = F.POD    # starts from combination
+
+    all_vars['DTF_PT'] = F.MAP_INPUT(Functor=F.PT, Relations=DTFR)
+    all_vars['DTF_BPVIPCHI2'] = F.MAP_INPUT(
         Functor=F.BPVIPCHI2(pvs), Relations=DTFR)
 
-    if (_basic == ptype):
-        vars['PID_MU'] = F.PID_MU
-        vars['PID_PI'] = F.PID_PI
-        vars['PID_K'] = F.PID_K
-        vars['PID_P'] = F.PID_P
-        vars['PID_E'] = F.PID_E
-        vars['PROBNN_D'] = F.PROBNN_D
-        vars['PROBNN_E'] = F.PROBNN_E
-        vars['PROBNN_GHOST'] = F.PROBNN_GHOST
-        vars['PROBNN_K'] = F.PROBNN_K
-        vars['PROBNN_MU'] = F.PROBNN_MU
-        vars['PROBNN_P'] = F.PROBNN_P
-        vars['PROBNN_PI'] = F.PROBNN_PI
-
-    print("For {0} returning variables {1}".format(ptype, vars.keys()))
-    return vars
+    print("For {0} returning variables {1}".format(ptype, all_vars.keys()))
+    return all_vars
 
 
 def alg_config():
diff --git a/DaVinciExamples/tests/qmtest/tupling.qms/test_davinci_tupling_All.qmt b/DaVinciExamples/tests/qmtest/tupling.qms/test_davinci_tupling_All.qmt
index f8d5d6ead0ca16942d7996491a6e4d9a54790fa0..333d1b0b8a6fe4d5e84a67ac79b3a61e8b108c4f 100755
--- a/DaVinciExamples/tests/qmtest/tupling.qms/test_davinci_tupling_All.qmt
+++ b/DaVinciExamples/tests/qmtest/tupling.qms/test_davinci_tupling_All.qmt
@@ -40,70 +40,7 @@ findReferenceBlock("""B0DsK_Tuple                         SUCCESS Booked 1 N-Tup
 import sys, os, glob
 from ROOT import TFile
 
-B_vars_stored = ['B0_BPVCORRM'
-, 'B0_BPVDIRA'
-, 'B0_BPVDLS'
-, 'B0_BPVETA'
-, 'B0_BPVFDCHI2'
-, 'B0_BPVIPCHI2'
-, 'B0_BPVLTIME'
-, 'B0_BPVVDRHO'
-, 'B0_BPVVDZ'
-, 'B0_CHARGE'
-, 'B0_DTF_BPVIPCHI2'
-, 'B0_DTF_PT'
-, 'B0_ENERGY'
-, 'B0_ETA'
-, 'B0_FOURMOMENTUME'
-, 'B0_FOURMOMENTUMX'
-, 'B0_FOURMOMENTUMY'
-, 'B0_FOURMOMENTUMZ'
-, 'B0_MASS'
-, 'B0_P'
-, 'B0_PHI'
-, 'B0_PT'
-, 'B0_PX'
-, 'B0_PY'
-, 'B0_PZ'
-, 'B0_END_VRho'
-, 'B0_END_VX'
-, 'B0_END_VY'
-, 'B0_END_VZ'
-, 'B0_Ds_END_VZ'
-, 'B0_Delta_END_VZ_DsB0'
-, 'B0_BPVIP'
-, 'Kaon_BPVIP'
-, 'Kaon_BPVIPCHI2'
-, 'Kaon_CHARGE'
-, 'Kaon_DTF_BPVIPCHI2'
-, 'Kaon_DTF_PT'
-, 'Kaon_ENERGY'
-, 'Kaon_ETA'
-, 'Kaon_FOURMOMENTUME'
-, 'Kaon_FOURMOMENTUMX'
-, 'Kaon_FOURMOMENTUMY'
-, 'Kaon_FOURMOMENTUMZ'
-, 'Kaon_MASS'
-, 'Kaon_MINIP'
-, 'Kaon_MINIPCHI2'
-, 'Kaon_P'
-, 'Kaon_PHI'
-, 'Kaon_PID_E'
-, 'Kaon_PID_K'
-, 'Kaon_PID_MU'
-, 'Kaon_PID_P'
-, 'Kaon_PID_PI'
-, 'Kaon_PROBNN_D'
-, 'Kaon_PROBNN_E'
-, 'Kaon_PROBNN_GHOST'
-, 'Kaon_PROBNN_K'
-, 'Kaon_PROBNN_MU'
-, 'Kaon_PROBNN_P'
-, 'Kaon_PROBNN_PI'
-, 'Kaon_PT'
-, 'Kaon_PX'
-, 'Kaon_PY'
-, 'Kaon_PZ']
+B_vars_stored = [ 'B0_BPVCORRM', 'B0_BPVDIRA', 'B0_BPVDLS', 'B0_BPVETA', 'B0_BPVFDCHI2', 'B0_BPVIP', 'B0_BPVIPCHI2', 'B0_BPVLTIME', 'B0_BPVVDRHO', 'B0_BPVVDZ', 'B0_CHARGE', 'B0_CHI2', 'B0_CHI2DOF', 'B0_CHILD', 'B0_DTF_BPVIPCHI2', 'B0_DTF_PT', 'B0_Delta_END_VZ_DsB0', 'B0_Ds_END_VZ', 'B0_END_VRho', 'B0_END_VX', 'B0_END_VY', 'B0_END_VZ', 'B0_ENERGY', 'B0_ETA', 'B0_FOURMOMENTUME', 'B0_FOURMOMENTUMX', 'B0_FOURMOMENTUMY', 'B0_FOURMOMENTUMZ', 'B0_MASS', 'B0_MINIP', 'B0_MINIPCHI2', 'B0_P', 'B0_PHI', 'B0_PT', 'B0_PX', 'B0_PY', 'B0_PZ', 'B0_REFERENCEPOINT_X', 'B0_REFERENCEPOINT_Y', 'B0_REFERENCEPOINT_Z', 'B0_TX', 'B0_TY', 'Kaon_BPVIP', 'Kaon_BPVIPCHI2', 'Kaon_CHARGE', 'Kaon_ISMUON', 'Kaon_CHI2', 'Kaon_CHI2DOF', 'Kaon_DTF_BPVIPCHI2', 'Kaon_DTF_PT', 'Kaon_ENERGY', 'Kaon_ETA', 'Kaon_FOURMOMENTUME', 'Kaon_FOURMOMENTUMX', 'Kaon_FOURMOMENTUMY', 'Kaon_FOURMOMENTUMZ', 'Kaon_GHOSTPROB', 'Kaon_MASS', 'Kaon_MINIP', 'Kaon_MINIPCHI2', 'Kaon_P', 'Kaon_PHI', 'Kaon_PID_E', 'Kaon_PID_K', 'Kaon_PID_MU', 'Kaon_PID_P', 'Kaon_PID_PI', 'Kaon_PROBNN_D', 'Kaon_PROBNN_E', 'Kaon_PROBNN_GHOST', 'Kaon_PROBNN_K', 'Kaon_PROBNN_MU', 'Kaon_PROBNN_P', 'Kaon_PROBNN_PI', 'Kaon_PT', 'Kaon_PX', 'Kaon_PY', 'Kaon_PZ', 'Kaon_REFERENCEPOINT_X', 'Kaon_REFERENCEPOINT_Y', 'Kaon_REFERENCEPOINT_Z', 'Kaon_TX', 'Kaon_TY']
 
 #sort the expected vars
 B_vars_stored = sorted(B_vars_stored)
diff --git a/DaVinciTests/tests/options/Upgrade/DaVinci-Options.yaml b/DaVinciTests/tests/options/Upgrade/DaVinci-Options.yaml
index bed9d600d315a2cbb8b4223c44ad9253514d7f10..e121906a3576648553a2f9b1b49037037c22a823 100644
--- a/DaVinciTests/tests/options/Upgrade/DaVinci-Options.yaml
+++ b/DaVinciTests/tests/options/Upgrade/DaVinci-Options.yaml
@@ -12,4 +12,5 @@ ntuple_file: 'DV-Ntuple.root'
 histo_file: 'DV-Histos.root'
 lumi: False
 enable_unpack: False
-process: 'Turbo'
\ No newline at end of file
+process: 'Turbo'
+evt_max: 10