diff --git a/applications/test/NamedEnum/Make/files b/applications/test/NamedEnum/Make/files
index 755b72ba5e929e04c15dcd5f6258eb2ac88ab808..a1a70860418d9a1c8d10f2b78e1bf79ccb1fc721 100644
--- a/applications/test/NamedEnum/Make/files
+++ b/applications/test/NamedEnum/Make/files
@@ -1,3 +1,3 @@
-Test-namedEnum.C
+Test-NamedEnum.C
 
 EXE = $(FOAM_USER_APPBIN)/Test-NamedEnum
diff --git a/applications/test/NamedEnum/Test-namedEnum.C b/applications/test/NamedEnum/Test-NamedEnum.C
similarity index 52%
rename from applications/test/NamedEnum/Test-namedEnum.C
rename to applications/test/NamedEnum/Test-NamedEnum.C
index 22f359693281abfe6019666822850a79e470d482..63386ed79ec7a192526d3703e3f7398bc8c792c9 100644
--- a/applications/test/NamedEnum/Test-namedEnum.C
+++ b/applications/test/NamedEnum/Test-NamedEnum.C
@@ -34,26 +34,28 @@ class namedEnumTest
 {
 public:
 
-    enum options
+    enum option
     {
         a,
         b,
-        c
+        c,
+        d
     };
 
-    static const Foam::NamedEnum<options, 3> namedEnum;
+    static const Foam::NamedEnum<option, 4> namedEnum;
 };
 
 
 template<>
-const char* Foam::NamedEnum<namedEnumTest::options, 3>::names[] =
+const char* Foam::NamedEnum<namedEnumTest::option, 4>::names[] =
 {
     "a",
     "b",
-    "c"
+    "c",
+    "d"
 };
 
-const Foam::NamedEnum<namedEnumTest::options, 3> namedEnumTest::namedEnum;
+const Foam::NamedEnum<namedEnumTest::option, 4> namedEnumTest::namedEnum;
 
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -61,11 +63,47 @@ const Foam::NamedEnum<namedEnumTest::options, 3> namedEnumTest::namedEnum;
 
 int main(int argc, char *argv[])
 {
-    Info<< namedEnumTest::namedEnum["a"] << endl;
-    Info<< namedEnumTest::namedEnum[namedEnumTest::a] << endl;
+    const List<namedEnumTest::option> options
+        = namedEnumTest::namedEnum.enums();
 
-    namedEnumTest::options hmm(namedEnumTest::namedEnum.read(Sin));
-    Info<< namedEnumTest::namedEnum[hmm] << endl;
+    Info<< "enums: " << options << nl;
+
+    Info<< "loop over enums (as list):" << nl;
+    forAll(options, i)
+    {
+        const namedEnumTest::option& opt = options[i];
+
+        Info<< "option[" << opt
+            << "] = '" << namedEnumTest::namedEnum[opt] << "'" << nl;
+    }
+
+#if __cplusplus > 201100L
+    // C++11
+    Info<< "loop over enums (C++11 for range):" << nl;
+    for (auto const& opt : options)
+    {
+        Info<< "option[" << opt
+            << "] = '" << namedEnumTest::namedEnum[opt] << "'" << nl;
+    }
+#else
+    Info<< "loop over enums (via iterator):" << nl;
+    forAllConstIter(List<namedEnumTest::option>, options, iter)
+    {
+        const namedEnumTest::option& opt = *iter;
+
+        Info<< "option[" << opt
+            << "] = '" << namedEnumTest::namedEnum[opt] << "'" << nl;
+    }
+#endif
+
+    Info<< nl
+        << namedEnumTest::namedEnum["a"] << nl
+        << namedEnumTest::namedEnum[namedEnumTest::a] << nl;
+
+    Info<< "--- test read construction ---" << endl;
+
+    namedEnumTest::option dummy(namedEnumTest::namedEnum.read(Sin));
+    Info<< namedEnumTest::namedEnum[dummy] << endl;
 
     Info<< "End\n" << endl;
 
diff --git a/src/OpenFOAM/containers/NamedEnum/NamedEnum.C b/src/OpenFOAM/containers/NamedEnum/NamedEnum.C
index ba5bd4999dc79a4cf08033c0655beeea8657f5ac..99f723d987f70096c3962c70589d1938bf06dfb5 100644
--- a/src/OpenFOAM/containers/NamedEnum/NamedEnum.C
+++ b/src/OpenFOAM/containers/NamedEnum/NamedEnum.C
@@ -120,4 +120,23 @@ Foam::wordList Foam::NamedEnum<Enum, nEnum>::words()
 }
 
 
+template<class Enum, int nEnum>
+Foam::List<Enum> Foam::NamedEnum<Enum, nEnum>::enums()
+{
+    List<Enum> lst(nEnum);
+
+    label nElem = 0;
+    for (int enumI = 0; enumI < nEnum; ++enumI)
+    {
+        if (names[enumI] && names[enumI][0])
+        {
+            lst[nElem++] = Enum(enumI);
+        }
+    }
+
+    lst.setSize(nElem);
+    return lst;
+}
+
+
 // ************************************************************************* //
diff --git a/src/OpenFOAM/containers/NamedEnum/NamedEnum.H b/src/OpenFOAM/containers/NamedEnum/NamedEnum.H
index f4af06792cadd8a8aae25d79900ae4b7ef8b673b..6005f86a607b2ef9aa1df0bed2bd235f7a6b843d 100644
--- a/src/OpenFOAM/containers/NamedEnum/NamedEnum.H
+++ b/src/OpenFOAM/containers/NamedEnum/NamedEnum.H
@@ -45,6 +45,9 @@ SourceFiles
 namespace Foam
 {
 
+// Forward declaration
+template<class Enum, int> class NamedEnum;
+
 /*---------------------------------------------------------------------------*\
                           Class NamedEnum Declaration
 \*---------------------------------------------------------------------------*/
@@ -60,10 +63,10 @@ class NamedEnum
     // Private Member Functions
 
         //- Disallow default bitwise copy construct
-        NamedEnum(const NamedEnum&);
+        NamedEnum(const NamedEnum&) = delete;
 
         //- Disallow default bitwise assignment
-        void operator=(const NamedEnum&);
+        void operator=(const NamedEnum&) = delete;
 
 
 public:
@@ -95,6 +98,9 @@ public:
         //- The set of names as a list of words
         static wordList words();
 
+        //- List of enumerations
+        static List<Enum> enums();
+
 
     // Member Operators