diff --git a/src/functionObjects/solvers/scalarTransport/scalarTransport.C b/src/functionObjects/solvers/scalarTransport/scalarTransport.C
index 954a5d6..51fbbb1 100644
--- a/src/functionObjects/solvers/scalarTransport/scalarTransport.C
+++ b/src/functionObjects/solvers/scalarTransport/scalarTransport.C
@@ -82,6 +82,58 @@ Foam::tmp<Foam::volScalarField> Foam::functionObjects::scalarTransport::D
             )
         );
     }
+    else if (laminarSc_)
+    {
+        if (phi.dimensions() == dimMass/dimTime)
+        {
+
+            const volScalarField& mu =
+                mesh_.lookupObject<volScalarField>(muName_);
+
+            tmp<volScalarField> D(new volScalarField(Dname, mu/Sc_));
+
+            if (mesh_.foundObject<cmpModel>(turbulenceModel::propertiesName))
+            {
+                if (!turbulentSc_)
+                {
+                    FatalErrorInFunction
+                        << "Turbulent Schmidt number Sct is not specified"
+                        << exit(FatalError);
+                }
+                const cmpModel& model = mesh_.lookupObject<cmpModel>
+                (
+                    turbulenceModel::propertiesName
+                );
+                D = D + model.mut()/Sct_;
+            }
+
+            return D;
+        }
+        else
+        {
+            const volScalarField& nu =
+                mesh_.lookupObject<volScalarField>(nuName_);
+
+            tmp<volScalarField> D(new volScalarField(Dname, nu/Sc_));
+
+            if (mesh_.foundObject<icoModel>(turbulenceModel::propertiesName))
+            {
+                if (!turbulentSc_)
+                {
+                    FatalErrorInFunction
+                        << "Turbulent Schmidt number Sct is not specified"
+                        << exit(FatalError);
+                }
+                const icoModel& model = mesh_.lookupObject<icoModel>
+                (
+                    turbulenceModel::propertiesName
+                );
+                D = D + model.nut()/Sct_;
+            }
+
+            return D;
+        }
+    }
     else if (mesh_.foundObject<icoModel>(turbulenceModel::propertiesName))
     {
         const icoModel& model = mesh_.lookupObject<icoModel>
@@ -167,6 +219,8 @@ bool Foam::functionObjects::scalarTransport::read(const dictionary& dict)
 
     phiName_ = dict.lookupOrDefault<word>("phi", "phi");
     rhoName_ = dict.lookupOrDefault<word>("rho", "rho");
+    muName_  = dict.lookupOrDefault<word>("mu", "thermo:mu");
+    nuName_  = dict.lookupOrDefault<word>("nu", "nu");
     schemesField_ = dict.lookupOrDefault<word>("schemesField", fieldName_);
 
     constantD_ = false;
@@ -175,6 +229,30 @@ bool Foam::functionObjects::scalarTransport::read(const dictionary& dict)
         constantD_ = true;
     }
 
+    laminarSc_ = false;
+    if (dict.readIfPresent("Sc", Sc_))
+    {
+        if (constantD_)
+        {
+            FatalErrorInFunction
+                << "Both D and Sc are specified in dictionary "
+                << dict.name() << abort(FatalError);
+        }
+        laminarSc_ = true;
+    }
+
+    turbulentSc_ = false;
+    if (dict.readIfPresent("Sct", Sct_))
+    {
+        if (!laminarSc_)
+        {
+            FatalErrorInFunction
+                << "Laminar Sc must be specified in dictionary "
+                << dict.name() << exit(FatalError);
+        }
+        turbulentSc_ = true;
+    }
+
     dict.readIfPresent("nCorr", nCorr_);
 
     if (dict.found("fvOptions"))
diff --git a/src/functionObjects/solvers/scalarTransport/scalarTransport.H b/src/functionObjects/solvers/scalarTransport/scalarTransport.H
index 86c92bd..8bb9441 100644
--- a/src/functionObjects/solvers/scalarTransport/scalarTransport.H
+++ b/src/functionObjects/solvers/scalarTransport/scalarTransport.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012-2016 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012-2017 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -35,6 +35,8 @@ Description
       the 'schemesField' entry,
     - The diffusivity can be set manually using the 'D' entry, or retrieved
       from the turbulence model (if applicable).
+    - The laminar Sc and turbulent Sct Schmidt numbers can be specified
+      instead of diffusivity D
 
 See also
     Foam::functionObjects::fvMeshFunctionObject
@@ -77,12 +79,30 @@ class scalarTransport
         //- Name of density field (optional)
         word rhoName_;
 
+        //- Name of dynamic viscosity field (optional)
+        word muName_;
+
+        //- Name of kinematic viscosity field (optional)
+        word nuName_;
+
         //- Diffusion coefficient (optional)
         scalar D_;
 
         //- Flag to indicate whether a constant, uniform D_ is specified
         bool constantD_;
 
+        //- Laminar Schmidt number (optional)
+        scalar Sc_;
+
+        //- Flag to indicate whether laminar Schmidt number is specified
+        bool laminarSc_;
+
+        //- Turbulent Schmidt number (optional)
+        scalar Sct_;
+
+        //- Flag to indicate whether turbulent Schmidt number is specified
+        bool turbulentSc_;
+
         //- Number of corrector iterations (optional)
         label nCorr_;
 
