diff --git a/DDSim/DD4hepSimulation.py b/DDSim/DD4hepSimulation.py
index b27dba242196b3ad4c8743510796a538108b3df2..23ebac58ca1c9b2c1dd1322f2d132a41b32be332 100644
--- a/DDSim/DD4hepSimulation.py
+++ b/DDSim/DD4hepSimulation.py
@@ -490,7 +490,8 @@ class DD4hepSimulation(object):
                               action="store",
                               dest="%s.%s" % (name, var),
                               default = valAndDoc[0],
-                              help = valAndDoc[1]
+                              help = valAndDoc[1],
+                              choices = valAndDoc[2],
                               # type = type(val),
                              )
 
diff --git a/DDSim/Helper/ConfigHelper.py b/DDSim/Helper/ConfigHelper.py
index 03a27801b1536cd0cabb0f3bf59e4efa832b226e..540fbeeeb1606616d7770cb3b7cb85839b786265 100644
--- a/DDSim/Helper/ConfigHelper.py
+++ b/DDSim/Helper/ConfigHelper.py
@@ -19,12 +19,18 @@ class ConfigHelper( object ):
     allVars = vars(self)
     for var,val in allVars.iteritems():
       if not var.startswith('_'):
-        finalVars[var] = (val,'')
+        helpName = "_%s_HELP" % var
+        optName = "_%s_OPTIONS" % var
+        doc = getattr(self, helpName) if hasattr(self, helpName) else ''
+        choices = getattr(self, optName) if hasattr(self, optName) else None
+        finalVars[var] = (val, doc, choices)
 
     # now get things defined with @property
     props = [(p, getattr(type(self),p)) for p in dir(type(self)) if isinstance(getattr(type(self),p),property)]
     for propName, prop in props:
-      finalVars[propName] = (getattr(self, propName), prop.__doc__)
+      optName =  "_%s_OPTIONS" % propName
+      choices = getattr(self, optName) if hasattr(self, optName) else None
+      finalVars[propName] = (getattr(self, propName), prop.__doc__, choices)
 
     return finalVars
 
diff --git a/DDSim/Helper/Gun.py b/DDSim/Helper/Gun.py
index bbeff4616c7c2bae9d20460d7b5cd60c66e65cf6..6c33c2ffcd67bfed546f772531a438a253b90851 100644
--- a/DDSim/Helper/Gun.py
+++ b/DDSim/Helper/Gun.py
@@ -13,10 +13,14 @@ class Gun( ConfigHelper ):
     self._position = (0.0,0.0,0.0)
     self._isotrop = False
     self._direction = (0,0,1)
+
+    self._phiMin_HELP = "Minimal azimuthal angle for random distribution"
     self.phiMin = None
     self.phiMax = None
     self.thetaMin = None
     self.thetaMax = None
+
+    self._distribution_OPTIONS = ['uniform', 'cos(theta)', 'eta', 'pseudorapidity', 'ffbar'] ## (1+cos^2 theta)
     self._distribution = None
 
 
diff --git a/DDSim/Helper/Output.py b/DDSim/Helper/Output.py
index 93aed328152fefe685ee253905fdebffcc92acf4..747e4c540c09272d4516f376378599ad459364bb 100644
--- a/DDSim/Helper/Output.py
+++ b/DDSim/Helper/Output.py
@@ -7,9 +7,16 @@ class Output( ConfigHelper ):
   """Configuration for the output levels of DDG4 components"""
   def __init__( self ):
     super(Output, self).__init__()
+    self._kernel_OPTIONS = (1,2,3,4,5,6,7,'VERBOSE','DEBUG', 'INFO', 'WARNING', 'ERROR', 'FATAL', 'ALWAYS')
     self._kernel = outputLevel('INFO')
+
+    self._part_OPTIONS = (1,2,3,4,5,6,7,'VERBOSE','DEBUG', 'INFO', 'WARNING', 'ERROR', 'FATAL', 'ALWAYS')
     self._part = outputLevel('INFO')
+
+    self._inputStage_OPTIONS = (1,2,3,4,5,6,7,'VERBOSE','DEBUG', 'INFO', 'WARNING', 'ERROR', 'FATAL', 'ALWAYS')
     self._inputStage = outputLevel('INFO')
+
+    self._random_OPTIONS = (1,2,3,4,5,6,7,'VERBOSE','DEBUG', 'INFO', 'WARNING', 'ERROR', 'FATAL', 'ALWAYS')
     self._random = outputLevel('FATAL')
 
   @property