diff --git a/src/OpenFOAM/primitives/demandDrivenEntry/demandDrivenEntry.C b/src/OpenFOAM/primitives/demandDrivenEntry/demandDrivenEntry.C
new file mode 100644
index 0000000000..bac4117c78
--- /dev/null
+++ b/src/OpenFOAM/primitives/demandDrivenEntry/demandDrivenEntry.C
@@ -0,0 +1,89 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+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 .
+
+\*---------------------------------------------------------------------------*/
+
+#include "demandDrivenEntry.H"
+
+// * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * * //
+
+template
+Foam::demandDrivenEntry::demandDrivenEntry
+(
+ const dictionary& dict,
+ const Type& value
+)
+:
+ dict_(dict),
+ keyword_("unknown-keyword"),
+ value_(value),
+ stored_(true)
+{}
+
+
+template
+Foam::demandDrivenEntry::demandDrivenEntry
+(
+ const dictionary& dict,
+ const word& keyword
+)
+:
+ dict_(dict),
+ keyword_(keyword),
+ value_(pTraits::zero),
+ stored_(false)
+{}
+
+
+template
+Foam::demandDrivenEntry::demandDrivenEntry
+(
+ const dictionary& dict,
+ const word& keyword,
+ const Type& defaultValue,
+ const bool readIfPresent
+)
+:
+ dict_(dict),
+ keyword_(keyword),
+ value_(defaultValue),
+ stored_(true)
+{
+ if (readIfPresent)
+ {
+ dict_.readIfPresent(keyword, value_);
+ }
+}
+
+
+template
+Foam::demandDrivenEntry::demandDrivenEntry(const demandDrivenEntry& dde)
+:
+ dict_(dde.dict_),
+ keyword_(dde.keyword_),
+ value_(dde.value_),
+ stored_(dde.stored_)
+{}
+
+
+// ************************************************************************* //
diff --git a/src/OpenFOAM/primitives/demandDrivenEntry/demandDrivenEntry.H b/src/OpenFOAM/primitives/demandDrivenEntry/demandDrivenEntry.H
new file mode 100644
index 0000000000..e56934d92e
--- /dev/null
+++ b/src/OpenFOAM/primitives/demandDrivenEntry/demandDrivenEntry.H
@@ -0,0 +1,136 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+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 .
+
+Class
+ Foam::demandDrivenEntry
+
+Description
+ Class for demand-driven dictionary entries
+
+ Holds a reference to a dictionary, which is then queried if the value
+ is requested and has not already been cached
+
+SourceFiles
+ demandDrivenEntry.C
+ demandDrivenEntryI.H
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef demandDrivenEntry_H
+#define demandDrivenEntry_H
+
+#include "dictionary.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class demandDrivenEntry Declaration
+\*---------------------------------------------------------------------------*/
+
+template
+class demandDrivenEntry
+{
+private:
+
+ // Private data
+
+ //- Reference to the dictionary
+ const dictionary& dict_;
+
+ //- Keyword to look up
+ const word keyword_;
+
+ //- Value
+ mutable Type value_;
+
+ //- Flag to say that the value has been stored
+ mutable bool stored_;
+
+
+public:
+
+ //- Constructors
+
+ //- Construct from dictionary and value - cannot be re-read
+ demandDrivenEntry
+ (
+ const dictionary& dict,
+ const Type& value
+ );
+
+
+ //- Construct from dictionary and keyword
+ demandDrivenEntry
+ (
+ const dictionary& dict,
+ const word& keyword
+ );
+
+
+ //- Construct from dictionary, keyword and default value
+ demandDrivenEntry
+ (
+ const dictionary& dict,
+ const word& keyword,
+ const Type& defaultValue,
+ const bool readIfPresent = true
+ );
+
+ //- Copy constructor
+ demandDrivenEntry(const demandDrivenEntry& dde);
+
+
+ // Public Member Functions
+
+ //- Return the value
+ inline const Type& value() const;
+
+ //- Set the value
+ inline void setValue(const Type& value);
+
+ //- Reset the demand-driven entry
+ inline void reset();
+};
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "demandDrivenEntryI.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+ #include "demandDrivenEntry.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/OpenFOAM/primitives/demandDrivenEntry/demandDrivenEntryI.H b/src/OpenFOAM/primitives/demandDrivenEntry/demandDrivenEntryI.H
new file mode 100644
index 0000000000..5a6a3e31b3
--- /dev/null
+++ b/src/OpenFOAM/primitives/demandDrivenEntry/demandDrivenEntryI.H
@@ -0,0 +1,59 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+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 .
+
+\*---------------------------------------------------------------------------*/
+
+#include "demandDrivenEntry.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+template
+inline const Type& Foam::demandDrivenEntry::value() const
+{
+ if (!stored_)
+ {
+ dict_.lookup(keyword_) >> value_;
+ stored_ = true;
+ }
+
+ return value_;
+}
+
+
+template
+inline void Foam::demandDrivenEntry::setValue(const Type& value)
+{
+// dict_.set(keyword_, value);
+ value_ = value;
+ stored_ = true;
+}
+
+
+template
+inline void Foam::demandDrivenEntry::reset()
+{
+ stored_ = false;
+}
+
+
+// ************************************************************************* //