diff --git a/src/regionModels/surfaceFilmModels/Make/files b/src/regionModels/surfaceFilmModels/Make/files
index 859d6de6120735fb8bb3674484ed0d003cec1500..5d28eb443b3bd7ed3ba8f745dc0d0e7f60f7d5ad 100644
--- a/src/regionModels/surfaceFilmModels/Make/files
+++ b/src/regionModels/surfaceFilmModels/Make/files
@@ -24,8 +24,9 @@ $(KINEMATICMODELS)/injectionModel/drippingInjection/drippingInjection.C
 $(KINEMATICMODELS)/injectionModel/removeInjection/removeInjection.C
 $(KINEMATICMODELS)/injectionModel/curvatureSeparation/curvatureSeparation.C
 
-$(KINEMATICMODELS)/filmThermoModel/constantFilmThermo/constantFilmThermo.C
 $(KINEMATICMODELS)/filmThermoModel/filmThermoModel/filmThermoModel.C
+$(KINEMATICMODELS)/filmThermoModel/filmThermoModel/filmThermoModelNew.C
+$(KINEMATICMODELS)/filmThermoModel/constantFilmThermo/constantFilmThermo.C
 $(KINEMATICMODELS)/filmThermoModel/liquidFilmThermo/liquidFilmThermo.C
 
 $(KINEMATICMODELS)/filmTurbulenceModel/filmTurbulenceModel/filmTurbulenceModel.C
@@ -50,6 +51,12 @@ $(THERMOMODELS)/filmRadiationModel/constantRadiation/constantRadiation.C
 $(THERMOMODELS)/filmRadiationModel/primaryRadiation/primaryRadiation.C
 $(THERMOMODELS)/filmRadiationModel/standardRadiation/standardRadiation.C
 
+$(THERMOMODELS)/filmViscosityModel/filmViscosityModel/filmViscosityModel.C
+$(THERMOMODELS)/filmViscosityModel/filmViscosityModel/filmViscosityModelNew.C
+$(THERMOMODELS)/filmViscosityModel/constantViscosity/constantViscosity.C
+$(THERMOMODELS)/filmViscosityModel/liquidViscosity/liquidViscosity.C
+$(THERMOMODELS)/filmViscosityModel/thixotropicViscosity/thixotropicViscosity.C
+
 
 /* Boundary conditions */
 PATCHFIELDS=derivedFvPatchFields
diff --git a/src/regionModels/surfaceFilmModels/kinematicSingleLayer/kinematicSingleLayer.C b/src/regionModels/surfaceFilmModels/kinematicSingleLayer/kinematicSingleLayer.C
index 02dce3f2686378ea3469dbf68eff824964a30561..107229320540b255cf5e7b2381379ff27060261a 100644
--- a/src/regionModels/surfaceFilmModels/kinematicSingleLayer/kinematicSingleLayer.C
+++ b/src/regionModels/surfaceFilmModels/kinematicSingleLayer/kinematicSingleLayer.C
@@ -438,6 +438,8 @@ kinematicSingleLayer::kinematicSingleLayer
 
     cumulativeContErr_(0.0),
 
+    deltaSmall_("deltaSmall", dimLength, SMALL),
+
     rho_
     (
         IOobject
diff --git a/src/regionModels/surfaceFilmModels/kinematicSingleLayer/kinematicSingleLayer.H b/src/regionModels/surfaceFilmModels/kinematicSingleLayer/kinematicSingleLayer.H
index 8e932511b596ad80c58d075dfb53d06453b98dff..85deaa8b4871970d3a8e0d20e872eba4fca5faa5 100644
--- a/src/regionModels/surfaceFilmModels/kinematicSingleLayer/kinematicSingleLayer.H
+++ b/src/regionModels/surfaceFilmModels/kinematicSingleLayer/kinematicSingleLayer.H
@@ -97,6 +97,9 @@ protected:
             //- Cumulative continuity error
             scalar cumulativeContErr_;
 
+            //- Small delta
+            const dimensionedScalar deltaSmall_;
+
 
         // Thermo properties
 
@@ -324,6 +327,9 @@ public:
             //- Return the number of non-orthogonal correctors
             inline label nNonOrthCorr() const;
 
+            //- Return small delta
+            inline const dimensionedScalar& deltaSmall() const;
+
 
         // Thermo properties
 
diff --git a/src/regionModels/surfaceFilmModels/kinematicSingleLayer/kinematicSingleLayerI.H b/src/regionModels/surfaceFilmModels/kinematicSingleLayer/kinematicSingleLayerI.H
index 65f8ed4dc4a99fa459535de7afa23cd16333c514..de9965b8e1ef375dbff884347b667a12a2a7721d 100644
--- a/src/regionModels/surfaceFilmModels/kinematicSingleLayer/kinematicSingleLayerI.H
+++ b/src/regionModels/surfaceFilmModels/kinematicSingleLayer/kinematicSingleLayerI.H
@@ -62,6 +62,12 @@ inline label kinematicSingleLayer::nNonOrthCorr() const
 }
 
 
+inline const dimensionedScalar& kinematicSingleLayer::deltaSmall() const
+{
+    return deltaSmall_;
+}
+
+
 inline const volScalarField& kinematicSingleLayer::mu() const
 {
     return mu_;
diff --git a/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/thixotropicViscosity/thixotropicViscosity.C b/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/thixotropicViscosity/thixotropicViscosity.C
new file mode 100644
index 0000000000000000000000000000000000000000..9fd2eb7777741f08f321aede555ed40ddb7ef753
--- /dev/null
+++ b/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/thixotropicViscosity/thixotropicViscosity.C
@@ -0,0 +1,181 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 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 <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "thixotropicViscosity.H"
+#include "kinematicSingleLayer.H"
+#include "addToRunTimeSelectionTable.H"
+
+#include "fvmDdt.H"
+#include "fvmDiv.H"
+#include "fvcDiv.H"
+#include "fvmSup.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace regionModels
+{
+namespace surfaceFilmModels
+{
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(thixotropicViscosity, 0);
+
+addToRunTimeSelectionTable
+(
+    filmViscosityModel,
+    thixotropicViscosity,
+    dictionary
+);
+
+
+// * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * //
+
+void thixotropicViscosity::updateMu()
+{
+    const kinematicSingleLayer& film = filmType<kinematicSingleLayer>();
+
+    // blend based on mass fraction of added- to existing film mass
+    const dimensionedScalar m0("zero", dimMass, 0.0);
+    const dimensionedScalar mSMALL("SMALL", dimMass, ROOTVSMALL);
+    const volScalarField deltaMass("deltaMass", max(m0, film.deltaMass()));
+    const volScalarField filmMass("filmMass", film.netMass() + mSMALL);
+
+    // weighting field to blend new and existing mass contributions
+    const volScalarField w("w", max(0.0, min(1.0, deltaMass/filmMass)));
+
+    // evaluate thixotropic viscosity
+    volScalarField muThx("muThx", muInf_/(sqr(1.0 - K_*lambda_) + ROOTVSMALL));
+
+    // set new viscosity based on weight field
+    mu_ = w*muInf_ + (1.0 - w)*muThx;
+    mu_.correctBoundaryConditions();
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+thixotropicViscosity::thixotropicViscosity
+(
+    const surfaceFilmModel& owner,
+    const dictionary& dict,
+    volScalarField& mu
+)
+:
+    filmViscosityModel(typeName, owner, dict, mu),
+    a_(coeffs().lookup("a")),
+    b_(coeffs().lookup("b")),
+    c_(coeffs().lookup("c")),
+    d_(coeffs().lookup("d")),
+    mu0_(coeffs().lookup("mu0")),
+    muInf_(coeffs().lookup("muInf")),
+    K_(1.0 - Foam::sqrt(muInf_/mu0_)),
+    lambda_
+    (
+        IOobject
+        (
+            typeName + ":lambda",
+            owner.regionMesh().time().timeName(),
+            owner.regionMesh(),
+            IOobject::MUST_READ_IF_MODIFIED,
+            IOobject::AUTO_WRITE
+        ),
+        owner.regionMesh()
+    )
+{
+    lambda_.min(1.0);
+    lambda_.max(0.0);
+
+    // initialise viscosity to inf value
+    // - cannot call updateMu() since this calls film.netMass() which
+    //   cannot be evaluated yet (still in construction)
+    mu_ = muInf_;
+    mu_.correctBoundaryConditions();
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+thixotropicViscosity::~thixotropicViscosity()
+{}
+
+
+// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+
+void thixotropicViscosity::correct
+(
+    const volScalarField& p,
+    const volScalarField& T
+)
+{
+    const kinematicSingleLayer& film = filmType<kinematicSingleLayer>();
+
+    // references to film fields
+    const volVectorField& U = film.U();
+    const volVectorField& Uw = film.Uw();
+    const volScalarField& delta = film.delta();
+    const volScalarField& deltaRho = film.deltaRho();
+    const surfaceScalarField& phi = film.phi();
+
+    // gamma-dot (shear rate) raised to the power d
+    volScalarField gDotPowD
+    (
+        "gDotPowD",
+        pow(mag(U - Uw)/(delta + film.deltaSmall()), d_)
+    );
+
+    dimensionedScalar c0("SMALL", dimMass/sqr(dimLength)/dimTime, SMALL);
+    volScalarField coeff(-deltaRho*c_*gDotPowD + c0);
+
+    fvScalarMatrix lambdaEqn
+    (
+        fvm::ddt(deltaRho, lambda_)
+      + fvm::div(phi, lambda_)
+      - fvm::Sp(fvc::div(phi), lambda_)
+      ==
+        deltaRho*a_*pow((1.0 - lambda_), b_)
+      + fvm::SuSp(coeff, lambda_)
+    );
+
+    lambdaEqn.relax();
+
+    lambdaEqn.solve();
+
+    lambda_.min(1.0);
+    lambda_.max(0.0);
+
+    updateMu();
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace surfaceFilmModels
+} // End namespace regionModels
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/thixotropicViscosity/thixotropicViscosity.H b/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/thixotropicViscosity/thixotropicViscosity.H
new file mode 100644
index 0000000000000000000000000000000000000000..3cdd3235e6c421d38b8ec21f4ade95761fc4e33a
--- /dev/null
+++ b/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/thixotropicViscosity/thixotropicViscosity.H
@@ -0,0 +1,205 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 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 <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::thixotropicViscosity
+
+Description
+    Thixotropic viscosity model based on the evolution of the structural
+    parameter \f$ \lambda \f$:
+
+        \f[
+            \lambda = a(1 - \lambda)^b - c \lambda \dot{\gamma}^d
+        \f]
+
+    The viscosity is then calculated using the expression
+
+        \f[
+            \mu = \frac{\mu_{inf}}{{1 - K \lambda}^2}
+        \f]
+
+    Where the parameter K is given by:
+
+        \f[
+            K = 1 - \frac{\mu_{\inf}}{\mu_{0}}^0.5
+        \f]
+
+    Here:
+    \vartable
+        \lambda         | structural parameter
+        a               | model coefficient
+        b               | model coefficient
+        c               | model coefficient
+        d               | model coefficient
+        \dot{\gamma}    | stress rate [1/s]
+        \mu_{0}         | limiting viscosity when \f$ \lambda = 1 \f$
+        \mu_{\inf}      | limiting viscosity when \f$ \lambda = 0 \f$
+    \endvartable
+
+
+    Reference:
+    \verbatim
+        Barnes H A, 1997.  Thixotropy - a review.  J. Non-Newtonian Fluid
+        Mech 70, pp 1-33
+    \endverbatim
+
+SourceFiles
+    thixotropicViscosity.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef thixotropicViscosity_H
+#define thixotropicViscosity_H
+
+#include "filmViscosityModel.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace regionModels
+{
+namespace surfaceFilmModels
+{
+
+/*---------------------------------------------------------------------------*\
+                    Class thixotropicViscosity Declaration
+\*---------------------------------------------------------------------------*/
+
+class thixotropicViscosity
+:
+    public filmViscosityModel
+{
+private:
+
+    // Private member functions
+
+        //- Disallow default bitwise copy construct
+        thixotropicViscosity(const thixotropicViscosity&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const thixotropicViscosity&);
+
+
+protected:
+
+    // Protected data
+
+/*
+        //- Model `a' coefficient
+        scalar a_;
+
+        //- Model `b' coefficient
+        scalar b_;
+
+        //- Model `c' coefficient
+        scalar c_;
+
+        //- Model `d' coefficient
+        scalar d_;
+
+        //- Limiting viscosity when lambda = 1
+        scalar mu0_;
+
+        //- Limiting viscosity when lambda = 0
+        scalar muInf_;
+*/
+
+        //- Model `a' coefficient
+        dimensionedScalar a_;
+
+        //- Model `b' coefficient
+        dimensionedScalar b_;
+
+        //- Model `c' coefficient
+        dimensionedScalar c_;
+
+        //- Model `d' coefficient
+        dimensionedScalar d_;
+
+        //- Limiting viscosity when lambda = 1
+        dimensionedScalar mu0_;
+
+        //- Limiting viscosity when lambda = 0
+        dimensionedScalar muInf_;
+
+        //- Model coeffiicient
+        dimensionedScalar K_;
+
+        //- Structural parameter
+        //  0 = freestream value (most liquid)
+        //  1 = fully built (most solid)
+        volScalarField lambda_;
+
+
+    // Protected Member Functions
+
+        //- Update the viscosity
+        void updateMu();
+
+
+public:
+
+    //- Runtime type information
+    TypeName("thixotropic");
+
+
+    // Constructors
+
+        //- Construct from surface film model
+        thixotropicViscosity
+        (
+            const surfaceFilmModel& owner,
+            const dictionary& dict,
+            volScalarField& mu
+        );
+
+
+    //- Destructor
+    virtual ~thixotropicViscosity();
+
+
+    // Member Functions
+
+        // Evolution
+
+            //- Correct
+            virtual void correct
+            (
+                const volScalarField& p,
+                const volScalarField& T
+            );
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace surfaceFilmModels
+} // End namespace regionModels
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //