diff --git a/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H b/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H
index d6553dcfabe4c01522a8fa3805239c1c27cd77c2..2738b414b08c8de07b0bd1d9e09d4942f7402efe 100644
--- a/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H
+++ b/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H
@@ -182,9 +182,14 @@ public:
         //- Assignment of all addressed entries to the given value
         inline void operator=(const T&);
 
-        //- Assignment from List<T>. Also handles assignment from DynamicList.
-        inline void operator=(const UList<T>&);
+        //- Assignment from DynamicList
+        inline void operator=
+        (
+            const DynamicList<T, SizeInc, SizeMult, SizeDiv>&
+        );
 
+        //- Assignment from List<T>.
+        inline void operator=(const UList<T>&);
 
     // IOstream operators
 
diff --git a/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H b/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H
index f1e7d40dd60dbd5b1860d79be57c16452ec3a24c..c573a5df5e66bf2ceb5a3d4cbed6a66cc82a146a 100644
--- a/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H
+++ b/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H
@@ -334,13 +334,36 @@ inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::operator=
 (
     const UList<T>& lst
 )
+{
+    if (capacity_ >= lst.size())
+    {
+        // can copy w/o reallocating, match initial size to avoid reallocation
+        List<T>::size(lst.size());
+        List<T>::operator=(lst);
+    }
+    else
+    {
+        // make everything available for the copy operation
+        List<T>::size(capacity_);
+
+        List<T>::operator=(lst);
+        capacity_ = List<T>::size();
+    }
+}
+
+
+template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
+inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::operator=
+(
+    const DynamicList<T, SizeInc, SizeMult, SizeDiv>& lst
+)
 {
     if (this == &lst)
     {
         FatalErrorIn
         (
             "DynamicList<T, SizeInc, SizeMult, SizeDiv>::operator="
-            "(const UList<T>&)"
+            "(const DynamicList<T, SizeInc, SizeMult, SizeDiv>&)"
         )   << "attempted assignment to self" << abort(FatalError);
     }