diff --git a/applications/solvers/compressible/sonicFoam/EEqn.H b/applications/solvers/compressible/sonicFoam/EEqn.H
index f10474c587a613234d00de80db37832696fcc36c..73ce8373964bb4226e3ebc575834f05f7fb91936 100644
--- a/applications/solvers/compressible/sonicFoam/EEqn.H
+++ b/applications/solvers/compressible/sonicFoam/EEqn.H
@@ -1,11 +1,21 @@
 {
-    solve
+    fvScalarMatrix EEqn
     (
         fvm::ddt(rho, e) + fvm::div(phi, e)
       + fvc::ddt(rho, K) + fvc::div(phi, K)
       + fvc::div(fvc::absolute(phi/fvc::interpolate(rho), U), p, "div(phiv,p)")
       - fvm::laplacian(turbulence->alphaEff(), e)
+     ==
+        fvOptions(rho, e)
     );
 
+    EEqn.relax();
+
+    fvOptions.constrain(EEqn);
+
+    EEqn.solve();
+
+    fvOptions.correct(e);
+
     thermo.correct();
 }
diff --git a/applications/solvers/compressible/sonicFoam/Make/options b/applications/solvers/compressible/sonicFoam/Make/options
index f9c097c87482261e6fb2b54448d52c6e540f18b0..b1663bb8243cdfa06262d92f46b1dceeaf93011d 100644
--- a/applications/solvers/compressible/sonicFoam/Make/options
+++ b/applications/solvers/compressible/sonicFoam/Make/options
@@ -1,6 +1,10 @@
 EXE_INC = \
+    -I$(LIB_SRC)/transportModels/compressible/lnInclude \
     -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
     -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
+    -I$(LIB_SRC)/meshTools/lnInclude \
+    -I$(LIB_SRC)/sampling/lnInclude \
+    -I$(LIB_SRC)/fvOptions/lnInclude \
     -I$(LIB_SRC)/finiteVolume/lnInclude
 
 EXE_LIBS = \
@@ -9,5 +13,7 @@ EXE_LIBS = \
     -lcompressibleTurbulenceModel \
     -lcompressibleRASModels \
     -lcompressibleLESModels \
-    -lfiniteVolume \
-    -lmeshTools
+    -lmeshTools \
+    -lsampling \
+    -lfvOptions \
+    -lfiniteVolume
diff --git a/applications/solvers/compressible/sonicFoam/UEqn.H b/applications/solvers/compressible/sonicFoam/UEqn.H
index c002490b483b8d632480062c82845108d087e588..c4065161fe2c5ef587e1388b078f0fb59a8efb46 100644
--- a/applications/solvers/compressible/sonicFoam/UEqn.H
+++ b/applications/solvers/compressible/sonicFoam/UEqn.H
@@ -3,7 +3,18 @@ fvVectorMatrix UEqn
     fvm::ddt(rho, U)
   + fvm::div(phi, U)
   + turbulence->divDevRhoReff(U)
+ ==
+    fvOptions(rho, U)
 );
 
-solve(UEqn == -fvc::grad(p));
-K = 0.5*magSqr(U);
+UEqn.relax();
+
+fvOptions.constrain(UEqn);
+
+if (pimple.momentumPredictor())
+{
+    solve(UEqn == -fvc::grad(p));
+
+    fvOptions.correct(U);
+    K = 0.5*magSqr(U);
+}
diff --git a/applications/solvers/compressible/sonicFoam/pEqn.H b/applications/solvers/compressible/sonicFoam/pEqn.H
index 022abc466aa1ea5c4d69c82c91b3321b90aa3d1f..693f9d60d3989924956e6614c24944fc4c987967 100644
--- a/applications/solvers/compressible/sonicFoam/pEqn.H
+++ b/applications/solvers/compressible/sonicFoam/pEqn.H
@@ -16,6 +16,8 @@ surfaceScalarField phid
     )
 );
 
+fvOptions.makeRelative(fvc::interpolate(psi), phid);
+
 // Non-orthogonal pressure corrector loop
 while (pimple.correctNonOrthogonal())
 {
@@ -24,8 +26,12 @@ while (pimple.correctNonOrthogonal())
         fvm::ddt(psi, p)
       + fvm::div(phid, p)
       - fvm::laplacian(rhorAUf, p)
+     ==
+        fvOptions(psi, p, rho.name())
     );
 
+    fvOptions.constrain(pEqn);
+
     pEqn.solve();
 
     if (pimple.finalNonOrthogonalIter())
@@ -39,4 +45,5 @@ while (pimple.correctNonOrthogonal())
 
 U = HbyA - rAU*fvc::grad(p);
 U.correctBoundaryConditions();
+fvOptions.correct(U);
 K = 0.5*magSqr(U);
diff --git a/applications/solvers/compressible/sonicFoam/sonicDyMFoam/Make/options b/applications/solvers/compressible/sonicFoam/sonicDyMFoam/Make/options
index 263b9861edb4f2a86bc3908ab378ee0ea974dddb..d374c75059693393ba81b48e3541dcebc28ea05a 100644
--- a/applications/solvers/compressible/sonicFoam/sonicDyMFoam/Make/options
+++ b/applications/solvers/compressible/sonicFoam/sonicDyMFoam/Make/options
@@ -1,10 +1,13 @@
 EXE_INC = \
     -I.. \
+    -I$(LIB_SRC)/transportModels/compressible/lnInclude \
     -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
     -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
+    -I$(LIB_SRC)/meshTools/lnInclude \
+    -I$(LIB_SRC)/sampling/lnInclude \
+    -I$(LIB_SRC)/fvOptions/lnInclude \
     -I$(LIB_SRC)/finiteVolume/lnInclude \
-    -I$(LIB_SRC)/dynamicMesh/lnInclude \
-    -I$(LIB_SRC)/meshTools/lnInclude
+    -I$(LIB_SRC)/dynamicMesh/lnInclude
 
 EXE_LIBS = \
     -lfluidThermophysicalModels \
@@ -12,6 +15,8 @@ EXE_LIBS = \
     -lcompressibleTurbulenceModel \
     -lcompressibleRASModels \
     -lcompressibleLESModels \
+    -lmeshTools \
+    -lsampling \
+    -lfvOptions \
     -lfiniteVolume \
-    -ldynamicMesh \
-    -lmeshTools
+    -ldynamicMesh
diff --git a/applications/solvers/compressible/sonicFoam/sonicDyMFoam/pEqn.H b/applications/solvers/compressible/sonicFoam/sonicDyMFoam/pEqn.H
index b375f0e82a65794d6cfd8a7a04a7c6c140077b72..76e2a09a8f389f53d4f76ff3835951be6bf20570 100644
--- a/applications/solvers/compressible/sonicFoam/sonicDyMFoam/pEqn.H
+++ b/applications/solvers/compressible/sonicFoam/sonicDyMFoam/pEqn.H
@@ -19,6 +19,7 @@ surfaceScalarField phid
 );
 
 fvc::makeRelative(phid, psi, U);
+fvOptions.makeRelative(fvc::interpolate(psi), phid);
 
 for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
 {
@@ -27,8 +28,12 @@ for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
         fvm::ddt(psi, p)
       + fvm::div(phid, p)
       - fvm::laplacian(rhorAUf, p)
+     ==
+        fvOptions(psi, p, rho.name())
     );
 
+    fvOptions.constrain(pEqn);
+
     pEqn.solve();
 
     phi = pEqn.flux();
@@ -38,6 +43,8 @@ for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
 
 U = HbyA - rAU*fvc::grad(p);
 U.correctBoundaryConditions();
+fvOptions.correct(U);
+K = 0.5*magSqr(U);
 
 {
     rhoUf = fvc::interpolate(rho*U);
diff --git a/applications/solvers/compressible/sonicFoam/sonicDyMFoam/sonicDyMFoam.C b/applications/solvers/compressible/sonicFoam/sonicDyMFoam/sonicDyMFoam.C
index 62d4716fb5a70691651f5304e4fb4adcfabf165a..746f95d97c1e868a08675162ed07cca64d7cd100 100644
--- a/applications/solvers/compressible/sonicFoam/sonicDyMFoam/sonicDyMFoam.C
+++ b/applications/solvers/compressible/sonicFoam/sonicDyMFoam/sonicDyMFoam.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -35,6 +35,7 @@ Description
 #include "turbulenceModel.H"
 #include "motionSolver.H"
 #include "pimpleControl.H"
+#include "fvIOoptionList.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -44,6 +45,7 @@ int main(int argc, char *argv[])
     #include "createTime.H"
     #include "createMesh.H"
     #include "createFields.H"
+    #include "createFvOptions.H"
     #include "createRhoUf.H"
     #include "initContinuityErrs.H"
 
diff --git a/applications/solvers/compressible/sonicFoam/sonicFoam.C b/applications/solvers/compressible/sonicFoam/sonicFoam.C
index 71d032d4223486a92ecdde1acdcd0a533fb5397a..04aab1d0d4315ba4b7d937245c728187d1202b53 100644
--- a/applications/solvers/compressible/sonicFoam/sonicFoam.C
+++ b/applications/solvers/compressible/sonicFoam/sonicFoam.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -34,6 +34,7 @@ Description
 #include "psiThermo.H"
 #include "turbulenceModel.H"
 #include "pimpleControl.H"
+#include "fvIOoptionList.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -43,6 +44,7 @@ int main(int argc, char *argv[])
     #include "createTime.H"
     #include "createMesh.H"
     #include "createFields.H"
+    #include "createFvOptions.H"
     #include "initContinuityErrs.H"
 
     pimpleControl pimple(mesh);
diff --git a/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/compressibleContinuityErrs.H b/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/compressibleContinuityErrs.H
index b7a816fe4e6fee4e560ae25193f4582640d1bfd6..e264660cf47c3b3014ec7b4099fb83e704ad29af 100644
--- a/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/compressibleContinuityErrs.H
+++ b/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/compressibleContinuityErrs.H
@@ -1,5 +1,5 @@
 {
-#   include "rhoEqn.H"
+    solve(fvm::ddt(rho) + fvc::div(phi));
 }
 {
     scalar sumLocalContErr =
diff --git a/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/sonicLiquidFoam.C b/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/sonicLiquidFoam.C
index eb0a4a0d9a23f9793aa03cc0f5792171b202fefc..acfb4d3b80f79c1e5a93aba7356b7d329cf334d3 100644
--- a/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/sonicLiquidFoam.C
+++ b/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/sonicLiquidFoam.C
@@ -58,7 +58,7 @@ int main(int argc, char *argv[])
         #include "readTimeControls.H"
         #include "compressibleCourantNo.H"
 
-        #include "rhoEqn.H"
+        solve(fvm::ddt(rho) + fvc::div(phi));
 
         // --- Pressure-velocity PIMPLE corrector loop
         while (pimple.loop())
diff --git a/src/finiteVolume/cfdTools/compressible/rhoEqn.H b/src/finiteVolume/cfdTools/compressible/rhoEqn.H
index 25ccb85aac6ce2a9c4d7de7b797fcbc063bf79f4..353d027e97ca44e38c8c72912e404c60640c75c0 100644
--- a/src/finiteVolume/cfdTools/compressible/rhoEqn.H
+++ b/src/finiteVolume/cfdTools/compressible/rhoEqn.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-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -30,7 +30,19 @@ Description
 \*---------------------------------------------------------------------------*/
 
 {
-    solve(fvm::ddt(rho) + fvc::div(phi));
+    fvScalarMatrix rhoEqn
+    (
+        fvm::ddt(rho)
+      + fvc::div(phi)
+      ==
+        fvOptions(rho)
+    );
+
+    fvOptions.constrain(rhoEqn);
+
+    rhoEqn.solve();
+
+    fvOptions.correct(rho);
 }
 
 // ************************************************************************* //