diff --git a/source/processes/optical/src/G4OpBoundaryProcess.cc b/source/processes/optical/src/G4OpBoundaryProcess.cc
index 72ad2a7200d42e4b9905ff6876eea4266e464a41..832f17334ee697bbddbd9c282f2709faf83ef6b8 100644
--- a/source/processes/optical/src/G4OpBoundaryProcess.cc
+++ b/source/processes/optical/src/G4OpBoundaryProcess.cc
@@ -191,6 +191,20 @@ G4VParticleChange* G4OpBoundaryProcess::PostStepDoIt(const G4Track& aTrack,
     theStatus = StepTooSmall;
     if(verboseLevel > 1)
       BoundaryProcessVerbose();
+
+    // Backport from Geant4 11.0, fixes https://bugzilla-geant4.kek.jp/show_bug.cgi?id=2438
+    G4MaterialPropertyVector* groupvel = nullptr;
+    G4MaterialPropertiesTable* aMPT = Material2->GetMaterialPropertiesTable();
+    if(aMPT != nullptr)
+    {
+      groupvel = aMPT->GetProperty(kGROUPVEL);
+    }
+
+    if(groupvel != nullptr)
+    {
+      aParticleChange.ProposeVelocity(
+        groupvel->Value(thePhotonMomentum, idx_groupvel));
+    }
     return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep);
   }