diff --git a/DDSim/DD4hepSimulation.py b/DDSim/DD4hepSimulation.py
index c46f8d601b785f8fe54791d132cd283da111b164..d26a7ad50c99fe3b5875a126b7bea12ca6492552 100644
--- a/DDSim/DD4hepSimulation.py
+++ b/DDSim/DD4hepSimulation.py
@@ -320,9 +320,7 @@ class DD4hepSimulation(object):
     actionList = []
 
     ##configure the random seed
-    rndm = DDG4.Action(kernel,'Geant4Random/R1')
-    self.__setupRandomGenerator(rndm)
-    rndm.initialize()
+    rndm = self.random.initialize( DDG4, kernel, self.output.random )
 
     if self.enableGun:
       gun = DDG4.GeneratorAction(kernel,"Geant4ParticleGun/"+"Gun")
@@ -459,17 +457,6 @@ class DD4hepSimulation(object):
     kernel.run()
     kernel.terminate()
 
-
-  def __setupRandomGenerator(self, rndm):
-    """set the properties for the random number generator"""
-    if self.random.seed is not None:
-      rndm.Seed = self.random.seed
-      rndm.Luxury = self.random.luxury
-    if self.random.type is not None:
-      rndm.Type = self.random.type
-    if self.output.random <= 3:
-      rndm.showStatus()
-
   def __setMagneticFieldOptions(self, simple):
     """ create and configure the magnetic tracking setup """
     field = simple.addConfig('Geant4FieldTrackingSetupAction/MagFieldTrackingSetup')
@@ -514,14 +501,25 @@ class DD4hepSimulation(object):
     for name, obj in vars(self).iteritems():
       if isinstance( obj, ConfigHelper ):
         for var,valAndDoc in obj.getOptions().iteritems():
-          parser.add_argument("--%s.%s" % (name, var),
-                              action="store",
-                              dest="%s.%s" % (name, var),
-                              default = valAndDoc[0],
-                              help = valAndDoc[1],
-                              choices = valAndDoc[2],
-                              # type = type(val),
-                             )
+          if var.startswith("enable"):
+            parser.add_argument("--%s.%s" % (name, var),
+                                action="store_true",
+                                dest="%s.%s" % (name, var),
+                                default = valAndDoc[0],
+                                help = valAndDoc[1],
+                                #choices = valAndDoc[2], ##not allowed for store_true
+                                # type = type(val),
+                               )
+          else:
+            parser.add_argument("--%s.%s" % (name, var),
+                                action="store",
+                                dest="%s.%s" % (name, var),
+                                default = valAndDoc[0],
+                                help = valAndDoc[1],
+                                choices = valAndDoc[2],
+                                # type = type(val),
+                               )
+
 
   def __parseAllHelper( self, parsed ):
     """ parse all the options for the helper """
diff --git a/DDSim/Helper/Random.py b/DDSim/Helper/Random.py
index 7dc49e20a79ad594e206152ab84565388c21b9cc..7a2449d9f3e5684c3a862b7d4e15ec379d308f9e 100644
--- a/DDSim/Helper/Random.py
+++ b/DDSim/Helper/Random.py
@@ -11,3 +11,36 @@ class Random (ConfigHelper):
     self.luxury = 1
     self.replace_gRandom = True
     self.file = None
+    self._random = None
+
+    self._enableEventSeed_HELP = "If True, calculate random seed for each event based on eventID and runID\n" \
+                              "allows reproducibility even when SkippingEvents"
+    self.enableEventSeed = False
+
+  def initialize(self, DDG4, kernel, output):
+    """ initialize the random generator
+
+    :param DDG4: DDG4 module
+    :param kernel: Geant4 kernel
+    :param int output: output level
+    :returns: Geant4Random instance
+    """
+    if self._random:
+      return self._random
+    self._random = DDG4.Action(kernel,'Geant4Random/R1')
+
+    if self.seed is not None:
+      self._random.Seed = self.seed
+      self._random.Luxury = self.luxury
+    if self.type is not None:
+      self._random.Type = self.type
+
+    self._random.initialize()
+
+    if self.seed is not None and self.enableEventSeed:
+      self._eventseed = DDG4.RunAction(kernel,'Geant4EventSeed/EventSeeder1')
+
+    ## Needs to be called after initilisation
+    if output <= 3:
+      self._random.showStatus()
+    return self._random