diff --git a/DDG4/python/DDG4.py b/DDG4/python/DDG4.py
index a5e059b444e5643baba911746ca37011018c06ed..34dd78f613d28ba7c379be351e6d842be8c23fa6 100644
--- a/DDG4/python/DDG4.py
+++ b/DDG4/python/DDG4.py
@@ -614,7 +614,7 @@ class Geant4:
     phys.adopt(opt)
     return opt
   
-  def setupGun(self, name, particle, energy, isotrop=True, multiplicity=1, position=(0.0,0.0,0.0),**args):
+  def setupGun(self, name, particle, energy, isotrop=True, multiplicity=1, position=(0.0,0.0,0.0),register=True, **args):
     gun = GeneratorAction(self.kernel(),"Geant4ParticleGun/"+name,True)
     for i in args.items():
       setattr(gun,i[0],i[1])
@@ -624,7 +624,8 @@ class Geant4:
     gun.position     = position
     gun.isotrop      = isotrop
     gun.enableUI()
-    self.kernel().generatorAction().add(gun)
+    if register:
+      self.kernel().generatorAction().add(gun)
     return gun
 
   """
diff --git a/examples/DDCMS/CMakeLists.txt b/examples/DDCMS/CMakeLists.txt
index b63ef6ead6848b589751c616147e47ab79a7b5a6..c2233948f841024ba03b8e93c40f986524650b22 100644
--- a/examples/DDCMS/CMakeLists.txt
+++ b/examples/DDCMS/CMakeLists.txt
@@ -112,7 +112,14 @@ dd4hep_add_test_reg( DDCMS_VolumeMgrTest_TOB
   REGEX_FAIL "Exception"
   REGEX_FAIL "FAILED"
   )
-
+#
+#  Dump CMS detector element tree of SD TOB
+dd4hep_add_test_reg( DDCMS_Geant4_LONGTEST
+  COMMAND    "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDCMS.sh"
+  EXEC_ARGS  python ${CMAKE_CURRENT_SOURCE_DIR}/scripts/CMSTrackerSim.py batch test numevents 2
+  REGEX_PASS "\\+\\+\\+ Finished run 0 after 2 events \\(2 events in total\\)"
+  REGEX_FAIL "Exception;EXCEPTION;ERROR;FAILED"
+  )
 #
 #  Test saving geometry to ROOT file
 dd4hep_add_test_reg( DDCMS_Persist_Save_LONGTEST
diff --git a/examples/DDCMS/scripts/CMSTrackerSim.py b/examples/DDCMS/scripts/CMSTrackerSim.py
index a3165681aae1d7cced687996f1cf661f694b7174..caea821ea138b5b7ecb7fde92435e89901913d0b 100644
--- a/examples/DDCMS/scripts/CMSTrackerSim.py
+++ b/examples/DDCMS/scripts/CMSTrackerSim.py
@@ -18,10 +18,20 @@ def run():
   kernel.setOutputLevel('Gun',Output.INFO)
   kernel.detectorDescription().fromXML("file:"+install_dir+"/examples/DDCMS/data/dd4hep-config.xml");
   kernel.NumEvents = 5
-  geant4 = DDG4.Geant4(kernel)
+  geant4 = DDG4.Geant4(kernel,tracker='Geant4TrackerCombineAction')
   geant4.printDetectors()
   geant4.setupCshUI()
-  if len(sys.argv) >= 2 and sys.argv[1] =="batch":
+  batch = False
+  test  = False
+  for i in xrange(len(sys.argv)):
+    arg = sys.argv[i].lower()
+    if arg == 'batch':
+      batch = True
+    elif arg == 'test':
+      test  = True
+    elif arg == 'numevents':
+      kernel.NumEvents = int(sys.argv[i+1])
+  if batch or test:
     kernel.UI = ''
 
   # Configure field
@@ -29,7 +39,13 @@ def run():
   # Configure I/O
   evt_root = geant4.setupROOTOutput('RootOutput','CMSTracker_'+time.strftime('%Y-%m-%d_%H-%M'),mc_truth=True)
   # Setup particle gun
-  geant4.setupGun("Gun",particle='pi-',energy=100*GeV,multiplicity=1)
+  generators = []
+  generators.append(geant4.setupGun("GunPi-",particle='pi-',energy=300*GeV,multiplicity=1,Standalone=False,register=False, Mask=1))
+  if not test:
+    generators.append(geant4.setupGun("GunPi+",particle='pi+',energy=300*GeV,multiplicity=1,Standalone=False,register=False, Mask=2))
+    generators.append(geant4.setupGun("GunE-",particle='e-',energy=100*GeV,multiplicity=1,Standalone=False,register=False, Mask=4))
+    generators.append(geant4.setupGun("GunE+",particle='e+',energy=100*GeV,multiplicity=1,Standalone=False,register=False, Mask=8))
+  geant4.buildInputStage(generators)
   # Now setup all tracking detectors
   for i in geant4.description.detectors():
     o = DDG4.DetElement(i.second.ptr())