diff --git a/Examples/options/tut_detsim_SDT.py b/Examples/options/tut_detsim_SDT.py
index 8d490193c7ab07e3cd9df9bef9875bfbcc3866cc..5510a6d9ab18fadf3423f629e31637a62d470060 100644
--- a/Examples/options/tut_detsim_SDT.py
+++ b/Examples/options/tut_detsim_SDT.py
@@ -64,6 +64,12 @@ gun = GtGunTool("GtGunTool")
 # gun.EnergyMaxs = [100.] # GeV
 
 gun.Particles = ["e-"]
+
+# gun.PositionXs = [100.] # mm
+# gun.PositionYs = [100.] # mm
+# gun.PositionZs = [0.] # mm
+
+
 gun.EnergyMins = [1.] # GeV
 gun.EnergyMaxs = [1.] # GeV
 
diff --git a/Generator/src/GtGunTool.cpp b/Generator/src/GtGunTool.cpp
index df29f4a2821f0324d574fc71e316bd05f3054447..7ff4dab0195a5a56bb7c614f3f5f2fb472eecc7f 100644
--- a/Generator/src/GtGunTool.cpp
+++ b/Generator/src/GtGunTool.cpp
@@ -15,7 +15,25 @@ GtGunTool::initialize() {
         error() << "Please specify the list of particle names/pdgs" << endmsg;
         return StatusCode::FAILURE;
     }
+
+    // Position
+    if (m_positionXs.value().size()
+        && m_positionXs.value().size() != m_particles.value().size()) {
+        error() << "Mismatched PositionXs and particles." << endmsg;
+        return StatusCode::FAILURE;
+    }
+    if (m_positionYs.value().size()
+        && m_positionYs.value().size() != m_particles.value().size()) {
+        error() << "Mismatched PositionYs and particles." << endmsg;
+        return StatusCode::FAILURE;
+    }
+    if (m_positionZs.value().size()
+        && m_positionZs.value().size() != m_particles.value().size()) {
+        error() << "Mismatched PositionZs and particles." << endmsg;
+        return StatusCode::FAILURE;
+    }
     
+    // Energy
     if (m_energymins.value().size() != m_particles.value().size()) {
         error() << "Mismatched energies and particles." << endmsg;
         return StatusCode::FAILURE;
@@ -89,7 +107,16 @@ GtGunTool::mutate(MyHepMC::GenEvent& event) {
         // mcp.setCharge();
         mcp.setTime(0.0);
         mcp.setMass(mass);
-        // mcp.setVertex(); 
+
+        // Unit is mm
+        double x = 0;
+        double y = 0;
+        double z = 0;
+        if (i<m_positionXs.value().size()) { x = m_positionXs.value()[i]; }
+        if (i<m_positionYs.value().size()) { y = m_positionYs.value()[i]; }
+        if (i<m_positionZs.value().size()) { z = m_positionZs.value()[i]; }
+
+        mcp.setVertex(edm4hep::Vector3d(x,y,z)); 
         // mcp.setEndpoint();
 
         // assume energy is momentum
diff --git a/Generator/src/GtGunTool.h b/Generator/src/GtGunTool.h
index 388c14d4d555bc4d3b436ebc90fabdca26f22337..0c62f4c386a34ad5468a99052998d4f04cda0611 100644
--- a/Generator/src/GtGunTool.h
+++ b/Generator/src/GtGunTool.h
@@ -34,6 +34,11 @@ private:
 
     Gaudi::Property<std::vector<std::string>> m_particles{this, "Particles"};
 
+    Gaudi::Property<std::vector<double>> m_positionXs{this, "PositionXs"};
+    Gaudi::Property<std::vector<double>> m_positionYs{this, "PositionYs"};
+    Gaudi::Property<std::vector<double>> m_positionZs{this, "PositionZs"};
+
+
     Gaudi::Property<std::vector<double>> m_energymins{this, "EnergyMins"};
     Gaudi::Property<std::vector<double>> m_energymaxs{this, "EnergyMaxs"};
 
diff --git a/Simulation/DetSimCore/src/G4PrimaryCnvTool.cpp b/Simulation/DetSimCore/src/G4PrimaryCnvTool.cpp
index d725aa27dead84d3b95df9fc66c0c990f9189fe4..51c5f91472fae311914c890b764f67e3c8a625f0 100644
--- a/Simulation/DetSimCore/src/G4PrimaryCnvTool.cpp
+++ b/Simulation/DetSimCore/src/G4PrimaryCnvTool.cpp
@@ -30,6 +30,13 @@ bool G4PrimaryCnvTool::mutate(G4Event* anEvent) {
                                                      vertex.y*CLHEP::mm,
                                                      vertex.z*CLHEP::mm,
                                                      t);
+
+        info() << "Geant4 Primary Vertex: ("
+               << vertex.x*CLHEP::mm << ","
+               << vertex.y*CLHEP::mm << ","
+               << vertex.z*CLHEP::mm << ")"
+               << endmsg;
+
         // pdg/particle
         int pdgcode = p.getPDG();
         G4ParticleTable* particletbl = G4ParticleTable::GetParticleTable();