diff --git a/Phys/StrippingSelections/python/StrippingSelections/StrippingB2CC/StrippingB2JpsiX0.py b/Phys/StrippingSelections/python/StrippingSelections/StrippingB2CC/StrippingB2JpsiX0.py
new file mode 100644
index 0000000000000000000000000000000000000000..85753f50013a5cea69171f3b7cdaf35deade921b
--- /dev/null
+++ b/Phys/StrippingSelections/python/StrippingSelections/StrippingB2CC/StrippingB2JpsiX0.py
@@ -0,0 +1,409 @@
+###############################################################################
+# (c) Copyright 2000-2019 CERN for the benefit of the LHCb Collaboration      #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+'''
+Set of lines for beta and beta_s
+B0 -> Jpsi pi0
+Bs -> Jpsi eta/etap with different final states
+B+ -> Jpsi K*[Kpi0] for calibration
+'''
+
+__author__ = ['Max Chefdeville']
+__date__ = '22/01/2018'
+
+__all__ = ('B2JpsiX0Conf','default_config')
+
+from Gaudi.Configuration import *
+from GaudiConfUtils.ConfigurableGenerators import FilterDesktop, CombineParticles
+from CommonParticles.Utils import updateDoD
+from StandardParticles import StdLoosePions
+from StandardParticles import StdLooseKaons
+from StandardParticles import StdLooseProtons
+from StandardParticles import StdAllLooseKaons
+from StandardParticles import StdAllLooseProtons
+from PhysSelPython.Wrappers import Selection, DataOnDemand, MergedSelection
+from StrippingConf.StrippingLine import StrippingLine
+from StrippingUtils.Utils import LineBuilder
+from GaudiKernel.SystemOfUnits import MeV
+
+default_config = {
+    'NAME'              : 'B2JpsiX0',
+    'WGs'               : ['B2CC'],
+    'BUILDERTYPE'       : 'B2JpsiX0Conf',
+    'CONFIG'            : {
+    'JpsiMassWindow'         : 80,
+    'LTimeCut'               : 0.2,
+
+    'DIRACut'                : 0.9995,
+    'IPCut'                  : 0.2,
+    'IPCHI2Cut'              : 20,
+    'VCHI2PDOFCut'           : 10,
+
+    'PrescaleB02JpsiPi0R'    : 1,
+    'PrescaleB02JpsiPi0M'    : 1,
+
+    'PrescaleBu2JpsiKstR'    : 1,
+    'PrescaleBu2JpsiKstM'    : 1,
+
+    'PrescaleBu2JpsiK'       : 0.1,
+
+    'PrescaleBs2JpsiEtaR'            : 1,
+    'PrescaleBs2JpsiEta2PiPiGamma'   : 1,
+    'PrescaleBs2JpsiEta2PiPiPi0R'    : 1,
+    'PrescaleBs2JpsiEta2PiPiPi0M'    : 1,
+
+    'PrescaleBs2JpsiEtap2RhoGamma'   : 1,
+    'PrescaleBs2JpsiEtap2EtaPiPi'    : 1,
+    
+    'B02JpsiPi0RMVACut'      : "-0.56",
+    'B02JpsiPi0RXmlFile'     :  "$TMVAWEIGHTSROOT/data/B2JpsiX0/B02JpsiPi0R_fisher_run2_v1r1.xml",
+
+    'Bu2JpsiKstRMVACut'      : "-1.19",
+    'Bu2JpsiKstRXmlFile'     :  "$TMVAWEIGHTSROOT/data/B2JpsiX0/Bu2JpsiKstR_fisher_run2_v1r1.xml",
+
+    'Bs2JpsiEtaRMVACut'      : "-0.73",
+    'Bs2JpsiEtaRXmlFile'     :  "$TMVAWEIGHTSROOT/data/B2JpsiX0/Bs2JpsiEtaR_fisher_run2_v1r1.xml",
+    },
+    'STREAMS'           : ['Dimuon']
+    }
+
+ ### Lines stored in this file:
+
+class B2JpsiX0Conf(LineBuilder) :
+
+    __configuration_keys__ = default_config['CONFIG'].keys()
+
+    def __init__(self, name, config) :
+
+        LineBuilder.__init__(self, name, config)
+        self.name = name
+        self.config = config
+        
+        self.WideJpsiList = DataOnDemand(Location = "Phys/StdMassConstrainedJpsi2MuMu/Particles")
+        self.DetachedJpsiList = self.createSubSel( OutputList = 'DetachedJpsi' + self.name,
+                                                   InputList  = self.WideJpsiList,
+                                                   Cuts       = "(PFUNA(ADAMASS('J/psi(1S)')) < %(JpsiMassWindow)s * MeV) & (BPVLTIME() > %(LTimeCut)s *ps)" %self.config)
+        
+        self.GammaList = DataOnDemand(Location = "Phys/StdLooseAllPhotons/Particles")
+        self.Pi0RList = DataOnDemand(Location = "Phys/StdLooseResolvedPi0/Particles")
+        self.Pi0MList = DataOnDemand(Location = "Phys/StdLooseMergedPi0/Particles")
+        self.EtaRList = DataOnDemand(Location = "Phys/StdLooseEta2gg/Particles")
+        self.PionList = DataOnDemand(Location = "Phys/StdLoosePions/Particles")
+        self.KaonList = DataOnDemand(Location = "Phys/StdLooseKaons/Particles")
+
+        #-------------
+
+        B02JpsiPi0R = self.createCombinationSel( OutputList      = "B02JpsiPi0R" + self.name,
+                                                 DecayDescriptor = "B0 -> J/psi(1S) pi0",
+                                                 DaughterLists   = [ self.DetachedJpsiList, self.Pi0RList],
+                                                 DaughterCuts    = {"pi0" : "(CHILD(CL,1) > 0.05) & (CHILD(CL,2) > 0.05) & (PT>1500*MeV)"},
+                                                 PreVertexCuts   = "in_range(4500,AM,6500)",
+                                                 PostVertexCuts  = "(BPVDIRA > %(DIRACut)s) & (BPVIP() < %(IPCut)s) & (BPVIPCHI2() < %(IPCHI2Cut)s) & (VFASPF(VCHI2PDOF) < %(VCHI2PDOFCut)s )" % self.config )
+
+        self.B02JpsiPi0RVars = {"log(B0_pi0_PT)"                  : "log(CHILD(PT,2))",
+                                "log(B0_Jpsi_PT)"                 : "log(CHILD(PT,1))",
+                                "log(1-fabs(B0_Jpsi_DIRA_OWNPV))" : "log(1-abs(CHILD(BPVDIRA,1)))",
+                                "log(B0_Jpsi_IP_OWNPV)"           : "log(CHILD(BPVIP(),1))",
+                                "log(1-fabs(B0_DIRA_OWNPV))"      : "log(1-abs(BPVDIRA))",
+                                "log(B0_IP_OWNPV)"                : "log(BPVIP())",
+                                "log(B0_ENDVERTEX_CHI2)"          : "log(VFASPF(VCHI2))"}
+
+        self.MvaB02JpsiPi0R = self.applyMVA(self.name + "MvaB02JpsiPi0R",
+                                            SelB = B02JpsiPi0R,
+                                            MVAVars = self.B02JpsiPi0RVars,
+                                            MVACutValue = config['B02JpsiPi0RMVACut'],
+                                            MVAxmlFile  = config['B02JpsiPi0RXmlFile'])
+        
+        B02JpsiPi0RLine  = StrippingLine( self.name + "B02JpsiPi0RLine",
+                                          prescale  = config['PrescaleB02JpsiPi0R'],
+                                          algos = [ self.MvaB02JpsiPi0R ],
+                                          RequiredRawEvents = ["Calo"])
+        
+        self.registerLine(B02JpsiPi0RLine)
+
+        #-------------
+
+        B02JpsiPi0M = self.createCombinationSel( OutputList      = "B02JpsiPi0M" + self.name,
+                                                 DecayDescriptor = "B0 -> J/psi(1S) pi0",
+                                                 DaughterLists   = [ self.DetachedJpsiList, self.Pi0MList],
+                                                 PreVertexCuts   = "in_range(4500,AM,6500)",
+                                                 PostVertexCuts  = "(BPVDIRA > %(DIRACut)s) & (BPVIP() < %(IPCut)s) & (BPVIPCHI2() < %(IPCHI2Cut)s) & (VFASPF(VCHI2PDOF) < %(VCHI2PDOFCut)s )" % self.config )
+
+        B02JpsiPi0MLine  = StrippingLine( self.name + "B02JpsiPi0MLine",
+                                          prescale  = config['PrescaleB02JpsiPi0M'],
+                                          algos = [ B02JpsiPi0M ],
+                                          RequiredRawEvents = ["Calo"])                                          
+
+        self.registerLine(B02JpsiPi0MLine)
+
+        #-------------
+        
+        self.Kst2KPi0R = self.createCombinationSel( OutputList      = "Kst2KPi0R" + self.name,
+                                                    DecayDescriptor = "[K*(892)+ -> K+ pi0]cc",
+                                                    DaughterLists   = [ self.KaonList, self.Pi0RList],
+                                                    DaughterCuts    = {"pi0" : "(CHILD(CL,1)>0.05) & (CHILD(CL,2)>0.05) & (PT>800*MeV)" , "K+" : "(PROBNNk>0.1)" },
+                                                    PreVertexCuts   = "(ADAMASS('K*(892)+')< 150*MeV)",
+                                                    PostVertexCuts  = "ALL" )
+
+        Bu2JpsiKstR = self.createCombinationSel( OutputList      = "Bu2JpsiKstR" + self.name,
+                                                 DecayDescriptor = "[B+ -> J/psi(1S) K*(892)+]cc",
+                                                 DaughterLists   = [ self.DetachedJpsiList, self.Kst2KPi0R],
+                                                 PreVertexCuts   = "in_range(4500,AM,6500)",
+                                                 PostVertexCuts  = "(BPVDIRA > %(DIRACut)s) & (BPVIP() < %(IPCut)s) & (BPVIPCHI2() < %(IPCHI2Cut)s) & (VFASPF(VCHI2PDOF) < %(VCHI2PDOFCut)s )" % self.config )
+
+        self.Bu2JpsiKstRVars = {"log(Bplus_pi0_PT)"                  : "log(CHILD(CHILD(PT,2),2))",
+                                "log(Bplus_Kst_PT)"                  : "log(CHILD(PT,2))",
+                                "log(Bplus_Jpsi_PT)"                 : "log(CHILD(PT,1))",
+                                "log(1-fabs(Bplus_Jpsi_DIRA_OWNPV))" : "log(1-abs(CHILD(BPVDIRA,1)))",
+                                "log(Bplus_Jpsi_IP_OWNPV)"           : "log(CHILD(BPVIP(),1))",
+                                "log(Bplus_Jpsi_ENDVERTEX_CHI2)"     : "log(CHILD(VFASPF(VCHI2),1))",
+                                "log(1-fabs(Bplus_DIRA_OWNPV))"      : "log(1-abs(BPVDIRA))",
+                                "log(Bplus_IP_OWNPV)"                : "log(BPVIP())",
+                                "log(Bplus_ENDVERTEX_CHI2)"          : "log(VFASPF(VCHI2))"}
+
+        self.MvaBu2JpsiKstR = self.applyMVA(self.name + "MvaBu2JpsiKstR",
+                                            SelB = Bu2JpsiKstR,
+                                            MVAVars = self.Bu2JpsiKstRVars,
+                                            MVACutValue = config['Bu2JpsiKstRMVACut'],
+                                            MVAxmlFile  = config['Bu2JpsiKstRXmlFile'])
+        
+        Bu2JpsiKstRLine  = StrippingLine(self.name + "Bu2JpsiKstRLine",
+                                         prescale  = config['PrescaleBu2JpsiKstR'],
+                                         algos = [ self.MvaBu2JpsiKstR ],
+                                         RequiredRawEvents = ["Calo"])
+        
+        self.registerLine(Bu2JpsiKstRLine)
+
+        #-------------
+
+        self.Kst2KPi0M = self.createCombinationSel( OutputList      = "Kst2KPi0M" + self.name,
+                                                    DecayDescriptor = "[K*(892)+ -> K+ pi0]cc",
+                                                    DaughterLists   = [ self.KaonList, self.Pi0MList],
+                                                    DaughterCuts    = {"K+" : "(PROBNNk>0.1)" },
+                                                    PreVertexCuts   = "(ADAMASS('K*(892)+')< 150*MeV)",
+                                                    PostVertexCuts  = "ALL" )
+
+        Bu2JpsiKstM = self.createCombinationSel( OutputList      = "Bu2JpsiKstM" + self.name,
+                                                 DecayDescriptor = "[B+ -> J/psi(1S) K*(892)+]cc",
+                                                 DaughterLists   = [ self.DetachedJpsiList, self.Kst2KPi0M],
+                                                 PreVertexCuts   = "in_range(4500,AM,6500)",
+                                                 PostVertexCuts  = "(BPVDIRA > %(DIRACut)s) & (BPVIP() < %(IPCut)s) & (BPVIPCHI2() < %(IPCHI2Cut)s) & (VFASPF(VCHI2PDOF) < %(VCHI2PDOFCut)s )" % self.config )
+
+        Bu2JpsiKstMLine  = StrippingLine( self.name + "Bu2JpsiKstMLine",
+                                          prescale  = config['PrescaleBu2JpsiKstM'],
+                                          algos = [ Bu2JpsiKstM ],
+                                          RequiredRawEvents = ["Calo"])
+
+        self.registerLine(Bu2JpsiKstMLine)
+
+        #-------------
+
+        Bu2JpsiK = self.createCombinationSel( OutputList      = "Bu2JpsiK" + self.name,
+                                              DecayDescriptor = "[B+ -> J/psi(1S) K+]cc",
+                                              DaughterLists   = [ self.DetachedJpsiList, self.KaonList],
+                                              PreVertexCuts   = "in_range(5100,AM,5500)",
+                                              PostVertexCuts  = "(BPVDIRA > %(DIRACut)s) & (BPVIP() < %(IPCut)s) & (BPVIPCHI2() < %(IPCHI2Cut)s) & (VFASPF(VCHI2PDOF) < %(VCHI2PDOFCut)s )" % self.config )
+
+        Bu2JpsiKLine  = StrippingLine( self.name + "Bu2JpsiKLine",
+                                       prescale  = config['PrescaleBu2JpsiK'],
+                                       algos = [ Bu2JpsiK ])
+
+        self.registerLine(Bu2JpsiKLine)
+
+        #-------------
+
+        Bs2JpsiEtaR = self.createCombinationSel( OutputList      = "Bs2JpsiEtaR" + self.name,
+                                                 DecayDescriptor = "B_s0 -> J/psi(1S) eta",
+                                                 DaughterLists   = [ self.DetachedJpsiList, self.EtaRList],
+                                                 DaughterCuts    = {"eta" : "(CHILD(CL,1) > 0.05) & (CHILD(CL,2) > 0.05) & (PT>1500*MeV) & in_range(475,M,625)"},
+                                                 PreVertexCuts   = "in_range(4500,AM,6500)",
+                                                 PostVertexCuts  = "(BPVDIRA > %(DIRACut)s) & (BPVIP() < %(IPCut)s) & (BPVIPCHI2() < %(IPCHI2Cut)s) & (VFASPF(VCHI2PDOF) < %(VCHI2PDOFCut)s )" % self.config )
+
+        self.Bs2JpsiEtaRVars = {"log(Bs_eta_PT)"                  : "log(CHILD(PT,2))",
+                                "log(Bs_Jpsi_PT)"                 : "log(CHILD(PT,1))",
+                                "log(1-fabs(Bs_Jpsi_DIRA_OWNPV))" : "log(1-abs(CHILD(BPVDIRA,1)))",
+                                "log(Bs_Jpsi_IP_OWNPV)"           : "log(CHILD(BPVIP(),1))",
+                                "log(1-fabs(Bs_DIRA_OWNPV))"      : "log(1-abs(BPVDIRA))",
+                                "log(Bs_IP_OWNPV)"                : "log(BPVIP())",
+                                "log(Bs_ENDVERTEX_CHI2)"          : "log(VFASPF(VCHI2))"}
+        
+        self.MvaBs2JpsiEtaR = self.applyMVA(self.name + "MvaBs2JpsiEtaR",
+                                            SelB = Bs2JpsiEtaR,
+                                            MVAVars = self.Bs2JpsiEtaRVars,
+                                            MVACutValue = config['Bs2JpsiEtaRMVACut'],
+                                            MVAxmlFile  = config['Bs2JpsiEtaRXmlFile'])
+        
+        Bs2JpsiEtaRLine  = StrippingLine( self.name + "Bs2JpsiEtaRLine",
+                                          prescale  = config['PrescaleBs2JpsiEtaR'],
+                                          algos = [ self.MvaBs2JpsiEtaR ],
+                                          RequiredRawEvents = ["Calo"])
+
+        self.registerLine(Bs2JpsiEtaRLine)
+
+        #-------------
+
+        self.Eta2PiPiPi0R = self.createCombinationSel( OutputList      = "Eta2PiPiPi0R" + self.name,
+                                                       DecayDescriptor = "eta -> pi+ pi- pi0",
+                                                       DaughterLists   = [ self.PionList, self.Pi0RList],
+                                                       DaughterCuts    = {"pi0" : "(CHILD(CL,1)>0.05) & (CHILD(CL,2)>0.05)" },
+                                                       PreVertexCuts   = "(ADAMASS('eta')<100*MeV) & (APT>1500*MeV)",
+                                                       PostVertexCuts  = "(BPVVDZ>0) & (VFASPF(VCHI2)<9) & (BPVDIRA>0.95) & (BPVVDCHI2>25)")
+
+        Bs2JpsiEta2PiPiPi0R = self.createCombinationSel( OutputList      = "Bs2JpsiEta2PiPiPi0R" + self.name,
+                                                         DecayDescriptor = "B_s0 -> J/psi(1S) eta",
+                                                         DaughterLists   = [ self.DetachedJpsiList, self.Eta2PiPiPi0R],
+                                                         PreVertexCuts   = "in_range(4500,AM,6500)",
+                                                         PostVertexCuts  = "(BPVDIRA > %(DIRACut)s) & (BPVIP() < %(IPCut)s) & (BPVIPCHI2() < %(IPCHI2Cut)s) & (VFASPF(VCHI2PDOF) < %(VCHI2PDOFCut)s )" % self.config )
+
+        Bs2JpsiEta2PiPiPi0RLine  = StrippingLine( self.name + "Bs2JpsiEta2PiPiPi0RLine",
+                                                  prescale  = config['PrescaleBs2JpsiEta2PiPiPi0R'],
+                                                  algos = [ Bs2JpsiEta2PiPiPi0R ],
+                                                  RequiredRawEvents = ["Calo"])
+
+        self.registerLine(Bs2JpsiEta2PiPiPi0RLine)
+
+        #-------------
+
+        self.Eta2PiPiPi0M = self.createCombinationSel( OutputList      = "Eta2PiPiPi0M" + self.name,
+                                                       DecayDescriptor = "eta -> pi+ pi- pi0",
+                                                       DaughterLists   = [ self.PionList, self.Pi0MList],
+                                                       PreVertexCuts   = "(ADAMASS('eta')<100*MeV) & (APT>1500*MeV)",
+                                                       PostVertexCuts  = "(BPVVDZ>0) & (VFASPF(VCHI2)<9) & (BPVDIRA>0.95) & (BPVVDCHI2>25)" )
+
+        Bs2JpsiEta2PiPiPi0M = self.createCombinationSel( OutputList      = "Bs2JpsiEta2PiPiPi0M" + self.name,
+                                                         DecayDescriptor = "B_s0 -> J/psi(1S) eta",
+                                                         DaughterLists   = [ self.DetachedJpsiList, self.Eta2PiPiPi0M],
+                                                         PreVertexCuts   = "in_range(4500,AM,6500)",
+                                                         PostVertexCuts  = "(BPVDIRA > %(DIRACut)s) & (BPVIP() < %(IPCut)s) & (BPVIPCHI2() < %(IPCHI2Cut)s) & (VFASPF(VCHI2PDOF) < %(VCHI2PDOFCut)s )" % self.config )
+
+        Bs2JpsiEta2PiPiPi0MLine  = StrippingLine( self.name + "Bs2JpsiEta2PiPiPi0MLine",
+                                                  prescale  = config['PrescaleBs2JpsiEta2PiPiPi0M'],
+                                                  algos = [ Bs2JpsiEta2PiPiPi0M ],
+                                                  RequiredRawEvents = ["Calo"])
+
+        self.registerLine(Bs2JpsiEta2PiPiPi0MLine)
+
+        #-------------
+
+        self.Eta2PiPiGamma = self.createCombinationSel( OutputList      = "Eta2PiPiGamma" + self.name,
+                                                        DecayDescriptor = "eta -> pi+ pi- gamma",
+                                                        DaughterLists   = [ self.PionList, self.GammaList],
+                                                        DaughterCuts    = {"gamma" : "(CL>0.05)" },
+                                                        PreVertexCuts   = "(AM<650*MeV) & (ADAMASS('eta')<150*MeV) & (APT>1500*MeV)",
+                                                        PostVertexCuts  = "(BPVVDZ>0) & (VFASPF(VCHI2)<9) & (BPVDIRA>0.95) & (BPVVDCHI2>25)" )
+
+        Bs2JpsiEta2PiPiGamma = self.createCombinationSel( OutputList      = "Bs2JpsiEta2PiPiGamma" + self.name,
+                                                          DecayDescriptor = "B_s0 -> J/psi(1S) eta",
+                                                          DaughterLists   = [ self.DetachedJpsiList, self.Eta2PiPiGamma],
+                                                          PreVertexCuts   = "in_range(4500,AM,6500)",
+                                                          PostVertexCuts  = "(BPVDIRA > %(DIRACut)s) & (BPVIP() < %(IPCut)s) & (BPVIPCHI2() < %(IPCHI2Cut)s) & (VFASPF(VCHI2PDOF) < %(VCHI2PDOFCut)s )" % self.config )
+
+        Bs2JpsiEta2PiPiGammaLine  = StrippingLine( self.name + "Bs2JpsiEta2PiPiGammaLine",
+                                                   prescale  = config['PrescaleBs2JpsiEta2PiPiGamma'],
+                                                   algos = [ Bs2JpsiEta2PiPiGamma ],
+                                                   RequiredRawEvents = ["Calo"])
+
+        self.registerLine(Bs2JpsiEta2PiPiGammaLine)
+
+        #-------------
+
+        self.Rho2PiPi = self.createCombinationSel( OutputList      = "Rho2PiPi" + self.name,
+                                                   DecayDescriptor = "rho(770)0 -> pi+ pi-",
+                                                   DaughterLists   = [ self.PionList ],
+                                                   PreVertexCuts   = "(AM>600*MeV) & (AM<900*MeV) & (ADOCACHI2CUT(15, ''))",
+                                                   PostVertexCuts  = "(BPVVDZ>0) & (VFASPF(VCHI2)<9) & (BPVDIRA>0.95) & (BPVVDCHI2>25)")
+
+        self.Etap2RhoGamma = self.createCombinationSel( OutputList      = "Etap2RhoGamma" + self.name,
+                                                        DecayDescriptor = "eta_prime -> rho(770)0 gamma",
+                                                        DaughterLists   = [ self.Rho2PiPi, self.GammaList],
+                                                        DaughterCuts    = {"gamma" : "(CL>0.05)" },
+                                                        PreVertexCuts   = "(ADAMASS('eta_prime')<100*MeV) & (APT>1500*MeV)",
+                                                        PostVertexCuts  = "ALL" )
+
+        Bs2JpsiEtap2RhoGamma = self.createCombinationSel( OutputList      = "Bs2JpsiEtap2RhoGamma" + self.name,
+                                                          DecayDescriptor = "B_s0 -> J/psi(1S) eta_prime",
+                                                          DaughterLists   = [ self.DetachedJpsiList, self.Etap2RhoGamma],
+                                                          PreVertexCuts   = "in_range(4500,AM,6500)",
+                                                          PostVertexCuts  = "(BPVDIRA > %(DIRACut)s) & (BPVIP() < %(IPCut)s) & (BPVIPCHI2() < %(IPCHI2Cut)s) & (VFASPF(VCHI2PDOF) < %(VCHI2PDOFCut)s )" % self.config )
+
+        Bs2JpsiEtap2RhoGammaLine  = StrippingLine( self.name + "Bs2JpsiEtap2RhoGammaLine",
+                                                   prescale  = config['PrescaleBs2JpsiEtap2RhoGamma'],
+                                                   algos = [ Bs2JpsiEtap2RhoGamma ],
+                                                   RequiredRawEvents = ["Calo"])
+
+        self.registerLine(Bs2JpsiEtap2RhoGammaLine)
+
+        #-------------
+
+        self.Etap2EtaPiPi = self.createCombinationSel( OutputList      = "Etap2EtaPiPi" + self.name,
+                                                       DecayDescriptor = "eta_prime -> pi+ pi- eta",
+                                                       DaughterLists   = [ self.PionList, self.EtaRList],
+                                                       DaughterCuts    = { "eta" : "(CHILD(CL,1)>0.05) & (CHILD(CL,2)>0.05) & (PT>1000*MeV)" },
+                                                       PreVertexCuts   = "(ADAMASS('eta_prime')<100*MeV) & (APT>1500*MeV)",
+                                                       PostVertexCuts  = "(BPVVDZ>0) & (VFASPF(VCHI2)<9) & (BPVDIRA>0.95) & (BPVVDCHI2>25)" )
+        
+        Bs2JpsiEtap2EtaPiPi = self.createCombinationSel( OutputList      = "Bs2JpsiEtap2EtaPiPi" + self.name,
+                                                         DecayDescriptor = "B_s0 -> J/psi(1S) eta_prime",
+                                                         DaughterLists   = [ self.DetachedJpsiList, self.Etap2EtaPiPi],
+                                                         PreVertexCuts   = "in_range(4500,AM,6500)",
+                                                         PostVertexCuts  = "(BPVDIRA > %(DIRACut)s) & (BPVIP() < %(IPCut)s) & (BPVIPCHI2() < %(IPCHI2Cut)s) & (VFASPF(VCHI2PDOF) < %(VCHI2PDOFCut)s )" % self.config )
+
+        Bs2JpsiEtap2EtaPiPiLine  = StrippingLine( self.name + "Bs2JpsiEtap2EtaPiPiLine",
+                                                  prescale  = config['PrescaleBs2JpsiEtap2EtaPiPi'],
+                                                  algos = [ Bs2JpsiEtap2EtaPiPi ],
+                                                  RequiredRawEvents = ["Calo"])
+
+        self.registerLine(Bs2JpsiEtap2EtaPiPiLine)
+
+        #-------------
+
+    def createSubSel( self, OutputList, InputList, Cuts ) :
+        '''create a selection using a FilterDesktop'''
+        filter = FilterDesktop(Code = Cuts)
+        return Selection( OutputList,
+                          Algorithm = filter,
+                          RequiredSelections = [ InputList ] )
+
+    def createCombinationSel( self, OutputList,
+                              DecayDescriptor,
+                              DaughterLists,
+                              DaughterCuts = {} ,
+                              PreVertexCuts = "ALL",
+                              PostVertexCuts = "ALL",
+                              ReFitPVs = True ) :
+        '''create a selection using a ParticleCombiner with a single decay descriptor'''
+        combiner = CombineParticles( DecayDescriptor = DecayDescriptor,
+                                     DaughtersCuts = DaughterCuts,
+                                     MotherCut = PostVertexCuts,
+                                     CombinationCut = PreVertexCuts,
+                                     ReFitPVs = ReFitPVs)
+        return Selection ( OutputList,
+                           Algorithm = combiner,
+                           RequiredSelections = DaughterLists)
+        
+    def applyMVA( self, name, 
+                  SelB,
+                  MVAVars,
+                  MVAxmlFile,
+                  MVACutValue
+                  ):
+        from MVADictHelpers import addTMVAclassifierValue
+        from Configurables import FilterDesktop as MVAFilterDesktop
+
+        _FilterB = MVAFilterDesktop( name + "Filter",
+                                     Code = "VALUE('LoKi::Hybrid::DictValue/" + name + "')>" + MVACutValue  )
+        
+        addTMVAclassifierValue( Component = _FilterB,
+                                XMLFile   = MVAxmlFile,
+                                Variables = MVAVars,
+                                ToolName  = name )
+        return Selection( name,
+                          Algorithm =  _FilterB,
+                          RequiredSelections = [ SelB ] )