diff --git a/Simulation/DetSimAna/src/Edm4hepWriterAnaElemTool.cpp b/Simulation/DetSimAna/src/Edm4hepWriterAnaElemTool.cpp
index 851e8c5595c78a934fb8dc569d53352b026201f2..7d6c24ccf06fcf649ba792fbebb0d2814a4b0f2b 100644
--- a/Simulation/DetSimAna/src/Edm4hepWriterAnaElemTool.cpp
+++ b/Simulation/DetSimAna/src/Edm4hepWriterAnaElemTool.cpp
@@ -6,6 +6,7 @@
 #include "G4EventManager.hh"
 #include "G4TrackingManager.hh"
 #include "G4SteppingManager.hh"
+#include "G4GammaGeneralProcess.hh"
 
 #include "DD4hep/Detector.h"
 #include "DD4hep/Plugins.h"
@@ -363,6 +364,37 @@ Edm4hepWriterAnaElemTool::PreUserTrackingAction(const G4Track* track) {
 
 void
 Edm4hepWriterAnaElemTool::PostUserTrackingAction(const G4Track* track) {
+    // 
+    // cache all the necessary processes
+    // 
+    static G4VProcess* proc_decay = nullptr;
+    static G4VProcess* photon_general = nullptr; // default
+    static G4VProcess* photon_conv = nullptr;  // "/process/em/UseGeneralProcess false"
+    if (!proc_decay || (!(photon_general || photon_conv))) {
+        G4ProcessManager* pm 
+            = track->GetDefinition()->GetProcessManager();
+        G4int nprocesses = pm->GetProcessListLength();
+        G4ProcessVector* pv = pm->GetProcessList();
+            
+        for(G4int i=0; i<nprocesses; ++i){
+            info() << " process: " << (*pv)[i]->GetProcessName() << endmsg;
+            if((*pv)[i]->GetProcessName()=="Decay"){
+                proc_decay = (*pv)[i];
+            } else if((*pv)[i]->GetProcessName()=="GammaGeneralProc"){
+                photon_general = (*pv)[i];
+                photon_conv = dynamic_cast<G4GammaGeneralProcess*>(photon_general)->GetEmProcess("conv");
+                info() << "gamma general proc: " << photon_general
+                       << " conv: " << photon_conv
+                       << endmsg;
+            } else if((*pv)[i]->GetProcessName()=="conv"){
+                photon_conv = (*pv)[i];
+            }
+        }
+
+    }
+
+
+
     int curtrkid = track->GetTrackID(); // starts from 1
     int curparid = track->GetParentID();
     int idxedm4hep = -1;
@@ -405,22 +437,6 @@ Edm4hepWriterAnaElemTool::PostUserTrackingAction(const G4Track* track) {
         // Update the flags of the primary particles
         // ===================================================================
 
-        // processes
-        static G4VProcess* proc_decay = nullptr;
-        if (!proc_decay) {
-            G4ProcessManager* pm 
-                = track->GetDefinition()->GetProcessManager();
-            G4int nprocesses = pm->GetProcessListLength();
-            G4ProcessVector* pv = pm->GetProcessList();
-            
-            for(G4int i=0; i<nprocesses; ++i){
-                if((*pv)[i]->GetProcessName()=="Decay"){
-                    proc_decay = (*pv)[i];
-                }
-            }
-
-        }
-
         // flags
         bool is_decay = false;
 
@@ -437,8 +453,9 @@ Edm4hepWriterAnaElemTool::PostUserTrackingAction(const G4Track* track) {
                 const G4VProcess* creatorProcess = sectrk->GetCreatorProcess();
 
                 // select the necessary processes
-                if (creatorProcess==proc_decay) {
-                    debug() << "Creator Process is Decay for secondary particle: "
+                if (creatorProcess==proc_decay || creatorProcess==photon_general || creatorProcess==photon_conv) {
+                    debug() << "Creator Process is " << creatorProcess->GetProcessName()
+                            << " for secondary particle: "
                             << " idx: " << i
                             << " trkid: " << sectrk->GetTrackID() // not valid until track
                             << " particle: " << secparticle->GetParticleName()
@@ -447,7 +464,7 @@ Edm4hepWriterAnaElemTool::PostUserTrackingAction(const G4Track* track) {
                             << " time: " << sectrk->GetGlobalTime()
                             << " momentum: " << sectrk->GetMomentum() // 
                            << endmsg;
-                    is_decay = true;
+                    if (creatorProcess==proc_decay) is_decay = true;
 
                     // create secondaries in MC particles
                     // todo: convert the const collection to non-const