diff --git a/src/catalyst/cloud/foamVtkCloudAdaptor.C b/src/catalyst/cloud/foamVtkCloudAdaptor.C
index e9b8b5e76ea3acd36c75a3da6be8b9d300b43880..a0877b82ba6df6a05bd285fecbcb25c88ce65ac7 100644
--- a/src/catalyst/cloud/foamVtkCloudAdaptor.C
+++ b/src/catalyst/cloud/foamVtkCloudAdaptor.C
@@ -98,7 +98,7 @@ Foam::vtk::cloudAdaptor::getCloudImpl
 
     auto output = vtkSmartPointer<vtkMultiPieceDataSet>::New();
 
-    auto objPtr = mesh.lookupObjectPtr<cloud>(cloudName);
+    const auto* objPtr = mesh.lookupObjectPtr<cloud>(cloudName);
     if (!objPtr)
     {
         return output;
@@ -126,12 +126,27 @@ Foam::vtk::cloudAdaptor::getCloudImpl
     {
         vtkmesh = startLagrangian(*pointsPtr);
 
-        convertLagrangianFields<label>(vtkmesh, obrTmp, matcher);
-        convertLagrangianFields<scalar>(vtkmesh, obrTmp, matcher);
-        convertLagrangianFields<vector>(vtkmesh, obrTmp, matcher);
+        // Prevent any possible conversion of positions as a field
+        obrTmp.filterKeys
+        (
+            [](const word& k)
+            {
+                return k.startsWith("position")
+                    || k.startsWith("coordinate");
+            },
+            true  // prune
+        );
+
+        // Restrict to specified fields
+        obrTmp.filterKeys(matcher);
+
+        convertLagrangianFields<label>(vtkmesh, obrTmp);
+        convertLagrangianFields<scalar>(vtkmesh, obrTmp);
+        convertLagrangianFields<vector>(vtkmesh, obrTmp);
     }
     else
     {
+        // This should never occur
         vtkmesh = vtkSmartPointer<vtkPolyData>::New();
     }
 
diff --git a/src/catalyst/cloud/foamVtkCloudAdaptor.H b/src/catalyst/cloud/foamVtkCloudAdaptor.H
index 72374e9943a06917db1a43c98b7206dd25ba95b8..2eef8b7f4ac1a23e4e4c51a62309169d9fbc9fa3 100644
--- a/src/catalyst/cloud/foamVtkCloudAdaptor.H
+++ b/src/catalyst/cloud/foamVtkCloudAdaptor.H
@@ -77,12 +77,11 @@ class cloudAdaptor
         );
 
         //- Lagrangian fields from objectRegistry
-        template<class Type, class UnaryPredicate>
+        template<class Type>
         static label convertLagrangianFields
         (
             vtkPolyData* vtkmesh,
-            const objectRegistry& obr,
-            const UnaryPredicate& pred
+            const objectRegistry& obr
         );
 
         //- Get cloud with point/cell data
diff --git a/src/catalyst/cloud/foamVtkCloudAdaptorTemplates.C b/src/catalyst/cloud/foamVtkCloudAdaptorTemplates.C
index b5024665539cabe09294b54930c12367bee29693..d2f657c7de2a5e7106e1c445168b7ba6878d9777 100644
--- a/src/catalyst/cloud/foamVtkCloudAdaptorTemplates.C
+++ b/src/catalyst/cloud/foamVtkCloudAdaptorTemplates.C
@@ -30,32 +30,14 @@ License
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
-template<class Type, class UnaryMatchPredicate>
+template<class Type>
 Foam::label Foam::vtk::cloudAdaptor::convertLagrangianFields
 (
     vtkPolyData* vtkmesh,
-    const objectRegistry& obr,
-    const UnaryMatchPredicate& pred
+    const objectRegistry& obr
 )
 {
-    label nFields = 0;
-
-    wordHashSet names(obr.names<IOField<Type>>());
-
-    // Restrict to specified names
-    names.filterKeys(pred);
-
-    // Avoid converting particle positions as a field too.
-    names.filterKeys
-    (
-        [](const word& k)
-        {
-            return k.startsWith("position") || k.startsWith("coordinate");
-        },
-        true  // prune
-    );
-
-    const wordList fieldNames(names.sortedToc());
+    const wordList fieldNames(obr.sortedNames<IOField<Type>>());
 
     for (const word& fieldName : fieldNames)
     {
@@ -71,11 +53,9 @@ Foam::label Foam::vtk::cloudAdaptor::convertLagrangianFields
         // Provide identical data as cell and as point data
         vtkmesh->GetCellData()->AddArray(data);
         vtkmesh->GetPointData()->AddArray(data);
-
-        ++nFields;
     }
 
-    return nFields;
+    return fieldNames.size();
 }