diff --git a/src/finiteVolume/functionObjects/volRegion/volRegion.C b/src/finiteVolume/functionObjects/volRegion/volRegion.C
index a8f1c4c8a871798db061eb08aa2fdf9b6bf6a1b1..035160f7f12b5c670b948ed5cc5914a9ecf872ec 100644
--- a/src/finiteVolume/functionObjects/volRegion/volRegion.C
+++ b/src/finiteVolume/functionObjects/volRegion/volRegion.C
@@ -61,6 +61,9 @@ void Foam::functionObjects::volRegion::calculateCache()
     regionID_ = -1;
     cellIds_.clear();
 
+    // Update now. Need a valid state for the cellIDs() call
+    requireUpdate_ = false;
+
     switch (regionType_)
     {
         case vrtAll:
@@ -93,15 +96,18 @@ void Foam::functionObjects::volRegion::calculateCache()
         }
     }
 
-    // Cached value for nCells()
-    nCells_ = returnReduce(cellIDs().size(), sumOp<label>());
 
-    // Cached value for V()
+    // Calculate cache value for nCells() and V()
+    const labelList& selected = this->cellIDs();
+
+    nCells_ = selected.size();
     V_ = 0;
-    for (const label celli : cellIDs())
+    for (const label celli : selected)
     {
         V_ += volMesh_.V()[celli];
     }
+
+    reduce(nCells_, sumOp<label>());
     reduce(V_, sumOp<scalar>());
 
     if (!nCells_)
@@ -112,8 +118,6 @@ void Foam::functionObjects::volRegion::calculateCache()
             << "    Region has no cells" << nl
             << exit(FatalError);
     }
-
-    requireUpdate_ = false;
 }