diff --git a/src/OpenFOAM/db/Time/TimeIO.C b/src/OpenFOAM/db/Time/TimeIO.C
index fc6ac5d723eb46811781aa23c3ace56726644563..b40552da930d5ad1451b539bab7c8c3923a734cb 100644
--- a/src/OpenFOAM/db/Time/TimeIO.C
+++ b/src/OpenFOAM/db/Time/TimeIO.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -26,6 +26,7 @@ License
 #include "Time.H"
 #include "Pstream.H"
 #include "simpleObjectRegistry.H"
+#include "dimensionedConstants.H"
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
@@ -45,54 +46,42 @@ void Foam::Time::readDict()
     // Debug switches
     if (controlDict_.found("DebugSwitches"))
     {
+        Info<< "Overriding DebugSwitches according to " << controlDict_.name()
+            << endl;
+
         simpleObjectRegistry& objects = debug::debugObjects();
         const dictionary& localSettings = controlDict_.subDict("DebugSwitches");
         forAllConstIter(dictionary, localSettings, iter)
         {
             const word& name = iter().keyword();
-            simpleObjectRegistry::iterator fnd = objects.find(name);
-            if (fnd != objects.end())
+
+            simpleRegIOobject* objPtr = objects.lookupPtr(name);
+
+            if (objPtr)
             {
-                Info<< controlDict_.name() << " : overriding debug switch : "
-                    << iter() << endl;
+                Info<< "    " << iter() << endl;
 
                 if (iter().isDict())
                 {
                     OStringStream os(IOstream::ASCII);
                     os  << iter().dict();
                     IStringStream is(os.str());
-                    fnd()->readData(is);
+                    objPtr->readData(is);
                 }
                 else
                 {
-                    fnd()->readData(iter().stream());
+                    objPtr->readData(iter().stream());
                 }
             }
         }
     }
 
-    // Dimension sets
-    if (controlDict_.found("DimensionSets"))
-    {
-        dictionary dict(Foam::dimensionSystems());
-        dict.merge(controlDict_.subDict("DimensionSets"));
-
-        simpleObjectRegistry& objects = debug::dimensionSetObjects();
-        simpleObjectRegistry::iterator fnd = objects.find("DimensionSets");
-        if (fnd != objects.end())
-        {
-            Info<< controlDict_.name() << " : overriding DimensionSets" << endl;
-
-            OStringStream os(IOstream::ASCII);
-            os  << dict;
-            IStringStream is(os.str());
-            fnd()->readData(is);
-        }
-    }
-
     // Optimisation Switches
     if (controlDict_.found("OptimisationSwitches"))
     {
+        Info<< "Overriding OptimisationSwitches according to "
+            << controlDict_.name() << endl;
+
         simpleObjectRegistry& objects = debug::optimisationObjects();
         const dictionary& localSettings = controlDict_.subDict
         (
@@ -101,28 +90,192 @@ void Foam::Time::readDict()
         forAllConstIter(dictionary, localSettings, iter)
         {
             const word& name = iter().keyword();
-            simpleObjectRegistry::iterator fnd = objects.find(name);
-            if (fnd != objects.end())
+
+            simpleRegIOobject* objPtr = objects.lookupPtr(name);
+
+            if (objPtr)
             {
-                Info<< controlDict_.name()
-                    << " : overriding optimisation switch : " << iter() << endl;
+                Info<< "    " << iter() << endl;
 
                 if (iter().isDict())
                 {
                     OStringStream os(IOstream::ASCII);
                     os  << iter().dict();
                     IStringStream is(os.str());
-                    fnd()->readData(is);
+                    objPtr->readData(is);
                 }
                 else
                 {
-                    fnd()->readData(iter().stream());
+                    objPtr->readData(iter().stream());
                 }
             }
         }
     }
 
 
+    // DimensionedConstants. Handled as a special case since both e.g.
+    // the 'unitSet' might be changed and the individual values
+    if (controlDict_.found("DimensionedConstants"))
+    {
+        Info<< "Overriding DimensionedConstants according to "
+            << controlDict_.name() << endl;
+
+        // Change in-memory
+        dimensionedConstants().merge
+        (
+            controlDict_.subDict("DimensionedConstants")
+        );
+
+
+        simpleObjectRegistry& objects = debug::dimensionedConstantObjects();
+
+        IStringStream dummyIs("");
+
+        forAllConstIter(simpleObjectRegistry, objects, iter)
+        {
+            iter()->readData(dummyIs);
+
+            Info<< "    ";
+            iter()->writeData(Info);
+            Info<< endl;
+        }
+    }
+
+
+
+    //{
+    //    // fundamentalConstants.C
+    //    Info<< "constant::universal::hr:"
+    //        << Foam::constant::universal::hr
+    //        << endl;
+    //    Info<< "constant::universal::c:"
+    //        << Foam::constant::universal::c
+    //        << endl;
+    //    Info<< "constant::universal::G:"
+    //        << Foam::constant::universal::G
+    //        << endl;
+    //    Info<< "constant::universal::h:"
+    //        << Foam::constant::universal::h
+    //        << endl;
+    //    Info<< "constant::electromagnetic::e:"
+    //        << Foam::constant::electromagnetic::e
+    //        << endl;
+    //    Info<< "constant::atomic::me:"
+    //        << Foam::constant::atomic::me
+    //        << endl;
+    //    Info<< "constant::atomic::mp:"
+    //        << Foam::constant::atomic::mp
+    //        << endl;
+    //    Info<< "constant::physicoChemical::mu:"
+    //        << Foam::constant::physicoChemical::mu
+    //        << endl;
+    //    Info<< "constant::physicoChemical::NA:"
+    //        << Foam::constant::physicoChemical::NA
+    //        << endl;
+    //    Info<< "constant::physicoChemical::k:"
+    //        << Foam::constant::physicoChemical::k
+    //        << endl;
+    //    Info<< "constant::standard::Pstd:"
+    //        << Foam::constant::standard::Pstd
+    //        << endl;
+    //    Info<< "constant::standard::Tstd:"
+    //        << Foam::constant::standard::Tstd
+    //        << endl;
+    //
+    //    // universalConstants.C
+    //    Info<< "constant::universal::hr:"
+    //        << Foam::constant::universal::hr
+    //        << endl;
+    //
+    //    // electromagneticConstants.C
+    //    Info<< "constant::electromagnetic::mu0:"
+    //        << Foam::constant::electromagnetic::mu0
+    //        << endl;
+    //    Info<< "constant::electromagnetic::epsilon0:"
+    //        << Foam::constant::electromagnetic::epsilon0
+    //        << endl;
+    //    Info<< "constant::electromagnetic::Z0:"
+    //        << Foam::constant::electromagnetic::Z0
+    //        << endl;
+    //    Info<< "constant::electromagnetic::kappa:"
+    //        << Foam::constant::electromagnetic::kappa
+    //        << endl;
+    //    Info<< "constant::electromagnetic::G0:"
+    //        << Foam::constant::electromagnetic::G0
+    //        << endl;
+    //    Info<< "constant::electromagnetic::KJ:"
+    //        << Foam::constant::electromagnetic::KJ
+    //        << endl;
+    //    Info<< "constant::electromagnetic::RK:"
+    //        << Foam::constant::electromagnetic::RK
+    //        << endl;
+    //
+    //
+    //    // atomicConstants.C
+    //    Info<< "constant::atomic::alpha:"
+    //        << Foam::constant::atomic::alpha
+    //        << endl;
+    //    Info<< "constant::atomic::Rinf:"
+    //        << Foam::constant::atomic::Rinf
+    //        << endl;
+    //    Info<< "constant::atomic::a0:"
+    //        << Foam::constant::atomic::a0
+    //        << endl;
+    //    Info<< "constant::physiatomic::re:"
+    //        << Foam::constant::atomic::re
+    //        << endl;
+    //    Info<< "constant::atomic::Eh:"
+    //        << Foam::constant::atomic::Eh
+    //        << endl;
+    //
+    //
+    //    // physicoChemicalConstants.C
+    //    Info<< "constant::physicoChemical::R:"
+    //        << Foam::constant::physicoChemical::R
+    //        << endl;
+    //    Info<< "constant::physicoChemical::F:"
+    //        << Foam::constant::physicoChemical::F
+    //        << endl;
+    //    Info<< "constant::physicoChemical::sigma:"
+    //        << Foam::constant::physicoChemical::sigma
+    //        << endl;
+    //    Info<< "constant::physicoChemical::b:"
+    //        << Foam::constant::physicoChemical::b
+    //        << endl;
+    //    Info<< "constant::physicoChemical::c1:"
+    //        << Foam::constant::physicoChemical::c1
+    //        << endl;
+    //    Info<< "constant::physicoChemical::c2:"
+    //        << Foam::constant::physicoChemical::c2
+    //        << endl;
+    //}
+
+
+    // Dimension sets
+    if (controlDict_.found("DimensionSets"))
+    {
+        Info<< "Overriding DimensionSets according to "
+            << controlDict_.name() << endl;
+
+        dictionary dict(Foam::dimensionSystems());
+        dict.merge(controlDict_.subDict("DimensionSets"));
+
+        simpleObjectRegistry& objects = debug::dimensionSetObjects();
+
+        simpleRegIOobject* objPtr = objects.lookupPtr("DimensionSets");
+
+        if (objPtr)
+        {
+            Info<< controlDict_.subDict("DimensionSets") << endl;
+
+            OStringStream os(IOstream::ASCII);
+            os  << dict;
+            IStringStream is(os.str());
+            objPtr->readData(is);
+        }
+    }
+
+
 
     if (!deltaTchanged_)
     {
diff --git a/src/OpenFOAM/global/constants/atomic/atomicConstants.C b/src/OpenFOAM/global/constants/atomic/atomicConstants.C
index f6af6660d4bb420ac0047cf7ecca41e4cfab7e6e..eaa9f18f6bd5455e3d34ff816bfa090d568d3c39 100644
--- a/src/OpenFOAM/global/constants/atomic/atomicConstants.C
+++ b/src/OpenFOAM/global/constants/atomic/atomicConstants.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -32,100 +32,107 @@ License
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-const char* const Foam::constant::atomic::group = "atomic";
+namespace Foam
+{
+namespace constant
+{
 
+const char* const atomic::group = "atomic";
 
-const Foam::dimensionedScalar Foam::constant::atomic::alpha
+
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    atomic::group,
+    atomic::alpha,
+    dimensionedScalar
     (
-        group,
         "alpha",
-        dimensionedScalar
-        (
-            "alpha",
-            sqr(constant::electromagnetic::e)
-           /(
-                dimensionedScalar("C", dimless, 2.0)
-               *constant::electromagnetic::epsilon0
-               *constant::universal::h
-               *constant::universal::c
-            )
+        sqr(electromagnetic::e)
+       /(
+            dimensionedScalar("C", dimless, 2.0)
+           *electromagnetic::epsilon0
+           *universal::h
+           *universal::c
         )
-    )
+    ),
+    constantatomicalpha,
+    "alpha"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::atomic::Rinf
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    atomic::group,
+    atomic::Rinf,
+    dimensionedScalar
     (
-        group,
         "Rinf",
-        dimensionedScalar
-        (
-            "Rinf",
-            sqr(alpha)*me*constant::universal::c
-           /(dimensionedScalar("C", dimless, 2.0)*constant::universal::h)
-        )
-    )
+        sqr(atomic::alpha)
+       *atomic::me
+       *universal::c
+       /(Foam::dimensionedScalar("C", Foam::dimless, 2.0)*universal::h)
+    ),
+    constantatomicRinf,
+    "Rinf"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::atomic::a0
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    atomic::group,
+    atomic::a0,
+    dimensionedScalar
     (
-        group,
         "a0",
-        dimensionedScalar
-        (
-            "a0",
-            alpha
-           /(
-               dimensionedScalar("C", dimless, 4.0*constant::mathematical::pi)
-              *Rinf
-           )
+        atomic::alpha
+       /(
+           Foam::dimensionedScalar("C", Foam::dimless, 4.0*mathematical::pi)
+          *atomic::Rinf
         )
-    )
+    ),
+    constantatomica0,
+    "a0"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::atomic::re
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    atomic::group,
+    atomic::re,
+    dimensionedScalar
     (
-        group,
         "re",
-        dimensionedScalar
-        (
-            "re",
-            sqr(constant::electromagnetic::e)
-           /(
-                dimensionedScalar("C", dimless, 4.0*constant::mathematical::pi)
-               *constant::electromagnetic::epsilon0
-               *me
-               *sqr(constant::universal::c)
-            )
+        Foam::sqr(electromagnetic::e)
+       /(
+            Foam::dimensionedScalar("C", Foam::dimless, 4.0*mathematical::pi)
+           *electromagnetic::epsilon0
+           *atomic::me
+           *Foam::sqr(universal::c)
         )
-    )
+    ),
+    constantatomicre,
+    "re"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::atomic::Eh
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    atomic::group,
+    atomic::Eh,
+    dimensionedScalar
     (
-        group,
         "Eh",
-        dimensionedScalar
-        (
-            "Eh",
-            dimensionedScalar("C", dimless, 2.0)
-           *Rinf*constant::universal::h*constant::universal::c
-        )
-    )
+        Foam::dimensionedScalar("C", Foam::dimless, 2.0)
+       *atomic::Rinf*universal::h*universal::c
+    ),
+    constantatomicEh,
+    "Eh"
 );
 
 
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace constant
+} // End namespace Foam
+
 // ************************************************************************* //
diff --git a/src/OpenFOAM/global/constants/constants.C b/src/OpenFOAM/global/constants/constants.C
index 94eb57cffd344f2482924259a8209c9be3e707bf..202855d8d2bfaad8ea3bed3721c066ef55e05b08 100644
--- a/src/OpenFOAM/global/constants/constants.C
+++ b/src/OpenFOAM/global/constants/constants.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -28,7 +28,7 @@ License
 // Constants supplied in the main controlDict
 #include "fundamentalConstants.C"
 
-// Derived constants
+// Derived constants. Note:order is important
 #include "universalConstants.C"
 #include "electromagneticConstants.C"
 #include "atomicConstants.C"
diff --git a/src/OpenFOAM/global/constants/dimensionedConstants.H b/src/OpenFOAM/global/constants/dimensionedConstants.H
index 010addd4cf25c29370422f6edb857245a94d1018..188f755cac36b183653cdbec3718578bfd026e90 100644
--- a/src/OpenFOAM/global/constants/dimensionedConstants.H
+++ b/src/OpenFOAM/global/constants/dimensionedConstants.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -92,6 +92,104 @@ T dimensionedConstant
 }
 
 
+//- Defined dimensioned constant , lookup as \a Name
+#define defineDimensionedConstant(Group,Switch,Tag,Name)                      \
+    const Foam::dimensionedScalar Switch;                                     \
+    class add##Tag##ToDimensionedConstant                                     \
+    :                                                                         \
+        public Foam::simpleRegIOobject                                        \
+    {                                                                         \
+    public:                                                                   \
+        add##Tag##ToDimensionedConstant(const char* name)                     \
+        :                                                                     \
+            Foam::simpleRegIOobject                                           \
+            (Foam::debug::addDimensionedConstantObject,name)                  \
+        {                                                                     \
+            Foam::dimensionedScalar ds                                        \
+            (                                                                 \
+                Foam::dimensionedConstant                                     \
+                (                                                             \
+                    Group,                                                    \
+                    Name                                                      \
+                )                                                             \
+            );                                                                \
+            Foam::dimensionedScalar& s = const_cast<Foam::dimensionedScalar&> \
+            (                                                                 \
+                Switch                                                        \
+            );                                                                \
+            s.dimensions().reset(ds.dimensions());                            \
+            s = ds;                                                           \
+        }                                                                     \
+        virtual ~add##Tag##ToDimensionedConstant()                            \
+        {}                                                                    \
+        virtual void readData(Foam::Istream& is)                              \
+        {                                                                     \
+            const_cast<Foam::dimensionedScalar&>(Switch) =                    \
+                Foam::dimensionedConstant                                     \
+                (                                                             \
+                    Group,                                                    \
+                    Name                                                      \
+                );                                                            \
+        }                                                                     \
+        virtual void writeData(Foam::Ostream& os) const                       \
+        {                                                                     \
+            os << Switch;                                                     \
+        }                                                                     \
+    };                                                                        \
+    add##Tag##ToDimensionedConstant add##Tag##ToDimensionedConstant_(Name)
+
+
+//- Defined dimensioned constant with default , lookup as \a Name
+#define defineDimensionedConstantWithDefault\
+(Group,Switch,DefaultExpr,Tag,Name)                                           \
+    const Foam::dimensionedScalar Switch;                                     \
+    class add##Tag##ToDimensionedConstantWithDefault                          \
+    :                                                                         \
+        public Foam::simpleRegIOobject                                        \
+    {                                                                         \
+    public:                                                                   \
+        add##Tag##ToDimensionedConstantWithDefault(const char* name)          \
+        :                                                                     \
+            Foam::simpleRegIOobject                                           \
+            (Foam::debug::addDimensionedConstantObject,name)                  \
+        {                                                                     \
+            Foam::dimensionedScalar ds                                        \
+            (                                                                 \
+                Foam::dimensionedConstant                                     \
+                (                                                             \
+                    Group,                                                    \
+                    Name,                                                     \
+                    Foam::dimensionedScalar(Name,DefaultExpr)                 \
+                )                                                             \
+            );                                                                \
+            Foam::dimensionedScalar& s = const_cast<Foam::dimensionedScalar&> \
+            (                                                                 \
+                Switch                                                        \
+            );                                                                \
+            s.dimensions().reset(ds.dimensions());                            \
+            s = ds;                                                           \
+        }                                                                     \
+        virtual ~add##Tag##ToDimensionedConstantWithDefault()                 \
+        {}                                                                    \
+        virtual void readData(Foam::Istream& is)                              \
+        {                                                                     \
+            const_cast<Foam::dimensionedScalar&>(Switch) =                    \
+                Foam::dimensionedConstant                                     \
+                (                                                             \
+                    Group,                                                    \
+                    Name,                                                     \
+                    Foam::dimensionedScalar(Name,DefaultExpr)                 \
+                );                                                            \
+        }                                                                     \
+        virtual void writeData(Foam::Ostream& os) const                       \
+        {                                                                     \
+            os << Switch;                                                     \
+        }                                                                     \
+    };                                                                        \
+    add##Tag##ToDimensionedConstantWithDefault                                \
+        add##Tag##ToDimensionedConstantWithDefault_(Name)
+
+
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 } // End namespace Foam
diff --git a/src/OpenFOAM/global/constants/electromagnetic/electromagneticConstants.C b/src/OpenFOAM/global/constants/electromagnetic/electromagneticConstants.C
index 4297e24f4c5bfa272db00781e2334ca87f991571..2237f78e98d9c17901266b7cea686f513fce5bf3 100644
--- a/src/OpenFOAM/global/constants/electromagnetic/electromagneticConstants.C
+++ b/src/OpenFOAM/global/constants/electromagnetic/electromagneticConstants.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -32,135 +32,145 @@ License
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-const char* const Foam::constant::electromagnetic::group = "electromagnetic";
+namespace Foam
+{
+namespace constant
+{
 
+const char* const electromagnetic::group = "electromagnetic";
 
-const Foam::dimensionedScalar Foam::constant::electromagnetic::mu0
+
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    electromagnetic::group,
+    electromagnetic::mu0,
+    dimensionedScalar
     (
-        group,
         "mu0",
-        dimensionedScalar
-        (
-            "mu0",
-            dimensionSet(1, 1, -2, 0, 0, -2, 0),
-            4.0*constant::mathematical::pi*1e-07
-        )
-    )
+        dimensionSet(1, 1, -2, 0, 0, -2, 0),
+        4.0*mathematical::pi*1e-07
+    ),
+    constantelectromagneticmu0,
+    "mu0"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::electromagnetic::epsilon0
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    electromagnetic::group,
+    electromagnetic::epsilon0,
+
+    dimensionedScalar
     (
-        group,
         "epsilon0",
-        dimensionedScalar
-        (
-            "epsilon0",
-            dimensionedScalar("C", dimless, 1.0)
-           /(mu0*sqr(constant::universal::c))
-        )
-    )
+        dimensionedScalar("C", dimless, 1.0)
+       /(electromagnetic::mu0*sqr(universal::c))
+    ),
+    constantelectromagneticepsilon0,
+    "epsilon0"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::electromagnetic::Z0
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    electromagnetic::group,
+    electromagnetic::Z0,
+    dimensionedScalar
     (
-        group,
         "Z0",
-        dimensionedScalar
-        (
-            "Z0",
-            mu0*constant::universal::c
-        )
-    )
+        electromagnetic::mu0*universal::c
+    ),
+    constantelectromagneticZ0,
+    "Z0"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::electromagnetic::kappa
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    electromagnetic::group,
+    electromagnetic::kappa,
+
+    dimensionedScalar
     (
-        group,
         "kappa",
         dimensionedScalar
         (
-            "kappa",
-            dimensionedScalar
-            (
-                "C",
-                dimless,
-                1.0/(4.0*constant::mathematical::pi)
-            )
-           /epsilon0
+            "C",
+            Foam::dimless,
+            1.0/(4.0*mathematical::pi)
         )
-    )
+       /electromagnetic::epsilon0
+    ),
+
+    constantelectromagnetickappa,
+    "kappa"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::electromagnetic::G0
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    electromagnetic::group,
+    electromagnetic::G0,
+    dimensionedScalar
     (
-        group,
         "G0",
-        dimensionedScalar
-        (
-            "G0",
-            dimensionedScalar("C", dimless, 2)*sqr(e)/constant::universal::h
-        )
-    )
+        dimensionedScalar("C", dimless, 2)
+       *sqr(electromagnetic::e)
+       /universal::h
+    ),
+    constantelectromagneticG0,
+    "G0"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::electromagnetic::KJ
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    electromagnetic::group,
+    electromagnetic::KJ,
+    dimensionedScalar
     (
-        group,
         "KJ",
-        dimensionedScalar
-        (
-            "KJ",
-            dimensionedScalar("C", dimless, 2)*e/constant::universal::h
-        )
-    )
+        dimensionedScalar("C", dimless, 2)
+       *electromagnetic::e
+       /universal::h
+    ),
+    constantelectromagneticKJ,
+    "KJ"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::electromagnetic::phi0
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    electromagnetic::group,
+    electromagnetic::phi0,
+    dimensionedScalar
     (
-        group,
         "phi0",
-        dimensionedScalar
-        (
-            "phi0",
-            constant::universal::h/(dimensionedScalar("C", dimless, 2)*e)
-        )
-    )
+        universal::h
+       /(dimensionedScalar("C", dimless, 2)*electromagnetic::e)
+    ),
+    constantelectromagneticphi0,
+    "phi0"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::electromagnetic::RK
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    electromagnetic::group,
+    electromagnetic::RK,
+    dimensionedScalar
     (
-        group,
         "RK",
-        dimensionedScalar
-        (
-            "RK",
-            constant::universal::h/sqr(e)
-        )
-    )
+        universal::h/Foam::sqr(electromagnetic::e)
+    ),
+    constantelectromagneticRK,
+    "RK"
 );
 
 
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace constant
+} // End namespace Foam
+
 // ************************************************************************* //
diff --git a/src/OpenFOAM/global/constants/fundamental/fundamentalConstants.C b/src/OpenFOAM/global/constants/fundamental/fundamentalConstants.C
index 3e85524f492ea260b51558d5737ceaed4607bd23..b51e8dc2d68e65408892b5fc6a5318415e0554b5 100644
--- a/src/OpenFOAM/global/constants/fundamental/fundamentalConstants.C
+++ b/src/OpenFOAM/global/constants/fundamental/fundamentalConstants.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -39,89 +39,127 @@ Description
 
 // Universal constants
 
-const Foam::dimensionedScalar Foam::constant::universal::c
+namespace Foam
+{
+namespace constant
+{
+
+defineDimensionedConstant
 (
-    dimensionedConstant(universal::group, "c")
+    universal::group,
+    universal::c,
+    constantuniversalc,
+    "c"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::universal::G
+defineDimensionedConstant
 (
-    dimensionedConstant(universal::group, "G")
+    universal::group,
+    universal::G,
+    constantuniversalG,
+    "G"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::universal::h
+defineDimensionedConstant
 (
-    dimensionedConstant(universal::group, "h")
+    universal::group,
+    universal::h,
+    constantuniversalh,
+    "h"
 );
 
 
 // Electromagnetic
 
-const Foam::dimensionedScalar Foam::constant::electromagnetic::e
+defineDimensionedConstant
 (
-    dimensionedConstant(electromagnetic::group, "e")
+    electromagnetic::group,
+    electromagnetic::e,
+    constantelectromagnetice,
+    "e"
 );
 
 
 // Atomic
 
-const Foam::dimensionedScalar Foam::constant::atomic::me
+defineDimensionedConstant
 (
-    dimensionedConstant(atomic::group, "me")
+    atomic::group,
+    atomic::me,
+    constantatomicme,
+    "me"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::atomic::mp
+defineDimensionedConstant
 (
-    dimensionedConstant(atomic::group, "mp")
+    atomic::group,
+    atomic::mp,
+    constantatomicmp,
+    "mp"
 );
 
 
 // Physico-chemical
 
-const Foam::dimensionedScalar Foam::constant::physicoChemical::mu
+defineDimensionedConstant
 (
-    dimensionedConstant(physicoChemical::group, "mu")
+    physicoChemical::group,
+    physicoChemical::mu,
+    constantphysicoChemicalmu,
+    "mu"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::physicoChemical::NA
+defineDimensionedConstantWithDefault
 (
-//    dimensionedConstant(physicoChemical::group, "NA")
-    dimensionedConstant
+    physicoChemical::group,
+    physicoChemical::NA,
+    Foam::dimensionedScalar
     (
-        physicoChemical::group,
         "NA",
-        dimensionedScalar
-        (
-            "NA",
-            dimless/dimMoles,
-            6.0221417930e+23
-        )
-    )
+        Foam::dimless/Foam::dimMoles,
+        6.0221417930e+23
+    ),
+    constantphysicoChemicalNA,
+    "NA"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::physicoChemical::k
+defineDimensionedConstant
 (
-    dimensionedConstant(physicoChemical::group, "k")
+    physicoChemical::group,
+    physicoChemical::k,
+    constantphysicoChemicalk,
+    "k"
 );
 
 
 // Standard
 
-const Foam::dimensionedScalar Foam::constant::standard::Pstd
+defineDimensionedConstant
 (
-    dimensionedConstant("standard", "Pstd")
+    "standard",
+    standard::Pstd,
+    constantstandardPstd,
+    "Pstd"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::standard::Tstd
+defineDimensionedConstant
 (
-    dimensionedConstant("standard", "Tstd")
+    "standard",
+    standard::Tstd,
+    constantstandardTstd,
+    "Tstd"
 );
 
 
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace constant
+} // End namespace Foam
+
 // ************************************************************************* //
diff --git a/src/OpenFOAM/global/constants/physicoChemical/physicoChemicalConstants.C b/src/OpenFOAM/global/constants/physicoChemical/physicoChemicalConstants.C
index 8cf5cfdb6f9fe14bcfbaeb9605190cf662011d0a..fe7520a9c545626d27a919fb7cd64da03852008c 100644
--- a/src/OpenFOAM/global/constants/physicoChemical/physicoChemicalConstants.C
+++ b/src/OpenFOAM/global/constants/physicoChemical/physicoChemicalConstants.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -32,105 +32,109 @@ License
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-const char* const Foam::constant::physicoChemical::group = "physicoChemical";
+namespace Foam
+{
+namespace constant
+{
 
+const char* const physicoChemical::group = "physicoChemical";
 
-const Foam::dimensionedScalar Foam::constant::physicoChemical::R
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    physicoChemical::group,
+    physicoChemical::R,
+    dimensionedScalar
     (
-        group,
         "R",
-        dimensionedScalar
-        (
-            "R",
-            NA*k
-        )
-    )
+        physicoChemical::NA*physicoChemical::k
+    ),
+    constantphysicoChemicalR,
+    "R"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::physicoChemical::F
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    physicoChemical::group,
+    physicoChemical::F,
+    dimensionedScalar
     (
-        group,
         "F",
-        dimensionedScalar
-        (
-            "F",
-            NA*constant::electromagnetic::e
-        )
-    )
+        physicoChemical::NA*electromagnetic::e
+    ),
+    constantphysicoChemicalF,
+    "F"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::physicoChemical::sigma
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    physicoChemical::group,
+    physicoChemical::sigma,
+    dimensionedScalar
     (
-        group,
         "sigma",
-        dimensionedScalar
+        Foam::dimensionedScalar
         (
-            "sigma",
-            dimensionedScalar
-            (
-                "C",
-                dimless,
-                sqr(constant::mathematical::pi)/60.0
-            )
-           *pow4(k)/(pow3(constant::universal::hr)*sqr(constant::universal::c))
+            "C",
+            Foam::dimless,
+            Foam::sqr(mathematical::pi)/60.0
         )
-    )
+       *Foam::pow4(physicoChemical::k)
+       /(pow3(universal::hr)*sqr(universal::c))
+    ),
+    constantphysicoChemicalsigma,
+    "sigma"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::physicoChemical::b
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    physicoChemical::group,
+    physicoChemical::b,
+    dimensionedScalar
     (
-        group,
         "b",
-        dimensionedScalar
-        (
-            "b",
-            (constant::universal::h*constant::universal::c/k)
-           /dimensionedScalar("C", dimless, 4.965114231)
-        )
-    )
+        (universal::h*universal::c/physicoChemical::k)
+       /Foam::dimensionedScalar("C", Foam::dimless, 4.965114231)
+    ),
+    constantphysicoChemicalb,
+    "b"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::physicoChemical::c1
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    physicoChemical::group,
+    physicoChemical::c1,
+    dimensionedScalar
     (
-        group,
         "c1",
-        dimensionedScalar
-        (
-            "c1",
-            dimensionedScalar("C", dimless, constant::mathematical::twoPi)
-           *constant::universal::h*sqr(constant::universal::c)
-        )
-    )
+        Foam::dimensionedScalar("C", Foam::dimless, mathematical::twoPi)
+       *universal::h*Foam::sqr(universal::c)
+    ),
+    constantphysicoChemicalc1,
+    "c1"
 );
 
 
-const Foam::dimensionedScalar Foam::constant::physicoChemical::c2
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    physicoChemical::group,
+    physicoChemical::c2,
+    dimensionedScalar
     (
-        group,
         "c2",
-        dimensionedScalar
-        (
-            "c2",
-            constant::universal::h*constant::universal::c/k
-        )
-    )
+        universal::h*universal::c/physicoChemical::k
+    ),
+    constantphysicoChemicalc2,
+    "c2"
 );
 
 
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace constant
+} // End namespace Foam
+
 // ************************************************************************* //
diff --git a/src/OpenFOAM/global/constants/universal/universalConstants.C b/src/OpenFOAM/global/constants/universal/universalConstants.C
index 32e5459181d39782a4c103b21b92031d6a464dd0..c5bb8d05e15e7852b1568da43257997c40be247e 100644
--- a/src/OpenFOAM/global/constants/universal/universalConstants.C
+++ b/src/OpenFOAM/global/constants/universal/universalConstants.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -30,22 +30,32 @@ License
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-const char* const Foam::constant::universal::group = "universal";
+namespace Foam
+{
+namespace constant
+{
 
+const char* const universal::group = "universal";
 
-const Foam::dimensionedScalar Foam::constant::universal::hr
+
+defineDimensionedConstantWithDefault
 (
-    dimensionedConstant
+    "universal",
+    universal::hr,
+    dimensionedScalar
     (
-        group,
         "hr",
-        dimensionedScalar
-        (
-            "hr",
-            h/(dimensionedScalar("C", dimless, constant::mathematical::twoPi))
-        )
-    )
+        universal::h
+       /(dimensionedScalar("C", dimless, mathematical::twoPi))
+    ),
+    constantuniversalhr,
+    "hr"
 );
 
 
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace constant
+} // End namespace Foam
+
 // ************************************************************************* //
diff --git a/src/OpenFOAM/global/debug/debug.C b/src/OpenFOAM/global/debug/debug.C
index e704361970a344fa14a677c394041da530aebd1b..999b4cb292d2c794009f1efad50ee8ca255744b9 100644
--- a/src/OpenFOAM/global/debug/debug.C
+++ b/src/OpenFOAM/global/debug/debug.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -69,6 +69,7 @@ simpleObjectRegistry* debugObjectsPtr_(NULL);
 simpleObjectRegistry* infoObjectsPtr_(NULL);
 simpleObjectRegistry* optimisationObjectsPtr_(NULL);
 simpleObjectRegistry* dimensionSetObjectsPtr_(NULL);
+simpleObjectRegistry* dimensionedConstantObjectsPtr_(NULL);
 class deleteDebugSwitchPtr
 {
 public:
@@ -82,6 +83,7 @@ public:
         deleteDemandDrivenData(infoObjectsPtr_);
         deleteDemandDrivenData(optimisationObjectsPtr_);
         deleteDemandDrivenData(dimensionSetObjectsPtr_);
+        deleteDemandDrivenData(dimensionedConstantObjectsPtr_);
     }
 };
 
@@ -190,7 +192,7 @@ int Foam::debug::optimisationSwitch(const char* name, const int defaultValue)
 
 void Foam::debug::addDebugObject(const char* name, simpleRegIOobject* obj)
 {
-    if (!debugObjects().insert(name, obj))
+    debugObjects().append(name, obj);
     {
         //std::cerr<< "debug::addDebugObject : Duplicate entry " << name
         //    << " in runtime selection table"
@@ -202,7 +204,7 @@ void Foam::debug::addDebugObject(const char* name, simpleRegIOobject* obj)
 
 void Foam::debug::addInfoObject(const char* name, simpleRegIOobject* obj)
 {
-    if (!infoObjects().insert(name, obj))
+    infoObjects().append(name, obj);
     {
         //std::cerr<< "debug::addInfoObject : Duplicate entry " << name
         //    << " in runtime selection table"
@@ -218,7 +220,7 @@ void Foam::debug::addOptimisationObject
     simpleRegIOobject* obj
 )
 {
-    if (!optimisationObjects().insert(name, obj))
+    optimisationObjects().append(name, obj);
     {
         //std::cerr<< "debug::addOptimisationObject : Duplicate entry " << name
         //    << " in runtime selection table"
@@ -234,7 +236,7 @@ void Foam::debug::addDimensionSetObject
     simpleRegIOobject* obj
 )
 {
-    if (!dimensionSetObjects().insert(name, obj))
+    dimensionSetObjects().append(name, obj);
     {
         //std::cerr<< "debug::addDimensionSetObject : Duplicate entry " << name
         //    << " in runtime selection table"
@@ -244,6 +246,23 @@ void Foam::debug::addDimensionSetObject
 }
 
 
+void Foam::debug::addDimensionedConstantObject
+(
+    const char* name,
+    simpleRegIOobject* obj
+)
+{
+    dimensionedConstantObjects().append(name, obj);
+    {
+        //std::cerr<< "debug::addDimensionedConstantObject : Duplicate entry "
+        //    << name
+        //    << " in runtime selection table"
+        //    << std::endl;
+        //error::safePrintStack(std::cerr);
+    }
+}
+
+
 Foam::simpleObjectRegistry& Foam::debug::debugObjects()
 {
     if (!debugObjectsPtr_)
@@ -259,7 +278,7 @@ Foam::simpleObjectRegistry& Foam::debug::infoObjects()
 {
     if (!infoObjectsPtr_)
     {
-        infoObjectsPtr_ = new simpleObjectRegistry(1000);
+        infoObjectsPtr_ = new simpleObjectRegistry(100);
     }
 
     return *infoObjectsPtr_;
@@ -270,7 +289,7 @@ Foam::simpleObjectRegistry& Foam::debug::optimisationObjects()
 {
     if (!optimisationObjectsPtr_)
     {
-        optimisationObjectsPtr_ = new simpleObjectRegistry(1000);
+        optimisationObjectsPtr_ = new simpleObjectRegistry(100);
     }
 
     return *optimisationObjectsPtr_;
@@ -281,13 +300,24 @@ Foam::simpleObjectRegistry& Foam::debug::dimensionSetObjects()
 {
     if (!dimensionSetObjectsPtr_)
     {
-        dimensionSetObjectsPtr_ = new simpleObjectRegistry(1000);
+        dimensionSetObjectsPtr_ = new simpleObjectRegistry(100);
     }
 
     return *dimensionSetObjectsPtr_;
 }
 
 
+Foam::simpleObjectRegistry& Foam::debug::dimensionedConstantObjects()
+{
+    if (!dimensionedConstantObjectsPtr_)
+    {
+        dimensionedConstantObjectsPtr_ = new simpleObjectRegistry(100);
+    }
+
+    return *dimensionedConstantObjectsPtr_;
+}
+
+
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 
diff --git a/src/OpenFOAM/global/debug/debug.H b/src/OpenFOAM/global/debug/debug.H
index 09697c57a7f3b8f945a6d1095982238e97e16ae0..4eeb8cbb534fdce73c32d73f109cf145571c661d 100644
--- a/src/OpenFOAM/global/debug/debug.H
+++ b/src/OpenFOAM/global/debug/debug.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -93,6 +93,9 @@ namespace debug
         //- Register DimensionSets read/write object
         void addDimensionSetObject(const char* name, simpleRegIOobject* obj);
 
+        //- Register DimensionedConstant read/write object
+        void addDimensionedConstantObject(const char* name, simpleRegIOobject*);
+
 
         //- Get access to registered debug switch objects
         simpleObjectRegistry& debugObjects();
@@ -106,6 +109,8 @@ namespace debug
         //- Get access to registered dimensionSets switch objects
         simpleObjectRegistry& dimensionSetObjects();
 
+        //- Get access to registered dimensionedConstant switch objects
+        simpleObjectRegistry& dimensionedConstantObjects();
 
 } // End namespace debug
 
diff --git a/src/OpenFOAM/global/debug/simpleObjectRegistry.H b/src/OpenFOAM/global/debug/simpleObjectRegistry.H
index 61d0931f49cbd59353bab096b9264648fff6c235..9fe1e0b5b8f6473268e05e1c545dda3adc384265 100644
--- a/src/OpenFOAM/global/debug/simpleObjectRegistry.H
+++ b/src/OpenFOAM/global/debug/simpleObjectRegistry.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -25,7 +25,7 @@ Class
     Foam::simpleObjectRegistry
 
 Description
-    Object registry for simpleRegIOobject
+    Object registry for simpleRegIOobject. Maintains ordering.
 
 SourceFiles
 
@@ -34,7 +34,7 @@ SourceFiles
 #ifndef simpleObjectRegistry_H
 #define simpleObjectRegistry_H
 
-#include "HashTable.H"
+#include "UPtrDictionary.H"
 #include "simpleRegIOobject.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -48,16 +48,16 @@ namespace Foam
 
 class simpleObjectRegistry
 :
-    public HashTable<simpleRegIOobject*>
+    public UPtrDictionary<simpleRegIOobject>
 {
 public:
 
     // Constructors
 
-        //- Construct from initial estimate
+        //- Construct given initial table size
         simpleObjectRegistry(const label nIoObjects = 128)
         :
-            HashTable<simpleRegIOobject*>(nIoObjects)
+            UPtrDictionary<simpleRegIOobject>(nIoObjects)
         {}
 
 };