diff --git a/Simulation/src/DetSimCore/DetSimAlg.cpp b/Simulation/src/DetSimCore/DetSimAlg.cpp
index db328fce42c66c8acea38701fb08e6c69dc0cb9d..81aab60f0dd173e752370a1eb7e0784887c28aaf 100644
--- a/Simulation/src/DetSimCore/DetSimAlg.cpp
+++ b/Simulation/src/DetSimCore/DetSimAlg.cpp
@@ -1,10 +1,12 @@
 #include "DetSimAlg.h"
 
+#include "G4RunManager.hh"
+
 DECLARE_COMPONENT(DetSimAlg)
 
 DetSimAlg::DetSimAlg(const std::string& name, ISvcLocator* pSvcLocator)
 : Algorithm(name, pSvcLocator) {
-
+    i_event = -1;
 }
 
 StatusCode
@@ -13,18 +15,47 @@ DetSimAlg::initialize() {
 
     info() << "Initialize DetSimAlg... " << endmsg;
 
+    m_detsimsvc = service("DetSimSvc");
+    if (!m_detsimsvc) {
+        error() << "Failed to find DetSimSvc. " << endmsg;
+        return StatusCode::FAILURE;
+    }
+
+    // Initialize the Run Manager
+    G4RunManager* runmgr = m_detsimsvc->getRM();
+    if (!runmgr) {
+        error() << "Failed to get Run Manager. " << endmsg;
+        return StatusCode::FAILURE;
+    }
+
+    runmgr->SetUserInitialization((G4VUserDetectorConstruction*)0);
+    runmgr->SetUserInitialization((G4VUserPhysicsList*)0);
+    runmgr->SetUserAction((G4VUserPrimaryGeneratorAction*)0);
+
+    // after set up the user initialization and user actions, start the initialization.
+    m_detsimsvc->initializeRM();
+
     return sc;
 }
 
 StatusCode
 DetSimAlg::execute() {
     StatusCode sc;
+
+    m_detsimsvc->simulateEvent(++i_event);
+
     return sc;
 }
 
 StatusCode
 DetSimAlg::finalize() {
     StatusCode sc;
+    if (!m_detsimsvc) { 
+        return StatusCode::FAILURE;
+    }
+    m_detsimsvc->finalizeRM();
+
+
     return sc;
 }
 
diff --git a/Simulation/src/DetSimCore/DetSimAlg.h b/Simulation/src/DetSimCore/DetSimAlg.h
index 683456f4ffc2867f189e97cc910a18fff50ed863..5c7371e3fb213d83df7779b2fa2350ff7dba3f89 100644
--- a/Simulation/src/DetSimCore/DetSimAlg.h
+++ b/Simulation/src/DetSimCore/DetSimAlg.h
@@ -25,6 +25,9 @@ private:
     Gaudi::Property<std::vector<std::string>> m_run_macs{this, "RunMacs"};
     Gaudi::Property<std::vector<std::string>> m_run_cmds{this, "RunCmds"};
     Gaudi::Property<std::vector<std::string>> m_vis_macs{this, "VisMacs"};
+
+private:
+    int i_event;
 };