diff --git a/bin/foamEtcFile b/bin/foamEtcFile
index 7cea635885645ae3ad6f712d477b15415ea2ee5a..5bae566b55a1509d8f2f65048882fe0b7af41f7b 100755
--- a/bin/foamEtcFile
+++ b/bin/foamEtcFile
@@ -195,9 +195,10 @@ done
 # done
 
 
-# Save the essential bits of information:
+# Save the essential bits of information
+# silently remove leading ~OpenFOAM/ (used in Foam::findEtcFile)
 nArgs=$#
-fileName="$1"
+fileName="${1#~OpenFOAM/}"
 
 # Define the various places to be searched:
 unset dirList
diff --git a/bin/tools/pre-commit-hook b/bin/tools/pre-commit-hook
new file mode 100755
index 0000000000000000000000000000000000000000..9b5a394fde108a8c2f93f5e922d6fc105c92be7d
--- /dev/null
+++ b/bin/tools/pre-commit-hook
@@ -0,0 +1,223 @@
+#!/bin/bash
+#---------------------------------*- sh -*-------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 2010-2010 OpenCFD Ltd.
+#    \\/     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 <http://www.gnu.org/licenses/>.
+#
+# Script
+#     pre-commit-hook
+#
+# Description
+#     pre-commit hook for git.
+#     Copy or link this file as ".git/hooks/pre-commit"
+#
+#     Eg,
+#     (
+#         cd $WM_PROJECT_DIR/.git/hooks &&
+#         ln -sf ../../bin/tools/pre-commit-hook pre-commit
+#     )
+#
+#     Hook receives: empty
+#
+#     Checks for
+#     - illegal code, e.g. <TAB>
+#     - copyright is current, e.g. if present, contains XXX-<current-year>
+#     - columns greater than 80 for *.[CH] files
+#
+# Note
+#     Using "git commit --no-verify" it is possible to override the hook.
+#
+#------------------------------------------------------------------------------
+die()
+{
+    echo 'pre-commit hook failure' 1>&2
+    echo '-----------------------' 1>&2
+    echo '' 1>&2
+    echo "$@" 1>&2
+    exit 1
+}
+
+#-----------------------------------------------------------------------------
+# Check content that will be added by this commit.
+
+if git rev-parse --verify -q HEAD > /dev/null
+then
+    against=HEAD
+else
+    # Initial commit: diff against an empty tree object
+    against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# list of all files
+fileList=$(git diff-index --name-only $against --)
+unset badFiles
+
+# join list of files with this amount of space
+Indent="    "
+
+#
+# report bad files and die if there are any
+#
+dieOnBadFiles()
+{
+    if [ -n "$badFiles" ]
+    then
+        echo 'pre-commit hook failure' 1>&2
+        echo '-----------------------' 1>&2
+        echo "$@" 1>&2
+        echo '' 1>&2
+        echo "File(s):" 1>&2
+        echo "$badFiles" 1>&2
+        echo ''  1>&2
+        exit 1
+    fi
+}
+
+
+#
+# check for bad strings, characters, etc
+#
+checkIllegalCode()
+{
+    reBad="(N""abla|"$'\t'"|"$'\r\n'")"
+    msgBad="N""abla, <TAB>, or DOS-style line ending"
+
+    badFiles=$(
+    for f in $fileList
+    do
+        # parse line numbers from this:
+        #        path/fileName:<lineNr>:   contents
+        lines=$(git grep --cached -n -E -e "$reBad" -- "$f" |
+            sed -e 's@^[^:]*:\([0-9]*\):.*@\1@' |
+            tr '\n' ' '
+        )
+        [ -n "$lines" ] && echo "$Indent$f -- lines: $lines"
+    done
+    )
+
+    dieOnBadFiles "Remove/correct bad '$msgBad' references"
+}
+
+
+#
+# check that OpenCFD copyright is current
+#
+checkCopyright()
+{
+    year=$(date +%Y)
+
+    badFiles=$(
+    for f in $fileList
+    do
+        # parse line numbers from this:
+        #        path/fileName:<lineNr>:   contents
+        # for Copyright lines without the current year
+        lines=$(git grep --cached -n -e Copyright -- "$f" |
+            sed -n \
+                -e '/OpenCFD/{ ' \
+                -e "/$year/b"   \
+                -e 's@^[^:]*:\([0-9]*\):.*@\1@p }' |
+            tr '\n' ' '
+        )
+        [ -n "$lines" ] && echo "$Indent$f -- lines: $lines"
+    done
+    )
+
+    dieOnBadFiles "Update copyright year, e.g. XXXX-$year"
+}
+
+
+#
+# limit line length to 80-columns
+#
+checkLineLength()
+{
+    badFiles=$(
+    for f in $fileList
+    do
+        # limit to *.[CH] files
+        case "$f" in
+        (*.[CH])
+            # parse line numbers from this:
+            #        path/fileName:<lineNr>:   contents
+            lines=$(git grep --cached -n -e ".\{81,\}" -- "$f" |
+                sed -e 's@^[^:]*:\([0-9]*\):.*@\1@' |
+                tr '\n' ' '
+            )
+            [ -n "$lines" ] && echo "$Indent$f -- lines: $lines"
+        ;;
+        esac
+    done
+    )
+
+    dieOnBadFiles "Limit code to 80 columns before pushing"
+}
+
+
+#
+# limit line length to 80-columns, except C++ comment lines
+#
+checkLineLengthNonComments()
+{
+    badFiles=$(
+    for f in $fileList
+    do
+        # limit to *.[CH] files
+        case "$f" in
+        (*.[CH])
+            # parse line numbers from this (strip comment lines):
+            #        path/fileName:<lineNr>:   contents
+            lines=$(git grep --cached -n -e ".\{81,\}" -- "$f" |
+                sed -n \
+                    -e '\@^[^:]*:[^:]*: *//.*@b' \
+                    -e 's@^[^:]*:\([0-9]*\):.*@\1@p' |
+                tr '\n' ' '
+            )
+            [ -n "$lines" ] && echo "$Indent$f -- lines: $lines"
+        ;;
+        esac
+    done
+    )
+
+    dieOnBadFiles "Limit code to 80 columns before pushing"
+}
+
+
+
+# do all checks
+# ~~~~~~~~~~~~~
+
+# builtin whitespace check to avoid trailing space, including CR-LF endings
+bad=$(git diff-index --cached --check $against --) || die "$bad"
+
+# check for illegal code, e.g. <TAB>, etc
+checkIllegalCode
+
+# ensure OpenCFD copyright contains correct year
+checkCopyright
+
+# ensure code conforms to 80 columns max
+checkLineLength
+
+
+exit 0
+
+#------------------------------------------------------------------------------
diff --git a/src/finiteVolume/cfdTools/general/porousMedia/porousZone.C b/src/finiteVolume/cfdTools/general/porousMedia/porousZone.C
index 745c66c58d1b80f2d3364aa170f57232f4b4881d..b7aef808507a2b3ca8794b4955551f6e5b06ab2a 100644
--- a/src/finiteVolume/cfdTools/general/porousMedia/porousZone.C
+++ b/src/finiteVolume/cfdTools/general/porousMedia/porousZone.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -27,6 +27,7 @@ License
 #include "fvMesh.H"
 #include "fvMatrices.H"
 #include "geometricOneField.H"
+#include "stringListOps.H"
 
 // * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * * //
 
@@ -62,15 +63,15 @@ void Foam::porousZone::adjustNegativeResistance(dimensionedVector& resist)
 
 Foam::porousZone::porousZone
 (
-    const word& name,
+    const keyType& key,
     const fvMesh& mesh,
     const dictionary& dict
 )
 :
-    name_(name),
+    key_(key),
     mesh_(mesh),
     dict_(dict),
-    cellZoneID_(mesh_.cellZones().findZoneID(name)),
+    cellZoneIds_(0),
     coordSys_(dict, mesh),
     porosity_(1),
     intensity_(0),
@@ -80,9 +81,27 @@ Foam::porousZone::porousZone
     D_("D", dimensionSet(0, -2, 0, 0, 0), tensor::zero),
     F_("F", dimensionSet(0, -1, 0, 0, 0), tensor::zero)
 {
-    Info<< "Creating porous zone: " << name_ << endl;
+    Info<< "Creating porous zone: " << key_ << endl;
 
-    bool foundZone = (cellZoneID_ != -1);
+    if (key_.isPattern())
+    {
+        cellZoneIds_ = findStrings
+        (
+            key_,
+            mesh_.cellZones().names()
+        );
+    }
+    else
+    {
+        const label zoneId = mesh_.cellZones().findZoneID(key_);
+        if (zoneId != -1)
+        {
+            cellZoneIds_.setSize(1);
+            cellZoneIds_[0] = zoneId;
+        }
+    }
+
+    bool foundZone = !cellZoneIds_.empty();
     reduce(foundZone, orOp<bool>());
 
     if (!foundZone && Pstream::master())
@@ -90,8 +109,8 @@ Foam::porousZone::porousZone
         FatalErrorIn
         (
             "Foam::porousZone::porousZone"
-            "(const fvMesh&, const word&, const dictionary&)"
-        )   << "cannot find porous cellZone " << name_
+            "(const keyType&, const fvMesh&, const dictionary&)"
+        )   << "cannot find porous cellZone " << key_
             << exit(FatalError);
     }
 
@@ -106,7 +125,7 @@ Foam::porousZone::porousZone
         FatalIOErrorIn
         (
             "Foam::porousZone::porousZone"
-            "(const fvMesh&, const word&, const dictionary&)",
+            "(const keyType&, const fvMesh&, const dictionary&)",
             dict_
         )
             << "out-of-range porosity value " << porosity_
@@ -123,7 +142,7 @@ Foam::porousZone::porousZone
         FatalIOErrorIn
         (
             "Foam::porousZone::porousZone"
-            "(const fvMesh&, const word&, const dictionary&)",
+            "(const keyType&, const fvMesh&, const dictionary&)",
             dict_
         )
             << "out-of-range turbulent intensity value " << intensity_
@@ -140,7 +159,7 @@ Foam::porousZone::porousZone
         FatalIOErrorIn
         (
             "Foam::porousZone::porousZone"
-            "(const fvMesh&, const word&, const dictionary&)",
+            "(const keyType&, const fvMesh&, const dictionary&)",
             dict_
         )
             << "out-of-range turbulent length scale " << mixingLength_
@@ -169,7 +188,7 @@ Foam::porousZone::porousZone
                 FatalIOErrorIn
                 (
                     "Foam::porousZone::porousZone"
-                    "(const fvMesh&, const word&, const dictionary&)",
+                    "(const keyType&, const fvMesh&, const dictionary&)",
                     dict_
                 )   << "incorrect dimensions for d: " << d.dimensions()
                     << " should be " << D_.dimensions()
@@ -192,7 +211,7 @@ Foam::porousZone::porousZone
                 FatalIOErrorIn
                 (
                     "Foam::porousZone::porousZone"
-                    "(const fvMesh&, const word&, const dictionary&)",
+                    "(const keyType&, const fvMesh&, const dictionary&)",
                     dict_
                 )   << "incorrect dimensions for f: " << f.dimensions()
                     << " should be " << F_.dimensions()
@@ -220,7 +239,7 @@ Foam::porousZone::porousZone
         FatalIOErrorIn
         (
             "Foam::porousZone::porousZone"
-            "(const fvMesh&, const word&, const dictionary&)",
+            "(const keyType&, const fvMesh&, const dictionary&)",
             dict_
         )   << "neither powerLaw (C0/C1) "
                "nor Darcy-Forchheimer law (d/f) specified"
@@ -239,7 +258,7 @@ Foam::porousZone::porousZone
 
 void Foam::porousZone::addResistance(fvVectorMatrix& UEqn) const
 {
-    if (cellZoneID_ == -1)
+    if (cellZoneIds_.empty())
     {
         return;
     }
@@ -250,7 +269,6 @@ void Foam::porousZone::addResistance(fvVectorMatrix& UEqn) const
         compressible = true;
     }
 
-    const labelList& cells = mesh_.cellZones()[cellZoneID_];
     const scalarField& V = mesh_.V();
     scalarField& Udiag = UEqn.diag();
     vectorField& Usource = UEqn.source();
@@ -263,7 +281,6 @@ void Foam::porousZone::addResistance(fvVectorMatrix& UEqn) const
             addPowerLawResistance
             (
                 Udiag,
-                cells,
                 V,
                 mesh_.lookupObject<volScalarField>("rho"),
                 U
@@ -274,7 +291,6 @@ void Foam::porousZone::addResistance(fvVectorMatrix& UEqn) const
             addPowerLawResistance
             (
                 Udiag,
-                cells,
                 V,
                 geometricOneField(),
                 U
@@ -293,7 +309,6 @@ void Foam::porousZone::addResistance(fvVectorMatrix& UEqn) const
             (
                 Udiag,
                 Usource,
-                cells,
                 V,
                 mesh_.lookupObject<volScalarField>("rho"),
                 mesh_.lookupObject<volScalarField>("mu"),
@@ -306,7 +321,6 @@ void Foam::porousZone::addResistance(fvVectorMatrix& UEqn) const
             (
                 Udiag,
                 Usource,
-                cells,
                 V,
                 geometricOneField(),
                 mesh_.lookupObject<volScalarField>("nu"),
@@ -324,7 +338,7 @@ void Foam::porousZone::addResistance
     bool correctAUprocBC
 ) const
 {
-    if (cellZoneID_ == -1)
+    if (cellZoneIds_.empty())
     {
         return;
     }
@@ -335,7 +349,6 @@ void Foam::porousZone::addResistance
         compressible = true;
     }
 
-    const labelList& cells = mesh_.cellZones()[cellZoneID_];
     const vectorField& U = UEqn.psi();
 
     if (C0_ > VSMALL)
@@ -345,7 +358,6 @@ void Foam::porousZone::addResistance
             addPowerLawResistance
             (
                 AU,
-                cells,
                 mesh_.lookupObject<volScalarField>("rho"),
                 U
             );
@@ -355,7 +367,6 @@ void Foam::porousZone::addResistance
             addPowerLawResistance
             (
                 AU,
-                cells,
                 geometricOneField(),
                 U
             );
@@ -372,7 +383,6 @@ void Foam::porousZone::addResistance
             addViscousInertialResistance
             (
                 AU,
-                cells,
                 mesh_.lookupObject<volScalarField>("rho"),
                 mesh_.lookupObject<volScalarField>("mu"),
                 U
@@ -383,7 +393,6 @@ void Foam::porousZone::addResistance
             addViscousInertialResistance
             (
                 AU,
-                cells,
                 geometricOneField(),
                 mesh_.lookupObject<volScalarField>("nu"),
                 U
diff --git a/src/finiteVolume/cfdTools/general/porousMedia/porousZone.H b/src/finiteVolume/cfdTools/general/porousMedia/porousZone.H
index 59a83a24a57c88af4e3fa3213f5c726aaab67f05..6bd909143c2962a4c69dc16dccfd00b08b6d2e23 100644
--- a/src/finiteVolume/cfdTools/general/porousMedia/porousZone.H
+++ b/src/finiteVolume/cfdTools/general/porousMedia/porousZone.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -110,8 +110,8 @@ class porousZone
 {
     // Private data
 
-        //- Name of this zone
-        word name_;
+        //- Name of this zone, or a regular expression
+        keyType key_;
 
         //- Reference to the finite volume mesh this zone is part of
         const fvMesh& mesh_;
@@ -119,8 +119,8 @@ class porousZone
         //- Dictionary containing the parameters
         dictionary dict_;
 
-        //- Cell zone ID
-        label cellZoneID_;
+        //- Cell zone Ids
+        labelList cellZoneIds_;
 
         //- Coordinate system used for the zone (Cartesian)
         coordinateSystem coordSys_;
@@ -159,7 +159,6 @@ class porousZone
         void addPowerLawResistance
         (
             scalarField& Udiag,
-            const labelList& cells,
             const scalarField& V,
             const RhoFieldType& rho,
             const vectorField& U
@@ -171,7 +170,6 @@ class porousZone
         (
             scalarField& Udiag,
             vectorField& Usource,
-            const labelList& cells,
             const scalarField& V,
             const RhoFieldType& rho,
             const scalarField& mu,
@@ -184,7 +182,6 @@ class porousZone
         void addPowerLawResistance
         (
             tensorField& AU,
-            const labelList& cells,
             const RhoFieldType& rho,
             const vectorField& U
         ) const;
@@ -194,7 +191,6 @@ class porousZone
         void addViscousInertialResistance
         (
             tensorField& AU,
-            const labelList& cells,
             const RhoFieldType& rho,
             const scalarField& mu,
             const vectorField& U
@@ -213,7 +209,7 @@ public:
     // Constructors
 
         //- Construct from components
-        porousZone(const word& name, const fvMesh&, const dictionary&);
+        porousZone(const keyType& key, const fvMesh&, const dictionary&);
 
         //- Return clone
         autoPtr<porousZone> clone() const
@@ -237,10 +233,10 @@ public:
 
             autoPtr<porousZone> operator()(Istream& is) const
             {
-                word name(is);
+                keyType key(is);
                 dictionary dict(is);
 
-                return autoPtr<porousZone>(new porousZone(name, mesh_, dict));
+                return autoPtr<porousZone>(new porousZone(key, mesh_, dict));
             }
         };
 
@@ -255,9 +251,9 @@ public:
         // Access
 
             //- cellZone name
-            const word& zoneName() const
+            const keyType& zoneName() const
             {
-                return name_;
+                return key_;
             }
 
             //- Return mesh
@@ -266,10 +262,10 @@ public:
                 return mesh_;
             }
 
-            //- cellZone number
-            label zoneId() const
+            //- cellZone numbers
+            const labelList& zoneIds() const
             {
-                return cellZoneID_;
+                return cellZoneIds_;
             }
 
             //- dictionary values used for the porousZone
diff --git a/src/finiteVolume/cfdTools/general/porousMedia/porousZoneTemplates.C b/src/finiteVolume/cfdTools/general/porousMedia/porousZoneTemplates.C
index 46a60ca7824b3e3c63d7466a3aa5cd460efb7d4b..4e72859f8005338cd0bd7b148a9284e0a89267d2 100644
--- a/src/finiteVolume/cfdTools/general/porousMedia/porousZoneTemplates.C
+++ b/src/finiteVolume/cfdTools/general/porousMedia/porousZoneTemplates.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -33,12 +33,15 @@ void Foam::porousZone::modifyDdt(fvMatrix<Type>& m) const
 {
     if (porosity_ < 1)
     {
-        const labelList& cells = mesh_.cellZones()[cellZoneID_];
-
-        forAll(cells, i)
+        forAll(cellZoneIds_, zoneI)
         {
-            m.diag()[cells[i]]   *= porosity_;
-            m.source()[cells[i]] *= porosity_;
+            const labelList& cells = mesh_.cellZones()[cellZoneIds_[zoneI]];
+
+            forAll(cells, i)
+            {
+                m.diag()[cells[i]]   *= porosity_;
+                m.source()[cells[i]] *= porosity_;
+            }
         }
     }
 }
@@ -48,7 +51,6 @@ template<class RhoFieldType>
 void Foam::porousZone::addPowerLawResistance
 (
     scalarField& Udiag,
-    const labelList& cells,
     const scalarField& V,
     const RhoFieldType& rho,
     const vectorField& U
@@ -57,10 +59,15 @@ void Foam::porousZone::addPowerLawResistance
     const scalar C0 = C0_;
     const scalar C1m1b2 = (C1_ - 1.0)/2.0;
 
-    forAll(cells, i)
+    forAll(cellZoneIds_, zoneI)
     {
-        Udiag[cells[i]] +=
+        const labelList& cells = mesh_.cellZones()[cellZoneIds_[zoneI]];
+
+        forAll(cells, i)
+        {
+            Udiag[cells[i]] +=
             V[cells[i]]*rho[cells[i]]*C0*pow(magSqr(U[cells[i]]), C1m1b2);
+        }
     }
 }
 
@@ -70,7 +77,6 @@ void Foam::porousZone::addViscousInertialResistance
 (
     scalarField& Udiag,
     vectorField& Usource,
-    const labelList& cells,
     const scalarField& V,
     const RhoFieldType& rho,
     const scalarField& mu,
@@ -80,14 +86,21 @@ void Foam::porousZone::addViscousInertialResistance
     const tensor& D = D_.value();
     const tensor& F = F_.value();
 
-    forAll(cells, i)
+    forAll(cellZoneIds_, zoneI)
     {
-        tensor dragCoeff = mu[cells[i]]*D + (rho[cells[i]]*mag(U[cells[i]]))*F;
-        scalar isoDragCoeff = tr(dragCoeff);
+        const labelList& cells = mesh_.cellZones()[cellZoneIds_[zoneI]];
+
+        forAll(cells, i)
+        {
+            const tensor dragCoeff = mu[cells[i]]*D
+                + (rho[cells[i]]*mag(U[cells[i]]))*F;
 
-        Udiag[cells[i]] += V[cells[i]]*isoDragCoeff;
-        Usource[cells[i]] -=
-            V[cells[i]]*((dragCoeff - I*isoDragCoeff) & U[cells[i]]);
+            const scalar isoDragCoeff = tr(dragCoeff);
+
+            Udiag[cells[i]] += V[cells[i]]*isoDragCoeff;
+            Usource[cells[i]] -=
+                V[cells[i]]*((dragCoeff - I*isoDragCoeff) & U[cells[i]]);
+        }
     }
 }
 
@@ -96,7 +109,6 @@ template<class RhoFieldType>
 void Foam::porousZone::addPowerLawResistance
 (
     tensorField& AU,
-    const labelList& cells,
     const RhoFieldType& rho,
     const vectorField& U
 ) const
@@ -104,10 +116,15 @@ void Foam::porousZone::addPowerLawResistance
     const scalar C0 = C0_;
     const scalar C1m1b2 = (C1_ - 1.0)/2.0;
 
-    forAll(cells, i)
+    forAll(cellZoneIds_, zoneI)
     {
-        AU[cells[i]] = AU[cells[i]]
-          + I*(rho[cells[i]]*C0*pow(magSqr(U[cells[i]]), C1m1b2));
+        const labelList& cells = mesh_.cellZones()[cellZoneIds_[zoneI]];
+
+        forAll(cells, i)
+        {
+            AU[cells[i]] = AU[cells[i]]
+                + I*(rho[cells[i]]*C0*pow(magSqr(U[cells[i]]), C1m1b2));
+        }
     }
 }
 
@@ -116,7 +133,6 @@ template<class RhoFieldType>
 void Foam::porousZone::addViscousInertialResistance
 (
     tensorField& AU,
-    const labelList& cells,
     const RhoFieldType& rho,
     const scalarField& mu,
     const vectorField& U
@@ -125,9 +141,14 @@ void Foam::porousZone::addViscousInertialResistance
     const tensor& D = D_.value();
     const tensor& F = F_.value();
 
-    forAll(cells, i)
+    forAll(cellZoneIds_, zoneI)
     {
-        AU[cells[i]] += mu[cells[i]]*D + (rho[cells[i]]*mag(U[cells[i]]))*F;
+        const labelList& cells = mesh_.cellZones()[cellZoneIds_[zoneI]];
+
+        forAll(cells, i)
+        {
+            AU[cells[i]] += mu[cells[i]]*D + (rho[cells[i]]*mag(U[cells[i]]))*F;
+        }
     }
 }
 
diff --git a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/atomizationModel/newAtomizationModel.C b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/atomizationModel/newAtomizationModel.C
deleted file mode 100644
index 5304ea008dee4f3b45ee00f1d894858a72981435..0000000000000000000000000000000000000000
--- a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/atomizationModel/newAtomizationModel.C
+++ /dev/null
@@ -1,74 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
-     \\/     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 <http://www.gnu.org/licenses/>.
-
-\*---------------------------------------------------------------------------*/
-
-#include "error.H"
-#include "atomizationModel.H"
-#include "LISA.H"
-#include "noAtomization.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-autoPtr<atomizationModel> atomizationModel::New
-(
-    const dictionary& dict,
-    spray& sm
-)
-{
-    word atomizationModelType
-    (
-        dict.lookup("atomizationModel")
-    );
-
-    Info<< "Selecting atomizationModel "
-         << atomizationModelType << endl;
-
-    dictionaryConstructorTable::iterator cstrIter =
-        dictionaryConstructorTablePtr_->find(atomizationModelType);
-
-    if (cstrIter == dictionaryConstructorTablePtr_->end())
-    {
-        FatalError
-            << "atomizationModel::New(const dictionary&, const spray&) : " << endl
-            << "    unknown atomizationModelType type "
-            << atomizationModelType
-            << ", constructor not in hash table" << endl << endl
-            << "    Valid atomizationModel types are :" << endl;
-        Info<< dictionaryConstructorTablePtr_->sortedToc() << abort(FatalError);
-    }
-
-    return autoPtr<atomizationModel>(cstrIter()(dict, sm));
-}
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
-
-// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModel.C
index 47db7f93da23e80bbba0e1135b042d49faae400d..5f22f047508c1e411408b97d005a76fed8c0b705 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModel.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModel.C
@@ -59,6 +59,6 @@ Foam::CollisionModel<CloudType>::~CollisionModel()
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-#include "NewCollisionModel.C"
+#include "CollisionModelNew.C"
 
 // ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModel.H
index cbce0ee43acc85e130ea867c751128a69a7be97f..fc6f9a488694e2b5e59bdc861cf3dbfb68d5a00a 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModel.H
@@ -29,7 +29,7 @@ Description
 
 SourceFiles
     CollisionModel.C
-    NewCollisionModel.C
+    CollisionModelNew.C
 
 \*---------------------------------------------------------------------------*/
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/NewCollisionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModelNew.C
similarity index 100%
rename from src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/NewCollisionModel.C
rename to src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModelNew.C
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairModel/PairModel.C b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairModel/PairModel.C
index 79adb906c17fffba5ba372f8d1c00c2f2958c438..cbd869d8223fc7bb112c3a3721c5499367993af2 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairModel/PairModel.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairModel/PairModel.C
@@ -75,6 +75,6 @@ Foam::PairModel<CloudType>::coeffDict() const
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-#include "NewPairModel.C"
+#include "PairModelNew.C"
 
 // ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairModel/PairModel.H b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairModel/PairModel.H
index b5b36fdb68b8e5542ea1d93d6c15e48fbf48f09e..bbfb8f4aecbe179259b6a27cc37d07fec2988f43 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairModel/PairModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairModel/PairModel.H
@@ -29,7 +29,7 @@ Description
 
 SourceFiles
     PairModel.C
-    NewPairModel.C
+    PairModelNew.C
 
 \*---------------------------------------------------------------------------*/
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairModel/NewPairModel.C b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairModel/PairModelNew.C
similarity index 100%
rename from src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairModel/NewPairModel.C
rename to src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairModel/PairModelNew.C
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallModel/WallModel.C b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallModel/WallModel.C
index d25cc29c6ab630d0b331a25d5e4aa6eccd62073f..a26f9b1e113f9919222b7f3b7b4f0d4fa548624f 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallModel/WallModel.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallModel/WallModel.C
@@ -83,6 +83,6 @@ Foam::WallModel<CloudType>::coeffDict() const
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-#include "NewWallModel.C"
+#include "WallModelNew.C"
 
 // ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallModel/WallModel.H b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallModel/WallModel.H
index 392825f8297802f68e2ceefdb756e2a52e9e4df2..3d6a6cfcf12bcaacc2c68780a3fee9fb7d866e05 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallModel/WallModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallModel/WallModel.H
@@ -29,7 +29,7 @@ Description
 
 SourceFiles
     WallModel.C
-    NewWallModel.C
+    WallModelNew.C
 
 \*---------------------------------------------------------------------------*/
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallModel/NewWallModel.C b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallModel/WallModelNew.C
similarity index 100%
rename from src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallModel/NewWallModel.C
rename to src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallModel/WallModelNew.C
diff --git a/src/meshTools/coordinateSystems/coordinateSystem.C b/src/meshTools/coordinateSystems/coordinateSystem.C
index 8e5fc7bceb1f84344b25e36aa6ff1ec71d9aa22e..0a5fe400f7e7270d4d2a8cfb00174a142f06b4c2 100644
--- a/src/meshTools/coordinateSystems/coordinateSystem.C
+++ b/src/meshTools/coordinateSystems/coordinateSystem.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -136,37 +136,36 @@ Foam::coordinateSystem::coordinateSystem
 {
     const entry* entryPtr = dict.lookupEntryPtr(typeName_(), false, false);
 
-    // a simple entry is a lookup into global coordinateSystems
+    // non-dictionary entry is a lookup into global coordinateSystems
     if (entryPtr && !entryPtr->isDict())
     {
-        word csName;
-        entryPtr->stream() >> csName;
+        keyType key(entryPtr->stream());
 
-        const coordinateSystems& csLst = coordinateSystems::New(obr);
+        const coordinateSystems& lst = coordinateSystems::New(obr);
+        const label id = lst.find(key);
 
-        label csId = csLst.find(csName);
         if (debug)
         {
             Info<< "coordinateSystem::coordinateSystem"
                 "(const dictionary&, const objectRegistry&):"
                 << nl << "using global coordinate system: "
-                << csName << "=" << csId << endl;
+                << key << "=" << id << endl;
         }
 
-        if (csId < 0)
+        if (id < 0)
         {
             FatalErrorIn
             (
                 "coordinateSystem::coordinateSystem"
                 "(const dictionary&, const objectRegistry&)"
-            )   << "could not find coordinate system: " << csName << nl
-                << "available coordinate systems: " << csLst.toc() << nl << nl
+            )   << "could not find coordinate system: " << key << nl
+                << "available coordinate systems: " << lst.toc() << nl << nl
                 << exit(FatalError);
         }
 
         // copy coordinateSystem, but assign the name as the typeName
         // to avoid strange things in writeDict()
-        operator=(csLst[csId]);
+        operator=(lst[id]);
         name_ = typeName_();
     }
     else
diff --git a/src/meshTools/coordinateSystems/coordinateSystem.H b/src/meshTools/coordinateSystems/coordinateSystem.H
index e2a8f47affb10754916a6ad4504c1d754e039b9f..11a48d6eb772b7806c57281174ede70bf1a93f4b 100644
--- a/src/meshTools/coordinateSystems/coordinateSystem.H
+++ b/src/meshTools/coordinateSystems/coordinateSystem.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
diff --git a/src/meshTools/coordinateSystems/coordinateSystems.C b/src/meshTools/coordinateSystems/coordinateSystems.C
index 28632d0ae0aa1293eb128bc8688f9dd0bbac2052..4d829004081944a70489299514b6517118260a20 100644
--- a/src/meshTools/coordinateSystems/coordinateSystems.C
+++ b/src/meshTools/coordinateSystems/coordinateSystems.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -26,6 +26,7 @@ License
 #include "coordinateSystems.H"
 #include "IOPtrList.H"
 #include "Time.H"
+#include "stringListOps.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
@@ -97,13 +98,25 @@ const Foam::coordinateSystems& Foam::coordinateSystems::New
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-Foam::label Foam::coordinateSystems::find(const word& keyword) const
+Foam::label Foam::coordinateSystems::find(const keyType& key) const
 {
-    forAll(*this, i)
+    if (key.isPattern())
     {
-        if (keyword == operator[](i).name())
+        labelList allFound = findAll(key);
+        // return first element
+        if (!allFound.empty())
         {
-            return i;
+            return allFound[0];
+        }
+    }
+    else
+    {
+        forAll(*this, i)
+        {
+            if (key == operator[](i).name())
+            {
+                return i;
+            }
         }
     }
 
@@ -111,9 +124,34 @@ Foam::label Foam::coordinateSystems::find(const word& keyword) const
 }
 
 
-bool Foam::coordinateSystems::found(const word& keyword) const
+Foam::labelList Foam::coordinateSystems::findAll(const keyType& key) const
+{
+    labelList allFound;
+    if (key.isPattern())
+    {
+        allFound = findStrings(key, toc());
+    }
+    else
+    {
+        allFound.setSize(size());
+        label nFound = 0;
+        forAll(*this, i)
+        {
+            if (key == operator[](i).name())
+            {
+                allFound[nFound++] = i;
+            }
+        }
+        allFound.setSize(nFound);
+    }
+
+    return allFound;
+}
+
+
+bool Foam::coordinateSystems::found(const keyType& key) const
 {
-    return find(keyword) >= 0;
+    return find(key) >= 0;
 }
 
 
diff --git a/src/meshTools/coordinateSystems/coordinateSystems.H b/src/meshTools/coordinateSystems/coordinateSystems.H
index 60bd169ba0de9aa8407b1f1ada61b0639df4f2b6..2976a6f94efa48a726a39946bf87cb88843b12f0 100644
--- a/src/meshTools/coordinateSystems/coordinateSystems.H
+++ b/src/meshTools/coordinateSystems/coordinateSystems.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -97,11 +97,14 @@ public:
 
     // Member Functions
 
-        //- Find and return index for a given keyword, returns -1 if not found
-        label find(const word& key) const;
+        //- Find and return index for the first match, returns -1 if not found
+        label find(const keyType& key) const;
 
-        //- Search for given keyword
-        bool found(const word& keyword) const;
+        //- Find and return indices for all matches
+        labelList findAll(const keyType& key) const;
+
+        //- Search for given key
+        bool found(const keyType& key) const;
 
         //- Return the table of contents (list of all keywords)
         wordList toc() const;
diff --git a/src/thermophysicalModels/basicSolidThermo/Make/files b/src/thermophysicalModels/basicSolidThermo/Make/files
index f7f64d01d21c1bd4184502453288301f27abbfd0..e550ce20352aba5e8072c26af063a839b4c53f8b 100644
--- a/src/thermophysicalModels/basicSolidThermo/Make/files
+++ b/src/thermophysicalModels/basicSolidThermo/Make/files
@@ -1,7 +1,7 @@
 constSolidThermo/constSolidThermo.C
 directionalSolidThermo/directionalSolidThermo.C
 basicSolidThermo/basicSolidThermo.C
-basicSolidThermo/newBasicSolidThermo.C
+basicSolidThermo/basicSolidThermoNew.C
 interpolatedSolidThermo/interpolatedSolidThermo.C
 
 LIB = $(FOAM_LIBBIN)/libbasicSolidThermo
diff --git a/src/thermophysicalModels/basicSolidThermo/basicSolidThermo/newBasicSolidThermo.C b/src/thermophysicalModels/basicSolidThermo/basicSolidThermo/basicSolidThermoNew.C
similarity index 100%
rename from src/thermophysicalModels/basicSolidThermo/basicSolidThermo/newBasicSolidThermo.C
rename to src/thermophysicalModels/basicSolidThermo/basicSolidThermo/basicSolidThermoNew.C
diff --git a/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZone.C b/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZone.C
index 322260c6439980cb193434b76b405d9c4d47e0ec..df6a32d84b65cbda8d872056cdf78890bbdcb049 100644
--- a/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZone.C
+++ b/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZone.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -32,12 +32,12 @@ License
 
 Foam::thermalPorousZone::thermalPorousZone
 (
-    const word& name,
+    const keyType& key,
     const fvMesh& mesh,
     const dictionary& dict
 )
 :
-    porousZone(name, mesh, dict),
+    porousZone(key, mesh, dict),
     T_("T", dimTemperature, -GREAT)
 {
     if (const dictionary* dictPtr = dict.subDictPtr("thermalModel"))
@@ -53,11 +53,7 @@ Foam::thermalPorousZone::thermalPorousZone
             FatalIOErrorIn
             (
                 "thermalPorousZone::thermalPorousZone"
-                "("
-                    "const word& name, "
-                    "const fvMesh& mesh, "
-                    "const dictionary& dict"
-                ")",
+                "(const keyType&, const fvMesh&, const dictionary&)",
                 *dictPtr
             )   << "thermalModel " << thermalModel << " is not supported" << nl
                 << "    Supported thermalModels are: fixedTemperature"
@@ -76,23 +72,28 @@ void Foam::thermalPorousZone::addEnthalpySource
     fvScalarMatrix& hEqn
 ) const
 {
-    if (zoneId() == -1 || T_.value() < 0.0)
+    const labelList& zones = this->zoneIds();
+    if (zones.empty() || T_.value() < 0.0)
     {
         return;
     }
 
-    const labelList& cells = mesh().cellZones()[zoneId()];
     const scalarField& V = mesh().V();
     scalarField& hDiag = hEqn.diag();
     scalarField& hSource = hEqn.source();
 
-    scalarField hZone = thermo.h(scalarField(cells.size(), T_.value()), cells);
-    scalar rate = 1e6;
+    // TODO: generalize for non-fixedTemperature methods
+    const scalar rate = 1e6;
 
-    forAll(cells, i)
+    forAll(zones, zoneI)
     {
-        hDiag[cells[i]] += rate*V[cells[i]]*rho[cells[i]];
-        hSource[cells[i]] += rate*V[cells[i]]*rho[cells[i]]*hZone[i];
+        const labelList& cells = mesh().cellZones()[zones[zoneI]];
+
+        forAll(cells, i)
+        {
+            hDiag[cells[i]] += rate*V[cells[i]]*rho[cells[i]];
+            hSource[cells[i]] += rate*V[cells[i]]*rho[cells[i]]*T_.value();
+        }
     }
 }
 
diff --git a/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZone.H b/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZone.H
index f3cf5b339665ae889d4500ed6b058120eff4d0d4..7278f4ec980fc6f6f9d9280a26f2e87346c67438 100644
--- a/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZone.H
+++ b/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZone.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -33,7 +33,6 @@ See Also
 
 SourceFiles
     thermalPorousZone.C
-    thermalPorousZoneTemplates.C
 
 \*---------------------------------------------------------------------------*/
 
@@ -76,7 +75,7 @@ public:
     // Constructors
 
         //- Construct from components
-        thermalPorousZone(const word& name, const fvMesh&, const dictionary&);
+        thermalPorousZone(const keyType& key, const fvMesh&, const dictionary&);
 
         //- Return clone
         autoPtr<thermalPorousZone> clone() const
@@ -101,12 +100,12 @@ public:
 
             autoPtr<thermalPorousZone> operator()(Istream& is) const
             {
-                word name(is);
+                keyType key(is);
                 dictionary dict(is);
 
                 return autoPtr<thermalPorousZone>
                 (
-                    new thermalPorousZone(name, mesh_, dict)
+                    new thermalPorousZone(key, mesh_, dict)
                 );
             }
         };
@@ -149,12 +148,6 @@ public:
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-#ifdef NoRepository
-//#   include "thermalPorousZoneTemplates.C"
-#endif
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
 #endif
 
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZoneTemplates.C b/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZoneTemplates.C
deleted file mode 100644
index 261abb18e958ccc160b67f5c73116a3e6a221a96..0000000000000000000000000000000000000000
--- a/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZoneTemplates.C
+++ /dev/null
@@ -1,79 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
-     \\/     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 <http://www.gnu.org/licenses/>.
-
-\*----------------------------------------------------------------------------*/
-
-#include "porousZone.H"
-#include "fvMesh.H"
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-template<class RhoFieldType>
-void Foam::porousZone::addPowerLawResistance
-(
-    scalarField& Udiag,
-    const labelList& cells,
-    const scalarField& V,
-    const RhoFieldType& rho,
-    const vectorField& U
-) const
-{
-    const scalar C0 = C0_;
-    const scalar C1m1b2 = (C1_ - 1.0)/2.0;
-
-    forAll(cells, i)
-    {
-        Udiag[cells[i]] +=
-            V[cells[i]]*rho[cells[i]]*C0*pow(magSqr(U[cells[i]]), C1m1b2);
-    }
-}
-
-
-template<class RhoFieldType>
-void Foam::porousZone::addViscousInertialResistance
-(
-    scalarField& Udiag,
-    vectorField& Usource,
-    const labelList& cells,
-    const scalarField& V,
-    const RhoFieldType& rho,
-    const scalarField& mu,
-    const vectorField& U
-) const
-{
-    const tensor& D = D_.value();
-    const tensor& F = F_.value();
-
-    forAll(cells, i)
-    {
-        tensor dragCoeff = mu[cells[i]]*D + (rho[cells[i]]*mag(U[cells[i]]))*F;
-        scalar isoDragCoeff = tr(dragCoeff);
-
-        Udiag[cells[i]] += V[cells[i]]*isoDragCoeff;
-        Usource[cells[i]] -=
-            V[cells[i]]*((dragCoeff - I*isoDragCoeff) & U[cells[i]]);
-    }
-}
-
-
-// ************************************************************************* //
diff --git a/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZones.C b/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZones.C
index a98b0e064ccb8f79024d0bd607b8c9cd9daaf2a2..c35bd5c0dd6d273d22a162331acd596e170bb626 100644
--- a/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZones.C
+++ b/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZones.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
diff --git a/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZones.H b/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZones.H
index e696f2bb5b4aa7a18629ddcf25395c0c71315e9e..5d72c6f90e37524a521a24223e732f7100c96125 100644
--- a/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZones.H
+++ b/src/thermophysicalModels/thermalPorousZone/thermalPorousZone/thermalPorousZones.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -46,7 +46,11 @@ Description
             d   d [0 -2 0 0 0]  (-1000 -1000 0.50753e+08);
             f   f [0 -1 0 0 0]  (-1000 -1000 12.83);
         }
-        Temperature [0 0 1 0 0] 600;
+        thermalModel
+        {
+            type    fixedTemperature;
+            T       T [0 0 1 0 0] 600;
+        }
     }
     )
     @endverbatim
@@ -69,7 +73,7 @@ namespace Foam
 {
 
 /*---------------------------------------------------------------------------*\
-                           Class thermalPorousZones Declaration
+                     Class thermalPorousZones Declaration
 \*---------------------------------------------------------------------------*/
 
 class thermalPorousZones