diff --git a/Generator/src/HepMCRdr.cpp b/Generator/src/HepMCRdr.cpp
index 0ba5577a79bdca0ceac4bfd00590c7dcf5e920c7..5e5c9e5d827ddf7106b425dfbd44dde86e668300 100644
--- a/Generator/src/HepMCRdr.cpp
+++ b/Generator/src/HepMCRdr.cpp
@@ -25,14 +25,14 @@ using namespace edm4hep;
 DECLARE_COMPONENT(HepMCRdr)
 
 HepMCRdr::~HepMCRdr(){
-delete ascii_in;
+    delete ascii_in;
 }
 
 bool HepMCRdr::mutate(MyHepMC::GenEvent& event){
 
+    ++m_processed_event;
     HepMC::GenEvent* evt = ascii_in->read_next_event();
     if(!evt) return false;
-    m_processed_event ++;
     int n_mc = evt->particles_size();
     //std::cout<<"Read event :"<< m_processed_event <<", mc size :"<< n_mc <<std::endl;
     std::map<int, int> pmcid_lmcid;
@@ -93,13 +93,13 @@ bool HepMCRdr::mutate(MyHepMC::GenEvent& event){
 }
 
 bool HepMCRdr::isEnd(){
-return false;
+    return false;
 }
 
 bool HepMCRdr::configure_gentool(){
     ascii_in = new HepMC::IO_GenEvent(m_filename.value().c_str(),std::ios::in);
 
-    m_processed_event=0;
+    m_processed_event=-1;
     return true;
 }
 
@@ -115,6 +115,17 @@ HepMCRdr::initialize() {
         return StatusCode::FAILURE;
     }
 
+    // skip the first n events if startIndex is not 0.
+    if (startIndex() > 0) {
+        for (int i=0; i<startIndex(); ++i) {
+            ++m_processed_event;
+            HepMC::GenEvent* evt = ascii_in->read_next_event();
+            if(!evt) break;
+            delete evt;
+        }
+        info() << "Skip the first " << startIndex() << " events." << endmsg;
+    }
+
     return sc;
 }
 
@@ -127,3 +138,7 @@ HepMCRdr::finalize() {
     }
     return sc;
 }
+
+int HepMCRdr::startIndex(){
+    return m_startIndex.value();
+}
\ No newline at end of file
diff --git a/Generator/src/HepMCRdr.h b/Generator/src/HepMCRdr.h
index e6ff396937ded45b6640b09d00dfc34a87f27a3f..43a9d05b7d2e55365eba885181cde4ce30c320c3 100644
--- a/Generator/src/HepMCRdr.h
+++ b/Generator/src/HepMCRdr.h
@@ -23,6 +23,8 @@ class HepMCRdr: public extends<AlgTool, GenReader> {
         bool mutate(MyHepMC::GenEvent& event);    
         bool finish();
         bool isEnd();
+
+        int startIndex() override;
     private:
         HepMC::IO_GenEvent *ascii_in{nullptr};
         long m_total_event{-1};
@@ -30,6 +32,7 @@ class HepMCRdr: public extends<AlgTool, GenReader> {
 
         // input file name
         Gaudi::Property<std::string> m_filename{this, "Input"};
+        Gaudi::Property<int> m_startIndex{this, "StartIndex", 0, "Default start index"};
 
 };