diff --git a/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H b/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H
index 8ab5f7cef4c1c2e5888b4092fe69b9d5f7244d27..b186893484bcd0ca451f9347db9bcd33b5f22d4f 100644
--- a/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H
+++ b/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H
@@ -79,12 +79,14 @@ inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::setSize
     const label s
 )
 {
-    if (s < List<T>::size())
+    if (s <= List<T>::size())
     {
+        // shrink addressable size, leave allocated size untouched
         List<T>::size(s);
     }
-    else
+    else if (s > allocSize_)
     {
+        // increase allocated size, leave addressable size untouched
         label nextFree = List<T>::size();
         allocSize_ = s;
         List<T>::setSize(allocSize_);
@@ -100,17 +102,30 @@ inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::setSize
     const T& t
 )
 {
-    if (s < List<T>::size())
+    if (s <= List<T>::size())
     {
+        // shrink addressable size, leave allocated size untouched
         List<T>::size(s);
     }
-    else
+    else if (s > allocSize_)
     {
+        // increase allocated size, leave addressable size untouched
+        // fill in newly allocated values with constant value
         label nextFree = List<T>::size();
         allocSize_ = s;
         List<T>::setSize(allocSize_, t);
         List<T>::size(nextFree);
     }
+    else
+    {
+        // leave allocated and addressable sizes untouched
+        // fill in new exposed values with constant value
+        label nextFree = List<T>::size();
+        while (nextFree < s)
+        {
+            this->operator[](nextFree++) = t;
+        }
+    }
 }