diff --git a/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.C b/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.C
index 3036baff95b702e0e67d559bec552c1f7a1b5200..4af4c9f8afa6b910f37af6d529d6ddda5598f15b 100644
--- a/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.C
+++ b/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.C
@@ -81,9 +81,10 @@ void Foam::porosityModels::DarcyForchheimer::calcTranformModelData()
     {
         forAll (cellZoneIDs_, zoneI)
         {
-            D_[zoneI].setSize(1, tensor::zero);
-            F_[zoneI].setSize(1, tensor::zero);
+            D_[zoneI].setSize(1);
+            F_[zoneI].setSize(1);
 
+            D_[zoneI][0] = tensor::zero;
             D_[zoneI][0].xx() = dXYZ_.value().x();
             D_[zoneI][0].yy() = dXYZ_.value().y();
             D_[zoneI][0].zz() = dXYZ_.value().z();
@@ -91,6 +92,7 @@ void Foam::porosityModels::DarcyForchheimer::calcTranformModelData()
             D_[zoneI][0] = coordSys_.R().transformTensor(D_[zoneI][0]);
 
             // leading 0.5 is from 1/2*rho
+            F_[zoneI][0] = tensor::zero;
             F_[zoneI][0].xx() = 0.5*fXYZ_.value().x();
             F_[zoneI][0].yy() = 0.5*fXYZ_.value().y();
             F_[zoneI][0].zz() = 0.5*fXYZ_.value().z();
@@ -104,25 +106,65 @@ void Foam::porosityModels::DarcyForchheimer::calcTranformModelData()
         {
             const labelList& cells = mesh_.cellZones()[cellZoneIDs_[zoneI]];
 
-            D_[zoneI].setSize(cells.size(), tensor::zero);
-            F_[zoneI].setSize(cells.size(), tensor::zero);
+            D_[zoneI].setSize(cells.size());
+            F_[zoneI].setSize(cells.size());
 
             forAll(cells, i)
             {
+                D_[zoneI][i] = tensor::zero;
                 D_[zoneI][i].xx() = dXYZ_.value().x();
                 D_[zoneI][i].yy() = dXYZ_.value().y();
                 D_[zoneI][i].zz() = dXYZ_.value().z();
 
                 // leading 0.5 is from 1/2*rho
+                F_[zoneI][i] = tensor::zero;
                 F_[zoneI][i].xx() = 0.5*fXYZ_.value().x();
                 F_[zoneI][i].yy() = 0.5*fXYZ_.value().y();
                 F_[zoneI][i].zz() = 0.5*fXYZ_.value().z();
             }
 
-            D_[zoneI] = coordSys_.R().transformTensor(D_[zoneI], cells);
-            F_[zoneI] = coordSys_.R().transformTensor(F_[zoneI], cells);
+            const coordinateRotation& R = coordSys_.R(mesh_, cells);
+
+            D_[zoneI] = R.transformTensor(D_[zoneI], cells);
+            F_[zoneI] = R.transformTensor(F_[zoneI], cells);
         }
     }
+
+    if (debug && mesh_.time().outputTime())
+    {
+        volTensorField Dout
+        (
+            IOobject
+            (
+                typeName + ":D",
+                mesh_.time().timeName(),
+                mesh_,
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            mesh_,
+            dimensionedTensor("0", dXYZ_.dimensions(), tensor::zero)
+        );
+        volTensorField Fout
+        (
+            IOobject
+            (
+                typeName + ":F",
+                mesh_.time().timeName(),
+                mesh_,
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            mesh_,
+            dimensionedTensor("0", fXYZ_.dimensions(), tensor::zero)
+        );
+
+        UIndirectList<tensor>(Dout, mesh_.cellZones()[cellZoneIDs_[0]]) = D_[0];
+        UIndirectList<tensor>(Fout, mesh_.cellZones()[cellZoneIDs_[0]]) = F_[0];
+
+        Dout.write();
+        Fout.write();
+    }
 }
 
 
diff --git a/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.C b/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.C
index c3ef2826a59722291d749d4a7e540a4391f36ab7..c858fc287fb0650c230bd10d1142876e8e79ddf2 100644
--- a/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.C
+++ b/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.C
@@ -137,14 +137,16 @@ void Foam::porosityModels::fixedCoeff::calcTranformModelData()
     {
         forAll (cellZoneIDs_, zoneI)
         {
-            alpha_[zoneI].setSize(1, tensor::zero);
-            beta_[zoneI].setSize(1, tensor::zero);
+            alpha_[zoneI].setSize(1);
+            beta_[zoneI].setSize(1);
 
+            alpha_[zoneI][0] = tensor::zero;
             alpha_[zoneI][0].xx() = alphaXYZ_.value().x();
             alpha_[zoneI][0].yy() = alphaXYZ_.value().y();
             alpha_[zoneI][0].zz() = alphaXYZ_.value().z();
             alpha_[zoneI][0] = coordSys_.R().transformTensor(alpha_[zoneI][0]);
 
+            beta_[zoneI][0] = tensor::zero;
             beta_[zoneI][0].xx() = betaXYZ_.value().x();
             beta_[zoneI][0].yy() = betaXYZ_.value().y();
             beta_[zoneI][0].zz() = betaXYZ_.value().z();
@@ -157,24 +159,26 @@ void Foam::porosityModels::fixedCoeff::calcTranformModelData()
         {
             const labelList& cells = mesh_.cellZones()[cellZoneIDs_[zoneI]];
 
-            alpha_[zoneI].setSize(cells.size(), tensor::zero);
-            beta_[zoneI].setSize(cells.size(), tensor::zero);
+            alpha_[zoneI].setSize(cells.size());
+            beta_[zoneI].setSize(cells.size());
 
             forAll(cells, i)
             {
+                alpha_[zoneI][i] = tensor::zero;
                 alpha_[zoneI][i].xx() = alphaXYZ_.value().x();
                 alpha_[zoneI][i].yy() = alphaXYZ_.value().y();
                 alpha_[zoneI][i].zz() = alphaXYZ_.value().z();
 
+                beta_[zoneI][i] = tensor::zero;
                 beta_[zoneI][i].xx() = betaXYZ_.value().x();
                 beta_[zoneI][i].yy() = betaXYZ_.value().y();
                 beta_[zoneI][i].zz() = betaXYZ_.value().z();
             }
 
-            alpha_[zoneI] =
-                coordSys_.R().transformTensor(alpha_[zoneI], cells);
+            const coordinateRotation& R = coordSys_.R(mesh_, cells);
 
-            beta_[zoneI] = coordSys_.R().transformTensor(beta_[zoneI], cells);
+            alpha_[zoneI] = R.transformTensor(alpha_[zoneI], cells);
+            beta_[zoneI] = R.transformTensor(beta_[zoneI], cells);
         }
     }
 }
diff --git a/src/meshTools/coordinateSystems/cartesianCS.C b/src/meshTools/coordinateSystems/cartesianCS.C
index b80a69f5b15f7ca23a5b9b9bdd2d043883b0578d..f01bc18c22ac2bde9f81ff014dedcca5ceb9405c 100644
--- a/src/meshTools/coordinateSystems/cartesianCS.C
+++ b/src/meshTools/coordinateSystems/cartesianCS.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -157,6 +157,4 @@ Foam::tmp<Foam::vectorField> Foam::cartesianCS::globalToLocal
 }
 
 
-
-
 // ************************************************************************* //
diff --git a/src/meshTools/coordinateSystems/coordinateRotation/EulerCoordinateRotation.H b/src/meshTools/coordinateSystems/coordinateRotation/EulerCoordinateRotation.H
index a0be41ccf247279e3c367b6620b0f8a319abe4fa..362c846fe15e38505a2f0eff983d92b228282e44 100644
--- a/src/meshTools/coordinateSystems/coordinateRotation/EulerCoordinateRotation.H
+++ b/src/meshTools/coordinateSystems/coordinateRotation/EulerCoordinateRotation.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -130,6 +130,12 @@ public:
             Rtr_ = sphericalTensor::I;
         }
 
+        //- Update the rotation for a list of cells
+        virtual void updateCells(const polyMesh&, const labelList&)
+        {
+            // do nothing
+        }
+
         //- Return local-to-global transformation tensor
         virtual const tensor& R() const
         {
diff --git a/src/meshTools/coordinateSystems/coordinateRotation/STARCDCoordinateRotation.H b/src/meshTools/coordinateSystems/coordinateRotation/STARCDCoordinateRotation.H
index e034517c78d1d95a0855030737c9985c301a2c3d..1b73f71ee2aae3de871b824779e25567700e23e1 100644
--- a/src/meshTools/coordinateSystems/coordinateRotation/STARCDCoordinateRotation.H
+++ b/src/meshTools/coordinateSystems/coordinateRotation/STARCDCoordinateRotation.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -126,6 +126,12 @@ public:
             Rtr_ = sphericalTensor::I;
         }
 
+        //- Update the rotation for a list of cells
+        virtual void updateCells(const polyMesh&, const labelList&)
+        {
+            // do nothing
+        }
+
         //- Return local-to-global transformation tensor
         virtual const tensor& R() const
         {
diff --git a/src/meshTools/coordinateSystems/coordinateRotation/axesRotation.C b/src/meshTools/coordinateSystems/coordinateRotation/axesRotation.C
index a502eb02fd6c206d351dca7f41348f3dc397b423..f5d0fa0d7325bd514ff492f307fdb79bc6bf3b4d 100644
--- a/src/meshTools/coordinateSystems/coordinateRotation/axesRotation.C
+++ b/src/meshTools/coordinateSystems/coordinateRotation/axesRotation.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -50,10 +50,9 @@ void Foam::axesRotation::calcTransform
     const axisOrder& order
 )
 {
-    vector a = axis1 / mag(axis1);
+    vector a = axis1/mag(axis1);
     vector b = axis2;
 
-    // Absorb minor nonorthogonality into axis2
     b = b - (b & a)*a;
 
     if (mag(b) < SMALL)
@@ -64,36 +63,49 @@ void Foam::axesRotation::calcTransform
             << abort(FatalError);
     }
 
-    b = b / mag(b);
-    vector c = a ^ b;
+    b = b/mag(b);
+    vector c = a^b;
 
     tensor Rtr;
     switch (order)
     {
         case e1e2:
+        {
             Rtr = tensor(a, b, c);
             break;
-
+        }
         case e2e3:
+        {
             Rtr = tensor(c, a, b);
             break;
-
+        }
         case e3e1:
+        {
             Rtr = tensor(b, c, a);
             break;
-
+        }
         default:
-            FatalErrorIn("axesRotation::calcTransform()")
-                << "programmer error" << endl
+        {
+            FatalErrorIn
+            (
+                "axesRotation::calcTransform"
+                "("
+                    "const vector&,"
+                    "const vector&,"
+                    "const axisOrder&"
+                ")"
+            )
+                << "Unhandled axes specifictation" << endl
                 << abort(FatalError);
 
             Rtr = tensor::zero;
             break;
+        }
     }
 
-    // the global -> local transformation
+    // the global->local transformation
     Rtr_ = Rtr;
-    // the local -> global transformation
+    // the local->global transformation
     R_ = Rtr.T();
 }
 
@@ -154,15 +166,13 @@ Foam::axesRotation::axesRotation(const tensor& R)
 
 // * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
 
-Foam::vector Foam::axesRotation::transform(const vector& st) const
-{
-    return (R_ & st);
-}
-
-
-Foam::vector Foam::axesRotation::invTransform(const vector& st) const
+const Foam::tensorField& Foam::axesRotation::Tr() const
 {
-    return (Rtr_ & st);
+    notImplemented
+    (
+        "const Foam::tensorField& axesRotation::Tr() const"
+    );
+    return *reinterpret_cast<const tensorField*>(0);
 }
 
 
@@ -175,6 +185,12 @@ Foam::tmp<Foam::vectorField> Foam::axesRotation::transform
 }
 
 
+Foam::vector Foam::axesRotation::transform(const vector& st) const
+{
+    return (R_ & st);
+}
+
+
 Foam::tmp<Foam::vectorField> Foam::axesRotation::invTransform
 (
     const vectorField& st
@@ -184,13 +200,9 @@ Foam::tmp<Foam::vectorField> Foam::axesRotation::invTransform
 }
 
 
-const Foam::tensorField& Foam::axesRotation::Tr() const
+Foam::vector Foam::axesRotation::invTransform(const vector& st) const
 {
-    notImplemented
-    (
-        "const Foam::tensorField& axesRotation::Tr() const"
-    );
-    return *reinterpret_cast<const tensorField*>(0);
+    return (Rtr_ & st);
 }
 
 
@@ -225,13 +237,15 @@ Foam::tmp<Foam::tensorField> Foam::axesRotation::transformTensor
     notImplemented
     (
         "tmp<Foam::tensorField> axesRotation::transformTensor "
-        " const tensorField& st,"
-        " const labelList& cellMap "
+        "("
+            "const tensorField&,"
+            "const labelList&"
         ") const"
     );
     return tmp<tensorField>(NULL);
 }
 
+
 Foam::tmp<Foam::symmTensorField> Foam::axesRotation::transformVector
 (
     const vectorField& st
diff --git a/src/meshTools/coordinateSystems/coordinateRotation/axesRotation.H b/src/meshTools/coordinateSystems/coordinateRotation/axesRotation.H
index c755801091a80674712ce1ab20d5ad0c0e8a2a85..1478e44593de49728570dfec8bf3bc0264e2a208 100644
--- a/src/meshTools/coordinateSystems/coordinateRotation/axesRotation.H
+++ b/src/meshTools/coordinateSystems/coordinateRotation/axesRotation.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -99,11 +99,7 @@ public:
         axesRotation();
 
         //- Construct from 2 axes
-        axesRotation
-        (
-            const vector& axis,
-            const vector& dir
-        );
+        axesRotation(const vector& axis, const vector& dir);
 
         //- Construct from dictionary
         axesRotation(const dictionary&);
@@ -135,6 +131,12 @@ public:
             Rtr_ = sphericalTensor::I;
         }
 
+        //- Update the rotation for a list of cells
+        virtual void updateCells(const polyMesh&, const labelList&)
+        {
+            // do nothing
+        }
+
         //- Return local-to-global transformation tensor
         virtual const tensor& R() const
         {
diff --git a/src/meshTools/coordinateSystems/coordinateRotation/coordinateRotation.H b/src/meshTools/coordinateSystems/coordinateRotation/coordinateRotation.H
index 7564696c3d02b44e59dbeee518e44d568167f5e3..0e90d7aa8f1b4e6220f186a481de8e9994e2a8b5 100644
--- a/src/meshTools/coordinateSystems/coordinateRotation/coordinateRotation.H
+++ b/src/meshTools/coordinateSystems/coordinateRotation/coordinateRotation.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -55,6 +55,7 @@ Description
 #include "dictionary.H"
 #include "runTimeSelectionTables.H"
 #include "objectRegistry.H"
+#include "polyMesh.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -135,6 +136,13 @@ public:
         //- Reset rotation to an identity rotation
         virtual void clear() = 0;
 
+        //- Update the rotation for a list of cells
+        virtual void updateCells
+        (
+            const polyMesh& mesh,
+            const labelList& cells
+        ) = 0;
+
         //- Return local-to-global transformation tensor
         virtual const tensor& R() const = 0;
 
diff --git a/src/meshTools/coordinateSystems/coordinateRotation/localAxesRotation.C b/src/meshTools/coordinateSystems/coordinateRotation/localAxesRotation.C
index 719026227e75c6dd1b22ab84a318770088eb2004..cbe68e4402439dda2da66d52ef4fff8671523f4b 100644
--- a/src/meshTools/coordinateSystems/coordinateRotation/localAxesRotation.C
+++ b/src/meshTools/coordinateSystems/coordinateRotation/localAxesRotation.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -48,12 +48,33 @@ namespace Foam
     );
 }
 
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+void Foam::localAxesRotation::init(const objectRegistry& obr)
+{
+    const polyMesh& mesh = refCast<const polyMesh>(obr);
+    const vectorField& cc = mesh.cellCentres();
+
+    tensorField& R = Rptr_();
+    forAll(cc, cellI)
+    {
+        vector dir = cc[cellI] - origin_;
+        dir /= mag(dir) + VSMALL;
+
+        const axesRotation ar(e3_, dir);
+
+        R[cellI] = ar.R();
+    }
+}
+
+
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
 Foam::localAxesRotation::localAxesRotation
 (
     const dictionary& dict,
-    const objectRegistry& orb
+    const objectRegistry& obr
 )
 :
     Rptr_(),
@@ -69,27 +90,21 @@ Foam::localAxesRotation::localAxesRotation
     // rotation axis
     dict.lookup("e3") >> e3_;
 
-    const polyMesh& mesh = refCast<const polyMesh>(orb);
+    const polyMesh& mesh = refCast<const polyMesh>(obr);
 
-    Rptr_.reset
-    (
-        new tensorField(mesh.nCells())
-    );
-    init(dict, orb);
+    Rptr_.reset(new tensorField(mesh.nCells()));
+    init(obr);
 }
 
 
-Foam::localAxesRotation::localAxesRotation
-(
-    const dictionary& dict
-)
+Foam::localAxesRotation::localAxesRotation(const dictionary& dict)
 :
     Rptr_(),
     origin_(),
     e3_()
 {
     FatalErrorIn("localAxesRotation(const dictionary&)")
-        << " localAxesRotation can not be constructed from  dictionary "
+        << " localAxesRotation can not be constructed from dictionary "
         << " use the construtctor : "
            "("
            "    const dictionary&, const objectRegistry&"
@@ -109,6 +124,23 @@ void Foam::localAxesRotation::clear()
 }
 
 
+void Foam::localAxesRotation::updateCells
+(
+    const polyMesh& mesh,
+    const labelList& cells
+)
+{
+    forAll(cells, i)
+    {
+        label cellI = cells[i];
+        vector dir = mesh.cellCentres()[cellI] - origin_;
+        dir /= mag(dir) + VSMALL;
+
+        Rptr_()[cellI] = axesRotation(e3_, dir).R();
+    }
+}
+
+
 Foam::vector Foam::localAxesRotation::transform(const vector& st) const
 {
     notImplemented
@@ -212,14 +244,16 @@ Foam::tmp<Foam::tensorField> Foam::localAxesRotation::transformTensor
             << abort(FatalError);
     }
 
-    const tensorField Rtr(Rptr_().T());
+    const tensorField& R = Rptr_();
+    const tensorField Rtr(R.T());
     tmp<tensorField> tt(new tensorField(cellMap.size()));
     tensorField& t = tt();
     forAll(cellMap, i)
     {
         const label cellI = cellMap[i];
-        t[i] = Rptr_()[cellI] & st[i] & Rtr[cellI];
+        t[i] = R[cellI] & st[i] & Rtr[cellI];
     }
+
     return tt;
 }
 
@@ -239,9 +273,10 @@ Foam::tmp<Foam::symmTensorField> Foam::localAxesRotation::transformVector
     tmp<symmTensorField> tfld(new symmTensorField(Rptr_->size()));
     symmTensorField& fld = tfld();
 
+    const tensorField& R = Rptr_();
     forAll(fld, i)
     {
-        fld[i] = transformPrincipal(Rptr_()[i], st[i]);
+        fld[i] = transformPrincipal(R[i], st[i]);
     }
     return tfld;
 }
@@ -260,25 +295,6 @@ Foam::symmTensor Foam::localAxesRotation::transformVector
 }
 
 
-// * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
-
-void Foam::localAxesRotation::init
-(
-    const dictionary& dict,
-    const objectRegistry& obr
-)
-{
-    const polyMesh& mesh = refCast<const polyMesh>(obr);
-    forAll(mesh.cellCentres(), cellI)
-    {
-        vector dir = mesh.cellCentres()[cellI] - origin_;
-        dir /= mag(dir) + VSMALL;
-
-        Rptr_()[cellI] = axesRotation(e3_, dir).R();
-    }
-}
-
-
 void Foam::localAxesRotation::write(Ostream& os) const
 {
      os.writeKeyword("e3") << e3() << token::END_STATEMENT << nl;
diff --git a/src/meshTools/coordinateSystems/coordinateRotation/localAxesRotation.H b/src/meshTools/coordinateSystems/coordinateRotation/localAxesRotation.H
index 8d335a625d3cfc00fec6c978a87ceebeed0f5f91..d6eb7c63d5db849bb5e1219c2d56cc08a5518fbf 100644
--- a/src/meshTools/coordinateSystems/coordinateRotation/localAxesRotation.H
+++ b/src/meshTools/coordinateSystems/coordinateRotation/localAxesRotation.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -74,8 +74,8 @@ class localAxesRotation
 
     // Private members
 
-        //- Init transformation tensor
-        void init(const dictionary& dict, const objectRegistry& obr);
+        //- Init transformation tensor field
+        void init(const objectRegistry& obr);
 
 
 public:
@@ -108,6 +108,9 @@ public:
         //- Reset rotation to an identity rotation
         virtual void clear();
 
+        //- Update the rotation for a list of cells
+        virtual void updateCells(const polyMesh& mesh, const labelList& cells);
+
         //- Return local-to-global transformation tensor
         virtual const tensor& R() const
         {
diff --git a/src/meshTools/coordinateSystems/coordinateSystem.C b/src/meshTools/coordinateSystems/coordinateSystem.C
index 16e6983a40b752e9a35e94133e654a41e0b45b19..a63423aab2918cba3a6a3a4fa63d244735c9cf12 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) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -127,7 +127,6 @@ Foam::coordinateSystem::coordinateSystem
     origin_(point::zero),
     R_()
 {
-
     const entry* entryPtr = dict.lookupEntryPtr(typeName_(), false, false);
 
     // non-dictionary entry is a lookup into global coordinateSystems
@@ -141,7 +140,7 @@ Foam::coordinateSystem::coordinateSystem
         if (debug)
         {
             Info<< "coordinateSystem::coordinateSystem"
-                "(const dictionary&, const objectRegistry&):"
+                "(const objectRegistry&, const dictionary&):"
                 << nl << "using global coordinate system: "
                 << key << "=" << index << endl;
         }
@@ -151,7 +150,7 @@ Foam::coordinateSystem::coordinateSystem
             FatalErrorIn
             (
                 "coordinateSystem::coordinateSystem"
-                "(const dictionary&, const objectRegistry&)"
+                "(const objectRegistry&, const dictionary&):"
             )   << "could not find coordinate system: " << key << nl
                 << "available coordinate systems: " << lst.toc() << nl << nl
                 << exit(FatalError);
@@ -344,7 +343,11 @@ void Foam::coordinateSystem::init
 {
     if (debug)
     {
-        Pout<< "coordinateSystem::operator=(const dictionary&) : "
+        Pout<< "coordinateSystem::operator="
+                "("
+                    "const dictionary&, "
+                    "const objectRegistry&"
+                ") : "
             << "assign from " << rhs << endl;
     }
 
diff --git a/src/meshTools/coordinateSystems/coordinateSystem.H b/src/meshTools/coordinateSystems/coordinateSystem.H
index 47847c8b48708eec2b1c9c8dd232ace32557453e..196395cd25539e959ac0692f171603b8e5050b03 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) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -25,10 +25,9 @@ Class
     Foam::coordinateSystem
 
 Description
-    Base class for other coordinate
-    system specifications.
+    Base class for other coordinate system specifications.
 
-    All systems are defined by an origin point and a coordinateRotation.
+    All systems are defined by an origin point and a co-ordinate rotation.
 
     \verbatim
         coordinateSystem
@@ -37,8 +36,8 @@ Description
             origin  (0 0 0);
             coordinateRotation
             {
-                type        STARCDRotation;
-                rotation    (0 0 90);
+                type        localAxesRotation;
+                e3          (0 0 1);
             }
         }
     \endverbatim
@@ -49,16 +48,17 @@ Description
     3) localAxesRotation
     4) EulerCoordinateRotation
 
-    Type of coordinates:
+    Type of co-ordinates:
     1) cartesian
-    2) cylindricalCS
+    2) cylindrical
 
 See Also
     coordinateSystem and coordinateSystem::New
 
 SourceFiles
     coordinateSystem.C
-    newCoordinateSystem.C
+    coordinateSystemNew.C
+
 \*---------------------------------------------------------------------------*/
 
 #ifndef coordinateSystem_H
@@ -231,7 +231,6 @@ public:
 
     // Member Functions
 
-
         // Access
 
             //- Return name
@@ -258,18 +257,28 @@ public:
                 return origin_;
             }
 
-            //- Return const reference to coordinate rotation
+            //- Return const reference to co-ordinate rotation
             const coordinateRotation& R() const
             {
                 return R_();
             }
 
-            //- Return non const reference to coordinate rotation
+            //- Return non const reference to co-ordinate rotation
             coordinateRotation& R()
             {
                 return R_();
             }
 
+            //- Update and return the co-ordinate roation for a list of cells
+            const coordinateRotation& R
+            (
+                const polyMesh& mesh,
+                const labelList& cells
+            )
+            {
+                R_->updateCells(mesh, cells);
+                return R_();
+            }
 
             //- Return as dictionary of entries
             //  \param [in] ignoreType drop type (cartesian, cylindrical, etc)