diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrad.C b/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrad.C
index a5def7bcc12eeb73a9b3fc50aad7edaf5ed8c729..63d81a996fd67637df168092f9d30de8f3c82db7 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrad.C
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrad.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -21,23 +21,12 @@ License
     You should have received a copy of the GNU General Public License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
-Description
-    snGrad scheme with limited non-orthogonal correction.
-
-    The limiter is controlled by a coefficient with a value between 0 and 1
-    which when 0 switches the correction off and the scheme behaves as
-    uncorrectedSnGrad, when set to 1 the full correction is applied and the
-    scheme behaves as correctedSnGrad and when set to 0.5 the limiter is
-    calculated such that the non-orthogonal contribution does not exceed the
-    orthogonal part.
-
 \*---------------------------------------------------------------------------*/
 
 #include "fv.H"
 #include "limitedSnGrad.H"
 #include "volFields.H"
 #include "surfaceFields.H"
-#include "correctedSnGrad.H"
 #include "localMax.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -68,7 +57,7 @@ limitedSnGrad<Type>::correction
 {
     const GeometricField<Type, fvsPatchField, surfaceMesh> corr
     (
-        correctedSnGrad<Type>(this->mesh()).correction(vf)
+        correctedScheme_().correction(vf)
     );
 
     const surfaceScalarField limiter
@@ -76,7 +65,7 @@ limitedSnGrad<Type>::correction
         min
         (
             limitCoeff_
-           *mag(snGradScheme<Type>::snGrad(vf, deltaCoeffs(vf), "orthSnGrad"))
+           *mag(snGradScheme<Type>::snGrad(vf, deltaCoeffs(vf), "SndGrad"))
            /(
                 (1 - limitCoeff_)*mag(corr)
               + dimensionedScalar("small", corr.dimensions(), SMALL)
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrad.H b/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrad.H
index 9dbe0f01143ec668280c78d189c7d3ed133c512e..5d1ffd2b9408d44fffadc895b26990ef0fdeb2e3 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrad.H
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrad.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -25,14 +25,20 @@ Class
     Foam::fv::limitedSnGrad
 
 Description
-    Central-difference snGrad scheme with limited non-orthogonal correction.
+    Run-time selected snGrad scheme with limited non-orthogonal correction.
 
     The limiter is controlled by a coefficient with a value between 0 and 1
     which when 0 switches the correction off and the scheme behaves as
-    uncorrectedSnGrad, when set to 1 the full correction is applied and the
-    scheme behaves as correctedSnGrad and when set to 0.5 the limiter is
-    calculated such that the non-orthogonal contribution does not exceed the
-    orthogonal part.
+    uncorrectedSnGrad, when set to 1 the full correction of the selected scheme
+    is used and when set to 0.5 the limiter is calculated such that the
+    non-orthogonal contribution does not exceed the orthogonal part.
+
+    Format:
+        limited <corrected scheme> <coefficient>;
+
+        or
+
+        limited <coefficient>;  // Backward compatibility
 
 SourceFiles
     limitedSnGrad.C
@@ -42,7 +48,7 @@ SourceFiles
 #ifndef limitedSnGrad_H
 #define limitedSnGrad_H
 
-#include "snGradScheme.H"
+#include "correctedSnGrad.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -65,6 +71,8 @@ class limitedSnGrad
 {
     // Private data
 
+        tmp<snGradScheme<Type> > correctedScheme_;
+
         scalar limitCoeff_;
 
 
@@ -73,6 +81,34 @@ class limitedSnGrad
         //- Disallow default bitwise assignment
         void operator=(const limitedSnGrad&);
 
+        //- Lookup function for the corrected to support backward compatibility
+        //  of dictionary specification
+        tmp<snGradScheme<Type> > lookupCorrectedScheme(Istream& schemeData)
+        {
+            token nextToken(schemeData);
+
+            if (nextToken.isNumber())
+            {
+                limitCoeff_ = nextToken.number();
+                return tmp<snGradScheme<Type> >
+                (
+                    new correctedSnGrad<Type>(this->mesh())
+                );
+            }
+            else
+            {
+                schemeData.putBack(nextToken);
+                tmp<snGradScheme<Type> > tcorrectedScheme
+                (
+                    fv::snGradScheme<Type>::New(this->mesh(), schemeData)
+                );
+
+                schemeData >> limitCoeff_;
+
+                return tcorrectedScheme;
+            }
+        }
+
 
 public:
 
@@ -85,22 +121,24 @@ public:
         //- Construct from mesh
         limitedSnGrad(const fvMesh& mesh)
         :
-            snGradScheme<Type>(mesh)
+            snGradScheme<Type>(mesh),
+            correctedScheme_(new correctedSnGrad<Type>(this->mesh())),
+            limitCoeff_(1)
         {}
 
 
         //- Construct from mesh and data stream
-        limitedSnGrad(const fvMesh& mesh, Istream& is)
+        limitedSnGrad(const fvMesh& mesh, Istream& schemeData)
         :
             snGradScheme<Type>(mesh),
-            limitCoeff_(readScalar(is))
+            correctedScheme_(lookupCorrectedScheme(schemeData))
         {
             if (limitCoeff_ < 0 || limitCoeff_ > 1)
             {
                 FatalIOErrorIn
                 (
-                    "limitedSnGrad(const fvMesh& mesh, Istream& is) : ",
-                    is
+                    "limitedSnGrad(const fvMesh& mesh, Istream& schemeData) : ",
+                    schemeData
                 )   << "limitCoeff is specified as " << limitCoeff_
                     << " but should be >= 0 && <= 1"
                     << exit(FatalIOError);