diff --git a/applications/test/DynamicList2/Make/files b/applications/test/DynamicList2/Make/files
new file mode 100644
index 0000000000..78b8198c6a
--- /dev/null
+++ b/applications/test/DynamicList2/Make/files
@@ -0,0 +1,3 @@
+Test-DynamicList2.C
+
+EXE = $(FOAM_USER_APPBIN)/Test-DynamicList2
diff --git a/applications/test/DynamicList2/Make/options b/applications/test/DynamicList2/Make/options
new file mode 100644
index 0000000000..18e6fe47af
--- /dev/null
+++ b/applications/test/DynamicList2/Make/options
@@ -0,0 +1,2 @@
+/* EXE_INC = */
+/* EXE_LIBS = */
diff --git a/applications/test/DynamicList2/Test-DynamicList2.C b/applications/test/DynamicList2/Test-DynamicList2.C
new file mode 100644
index 0000000000..b199e67579
--- /dev/null
+++ b/applications/test/DynamicList2/Test-DynamicList2.C
@@ -0,0 +1,155 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | www.openfoam.com
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+ Copyright (C) 2021 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+Description
+ Test allocation patterns when reading into an existing list.
+
+\*---------------------------------------------------------------------------*/
+
+#include "DynamicList.H"
+#include "DynamicField.H"
+#include "IOstreams.H"
+#include "ITstream.H"
+#include "OTstream.H"
+#include "StringStream.H"
+#include "FlatOutput.H"
+#include "ListOps.H"
+#include "labelRange.H"
+#include "labelIndList.H"
+
+using namespace Foam;
+
+template
+void printInfo
+(
+ const word& tag,
+ const DynamicList& list,
+ const bool showSize = true
+)
+{
+ Info<< '<' << tag;
+ if (showSize)
+ {
+ Info<< " size=\"" << list.size()
+ << "\" capacity=\"" << list.capacity() << "\"";
+ if (list.cdata())
+ {
+ Info<< " ptr=\"" << name(list.cdata()) << "\"";
+ }
+ else
+ {
+ Info<< " ptr=\"nullptr\"";
+ }
+ }
+ Info<< '>' << nl << flatOutput(list) << nl
+ << "" << tag << ">\n" << endl;
+}
+
+
+template
+void printInfo
+(
+ const word& tag,
+ const DynamicField& list,
+ const bool showSize = true
+)
+{
+ Info<< '<' << tag;
+ if (showSize)
+ {
+ Info<< " size=\"" << list.size()
+ << "\" capacity=\"" << list.capacity() << "\"";
+ if (list.cdata())
+ {
+ Info<< " ptr=\"" << name(list.cdata()) << "\"";
+ }
+ else
+ {
+ Info<< " ptr=\"nullptr\"";
+ }
+ }
+ Info<< '>' << nl << flatOutput(list) << nl
+ << "" << tag << ">\n" << endl;
+}
+
+
+template
+void readList
+(
+ DynamicList& output,
+ const UList& input
+)
+{
+ OTstream os;
+ os << input;
+ ITstream is("input", os.tokens());
+
+ is >> output;
+}
+
+template
+void readList
+(
+ DynamicField& output,
+ const UList& input
+)
+{
+ OTstream os;
+ os << input;
+ ITstream is("input", os.tokens());
+
+ is >> output;
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+// Main program:
+
+int main(int argc, char *argv[])
+{
+ //
+ {
+ DynamicList