diff --git a/Generator/CMakeLists.txt b/Generator/CMakeLists.txt
index b62828d58a0372891fbb51fc888fb9f4df6db9e7..0f850fcf1983a2d96839ce3b86a6a3bd8a076f5d 100644
--- a/Generator/CMakeLists.txt
+++ b/Generator/CMakeLists.txt
@@ -5,7 +5,7 @@ set(GenAlgo_srcs
     src/GenAlgo.cpp 
     src/GenEvent.cpp 
     src/GenReader.cpp 
-    # src/StdHepRdr.cpp 
+    src/StdHepRdr.cpp 
     # src/GenPrinter.cpp
     # src/LCAscHepRdr.cc
     # src/HepevtRdr.cpp
diff --git a/Generator/src/GenAlgo.cpp b/Generator/src/GenAlgo.cpp
index 6c3784ef40cc8586946b0e9398c8bc05964494a3..74c2db30e0f75fc02bd2015b349ddade470c4f40 100644
--- a/Generator/src/GenAlgo.cpp
+++ b/Generator/src/GenAlgo.cpp
@@ -92,10 +92,10 @@ GenAlgo::execute() {
 
 StatusCode
 GenAlgo::finalize() {
-    cout << "finalize" << endl; 
-    for(auto gentool: m_genTools) {
-        if (gentool->finish()) {} 
-        else {cout << "finish Failed" << endl; return StatusCode::FAILURE; }
-    }
+    // cout << "finalize" << endl; 
+    // for(auto gentool: m_genTools) {
+    //     if (gentool->finish()) {} 
+    //     else {cout << "finish Failed" << endl; return StatusCode::FAILURE; }
+    // }
     return StatusCode::SUCCESS;
 }
diff --git a/Generator/src/StdHepRdr.cpp b/Generator/src/StdHepRdr.cpp
index e6cfc8b79150be75722460b0d690581f4f5f8d4e..b81abb0569a52df5a3674290d9f8a958f33aba35 100644
--- a/Generator/src/StdHepRdr.cpp
+++ b/Generator/src/StdHepRdr.cpp
@@ -26,17 +26,10 @@ using namespace IMPL;
 using namespace plcio;
 using namespace std;
 
-
-StdHepRdr::StdHepRdr(string name){
-
-m_stdhep_rdr = new LCStdHepRdrNew(name.c_str());
-m_stdhep_rdr->printHeader();
-m_total_event = m_stdhep_rdr->getNumberOfEvents() - 1 ;
-m_processed_event=0;
-}
+DECLARE_COMPONENT(StdHepRdr)
 
 StdHepRdr::~StdHepRdr(){
-delete m_stdhep_rdr;
+    delete m_stdhep_rdr;
 }
 
 bool StdHepRdr::mutate(MyHepMC::GenEvent& event){
@@ -98,10 +91,40 @@ if(m_processed_event == m_total_event) {std::cout<<"Have read all events, end no
 else return false;
 }
 
-bool StdHepRdr::configure(){
-return true;
+bool StdHepRdr::configure_gentool(){
+    m_stdhep_rdr = new LCStdHepRdrNew(m_filename.value().c_str());
+    m_stdhep_rdr->printHeader();
+    if (m_stdhep_rdr->getNumberOfEvents()<=1) {
+        return false;
+    }
+
+    m_total_event = m_stdhep_rdr->getNumberOfEvents() - 1 ;
+    m_processed_event=0;
+
+    return true;
 }
 
 bool StdHepRdr::finish(){
-return true;
+    return true;
+}
+
+StatusCode
+StdHepRdr::initialize() {
+    StatusCode sc;
+    if (not configure_gentool()) {
+        error() << "failed to initialize." << endmsg;
+        return StatusCode::FAILURE;
+    }
+
+    return sc;
+}
+
+StatusCode
+StdHepRdr::finalize() {
+    StatusCode sc;
+    if (not finish()) {
+        error() << "Failed to finalize." << endmsg;
+        return StatusCode::FAILURE;
+    }
+    return sc;
 }
diff --git a/Generator/src/StdHepRdr.h b/Generator/src/StdHepRdr.h
index 3d92510bb90e9abe2dbc60f29b2770b563d35598..7517430bf406bdf88c11875bb9c0aad713afaa2f 100644
--- a/Generator/src/StdHepRdr.h
+++ b/Generator/src/StdHepRdr.h
@@ -1,6 +1,8 @@
 #ifndef StdHepRdr_h
 #define StdHepRdr_h 1
 
+#include "GaudiKernel/AlgTool.h"
+
 #include "GenReader.h"
 #include "GenEvent.h"
 
@@ -9,19 +11,30 @@
 #include "UTIL/LCStdHepRdrNew.h"
 
 
-class StdHepRdr: public GenReader{
+class StdHepRdr: public extends<AlgTool, GenReader> {
+
+public:
+
+    using extends::extends;
+
+    ~StdHepRdr();
+
+    // Overriding initialize and finalize
+    StatusCode initialize() override;
+    StatusCode finalize() override;    
+
+    bool configure_gentool() override;               
+    bool mutate(MyHepMC::GenEvent& event) override;    
+    bool finish() override;
+    bool isEnd() override;
+private:
+    lcio::LCStdHepRdrNew* m_stdhep_rdr{nullptr};
+    long m_total_event{-1};
+    long m_processed_event{-1};
+
+    // input file name
+    Gaudi::Property<std::string> m_filename{this, "Input"};
 
-    public:
-        StdHepRdr(string name);
-        ~StdHepRdr();
-        bool configure();               
-        bool mutate(MyHepMC::GenEvent& event);    
-        bool finish();
-        bool isEnd();
-    private:
-        lcio::LCStdHepRdrNew* m_stdhep_rdr;
-        long m_total_event;
-        long m_processed_event;
 };
 
 #endif