diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C
index 3eb5075c931b0fe9befed694a26fabfaa048de43..3f278e8c5e6edc877ecbd4ea892742fb95cbac8b 100644
--- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2017 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -171,7 +171,7 @@ void Foam::ParticleCollector<CloudType>::initConcentricCircles()
     }
     else
     {
-        // set 4 quadrants for single sector cases
+        // Set 4 quadrants for single sector cases
         nS = 4;
 
         vector tangent = Zero;
@@ -200,7 +200,7 @@ void Foam::ParticleCollector<CloudType>::initConcentricCircles()
     label nPoint = radius_.size()*nPointPerRadius;
     label nFace = radius_.size()*nS;
 
-    // add origin
+    // Add origin
     nPoint++;
 
     points_.setSize(nPoint);
@@ -213,7 +213,7 @@ void Foam::ParticleCollector<CloudType>::initConcentricCircles()
 
     points_[0] = origin;
 
-    // points
+    // Points
     forAll(radius_, radI)
     {
         label pointOffset = radI*nPointPerRadius + 1;
@@ -226,7 +226,7 @@ void Foam::ParticleCollector<CloudType>::initConcentricCircles()
         }
     }
 
-    // faces
+    // Faces
     DynamicList<label> facePts(2*nPointPerSector);
     forAll(radius_, radI)
     {
@@ -236,7 +236,7 @@ void Foam::ParticleCollector<CloudType>::initConcentricCircles()
             {
                 facePts.clear();
 
-                // append origin point
+                // Append origin point
                 facePts.append(0);
 
                 for (label ptI = 0; ptI < nPointPerSector; ptI++)
@@ -304,16 +304,16 @@ void Foam::ParticleCollector<CloudType>::collectParcelPolygon
 
         if (sign(d1) == sign(d2))
         {
-            // did not cross polygon plane
+            // Did not cross polygon plane
             continue;
         }
 
-        // intersection point
+        // Intersection point
         const point pIntersect = p1 + (d1/(d1 - d2))*(p2 - p1);
 
         const List<face>& tris = faceTris_[facei];
 
-        // identify if point is within poly bounds
+        // Identify if point is within poly bounds
         forAll(tris, triI)
         {
             const face& tri = tris[triI];
@@ -347,11 +347,11 @@ void Foam::ParticleCollector<CloudType>::collectParcelConcentricCircles
 
     if (sign(d1) == sign(d2))
     {
-        // did not cross plane
+        // Did not cross plane
         return;
     }
 
-    // intersection point in cylindrical co-ordinate system
+    // Intersection point in cylindrical co-ordinate system
     const point pCyl = coordSys_.localPosition(p1 + (d1/(d1 - d2))*(p2 - p1));
 
     scalar r = pCyl[0];
@@ -381,7 +381,10 @@ void Foam::ParticleCollector<CloudType>::collectParcelConcentricCircles
         }
     }
 
-    hitFaceIDs_.append(secI);
+    if (secI != -1)
+    {
+        hitFaceIDs_.append(secI);
+    }
 }
 
 
@@ -651,7 +654,7 @@ void Foam::ParticleCollector<CloudType>::postMove
         return;
     }
 
-    // slightly extend end position to avoid falling within tracking tolerances
+    // Slightly extend end position to avoid falling within tracking tolerances
     const point position1 = position0 + 1.0001*(p.position() - position0);
 
     hitFaceIDs_.clear();
@@ -669,8 +672,7 @@ void Foam::ParticleCollector<CloudType>::postMove
             break;
         }
         default:
-        {
-        }
+        {}
     }
 
 
@@ -681,15 +683,33 @@ void Foam::ParticleCollector<CloudType>::postMove
 
         if (negateParcelsOppositeNormal_)
         {
+            scalar Unormal = 0;
             vector Uhat = p.U();
+            switch (mode_)
+            {
+                case mtPolygon:
+                {
+                    Unormal = Uhat & normal_[facei];
+                    break;
+                }
+                case mtConcentricCircle:
+                {
+                    Unormal = Uhat & normal_[0];
+                    break;
+                }
+                default:
+                {}
+            }
+
             Uhat /= mag(Uhat) + ROOTVSMALL;
-            if ((Uhat & normal_[facei]) < 0)
+
+            if (Unormal < 0)
             {
-                m *= -1.0;
+                m = -m;
             }
         }
 
-        // add mass contribution
+        // Add mass contribution
         mass_[facei] += m;
 
         if (nSector_ == 1)