diff --git a/src/OpenFOAM/meshes/meshState/meshStateTemplates.C b/src/OpenFOAM/meshes/meshState/meshStateTemplates.C
index 06b8561ac0533f8a5cf57f1e16f7098a9e6cb199..b56905fa45d1a09240ba541c4a35455a6815785e 100644
--- a/src/OpenFOAM/meshes/meshState/meshStateTemplates.C
+++ b/src/OpenFOAM/meshes/meshState/meshStateTemplates.C
@@ -39,12 +39,14 @@ void Foam::meshState::setSolverPerformance
 {
     dictionary& dict = const_cast<dictionary&>(solverPerformanceDict());
 
-    List<SolverPerformance<Type>> perfs;
+    Pair<SolverPerformance<Type>> perfs;
 
-    if (prevTimeIndex_ != this->time().timeIndex())
+    const label timeIndex = this->time().timeIndex();
+
+    if (prevTimeIndex_ != timeIndex)
     {
         // Reset solver performance between iterations
-        prevTimeIndex_ = this->time().timeIndex();
+        prevTimeIndex_ = timeIndex;
         dict.clear();
     }
     else
@@ -52,7 +54,14 @@ void Foam::meshState::setSolverPerformance
         dict.readIfPresent(name, perfs);
     }
 
-    perfs.push_back(sp);
+    if (dict.found(name))
+    {
+        perfs.second() = sp;
+    }
+    else
+    {
+        perfs = Pair<SolverPerformance<Type>>(sp, sp);
+    }
 
     dict.set(name, perfs);
 }
diff --git a/src/finiteVolume/cfdTools/general/solutionControl/solutionControl/solutionControl.C b/src/finiteVolume/cfdTools/general/solutionControl/solutionControl/solutionControl.C
index a1630c943428dc32e049df98bb458317cec15ed6..c8d27d0cb4c0770781d2cfce9d7c73bed76475c6 100644
--- a/src/finiteVolume/cfdTools/general/solutionControl/solutionControl/solutionControl.C
+++ b/src/finiteVolume/cfdTools/general/solutionControl/solutionControl/solutionControl.C
@@ -227,7 +227,7 @@ bool Foam::solutionControl::maxTypeResidual
 
     if (fvmesh.foundObject<fieldType>(fieldName))
     {
-        const List<SolverPerformance<Type>> sp(solverPerfDictEntry.stream());
+        const Pair<SolverPerformance<Type>> sp(solverPerfDictEntry.stream());
 
         residuals.first() = cmptMax(sp.first().initialResidual());
         residuals.last()  = cmptMax(sp.last().initialResidual());
diff --git a/src/functionObjects/utilities/runTimeControl/runTimeCondition/equationInitialResidualCondition/equationInitialResidualConditionTemplates.C b/src/functionObjects/utilities/runTimeControl/runTimeCondition/equationInitialResidualCondition/equationInitialResidualConditionTemplates.C
index 52c71a4bca74fa30ca6b9130c914791c37cd60f8..706023357e6433e4a448a4f0e4c3cc15ecaafb38 100644
--- a/src/functionObjects/utilities/runTimeControl/runTimeCondition/equationInitialResidualCondition/equationInitialResidualConditionTemplates.C
+++ b/src/functionObjects/utilities/runTimeControl/runTimeCondition/equationInitialResidualCondition/equationInitialResidualConditionTemplates.C
@@ -43,7 +43,7 @@ equationInitialResidualCondition::setResidual
 
     if (canSet && mesh.foundObject<volFieldType>(fieldName))
     {
-        const List<SolverPerformance<Type>> sp(dict.lookup(fieldName));
+        const Pair<SolverPerformance<Type>> sp(dict.lookup(fieldName));
         const Type& allComponents = sp.first().initialResidual();
 
         if (componenti != -1)
diff --git a/src/functionObjects/utilities/runTimeControl/runTimeCondition/equationMaxIterCondition/equationMaxIterCondition.C b/src/functionObjects/utilities/runTimeControl/runTimeCondition/equationMaxIterCondition/equationMaxIterCondition.C
index 756e2552b158941bc51aeb699b8154e66fb39a04..ef0e5656662022761a5bcaa44553450841a15b47 100644
--- a/src/functionObjects/utilities/runTimeControl/runTimeCondition/equationMaxIterCondition/equationMaxIterCondition.C
+++ b/src/functionObjects/utilities/runTimeControl/runTimeCondition/equationMaxIterCondition/equationMaxIterCondition.C
@@ -107,7 +107,7 @@ bool Foam::functionObjects::runTimeControls::equationMaxIterCondition::apply()
 
         if (solverDict.found(fieldName))
         {
-            const List<solverPerformance> sp(solverDict.lookup(fieldName));
+            const Pair<solverPerformance> sp(solverDict.lookup(fieldName));
             const label nIterations = sp.first().nIterations();
             result[fieldi] = nIterations;
 
diff --git a/src/functionObjects/utilities/solverInfo/solverInfoTemplates.C b/src/functionObjects/utilities/solverInfo/solverInfoTemplates.C
index 5ddc9d4e6b4fbb33f4651b1459655a316aedf2cc..4438d977cee336615ada50145abb706f85db1645 100644
--- a/src/functionObjects/utilities/solverInfo/solverInfoTemplates.C
+++ b/src/functionObjects/utilities/solverInfo/solverInfoTemplates.C
@@ -119,7 +119,7 @@ void Foam::functionObjects::solverInfo::updateSolverInfo(const word& fieldName)
 
         if (solverDict.found(fieldName))
         {
-            const List<SolverPerformance<Type>> sp
+            const Pair<SolverPerformance<Type>> sp
             (
                 solverDict.lookup(fieldName)
             );