diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/faceCorrectedSnGrad/faceCorrectedSnGrad.C b/src/finiteVolume/finiteVolume/snGradSchemes/faceCorrectedSnGrad/faceCorrectedSnGrad.C
new file mode 100644
index 0000000000..6b8156aca3
--- /dev/null
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/faceCorrectedSnGrad/faceCorrectedSnGrad.C
@@ -0,0 +1,167 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011 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 "faceCorrectedSnGrad.H"
+#include "volPointInterpolation.H"
+#include "triangle.H"
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+template
+Foam::fv::faceCorrectedSnGrad::~faceCorrectedSnGrad()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+template
+Foam::tmp >
+Foam::fv::faceCorrectedSnGrad::fullGradCorrection
+(
+ const GeometricField& vf
+) const
+{
+ const fvMesh& mesh = this->mesh();
+
+ GeometricField pvf
+ (
+ volPointInterpolation::New(mesh).interpolate(vf)
+ );
+
+ // construct GeometricField
+ tmp > tsfCorr
+ (
+ new GeometricField
+ (
+ IOobject
+ (
+ "snGradCorr("+vf.name()+')',
+ vf.instance(),
+ mesh,
+ IOobject::NO_READ,
+ IOobject::NO_WRITE
+ ),
+ mesh,
+ vf.dimensions()*mesh.nonOrthDeltaCoeffs().dimensions()
+ )
+ );
+
+ Field& sfCorr = tsfCorr().internalField();
+
+ const pointField& points = mesh.points();
+ const faceList& faces = mesh.faces();
+ const vectorField& Sf = mesh.Sf().internalField();
+ const vectorField& C = mesh.C().internalField();
+ const scalarField& magSf = mesh.magSf().internalField();
+ const labelList& owner = mesh.owner();
+ const labelList& neighbour = mesh.neighbour();
+
+ forAll(sfCorr, facei)
+ {
+ typename outerProduct::type fgrad
+ (
+ outerProduct::type::zero
+ );
+
+ const face& fi = faces[facei];
+
+ vector nf(Sf[facei]/magSf[facei]);
+
+ for (label pi=0; pi 2) dCorr *= 2/mag(dCorr);
+
+ sfCorr[facei] = dCorr&fgrad;
+ }
+
+ tsfCorr().boundaryField() = pTraits::zero;
+
+ return tsfCorr;
+}
+
+
+template
+Foam::tmp >
+Foam::fv::faceCorrectedSnGrad::correction
+(
+ const GeometricField& vf
+) const
+{
+ const fvMesh& mesh = this->mesh();
+
+ // construct GeometricField
+ tmp > tssf
+ (
+ new GeometricField
+ (
+ IOobject
+ (
+ "snGradCorr("+vf.name()+')',
+ vf.instance(),
+ mesh,
+ IOobject::NO_READ,
+ IOobject::NO_WRITE
+ ),
+ mesh,
+ vf.dimensions()*mesh.nonOrthDeltaCoeffs().dimensions()
+ )
+ );
+ GeometricField& ssf = tssf();
+
+ for (direction cmpt = 0; cmpt < pTraits::nComponents; cmpt++)
+ {
+ ssf.replace
+ (
+ cmpt,
+ faceCorrectedSnGrad::cmptType>(mesh)
+ .fullGradCorrection(vf.component(cmpt))
+ );
+ }
+
+ return tssf;
+}
+
+
+// ************************************************************************* //
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/faceCorrectedSnGrad/faceCorrectedSnGrad.H b/src/finiteVolume/finiteVolume/snGradSchemes/faceCorrectedSnGrad/faceCorrectedSnGrad.H
new file mode 100644
index 0000000000..a79ece3281
--- /dev/null
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/faceCorrectedSnGrad/faceCorrectedSnGrad.H
@@ -0,0 +1,157 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011 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::fv::faceCorrectedSnGrad
+
+Description
+ Simple central-difference snGrad scheme with non-orthogonal correction.
+
+SourceFiles
+ faceCorrectedSnGrad.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef faceCorrectedSnGrad_H
+#define faceCorrectedSnGrad_H
+
+#include "snGradScheme.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace fv
+{
+
+/*---------------------------------------------------------------------------*\
+ Class faceCorrectedSnGrad Declaration
+\*---------------------------------------------------------------------------*/
+
+template
+class faceCorrectedSnGrad
+:
+ public snGradScheme
+{
+ // Private Member Functions
+
+ //- Disallow default bitwise assignment
+ void operator=(const faceCorrectedSnGrad&);
+
+
+public:
+
+ //- Runtime type information
+ TypeName("faceCorrected");
+
+
+ // Constructors
+
+ //- Construct from mesh
+ faceCorrectedSnGrad(const fvMesh& mesh)
+ :
+ snGradScheme(mesh)
+ {}
+
+
+ //- Construct from mesh and data stream
+ faceCorrectedSnGrad(const fvMesh& mesh, Istream&)
+ :
+ snGradScheme(mesh)
+ {}
+
+
+ //- Destructor
+ virtual ~faceCorrectedSnGrad();
+
+
+ // Member Functions
+
+ //- Return the interpolation weighting factors for the given field
+ virtual tmp deltaCoeffs
+ (
+ const GeometricField&
+ ) const
+ {
+ return this->mesh().nonOrthDeltaCoeffs();
+ }
+
+ //- Return true if this scheme uses an explicit correction
+ virtual bool corrected() const
+ {
+ return true;
+ }
+
+ //- Return the explicit correction to the faceCorrectedSnGrad
+ // for the given field using the gradient of the field
+ tmp >
+ fullGradCorrection
+ (
+ const GeometricField&
+ ) const;
+
+ //- Return the explicit correction to the faceCorrectedSnGrad
+ // for the given field using the gradients of the field components
+ virtual tmp >
+ correction(const GeometricField&) const;
+};
+
+
+// * * * * * * * * Template Member Function Specialisations * * * * * * * * //
+
+template<>
+tmp faceCorrectedSnGrad::correction
+(
+ const volScalarField& vsf
+) const;
+
+
+template<>
+tmp faceCorrectedSnGrad::correction
+(
+ const volVectorField& vvf
+) const;
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace fv
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+# include "faceCorrectedSnGrad.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/faceCorrectedSnGrad/faceCorrectedSnGrads.C b/src/finiteVolume/finiteVolume/snGradSchemes/faceCorrectedSnGrad/faceCorrectedSnGrads.C
new file mode 100644
index 0000000000..f98abfd351
--- /dev/null
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/faceCorrectedSnGrad/faceCorrectedSnGrads.C
@@ -0,0 +1,62 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011 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 "faceCorrectedSnGrad.H"
+#include "fvMesh.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace fv
+{
+ makeSnGradScheme(faceCorrectedSnGrad)
+}
+}
+
+
+template<>
+Foam::tmp
+Foam::fv::faceCorrectedSnGrad::correction
+(
+ const volScalarField& vsf
+) const
+{
+ return fullGradCorrection(vsf);
+}
+
+
+template<>
+Foam::tmp
+Foam::fv::faceCorrectedSnGrad::correction
+(
+ const volVectorField& vvf
+) const
+{
+ return fullGradCorrection(vvf);
+}
+
+
+// ************************************************************************* //