diff --git a/applications/solvers/doc/solver.dox b/applications/solvers/doc/solver.dox
index 4c829de1624d52d0307283a1009276b5dacc06b3..56bc8f1fd7e3b2964ebe9f937fe6b0eb2bdde66a 100644
--- a/applications/solvers/doc/solver.dox
+++ b/applications/solvers/doc/solver.dox
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2015 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2017 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -39,6 +39,7 @@ The available solvers are grouped into the following categories:
   - \ref grpLagrangianSolvers
   - \ref grpMultiphaseSolvers
   - \ref grpStressAnalysisSolvers
+  - \ref grpFiniteAreaSolvers
 
 
 \*---------------------------------------------------------------------------*/
diff --git a/applications/solvers/doc/solversDoc.H b/applications/solvers/doc/solversDoc.H
index da58bc0ce33e8431dec1105e7c61bdeb62bbc3da..c0a01e5d76990dd8b6c62874df0d5b85f5be0107 100644
--- a/applications/solvers/doc/solversDoc.H
+++ b/applications/solvers/doc/solversDoc.H
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2015 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2017 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -34,4 +34,10 @@ License
     This group contains moving mesh solvers solvers
 @}
 
+\defgroup grpFiniteAreaSolvers Finite area solvers
+@{
+    \ingroup grpSolvers
+    This group contains finite area solvers
+@}
+
 \*---------------------------------------------------------------------------*/
diff --git a/applications/solvers/finiteArea/liquidFilmFoam/liquidFilmFoam.C b/applications/solvers/finiteArea/liquidFilmFoam/liquidFilmFoam.C
index 55f38887e0a6d096bf9f98f6666cd717982c4364..1f1f8e389dbf03f790b39214a15ba110ded4bbbc 100644
--- a/applications/solvers/finiteArea/liquidFilmFoam/liquidFilmFoam.C
+++ b/applications/solvers/finiteArea/liquidFilmFoam/liquidFilmFoam.C
@@ -26,6 +26,9 @@ License
 Application
     liquidFilmFoam
 
+Group
+    grpFiniteAreaSolvers
+
 Description
     Transient solver for incompressible, laminar flow of Newtonian fluids in
     liquid film formulation.
@@ -148,6 +151,8 @@ int main(int argc, char *argv[])
             << nl << endl;
     }
 
+    Info<< "End\n" << endl;
+
     return 0;
 }
 
diff --git a/applications/solvers/finiteArea/sphereSurfactantFoam/surfactantFoam.C b/applications/solvers/finiteArea/sphereSurfactantFoam/surfactantFoam.C
index 408d85e8c17e22849d01d8a2a994748e07674339..893d46284d4b24d8d6fe5d6782f08d8eb3732066 100644
--- a/applications/solvers/finiteArea/sphereSurfactantFoam/surfactantFoam.C
+++ b/applications/solvers/finiteArea/sphereSurfactantFoam/surfactantFoam.C
@@ -26,6 +26,9 @@ License
 Application
     surfactantFoam for sphere transport
 
+Group
+    grpFiniteAreaSolvers
+
 Description
     Passive scalar transport equation solver on a sphere
 
@@ -64,7 +67,7 @@ int main(int argc, char *argv[])
 
         CsEqn.solve();
 
-        if (runTime.outputTime())
+        if (runTime.writeTime())
         {
             vsm.mapToVolume(Cs, Cvf.boundaryFieldRef());
 
@@ -79,6 +82,8 @@ int main(int argc, char *argv[])
             << nl << endl;
     }
 
+    Info<< "End\n" << endl;
+
     return 0;
 }
 
diff --git a/applications/solvers/finiteArea/surfactantFoam/surfactantFoam.C b/applications/solvers/finiteArea/surfactantFoam/surfactantFoam.C
index c72984127c3098c0bd85762a08cb56893892d809..630ca8e668d1a1d1c96f554b61225125b6cd3aef 100644
--- a/applications/solvers/finiteArea/surfactantFoam/surfactantFoam.C
+++ b/applications/solvers/finiteArea/surfactantFoam/surfactantFoam.C
@@ -27,7 +27,7 @@ Application
     surfactantFoam
 
 Group
-    grpBasicSolvers
+    grpFiniteAreaSolvers
 
 Description
     Passive scalar transport equation solver.
@@ -90,7 +90,7 @@ int main(int argc, char *argv[])
 
         CsEqn.solve();
 
-        if (runTime.outputTime())
+        if (runTime.writeTime())
         {
             vsm.mapToVolume(Cs, Cvf.boundaryFieldRef());
 
@@ -105,6 +105,8 @@ int main(int argc, char *argv[])
             << nl << endl;
     }
 
+    Info<< "End\n" << endl;
+
     return 0;
 }
 
diff --git a/applications/utilities/finiteArea/makeFaMesh/makeFaMesh.C b/applications/utilities/finiteArea/makeFaMesh/makeFaMesh.C
index 682e249c9620592bd0c2c1c2f57b24130fbd1852..91b499c09b18fcd174ccf4c3d70a01a705ff6014 100644
--- a/applications/utilities/finiteArea/makeFaMesh/makeFaMesh.C
+++ b/applications/utilities/finiteArea/makeFaMesh/makeFaMesh.C
@@ -69,11 +69,12 @@ public:
 
 int main(int argc, char *argv[])
 {
-#   include "addRegionOption.H"
+    #include "addRegionOption.H"
+    argList::noParallel();
 
-#   include "setRootCase.H"
-#   include "createTime.H"
-#   include "createNamedMesh.H"
+    #include "setRootCase.H"
+    #include "createTime.H"
+    #include "createNamedMesh.H"
 
     // Reading faMeshDefinition dictionary
     IOdictionary faMeshDefinition
@@ -94,40 +95,38 @@ int main(int argc, char *argv[])
         faMeshDefinition.lookup("polyMeshPatches")
     );
 
-    dictionary bndDict = faMeshDefinition.subDict("boundary");
+    const dictionary& bndDict = faMeshDefinition.subDict("boundary");
 
-    wordList faPatchNames = bndDict.toc();
+    const wordList faPatchNames(bndDict.toc());
 
     List<faPatchData> faPatches(faPatchNames.size()+1);
 
-    forAll (faPatchNames, patchI)
+    forAll(faPatchNames, patchI)
     {
-        dictionary curPatchDict =
-            bndDict.subDict(faPatchNames[patchI]);
+        const dictionary& curPatchDict = bndDict.subDict(faPatchNames[patchI]);
 
         faPatches[patchI].name_ = faPatchNames[patchI];
 
-        faPatches[patchI].type_ =
-            word(curPatchDict.lookup("type"));
+        faPatches[patchI].type_ = word(curPatchDict.lookup("type"));
 
-        word ownName = curPatchDict.lookup("ownerPolyPatch");
+        const word ownName = curPatchDict.lookup("ownerPolyPatch");
 
         faPatches[patchI].ownPolyPatchID_ =
             mesh.boundaryMesh().findPatchID(ownName);
 
-        if ( faPatches[patchI].ownPolyPatchID_ < 0 )
+        if (faPatches[patchI].ownPolyPatchID_ < 0)
         {
             FatalErrorIn("makeFaMesh:")
                 << "neighbourPolyPatch " << ownName << " does not exist"
                 << exit(FatalError);
         }
 
-        word neiName = curPatchDict.lookup("neighbourPolyPatch");
+        const word neiName = curPatchDict.lookup("neighbourPolyPatch");
 
-        faPatches[patchI].ngbPolyPatchID_  =
+        faPatches[patchI].ngbPolyPatchID_ =
             mesh.boundaryMesh().findPatchID(neiName);
 
-        if ( faPatches[patchI].ngbPolyPatchID_ < 0 )
+        if (faPatches[patchI].ngbPolyPatchID_ < 0)
         {
             FatalErrorIn("makeFaMesh:")
                 << "neighbourPolyPatch " << neiName << " does not exist"
@@ -140,12 +139,12 @@ int main(int argc, char *argv[])
 
     labelList patchIDs(polyMeshPatches.size(), -1);
 
-    forAll (polyMeshPatches, patchI)
+    forAll(polyMeshPatches, patchI)
     {
         patchIDs[patchI] =
             mesh.boundaryMesh().findPatchID(polyMeshPatches[patchI]);
 
-        if ( patchIDs[patchI] < 0 )
+        if (patchIDs[patchI] < 0)
         {
             FatalErrorIn("makeFaMesh:")
                 << "Patch " << polyMeshPatches[patchI] << " does not exist"
@@ -163,13 +162,13 @@ int main(int argc, char *argv[])
     // Filling of faceLabels list
     label faceI = -1;
 
-    forAll (polyMeshPatches, patchI)
+    forAll(polyMeshPatches, patchI)
     {
         label start = mesh.boundaryMesh()[patchIDs[patchI]].start();
 
         label size  = mesh.boundaryMesh()[patchIDs[patchI]].size();
 
-        for(label i = 0; i < size; i++)
+        for (label i = 0; i < size; ++i)
         {
             faceLabels[++faceI] = start + i;
         }
@@ -192,7 +191,7 @@ int main(int argc, char *argv[])
 
     labelList faceCells(faceLabels.size(), -1);
 
-    forAll (faceCells, faceI)
+    forAll(faceCells, faceI)
     {
         label faceID = faceLabels[faceI];
 
@@ -214,7 +213,7 @@ int main(int argc, char *argv[])
 
     labelList bndEdgeFaPatchIDs(nTotalEdges - nInternalEdges, -1);
 
-    for (label edgeI = nInternalEdges; edgeI < nTotalEdges; edgeI++)
+    for (label edgeI = nInternalEdges; edgeI < nTotalEdges; ++edgeI)
     {
         label curMeshEdge = meshEdges[edgeI];
 
@@ -222,7 +221,7 @@ int main(int argc, char *argv[])
 
         label patchI = -1;
 
-        forAll (edgeFaces[curMeshEdge], faceI)
+        forAll(edgeFaces[curMeshEdge], faceI)
         {
             label curFace = edgeFaces[curMeshEdge][faceI];
 
@@ -234,7 +233,7 @@ int main(int argc, char *argv[])
             }
         }
 
-        for(label pI = 0; pI < faPatches.size() - 1; pI++)
+        for (label pI = 0; pI < faPatches.size() - 1; ++pI)
         {
             if
             (
@@ -257,11 +256,11 @@ int main(int argc, char *argv[])
 
 
     // Set edgeLabels for each faPatch
-    for(label pI=0; pI<(faPatches.size()-1); pI++)
+    for (label pI=0; pI<(faPatches.size()-1); ++pI)
     {
         SLList<label> tmpList;
 
-        forAll (bndEdgeFaPatchIDs, eI)
+        forAll(bndEdgeFaPatchIDs, eI)
         {
             if (bndEdgeFaPatchIDs[eI] == pI)
             {
@@ -275,7 +274,7 @@ int main(int argc, char *argv[])
     // Check for undefined edges
     SLList<label> tmpList;
 
-    forAll (bndEdgeFaPatchIDs, eI)
+    forAll(bndEdgeFaPatchIDs, eI)
     {
         if (bndEdgeFaPatchIDs[eI] == -1)
         {
@@ -295,7 +294,7 @@ int main(int argc, char *argv[])
     // Add good patches to faMesh
     SLList<faPatch*> faPatchLst;
 
-    for(label pI = 0; pI < faPatches.size(); pI++)
+    for (label pI = 0; pI < faPatches.size(); ++pI)
     {
         faPatches[pI].dict_.add("type", faPatches[pI].type_);
         faPatches[pI].dict_.add("edgeLabels", faPatches[pI].edgeLabels_);