diff --git a/applications/solvers/incompressible/adjointShapeOptimizationFoam/Make/options b/applications/solvers/incompressible/adjointShapeOptimizationFoam/Make/options
index d33d199f06e1bd843ceb0cfe05c6e06f18615e61..690caa73743e983941761100693132d6aa32d478 100644
--- a/applications/solvers/incompressible/adjointShapeOptimizationFoam/Make/options
+++ b/applications/solvers/incompressible/adjointShapeOptimizationFoam/Make/options
@@ -5,11 +5,13 @@ EXE_INC = \
     -I$(LIB_SRC)/transportModels \
     -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
     -I$(LIB_SRC)/finiteVolume/lnInclude \
-    -I$(LIB_SRC)/meshTools/lnInclude
+    -I$(LIB_SRC)/meshTools/lnInclude \
+    -I$(LIB_SRC)/fvOptions/lnInclude
 
 EXE_LIBS = \
     -lturbulenceModels \
     -lincompressibleTurbulenceModels \
     -lincompressibleTransportModels \
     -lfiniteVolume \
-    -lmeshTools
+    -lmeshTools \
+    -lfvOptions
diff --git a/applications/solvers/incompressible/adjointShapeOptimizationFoam/adjointShapeOptimizationFoam.C b/applications/solvers/incompressible/adjointShapeOptimizationFoam/adjointShapeOptimizationFoam.C
index f57f444121b7e21add1fcc5ae1fc3359b34aa3b7..75c706137d6086f04425829ee0eeeaeeaf8b8d87 100644
--- a/applications/solvers/incompressible/adjointShapeOptimizationFoam/adjointShapeOptimizationFoam.C
+++ b/applications/solvers/incompressible/adjointShapeOptimizationFoam/adjointShapeOptimizationFoam.C
@@ -49,6 +49,7 @@ Description
 #include "singlePhaseTransportModel.H"
 #include "turbulentTransportModel.H"
 #include "simpleControl.H"
+#include "fvIOoptionList.H"
 
 template<class Type>
 void zeroCells
@@ -76,9 +77,12 @@ int main(int argc, char *argv[])
     simpleControl simple(mesh);
 
     #include "createFields.H"
+    #include "createFvOptions.H"
     #include "initContinuityErrs.H"
     #include "initAdjointContinuityErrs.H"
 
+    turbulence->validate();
+
     // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
     Info<< "\nStarting time loop\n" << endl;
@@ -108,12 +112,18 @@ int main(int argc, char *argv[])
                 fvm::div(phi, U)
               + turbulence->divDevReff(U)
               + fvm::Sp(alpha, U)
+             ==
+                fvOptions(U)
             );
 
             UEqn().relax();
 
+            fvOptions.constrain(UEqn());
+
             solve(UEqn() == -fvc::grad(p));
 
+            fvOptions.correct(U);
+
             volScalarField rAU(1.0/UEqn().A());
             volVectorField HbyA("HbyA", U);
             HbyA = rAU*UEqn().H();
@@ -150,6 +160,7 @@ int main(int argc, char *argv[])
             // Momentum corrector
             U = HbyA - rAU*fvc::grad(p);
             U.correctBoundaryConditions();
+            fvOptions.correct(U);
         }
 
         // Adjoint Pressure-velocity SIMPLE corrector
@@ -173,12 +184,18 @@ int main(int argc, char *argv[])
               - adjointTransposeConvection
               + turbulence->divDevReff(Ua)
               + fvm::Sp(alpha, Ua)
+             ==
+                fvOptions(Ua)
             );
 
             UaEqn().relax();
 
+            fvOptions.constrain(UaEqn());
+
             solve(UaEqn() == -fvc::grad(pa));
 
+            fvOptions.correct(Ua);
+
             volScalarField rAUa(1.0/UaEqn().A());
             volVectorField HbyAa("HbyAa", Ua);
             HbyAa = rAUa*UaEqn().H();
@@ -215,6 +232,7 @@ int main(int argc, char *argv[])
             // Adjoint momentum corrector
             Ua = HbyAa - rAUa*fvc::grad(pa);
             Ua.correctBoundaryConditions();
+            fvOptions.correct(Ua);
         }
 
         laminarTransport.correct();