diff --git a/DDG4/python/DDSim/DD4hepSimulation.py b/DDG4/python/DDSim/DD4hepSimulation.py
index 9b8708edff87e84d54a7ff3ff1b4f1e0f9eb6e07..bf7057549d2a8bc3617f49c5eadd5a6f64d112e2 100644
--- a/DDG4/python/DDSim/DD4hepSimulation.py
+++ b/DDG4/python/DDSim/DD4hepSimulation.py
@@ -317,19 +317,27 @@ class DD4hepSimulation(object):
     geant4.printDetectors()
 
     if self.runType == "vis":
-      geant4.setupUI(typ="tcsh", vis=True, macro=self.macroFile)
+      uiaction = geant4.setupUI(typ="tcsh", vis=True, macro=self.macroFile)
     elif self.runType == "qt":
-      geant4.setupUI(typ="qt", vis=True, macro=self.macroFile)
+      uiaction = geant4.setupUI(typ="qt", vis=True, macro=self.macroFile)
     elif self.runType == "run":
-      geant4.setupUI(typ="tcsh", vis=False, macro=self.macroFile, ui=False)
+      uiaction = geant4.setupUI(typ="tcsh", vis=False, macro=self.macroFile, ui=False)
     elif self.runType == "shell":
-      geant4.setupUI(typ="tcsh", vis=False, macro=None, ui=True)
+      uiaction = geant4.setupUI(typ="tcsh", vis=False, macro=None, ui=True)
     elif self.runType == "batch":
-      geant4.setupUI(typ="tcsh", vis=False, macro=None, ui=False)
+      uiaction = geant4.setupUI(typ="tcsh", vis=False, macro=None, ui=False)
     else:
       logger.error("unknown runType")
       exit(1)
 
+    # User Configuration for the Geant4Phases
+    uiaction.ConfigureCommands = self.physics._commandsConfigure
+    uiaction.TerminateCommands = self.physics._commandsTerminate
+    uiaction.PostRunCommands = self.physics._commandsPostRun
+    uiaction.PreRunCommands = self.physics._commandsPreRun
+    uiaction.InitializeCommands = self.physics._commandsInitialize
+
+
     kernel.NumEvents = self.numberOfEvents
 
     # -----------------------------------------------------------------------------------
diff --git a/DDG4/python/DDSim/Helper/Physics.py b/DDG4/python/DDSim/Helper/Physics.py
index db1e82e335f65b7df7292795e1f678489e078fb7..73ced27f93ea7588b5a7e81679de3bceb9618ae5 100644
--- a/DDG4/python/DDSim/Helper/Physics.py
+++ b/DDG4/python/DDSim/Helper/Physics.py
@@ -30,6 +30,12 @@ class Physics(ConfigHelper):
     self._zeroTimePDGs = {11, 13, 15, 17}
     self._userFunctions = []
 
+    self._commandsConfigure = []
+    self._commandsTerminate = []
+    self._commandsPostRun = []
+    self._commandsPreRun = []
+    self._commandsInitialize = []
+
   @property
   def rejectPDGs(self):
     """Set of PDG IDs that will not be passed from the input record to Geant4.
@@ -116,6 +122,46 @@ class Physics(ConfigHelper):
   def list(self, val):  # noqa: A003
     self._list = val
 
+  @property
+  def commandsConfigure(self):
+    """List of UI commands to run during the 'Configure' phase."""
+    return self._commandsConfigure
+  @commandsConfigure.setter
+  def commandsConfigure(self, val):
+    self._commandsConfigure = self.makeList(val)
+
+  @property
+  def commandsInitialize(self):
+    """List of UI commands to run during the 'Initialize' phase."""
+    return self._commandsInitialize
+  @commandsInitialize.setter
+  def commandsInitialize(self, val):
+    self._commandsInitialize = self.makeList(val)
+
+  @property
+  def commandsTerminate(self):
+    """List of UI commands to run during the 'Terminate' phase."""
+    return self._commandsTerminate
+  @commandsTerminate.setter
+  def commandsTerminate(self, val):
+    self._commandsTerminate = self.makeList(val)
+
+  @property
+  def commandsPreRun(self):
+    """List of UI commands to run during the 'PreRun' phase."""
+    return self._commandsPreRun
+  @commandsPreRun.setter
+  def commandsPreRun(self, val):
+    self._commandsPreRun = self.makeList(val)
+
+  @property
+  def commandsPostRun(self):
+    """List of UI commands to run during the 'PostRun' phase."""
+    return self._commandsPostRun
+  @commandsPostRun.setter
+  def commandsPostRun(self, val):
+    self._commandsPostRun = self.makeList(val)
+
   def setupPhysics(self, kernel, name=None):
     seq = kernel.physicsList()
     seq.extends = name if name is not None else self.list