diff --git a/Generator/src/GtGunTool.cpp b/Generator/src/GtGunTool.cpp
index 7ff4dab0195a5a56bb7c614f3f5f2fb472eecc7f..6cdd0f28c1518a8d5352836fffe0f5730a7cbef8 100644
--- a/Generator/src/GtGunTool.cpp
+++ b/Generator/src/GtGunTool.cpp
@@ -83,11 +83,13 @@ GtGunTool::mutate(MyHepMC::GenEvent& event) {
         const std::string& particle_name = m_particles.value()[i];
         int pdgcode = 0;
         double mass = 0;
+        double charge = 0;
 
         TParticlePDG* particle = db_pdg->GetParticle(particle_name.c_str());
         if (particle) {
             pdgcode = particle->PdgCode();
             mass = particle->Mass(); // GeV
+            charge = particle->Charge()/3; // in ROOT, it is in units of |e|/3
         } else {
             // guess it is pdg code
             pdgcode = atol(particle_name.c_str());
@@ -104,7 +106,7 @@ GtGunTool::mutate(MyHepMC::GenEvent& event) {
         mcp.setPDG(pdgcode);
         mcp.setGeneratorStatus(1);
         mcp.setSimulatorStatus(1);
-        // mcp.setCharge();
+        mcp.setCharge(static_cast<float>(charge));
         mcp.setTime(0.0);
         mcp.setMass(mass);