diff --git a/src/functionObjects/utilities/Make/files b/src/functionObjects/utilities/Make/files
index e9bb23307d7c7dc8820fbb510e298696978b6e18..240c0a24e9674b2c05da8f33aad70f5d71e75a5f 100644
--- a/src/functionObjects/utilities/Make/files
+++ b/src/functionObjects/utilities/Make/files
@@ -10,6 +10,8 @@ ensightWrite/ensightWriteUpdate.C
 vtkWrite/vtkWrite.C
 vtkWrite/vtkWriteUpdate.C
 
+multiRegion/multiRegion.C
+
 removeRegisteredObject/removeRegisteredObject.C
 
 parProfiling/parProfiling.C
diff --git a/src/functionObjects/utilities/multiRegion/multiRegion.C b/src/functionObjects/utilities/multiRegion/multiRegion.C
new file mode 100644
index 0000000000000000000000000000000000000000..c09eefa5721487ab6b8c86071cd223d4f751a789
--- /dev/null
+++ b/src/functionObjects/utilities/multiRegion/multiRegion.C
@@ -0,0 +1,169 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2021 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+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 "multiRegion.H"
+#include "fvMesh.H"
+#include "timeControlFunctionObject.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace functionObjects
+{
+    defineTypeNameAndDebug(multiRegion, 0);
+
+    addToRunTimeSelectionTable
+    (
+        functionObject,
+        multiRegion,
+        dictionary
+    );
+}
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::functionObjects::multiRegion::multiRegion
+(
+    const word& name,
+    const Time& runTime,
+    const dictionary& dict
+)
+:
+    timeFunctionObject(name, runTime)
+{
+    read(dict);
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+bool Foam::functionObjects::multiRegion::read(const dictionary& dict)
+{
+    if (functionObject::read(dict))
+    {
+        Info<< type() << ' ' << name() << ':' << nl;
+
+        wordRes regionMatcher;
+
+        const bool matchAny =
+            !dict.readIfPresent<wordRes>("regions", regionMatcher);
+
+        const dictionary& functionDict = dict.subDict("function");
+
+        const wordList allRegions(time_.sortedNames<fvMesh>());
+        functions_.resize(allRegions.size());
+
+        const bool needsTimeControl = timeControl::entriesPresent(functionDict);
+
+        label functioni = 0;
+        for (const word& regionName : allRegions)
+        {
+            if (matchAny || regionMatcher.match(regionName))
+            {
+                const word localName(IOobject::scopedName(name(), regionName));
+
+                dictionary regionDict(functionDict);
+                regionDict.add("region", regionName);
+
+                if (needsTimeControl)
+                {
+                    functions_.set
+                    (
+                        functioni,
+                        new timeControl(localName, time_, regionDict)
+                    );
+                }
+                else
+                {
+                    functions_.set
+                    (
+                        functioni,
+                        functionObject::New(localName, time_, regionDict)
+                    );
+                }
+
+                ++functioni;
+            }
+        }
+
+        functions_.resize(functioni);
+
+        if (functions_.empty())
+        {
+            WarningInFunction
+                << "No regions applied"
+                << endl;
+
+            return false;
+        }
+
+        Info<< "    Spawned additional object(s):" << nl;
+        for (const auto& f : functions_)
+        {
+            Info<< "        " << f.name() << nl;
+        }
+
+        Info<< endl;
+
+        return true;
+    }
+
+    return false;
+}
+
+
+bool Foam::functionObjects::multiRegion::execute()
+{
+    bool result = true;
+
+    for (auto& f : functions_)
+    {
+        result = f.execute() && result;
+    }
+
+    return result;
+}
+
+
+bool Foam::functionObjects::multiRegion::write()
+{
+    bool result = true;
+
+    for (auto& f : functions_)
+    {
+        result = f.write() && result;
+    }
+
+    return result;
+}
+
+
+// ************************************************************************* //
diff --git a/src/functionObjects/utilities/multiRegion/multiRegion.H b/src/functionObjects/utilities/multiRegion/multiRegion.H
new file mode 100644
index 0000000000000000000000000000000000000000..41f9c19464f2d86f4260fb8d59e9e81f0bd97e3f
--- /dev/null
+++ b/src/functionObjects/utilities/multiRegion/multiRegion.H
@@ -0,0 +1,158 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2021 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+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::functionObjects::multiRegion
+
+Group
+    grpUtilitiesFunctionObjects
+
+Description
+    Wrapper that clones the supplied function object for each region.
+
+    Simplifies the setup of identical post-processing requirements for
+    multi-region cases.
+    Applies the supplied function to all regions by default.
+
+Usage
+    Minimal example by using \c system/controlDict.functions:
+    \verbatim
+    multiRegion
+    {
+        // Mandatory entries
+        type    multiRegion;
+        libs    (utilityFunctionObjects);
+
+        function
+        {
+            // Actual object specification
+            type    fieldMinMax;
+            libs    (fieldFunctionObjects);
+            fields  (<field1> ... <fieldN>);
+        }
+
+        // Optional entries
+        regions     (region1 region2);
+    }
+    \endverbatim
+
+    where the entries mean:
+    \table
+      Property   | Description                          | Type | Reqd | Deflt
+      type       | Type name: multiRegion               | word | yes  | -
+      libs       | Library name: utilityFunctionObjects | word | yes  | -
+      function   | Function object sub-dictionary       | dict | yes  | -
+      regions    | List of region names                 | wordList | no  | all
+    \endtable
+
+See also
+  - Foam::functionObject
+
+SourceFiles
+    multiRegion.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef functionObjects_multiRegion_H
+#define functionObjects_multiRegion_H
+
+#include "timeFunctionObject.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace functionObjects
+{
+
+/*---------------------------------------------------------------------------*\
+                        Class multiRegion Declaration
+\*---------------------------------------------------------------------------*/
+
+class multiRegion
+:
+    public functionObjects::timeFunctionObject
+{
+protected:
+
+    // Protected Data
+
+        //- List of cloned objects (1 per region)
+        PtrList<functionObject> functions_;
+
+
+    // Protected Member Functions
+
+        //- No copy construct
+        multiRegion(const multiRegion&) = delete;
+
+        //- No copy assignment
+        void operator=(const multiRegion&) = delete;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("multiRegion");
+
+
+    // Constructors
+
+        //- Construct from Time and dictionary
+        multiRegion
+        (
+            const word& name,
+            const Time& runTime,
+            const dictionary& dict
+        );
+
+
+    //- Destructor
+    virtual ~multiRegion() = default;
+
+
+    // Member Functions
+
+        //- Read the controls
+        virtual bool read(const dictionary& dict);
+
+        //- Execute, currently does nothing
+        virtual bool execute();
+
+        //- Write the multiRegion
+        virtual bool write();
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace functionObjects
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/controlDict b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/controlDict
index 80636743d50c50a9e55fe02bed42266a030c54ff..4483c1eec35d3e129334a7c5c88ac8dc7f16c776 100644
--- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/controlDict
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/controlDict
@@ -1,7 +1,7 @@
 /*--------------------------------*- C++ -*----------------------------------*\
 | =========                 |                                                 |
 | \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
-|  \\    /   O peration     | Version:  v2012                                 |
+|  \\    /   O peration     | Version:  v2106                                 |
 |   \\  /    A nd           | Website:  www.openfoam.com                      |
 |    \\/     M anipulation  |                                                 |
 \*---------------------------------------------------------------------------*/
@@ -44,5 +44,24 @@ timePrecision   6;
 
 runTimeModifiable true;
 
+functions
+{
+    multiRegion
+    {
+        type    multiRegion;
+        libs    (utilityFunctionObjects);
+
+        // regions ( ".*Air" );
+
+        function
+        {
+            // Actual object specification
+            type    fieldMinMax;
+            libs    (fieldFunctionObjects);
+            fields  (T);
+        }
+    }
+}
+
 
 // ************************************************************************* //