diff --git a/src/OpenFOAM/meshes/meshTools/mergePoints.C b/src/OpenFOAM/meshes/meshTools/mergePoints.C
index 04d34621977b3f7f42e47f65ac38cb463ac48b4e..506082895dadc4f0d5d92b997f84a60bab508371 100644
--- a/src/OpenFOAM/meshes/meshTools/mergePoints.C
+++ b/src/OpenFOAM/meshes/meshTools/mergePoints.C
@@ -39,23 +39,22 @@ Foam::label Foam::mergePoints
     const Type& origin
 )
 {
-    Type compareOrigin = origin;
-
-    if (origin == Type::max)
-    {
-        if (points.size())
-        {
-            compareOrigin = sum(points)/points.size();
-        }
-    }
-
     // Create a old to new point mapping array
     pointMap.setSize(points.size());
     pointMap = -1;
 
     if (points.empty())
     {
-        return points.size();
+        return 0;
+    }
+
+    // Explicitly convert to Field to support various list types
+    tmp<Field<Type>> tPoints(new Field<Type>(points));
+
+    Type compareOrigin = origin;
+    if (origin == Type::max)
+    {
+        compareOrigin = sum(tPoints())/points.size();
     }
 
     // We're comparing distance squared to origin first.
@@ -70,7 +69,7 @@ Foam::label Foam::mergePoints
     const scalar mergeTolSqr = Foam::sqr(scalar(mergeTol));
 
     // Sort points by magSqr
-    const Field<Type> d(points - compareOrigin);
+    const Field<Type> d(tPoints - compareOrigin);
 
     List<scalar> magSqrD(d.size());
     forAll(d, pointI)
@@ -98,12 +97,10 @@ Foam::label Foam::mergePoints
 
     label newPointI = 0;
 
-
     // Handle 0th point separately (is always unique)
     label pointI = order[0];
     pointMap[pointI] = newPointI++;
 
-
     for (label sortI = 1; sortI < order.size(); sortI++)
     {
         // Get original point index