diff --git a/src/lagrangian/basic/Particle/Particle.C b/src/lagrangian/basic/Particle/Particle.C
index 5717e0c76d6ef84b0d1a9eef37c15357cff4015b..99c00f07e5535a521b4e4030b0cadb79b1201348 100644
--- a/src/lagrangian/basic/Particle/Particle.C
+++ b/src/lagrangian/basic/Particle/Particle.C
@@ -334,11 +334,18 @@ Foam::scalar Foam::Particle<ParticleType>::trackToFace
                 position_ = endPosition;
             }
 
+            label origFacei = facei_;
             label patchi = patch(facei_);
-            const polyPatch& patch = mesh.boundaryMesh()[patchi];
 
-            if (!p.hitPatch(patch, td, patchi))
+            if (!p.hitPatch(mesh.boundaryMesh()[patchi], td, patchi))
             {
+                // Did patch interaction model switch patches?
+                if (facei_ != origFacei)
+                {
+                    patchi = patch(facei_);
+                }
+                const polyPatch& patch = mesh.boundaryMesh()[patchi];
+
                 if (isA<wedgePolyPatch>(patch))
                 {
                     p.hitWedgePatch
diff --git a/src/lagrangian/basic/Particle/Particle.H b/src/lagrangian/basic/Particle/Particle.H
index 077a6d4b8eb6135f4d5989000c2d1088451bc483..39c21de0767a9e48a023f33e695fd5b9d5bcb99a 100644
--- a/src/lagrangian/basic/Particle/Particle.H
+++ b/src/lagrangian/basic/Particle/Particle.H
@@ -378,6 +378,9 @@ public:
             //- Return current cell particle is in
             inline label cell() const;
 
+            //- Return current face particle is on otherwise -1
+            inline label& face();
+
             //- Return current face particle is on otherwise -1
             inline label face() const;
 
diff --git a/src/lagrangian/basic/Particle/ParticleI.H b/src/lagrangian/basic/Particle/ParticleI.H
index d3098325ebdd40f0d04799efd62214244696fabd..43fd1d380656ab04453a6a494d47365843def290 100644
--- a/src/lagrangian/basic/Particle/ParticleI.H
+++ b/src/lagrangian/basic/Particle/ParticleI.H
@@ -325,6 +325,13 @@ inline Foam::label Foam::Particle<ParticleType>::face() const
 }
 
 
+template<class ParticleType>
+inline Foam::label& Foam::Particle<ParticleType>::face()
+{
+    return facei_;
+}
+
+
 template<class ParticleType>
 inline bool Foam::Particle<ParticleType>::onBoundary() const
 {