Relocating a particle by a continuous process: exception

Hi, I model a scattering of gammas by a continuous process. That is, after each step the position of a gamma particle is changed with G4ParticleChange::ProposePosition(). I am doing something wrong because I get an exception:

-------- WWWW ------- G4Exception-START -------- WWWW -------
*** G4Exception : GeomNav1002
issued by : G4PathFinder::ReportMove()
Endpoint moved between value returned by ComputeStep() and call to Locate().
Change of (End) Position / G4PathFinder::Locate is 0.002153166401214529 mm long
and its vector is (0.002067411285977983,-0.000600024605008187,4.366462314919772e-05) mm
Endpoint of ComputeStep() was (-60.37058369815107,1.288026121740885,658.4166693999999)
and current position to locate is (-60.36851628686509,1.287426097135877,658.4167130646231)
*** This is just a warning message. ***
-------- WWWW -------- G4Exception-END --------- WWWW -------

The program never finishes. On the other hand, if I set the displacement to zero, the program finishes. I should note that I have a voxelized geometry, so the gamma particle often traverses a volume’s boundary. I suspect that the exception has something to do with a relocation across the boundary, because I didn’t observe the exception when I replaced the voxels with a single block of material.

How can I safely relocate the particle? It is acceptable for me if the particle crosses the boundary during a relocation.

Gammas don’t have a continuous process. They do nothing until they interact.

I created a continuous process for gamma. Indeed, the relocation is happening when a step of a gamma is defined by another process.

Any hints on how to handle the exception, please?

I figured out a solution. It seems like a similar issue is handled in G4VMultipleScattering. One needs to use G4SafetyHelper. In the Process constructor:
safetyHelper = nullptr;

In the Process DoIt method:

if(!safetyHelper) {
      safetyHelper = G4TransportationManager::GetTransportationManager()
        ->GetSafetyHelper();
      safetyHelper->InitialiseHelper();
    }
safetyHelper->ReLocateWithinVolume(newPosition);