diff --git a/applications/utilities/preProcessing/setFields/setFields.C b/applications/utilities/preProcessing/setFields/setFields.C
index 55b58e16b4d0845962ad4558ce089854eb4a7686..797b44437ef1f4604d1d484bb9ffe17736b3acaa 100644
--- a/applications/utilities/preProcessing/setFields/setFields.C
+++ b/applications/utilities/preProcessing/setFields/setFields.C
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Description
-    Selects a cell set through a dictionary.
+    Set values on a selected set of cells/patchfaces through a dictionary.
 
 \*---------------------------------------------------------------------------*/
 
@@ -32,12 +32,13 @@ Description
 #include "fvMesh.H"
 #include "topoSetSource.H"
 #include "cellSet.H"
+#include "faceSet.H"
 #include "volFields.H"
 
 using namespace Foam;
 
 template<class Type>
-bool setFieldType
+bool setCellFieldType
 (
     const word& fieldTypeDesc,
     const fvMesh& mesh,
@@ -65,7 +66,8 @@ bool setFieldType
     // Check field exists
     if (fieldHeader.headerOk())
     {
-        Info<< "    Setting " << fieldHeader.headerClassName()
+        Info<< "    Setting internal values of "
+            << fieldHeader.headerClassName()
             << " " << fieldName << endl;
 
         fieldType field(fieldHeader, mesh);
@@ -96,7 +98,7 @@ bool setFieldType
     {
         WarningIn
         (
-            "void setFieldType"
+            "void setCellFieldType"
             "(const fvMesh& mesh, const labelList& selectedCells,"
             "Istream& fieldValueStream)"
         ) << "Field " << fieldName << " not found" << endl;
@@ -106,17 +108,17 @@ bool setFieldType
 }
 
 
-class setField
+class setCellField
 {
 
 public:
 
-    setField()
+    setCellField()
     {}
 
-    autoPtr<setField> clone() const
+    autoPtr<setCellField> clone() const
     {
-        return autoPtr<setField>(new setField());
+        return autoPtr<setCellField>(new setCellField());
     }
 
     class iNew
@@ -132,37 +134,200 @@ public:
             selectedCells_(selectedCells)
         {}
 
-        autoPtr<setField> operator()(Istream& fieldValues) const
+        autoPtr<setCellField> operator()(Istream& fieldValues) const
         {
             word fieldType(fieldValues);
 
             if
             (
                !(
-                    setFieldType<scalar>
+                    setCellFieldType<scalar>
                         (fieldType, mesh_, selectedCells_, fieldValues)
-                 || setFieldType<vector>
+                 || setCellFieldType<vector>
                         (fieldType, mesh_, selectedCells_, fieldValues)
-                 || setFieldType<sphericalTensor>
+                 || setCellFieldType<sphericalTensor>
                         (fieldType, mesh_, selectedCells_, fieldValues)
-                 || setFieldType<symmTensor>
+                 || setCellFieldType<symmTensor>
                         (fieldType, mesh_, selectedCells_, fieldValues)
-                 || setFieldType<tensor>
+                 || setCellFieldType<tensor>
                         (fieldType, mesh_, selectedCells_, fieldValues)
                 )
             )
             {
-                WarningIn("setField::iNew::operator()(Istream& is)")
+                WarningIn("setCellField::iNew::operator()(Istream& is)")
                     << "field type " << fieldType << " not currently supported"
                     << endl;
             }
 
-            return autoPtr<setField>(new setField());
+            return autoPtr<setCellField>(new setCellField());
         }
     };
 };
 
 
+template<class Type>
+bool setFaceFieldType
+(
+    const word& fieldTypeDesc,
+    const fvMesh& mesh,
+    const labelList& selectedFaces,
+    Istream& fieldValueStream
+)
+{
+    typedef GeometricField<Type, fvPatchField, volMesh> fieldType;
+
+    if (fieldTypeDesc != fieldType::typeName + "Value")
+    {
+        return false;
+    }
+
+    word fieldName(fieldValueStream);
+
+    IOobject fieldHeader
+    (
+        fieldName,
+        mesh.time().timeName(),
+        mesh,
+        IOobject::MUST_READ
+    );
+
+    // Check field exists
+    if (fieldHeader.headerOk())
+    {
+        Info<< "    Setting patchField values of "
+            << fieldHeader.headerClassName()
+            << " " << fieldName << endl;
+
+        fieldType field(fieldHeader, mesh);
+
+        const Type& value = pTraits<Type>(fieldValueStream);
+
+        // Create flat list of selected faces and their value.
+        Field<Type> allBoundaryValues(mesh.nFaces()-mesh.nInternalFaces());
+        forAll(field.boundaryField(), patchi)
+        {
+            SubField<Type>
+            (
+                allBoundaryValues,
+                field.boundaryField()[patchi].size(),
+                field.boundaryField()[patchi].patch().start()
+              - mesh.nInternalFaces()
+            ).assign(field.boundaryField()[patchi]);
+        }
+
+        // Override
+        labelList nChanged(field.boundaryField().size(), 0);
+        forAll(selectedFaces, i)
+        {
+            label facei = selectedFaces[i];
+            if (mesh.isInternalFace(facei))
+            {
+                WarningIn("setFaceFieldType(..)")
+                    << "Ignoring internal face " << facei << endl;
+            }
+            else
+            {
+                label bFaceI = facei-mesh.nInternalFaces();
+                allBoundaryValues[bFaceI] = value;
+                nChanged[mesh.boundaryMesh().patchID()[bFaceI]]++;
+            }
+        }
+
+        Pstream::listCombineGather(nChanged, plusEqOp<label>());
+        Pstream::listCombineScatter(nChanged);
+
+        // Reassign.
+        forAll(field.boundaryField(), patchi)
+        {
+            if (nChanged[patchi] > 0)
+            {
+                Info<< "    On patch "
+                    << field.boundaryField()[patchi].patch().name()
+                    << " set " << nChanged[patchi] << " values" << endl;
+                field.boundaryField()[patchi] == SubField<Type>
+                (
+                    allBoundaryValues,
+                    field.boundaryField()[patchi].size(),
+                    field.boundaryField()[patchi].patch().start()
+                  - mesh.nInternalFaces()
+                );
+            }
+        }
+
+        field.write();
+    }
+    else
+    {
+        WarningIn
+        (
+            "void setFaceFieldType"
+            "(const fvMesh& mesh, const labelList& selectedFaces,"
+            "Istream& fieldValueStream)"
+        ) << "Field " << fieldName << " not found" << endl;
+    }
+
+    return true;
+}
+
+
+class setFaceField
+{
+
+public:
+
+    setFaceField()
+    {}
+
+    autoPtr<setFaceField> clone() const
+    {
+        return autoPtr<setFaceField>(new setFaceField());
+    }
+
+    class iNew
+    {
+        const fvMesh& mesh_;
+        const labelList& selectedFaces_;
+
+    public:
+
+        iNew(const fvMesh& mesh, const labelList& selectedFaces)
+        :
+            mesh_(mesh),
+            selectedFaces_(selectedFaces)
+        {}
+
+        autoPtr<setFaceField> operator()(Istream& fieldValues) const
+        {
+            word fieldType(fieldValues);
+
+            if
+            (
+               !(
+                    setFaceFieldType<scalar>
+                        (fieldType, mesh_, selectedFaces_, fieldValues)
+                 || setFaceFieldType<vector>
+                        (fieldType, mesh_, selectedFaces_, fieldValues)
+                 || setFaceFieldType<sphericalTensor>
+                        (fieldType, mesh_, selectedFaces_, fieldValues)
+                 || setFaceFieldType<symmTensor>
+                        (fieldType, mesh_, selectedFaces_, fieldValues)
+                 || setFaceFieldType<tensor>
+                        (fieldType, mesh_, selectedFaces_, fieldValues)
+                )
+            )
+            {
+                WarningIn("setFaceField::iNew::operator()(Istream& is)")
+                    << "field type " << fieldType << " not currently supported"
+                    << endl;
+            }
+
+            return autoPtr<setFaceField>(new setFaceField());
+        }
+    };
+};
+
+
+
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 int main(int argc, char *argv[])
@@ -194,10 +359,10 @@ int main(int argc, char *argv[])
     if (setFieldsDict.found("defaultFieldValues"))
     {
         Info<< "Setting field default values" << endl;
-        PtrList<setField> defaultFieldValues
+        PtrList<setCellField> defaultFieldValues
         (
             setFieldsDict.lookup("defaultFieldValues"),
-            setField::iNew(mesh, labelList(mesh.nCells()))
+            setCellField::iNew(mesh, labelList(mesh.nCells()))
         );
         Info<< endl;
     }
@@ -211,29 +376,54 @@ int main(int argc, char *argv[])
     {
         const entry& region = regions[regionI];
 
-        autoPtr<topoSetSource> cellSelector =
+        autoPtr<topoSetSource> source =
             topoSetSource::New(region.keyword(), mesh, region.dict());
 
-        cellSet selectedCellSet
-        (
-            mesh,
-            "cellSet",
-            mesh.nCells()/10+1  // Reasonable size estimate.
-        );
+        if (source().setType() == topoSetSource::CELLSETSOURCE)
+        {
+            cellSet selectedCellSet
+            (
+                mesh,
+                "cellSet",
+                mesh.nCells()/10+1  // Reasonable size estimate.
+            );
 
-        cellSelector->applyToSet
-        (
-            topoSetSource::NEW,
-            selectedCellSet
-        );
+            source->applyToSet
+            (
+                topoSetSource::NEW,
+                selectedCellSet
+            );
 
-        PtrList<setField> fieldValues
-        (
-            region.dict().lookup("fieldValues"),
-            setField::iNew(mesh, selectedCellSet.toc())
-        );
+            PtrList<setCellField> fieldValues
+            (
+                region.dict().lookup("fieldValues"),
+                setCellField::iNew(mesh, selectedCellSet.toc())
+            );
+        }
+        else if (source().setType() == topoSetSource::FACESETSOURCE)
+        {
+            faceSet selectedFaceSet
+            (
+                mesh,
+                "faceSet",
+                (mesh.nFaces()-mesh.nInternalFaces())/10+1
+            );
+
+            source->applyToSet
+            (
+                topoSetSource::NEW,
+                selectedFaceSet
+            );
+
+            PtrList<setFaceField> fieldValues
+            (
+                region.dict().lookup("fieldValues"),
+                setFaceField::iNew(mesh, selectedFaceSet.toc())
+            );
+        }
     }
 
+
     Info<< "\nEnd\n" << endl;
 
     return 0;
diff --git a/applications/utilities/preProcessing/setFields/setFieldsDict b/applications/utilities/preProcessing/setFields/setFieldsDict
index 8d33be4c8f9dba1d691fb95abd9bdaf664c7b8ab..c58e622ff7e599dac5772dc87ead7ee161b1ef0e 100644
--- a/applications/utilities/preProcessing/setFields/setFieldsDict
+++ b/applications/utilities/preProcessing/setFields/setFieldsDict
@@ -23,6 +23,8 @@ defaultFieldValues
 
 regions
 (
+    // Set cell values
+    // (does zerogradient on boundaries)
     boxToCell
     {
         box (0 0 -1) (0.1461 0.292 1);
@@ -32,6 +34,17 @@ regions
             volScalarFieldValue gamma 1
         );
     }
+
+    // Set patch values (using ==)
+    boxToFace
+    {
+        box (0 0 -1) (0.1461 0.292 1);
+
+        fieldValues
+        (
+            volScalarFieldValue gamma 1
+        );
+    }
 );
 
 // ************************************************************************* //
diff --git a/src/meshTools/sets/cellSources/boxToCell/boxToCell.H b/src/meshTools/sets/cellSources/boxToCell/boxToCell.H
index e7061070f8d40d441ef276b52b5e51dec8aa09aa..be3546770455e1d467a8a6916f49dbb2ce90ac6c 100644
--- a/src/meshTools/sets/cellSources/boxToCell/boxToCell.H
+++ b/src/meshTools/sets/cellSources/boxToCell/boxToCell.H
@@ -102,6 +102,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/cellToCell/cellToCell.H b/src/meshTools/sets/cellSources/cellToCell/cellToCell.H
index 7660c4bb83df10304b58c591303ab3c0a2992b7f..75fa47c3b16fb02128862b00fd750792c6f6e336 100644
--- a/src/meshTools/sets/cellSources/cellToCell/cellToCell.H
+++ b/src/meshTools/sets/cellSources/cellToCell/cellToCell.H
@@ -93,6 +93,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/cylinderToCell/cylinderToCell.H b/src/meshTools/sets/cellSources/cylinderToCell/cylinderToCell.H
index 1581e8dcdfc4eda1da93a93db3da88476c216ab2..bd67e09c67f96aa4a052b437b4b81864161fb26e 100644
--- a/src/meshTools/sets/cellSources/cylinderToCell/cylinderToCell.H
+++ b/src/meshTools/sets/cellSources/cylinderToCell/cylinderToCell.H
@@ -109,6 +109,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/faceToCell/faceToCell.H b/src/meshTools/sets/cellSources/faceToCell/faceToCell.H
index 4b1673d35ce0ca692bb83dd5db2fc452c248bcee..768ec475e11429c79539d9e228462b5e5241de6f 100644
--- a/src/meshTools/sets/cellSources/faceToCell/faceToCell.H
+++ b/src/meshTools/sets/cellSources/faceToCell/faceToCell.H
@@ -119,6 +119,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.H b/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.H
index 7ee8b3d6da17d335ceca5e9c9acd2ec94c050be5..132c46d60bbfe1846240e1bd56f5a91aa319ccd5 100644
--- a/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.H
+++ b/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.H
@@ -116,6 +116,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/fieldToCell/fieldToCell.H b/src/meshTools/sets/cellSources/fieldToCell/fieldToCell.H
index a0a892211598d36ea0ff5adf50c20dbbe801159f..6a34e2220823e840a883fea3daa4f8bf61f199b8 100644
--- a/src/meshTools/sets/cellSources/fieldToCell/fieldToCell.H
+++ b/src/meshTools/sets/cellSources/fieldToCell/fieldToCell.H
@@ -115,6 +115,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/labelToCell/labelToCell.H b/src/meshTools/sets/cellSources/labelToCell/labelToCell.H
index 8704f543672c610532cf8e907d92f9fa6619609f..16a8f72e00b9fa899abb35d7dcde0b015f93a662 100644
--- a/src/meshTools/sets/cellSources/labelToCell/labelToCell.H
+++ b/src/meshTools/sets/cellSources/labelToCell/labelToCell.H
@@ -100,6 +100,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/nbrToCell/nbrToCell.H b/src/meshTools/sets/cellSources/nbrToCell/nbrToCell.H
index 8a604f45bfe34263090fa442cc9fad533e4bdfb4..35d8a5525d9cabff42b728bd0bc5e59f53e29afd 100644
--- a/src/meshTools/sets/cellSources/nbrToCell/nbrToCell.H
+++ b/src/meshTools/sets/cellSources/nbrToCell/nbrToCell.H
@@ -101,6 +101,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/nearestToCell/nearestToCell.H b/src/meshTools/sets/cellSources/nearestToCell/nearestToCell.H
index 8c3555b04685b34b2261f11618ddf6b5685e00c1..b61c8edd3adfe4fde1e34082021c14a549fabf8f 100644
--- a/src/meshTools/sets/cellSources/nearestToCell/nearestToCell.H
+++ b/src/meshTools/sets/cellSources/nearestToCell/nearestToCell.H
@@ -100,6 +100,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/pointToCell/pointToCell.H b/src/meshTools/sets/cellSources/pointToCell/pointToCell.H
index 6e1a596a45e1168c42d19efdccbdfb268b479b6b..3c903a0b5c9bd7e239794bf84a70467e51686fa4 100644
--- a/src/meshTools/sets/cellSources/pointToCell/pointToCell.H
+++ b/src/meshTools/sets/cellSources/pointToCell/pointToCell.H
@@ -115,6 +115,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/regionToCell/regionToCell.H b/src/meshTools/sets/cellSources/regionToCell/regionToCell.H
index 07ebb50255543d112334bc2679e4db342e7e4810..bf4d9a339254a8711e5470a9510b384535bdb623 100644
--- a/src/meshTools/sets/cellSources/regionToCell/regionToCell.H
+++ b/src/meshTools/sets/cellSources/regionToCell/regionToCell.H
@@ -105,6 +105,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet(const topoSetSource::setAction action, topoSet&)
          const;
 
diff --git a/src/meshTools/sets/cellSources/rotatedBoxToCell/rotatedBoxToCell.H b/src/meshTools/sets/cellSources/rotatedBoxToCell/rotatedBoxToCell.H
index 7fef8788640b201799330f2b29d6a57c520f6fd8..9119938a488c323298f2699ee4df8c7255403f39 100644
--- a/src/meshTools/sets/cellSources/rotatedBoxToCell/rotatedBoxToCell.H
+++ b/src/meshTools/sets/cellSources/rotatedBoxToCell/rotatedBoxToCell.H
@@ -111,6 +111,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/shapeToCell/shapeToCell.H b/src/meshTools/sets/cellSources/shapeToCell/shapeToCell.H
index 3a7294cebd97126917a983b49decbac36e885f40..8dffc55b1d6c0f661082eab4519282e4c1710552 100644
--- a/src/meshTools/sets/cellSources/shapeToCell/shapeToCell.H
+++ b/src/meshTools/sets/cellSources/shapeToCell/shapeToCell.H
@@ -109,6 +109,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/sphereToCell/sphereToCell.H b/src/meshTools/sets/cellSources/sphereToCell/sphereToCell.H
index 553e6a29d3ee90a0873be89c52306c08078dac8f..9f7de5539f49e9832348daa97291d0d1e136c886 100644
--- a/src/meshTools/sets/cellSources/sphereToCell/sphereToCell.H
+++ b/src/meshTools/sets/cellSources/sphereToCell/sphereToCell.H
@@ -105,6 +105,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/surfaceToCell/surfaceToCell.H b/src/meshTools/sets/cellSources/surfaceToCell/surfaceToCell.H
index e91e04f1ae3a4f27c051dad04c439ddc4b827aa3..48de11e0c5cbb1a0af661749ba0d0b2d6af530d5 100644
--- a/src/meshTools/sets/cellSources/surfaceToCell/surfaceToCell.H
+++ b/src/meshTools/sets/cellSources/surfaceToCell/surfaceToCell.H
@@ -195,6 +195,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/zoneToCell/zoneToCell.H b/src/meshTools/sets/cellSources/zoneToCell/zoneToCell.H
index bb5504a17718ee7dd9b87481325c72029f93f157..edcb0fc391ec43256d66fac7c491899f88c244a6 100644
--- a/src/meshTools/sets/cellSources/zoneToCell/zoneToCell.H
+++ b/src/meshTools/sets/cellSources/zoneToCell/zoneToCell.H
@@ -101,6 +101,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellZoneSources/setToCellZone/setToCellZone.H b/src/meshTools/sets/cellZoneSources/setToCellZone/setToCellZone.H
index bbe2b656a12e0b0419c4e2f29567d92094be430c..22c37deafa20b996d726cb93043a7029dcc73385 100644
--- a/src/meshTools/sets/cellZoneSources/setToCellZone/setToCellZone.H
+++ b/src/meshTools/sets/cellZoneSources/setToCellZone/setToCellZone.H
@@ -93,6 +93,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLZONESOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceSources/boundaryToFace/boundaryToFace.H b/src/meshTools/sets/faceSources/boundaryToFace/boundaryToFace.H
index 95afaa8ab003b6545a059d55f3d4645063e5f40c..fd36cd12a397c7726fa6cd56de82beb35a40c425 100644
--- a/src/meshTools/sets/faceSources/boundaryToFace/boundaryToFace.H
+++ b/src/meshTools/sets/faceSources/boundaryToFace/boundaryToFace.H
@@ -92,6 +92,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceSources/boxToFace/boxToFace.H b/src/meshTools/sets/faceSources/boxToFace/boxToFace.H
index 63a5c93ad4b75d9c2f6cbbcf15301ef0fdd6f3a5..76db6b5fa58618f0f4a6dc99b2e1b8247f3e057a 100644
--- a/src/meshTools/sets/faceSources/boxToFace/boxToFace.H
+++ b/src/meshTools/sets/faceSources/boxToFace/boxToFace.H
@@ -101,6 +101,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceSources/cellToFace/cellToFace.H b/src/meshTools/sets/faceSources/cellToFace/cellToFace.H
index 91302c3d7ba457b851182849dc642e9dd77c611b..4a32c9f4be8eedf1f3502697a56942bca4e2fe16 100644
--- a/src/meshTools/sets/faceSources/cellToFace/cellToFace.H
+++ b/src/meshTools/sets/faceSources/cellToFace/cellToFace.H
@@ -120,6 +120,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceSources/faceToFace/faceToFace.H b/src/meshTools/sets/faceSources/faceToFace/faceToFace.H
index 90bbc1d33af7168bc23157d92b9901cfb7639180..cd12b07624ce243963e1708e4ce743084a310dd8 100644
--- a/src/meshTools/sets/faceSources/faceToFace/faceToFace.H
+++ b/src/meshTools/sets/faceSources/faceToFace/faceToFace.H
@@ -93,6 +93,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceSources/labelToFace/labelToFace.H b/src/meshTools/sets/faceSources/labelToFace/labelToFace.H
index 2434e39c9a9f6450caf692631cdcad7ef287b116..dd42f98a5a9eaefa39f2a11e669677a70bda3604 100644
--- a/src/meshTools/sets/faceSources/labelToFace/labelToFace.H
+++ b/src/meshTools/sets/faceSources/labelToFace/labelToFace.H
@@ -100,6 +100,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceSources/normalToFace/normalToFace.H b/src/meshTools/sets/faceSources/normalToFace/normalToFace.H
index 3c287a1b69eee9f07df0f7b07bef86972494e5f4..508c7c9a36229f025db0a2125d94ebfab91b0b11 100644
--- a/src/meshTools/sets/faceSources/normalToFace/normalToFace.H
+++ b/src/meshTools/sets/faceSources/normalToFace/normalToFace.H
@@ -98,6 +98,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceSources/patchToFace/patchToFace.H b/src/meshTools/sets/faceSources/patchToFace/patchToFace.H
index 12a1ff170b8ff23946784f4d838e7849a41244d2..dd407edb030c1c849512dbaac5a9688a0f43a65f 100644
--- a/src/meshTools/sets/faceSources/patchToFace/patchToFace.H
+++ b/src/meshTools/sets/faceSources/patchToFace/patchToFace.H
@@ -101,6 +101,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceSources/pointToFace/pointToFace.H b/src/meshTools/sets/faceSources/pointToFace/pointToFace.H
index c8a2439e6a290d5bf9812ada2e9046eaf5b33a38..6a6a090fa0d663c97a112173eea379795976f9c1 100644
--- a/src/meshTools/sets/faceSources/pointToFace/pointToFace.H
+++ b/src/meshTools/sets/faceSources/pointToFace/pointToFace.H
@@ -118,6 +118,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceSources/zoneToFace/zoneToFace.H b/src/meshTools/sets/faceSources/zoneToFace/zoneToFace.H
index 9e04ef45a8880a8d8968136fdab505ead82349fa..1496af2d5aeef42e7e6e638a5a45655543d9c61d 100644
--- a/src/meshTools/sets/faceSources/zoneToFace/zoneToFace.H
+++ b/src/meshTools/sets/faceSources/zoneToFace/zoneToFace.H
@@ -101,6 +101,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceZoneSources/faceZoneToFaceZone/faceZoneToFaceZone.H b/src/meshTools/sets/faceZoneSources/faceZoneToFaceZone/faceZoneToFaceZone.H
index 8cfcb5066f3202ebcaf01574fc1b53720ae899df..1818e5082768b5f0c936d65a416d18e5a70bcf12 100644
--- a/src/meshTools/sets/faceZoneSources/faceZoneToFaceZone/faceZoneToFaceZone.H
+++ b/src/meshTools/sets/faceZoneSources/faceZoneToFaceZone/faceZoneToFaceZone.H
@@ -93,6 +93,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACEZONESOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceZoneSources/setToFaceZone/setToFaceZone.H b/src/meshTools/sets/faceZoneSources/setToFaceZone/setToFaceZone.H
index b062f440e5650a9c705326d6b119ae8398eb0a25..ae120debb039d496cde280873002daf9d894a485 100644
--- a/src/meshTools/sets/faceZoneSources/setToFaceZone/setToFaceZone.H
+++ b/src/meshTools/sets/faceZoneSources/setToFaceZone/setToFaceZone.H
@@ -94,6 +94,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACEZONESOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceZoneSources/setsToFaceZone/setsToFaceZone.H b/src/meshTools/sets/faceZoneSources/setsToFaceZone/setsToFaceZone.H
index f326ec06018e40eb3fd8d74fb9f36f0496894dee..d1edb5417ae3f226650605e9c867958c546276b7 100644
--- a/src/meshTools/sets/faceZoneSources/setsToFaceZone/setsToFaceZone.H
+++ b/src/meshTools/sets/faceZoneSources/setsToFaceZone/setsToFaceZone.H
@@ -97,6 +97,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACEZONESOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/pointSources/boxToPoint/boxToPoint.H b/src/meshTools/sets/pointSources/boxToPoint/boxToPoint.H
index b403d851e112dc60be3f26c2f0dab0eabce9c7b1..9d9c0eed37cf49aa937e8f19795d9d812e2dbc28 100644
--- a/src/meshTools/sets/pointSources/boxToPoint/boxToPoint.H
+++ b/src/meshTools/sets/pointSources/boxToPoint/boxToPoint.H
@@ -101,6 +101,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/pointSources/cellToPoint/cellToPoint.H b/src/meshTools/sets/pointSources/cellToPoint/cellToPoint.H
index 6306ee5a0bcc53fe7dcd8cd1a465c5e1e615b59c..849bb70b8e8f2cc07ac7d9d474c92306186bb8e5 100644
--- a/src/meshTools/sets/pointSources/cellToPoint/cellToPoint.H
+++ b/src/meshTools/sets/pointSources/cellToPoint/cellToPoint.H
@@ -115,6 +115,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/pointSources/faceToPoint/faceToPoint.H b/src/meshTools/sets/pointSources/faceToPoint/faceToPoint.H
index b8a966b07fa90d5727334039a78c207f1ca3b4cb..17488ba33fe5372f59d1159ffc2ae3cc04f68ae5 100644
--- a/src/meshTools/sets/pointSources/faceToPoint/faceToPoint.H
+++ b/src/meshTools/sets/pointSources/faceToPoint/faceToPoint.H
@@ -115,6 +115,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/pointSources/labelToPoint/labelToPoint.H b/src/meshTools/sets/pointSources/labelToPoint/labelToPoint.H
index 0b809b69edddd059504f505dd397fa0905709deb..13b85be591da5b08e4db608a3894bff1c2058abd 100644
--- a/src/meshTools/sets/pointSources/labelToPoint/labelToPoint.H
+++ b/src/meshTools/sets/pointSources/labelToPoint/labelToPoint.H
@@ -100,6 +100,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/pointSources/nearestToPoint/nearestToPoint.H b/src/meshTools/sets/pointSources/nearestToPoint/nearestToPoint.H
index 5c746890b80f99f2e61ff489b3d5e173e33fd328..19d72cfeacc6b26465a1d62f1099d60d5344383c 100644
--- a/src/meshTools/sets/pointSources/nearestToPoint/nearestToPoint.H
+++ b/src/meshTools/sets/pointSources/nearestToPoint/nearestToPoint.H
@@ -100,6 +100,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/pointSources/pointToPoint/pointToPoint.H b/src/meshTools/sets/pointSources/pointToPoint/pointToPoint.H
index b76332d7845d419273ef55af3d0903046a7397ad..3f890b3400f2aca78a047e5945f0f868b76ac248 100644
--- a/src/meshTools/sets/pointSources/pointToPoint/pointToPoint.H
+++ b/src/meshTools/sets/pointSources/pointToPoint/pointToPoint.H
@@ -93,6 +93,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/pointSources/surfaceToPoint/surfaceToPoint.H b/src/meshTools/sets/pointSources/surfaceToPoint/surfaceToPoint.H
index 56e786fe61cec9b064b04e8bff8fe14db560c226..0c4372c0ddf560c90fa1643fd719deed959d12b2 100644
--- a/src/meshTools/sets/pointSources/surfaceToPoint/surfaceToPoint.H
+++ b/src/meshTools/sets/pointSources/surfaceToPoint/surfaceToPoint.H
@@ -123,6 +123,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/pointSources/zoneToPoint/zoneToPoint.H b/src/meshTools/sets/pointSources/zoneToPoint/zoneToPoint.H
index 58ca2b2cf40857f328ac74e04bbaba41110160d8..9fd4444552c64d9b84fbcefb63c1a81d8a19a4af 100644
--- a/src/meshTools/sets/pointSources/zoneToPoint/zoneToPoint.H
+++ b/src/meshTools/sets/pointSources/zoneToPoint/zoneToPoint.H
@@ -101,6 +101,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/pointZoneSources/setToPointZone/setToPointZone.H b/src/meshTools/sets/pointZoneSources/setToPointZone/setToPointZone.H
index 5226f708ac772937ccceb40e25b266d9faaa5122..21d4f640b8d5fb98791d9f46f4f0753c28adea62 100644
--- a/src/meshTools/sets/pointZoneSources/setToPointZone/setToPointZone.H
+++ b/src/meshTools/sets/pointZoneSources/setToPointZone/setToPointZone.H
@@ -93,6 +93,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return POINTZONESOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/topoSetSource/topoSetSource.H b/src/meshTools/sets/topoSetSource/topoSetSource.H
index 5bbe71eb7451d88f1d5445e3b39b6b2950ff7ec5..81ca1cf38c3e2854c7625aa3ff55e4bbf1cc32ab 100644
--- a/src/meshTools/sets/topoSetSource/topoSetSource.H
+++ b/src/meshTools/sets/topoSetSource/topoSetSource.H
@@ -67,6 +67,18 @@ public:
 
     // Public data types
 
+        //- Enumeration defining the types of sources
+        enum sourceType
+        {
+            CELLSETSOURCE,
+            FACESETSOURCE,
+            POINTSETSOURCE,
+
+            CELLZONESOURCE,
+            FACEZONESOURCE,
+            POINTZONESOURCE
+        };
+
         //- Enumeration defining the valid actions
         enum setAction
         {
@@ -268,6 +280,8 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const = 0;
+
         virtual void applyToSet(const setAction action, topoSet&) const = 0;
 
 };
diff --git a/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/Allrun b/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/Allrun
index 800bb5731994d0f3a70b9f5ff7865f9659c1e4f7..9f8c5b0cb5b8051b69e627edcd9bd865c654b0ae 100755
--- a/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/Allrun
+++ b/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/Allrun
@@ -6,10 +6,9 @@ cd ${0%/*} || exit 1    # run from this directory
 
 application=`getApplication`
 
-compileApplication ../../buoyantPimpleFoam/hotRoom/setHotRoom
 runApplication blockMesh
 cp 0/T.org 0/T
-runApplication setHotRoom
+runApplication setFields
 runApplication $application
 
 # ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allrun b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allrun
index 800bb5731994d0f3a70b9f5ff7865f9659c1e4f7..9f8c5b0cb5b8051b69e627edcd9bd865c654b0ae 100755
--- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allrun
+++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allrun
@@ -6,10 +6,9 @@ cd ${0%/*} || exit 1    # run from this directory
 
 application=`getApplication`
 
-compileApplication ../../buoyantPimpleFoam/hotRoom/setHotRoom
 runApplication blockMesh
 cp 0/T.org 0/T
-runApplication setHotRoom
+runApplication setFields
 runApplication $application
 
 # ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/Allclean b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/Allclean
index 536b51a14e54034a9254d7a79312b3f89f9803e9..25243dd42f8aff1c422994b6303af87d894424c3 100755
--- a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/Allclean
+++ b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/Allclean
@@ -6,6 +6,5 @@ cd ${0%/*} || exit 1    # run from this directory
 
 cleanCase
 cp 0/T.org 0/T
-wclean setHotRoom
 
 # ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/Allrun b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/Allrun
index 3aafa6fd9423021ecd3c0e5de1cc49cdfd7b0ede..31c6c104c4d08b1bfe261de4868820bb191338cd 100755
--- a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/Allrun
+++ b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/Allrun
@@ -7,9 +7,8 @@ cd ${0%/*} || exit 1    # run from this directory
 # Get application name
 application=`getApplication`
 
-compileApplication setHotRoom
 runApplication blockMesh
-runApplication setHotRoom
+runApplication setFields
 runApplication $application
 
 # ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/Allrun b/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/Allrun
index cb0be1e6e06e5244e2bddc492b8cb56b1ca04acd..7b90a31601b62d6edf96a1054830e415e5170500 100755
--- a/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/Allrun
+++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/Allrun
@@ -6,9 +6,8 @@ cd ${0%/*} || exit 1    # run from this directory
 
 application=`getApplication`
 
-compileApplication ../../buoyantPimpleFoam/hotRoom/setHotRoom
 runApplication blockMesh
-runApplication setHotRoom
+runApplication setFields
 runApplication $application
 
 # ----------------------------------------------------------------- end-of-file