diff --git a/bin/foamNewFunctionObject b/bin/foamNewFunctionObject
new file mode 100755
index 0000000000..a6de93f70d
--- /dev/null
+++ b/bin/foamNewFunctionObject
@@ -0,0 +1,83 @@
+#!/bin/sh
+#------------------------------------------------------------------------------
+# ========= |
+# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+# \\ / O peration |
+# \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation
+# \\/ M anipulation |
+#-------------------------------------------------------------------------------
+# 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 .
+#
+# Script
+# foamNewFunctionObject
+#
+# Description
+# Create directory with source and compilation files for a new function
+# object
+#
+#------------------------------------------------------------------------------
+Script=${0##*/}
+DIR="$FOAM_ETC/codeTemplates/functionObject"
+
+usage() {
+ while [ "$#" -ge 1 ]; do echo "$1"; shift; done
+ cat<
+
+* Create directory with source and compilation files for a new function object
+ (dir)
+ - .H
+ - .C
+ - FunctionObject.H
+ - FunctionObject.C
+ - IO.H
+ - Make (dir)
+ - files
+ - options
+ Compiles a library named libFunctionObject.so in
+ \$FOAM_USER_LIBBIN:
+ $FOAM_USER_LIBBIN
+USAGE
+ exit 1
+}
+
+case "$1" in
+(-h | -help)
+ usage
+ ;;
+-*)
+ usage "$1 is not a valid option/filename"
+ ;;
+esac
+
+[ "$#" -eq 1 ] || usage "Wrong number of arguments"
+[ -d "$1" ] && usage "$1 directory already exists, aborting..."
+
+NAME=$1
+
+echo "Creating function object code directory $NAME" && mkdir $NAME
+for F in $(ls ${DIR}/*.*)
+do
+ FILE=$(basename $F | sed "s#FUNCTIONOBJECT#${NAME}#g")
+ sed "s#FUNCTIONOBJECT#${NAME}#g" ${F} > ${NAME}/${FILE}
+done
+
+echo "Creating Make subdirectory" && mkdir $NAME/Make
+sed "s#FUNCTIONOBJECT#${NAME}#g" ${DIR}/Make/files > $NAME/Make/files
+cp ${DIR}/Make/options $NAME/Make
+
+#------------------------------------------------------------------------------
diff --git a/etc/codeTemplates/functionObject/FUNCTIONOBJECT.C b/etc/codeTemplates/functionObject/FUNCTIONOBJECT.C
new file mode 100644
index 0000000000..68189c6d43
--- /dev/null
+++ b/etc/codeTemplates/functionObject/FUNCTIONOBJECT.C
@@ -0,0 +1,96 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+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 .
+
+\*---------------------------------------------------------------------------*/
+
+#include "FUNCTIONOBJECT.H"
+#include "dictionary.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+defineTypeNameAndDebug(FUNCTIONOBJECT, 0);
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::FUNCTIONOBJECT::FUNCTIONOBJECT
+(
+ const word& name,
+ const objectRegistry& obr,
+ const dictionary& dict,
+ const bool loadFromFiles
+)
+:
+ name_(name),
+ obr_(obr),
+ wordData_(dict.lookupOrDefault("wordData", "defaultWord")),
+ scalarData_(readScalar(dict.lookup("scalarData"))),
+ labelData_(readLabel(dict.lookup("labelData")))
+{
+ read(dict);
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+Foam::FUNCTIONOBJECT::~FUNCTIONOBJECT()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+void Foam::FUNCTIONOBJECT::read(const dictionary& dict)
+{
+ dict.readIfPresent("wordData", wordData_);
+ dict.lookup("scalarData") >> scalarData_;
+ dict.lookup("labelData") >> labelData_;
+}
+
+
+void Foam::FUNCTIONOBJECT::execute()
+{
+ // Do nothing - only valid on write
+}
+
+
+void Foam::FUNCTIONOBJECT::end()
+{
+ // Do nothing - only valid on write
+}
+
+
+void Foam::FUNCTIONOBJECT::timeSet()
+{
+ // Do nothing - only valid on write
+}
+
+
+void Foam::FUNCTIONOBJECT::write()
+{
+}
+
+
+// ************************************************************************* //
diff --git a/etc/codeTemplates/functionObject/FUNCTIONOBJECT.H b/etc/codeTemplates/functionObject/FUNCTIONOBJECT.H
new file mode 100644
index 0000000000..62fdf144e2
--- /dev/null
+++ b/etc/codeTemplates/functionObject/FUNCTIONOBJECT.H
@@ -0,0 +1,176 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+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 .
+
+Class
+ Foam::FUNCTIONOBJECT
+
+Group
+
+Description
+ This function object...
+
+ Example of function object specification:
+ \verbatim
+ FUNCTIONOBJECT1
+ {
+ type FUNCTIONOBJECT;
+ functionObjectLibs ("libFUNCTIONOBJECTFunctionObject.so");
+ ...
+ wordData someWord;
+ scalarData 1.0;
+ labelData 1;
+ }
+ \endverbatim
+
+ \heading Function object usage
+ \table
+ Property | Description | Required | Default value
+ type | type name: FUNCTIONOBJECT | yes |
+ wordData | some word option... | no | defaultWord
+ scalarData | some scalar value... | yes |
+ labelData | some label value... | yes |
+ \endtable
+
+SourceFiles
+ FUNCTIONOBJECT.C
+ IOFUNCTIONOBJECT.H
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef FUNCTIONOBJECT_H
+#define FUNCTIONOBJECT_H
+
+#include "runTimeSelectionTables.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// Forward declaration of classes
+class objectRegistry;
+class dictionary;
+class polyMesh;
+class mapPolyMesh;
+
+/*---------------------------------------------------------------------------*\
+ Class FUNCTIONOBJECT Declaration
+\*---------------------------------------------------------------------------*/
+
+class FUNCTIONOBJECT
+{
+ // Private data
+
+ //- Name of this set of FUNCTIONOBJECT
+ word name_;
+
+ //- Refererence to Db
+ const objectRegistry& obr_;
+
+ // Read from dictionary
+
+ //- word
+ word wordData_;
+
+ //- scalar
+ scalar scalarData_;
+
+ //- label
+ label labelData_;
+
+
+ // Private Member Functions
+
+
+ //- Disallow default bitwise copy construct
+ FUNCTIONOBJECT(const FUNCTIONOBJECT&);
+
+ //- Disallow default bitwise assignment
+ void operator=(const FUNCTIONOBJECT&);
+
+
+public:
+
+ //- Runtime type information
+ TypeName("FUNCTIONOBJECT");
+
+
+ // Constructors
+
+ //- Construct for given objectRegistry and dictionary.
+ // Allow the possibility to load fields from files
+ FUNCTIONOBJECT
+ (
+ const word& name,
+ const objectRegistry&,
+ const dictionary&,
+ const bool loadFromFiles = false
+ );
+
+
+ //- Destructor
+ virtual ~FUNCTIONOBJECT();
+
+
+ // Member Functions
+
+ //- Return name of the FUNCTIONOBJECT
+ virtual const word& name() const
+ {
+ return name_;
+ }
+
+ //- Read the FUNCTIONOBJECT data
+ virtual void read(const dictionary&);
+
+ //- Execute, currently does nothing
+ virtual void execute();
+
+ //- Execute at the final time-loop, currently does nothing
+ virtual void end();
+
+ //- Called when time was set at the end of the Time::operator++
+ virtual void timeSet();
+
+ //- Write the FUNCTIONOBJECT
+ virtual void write();
+
+ //- Update for changes of mesh
+ virtual void updateMesh(const mapPolyMesh&)
+ {}
+
+ //- Update for changes of mesh
+ virtual void movePoints(const polyMesh&)
+ {}
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/etc/codeTemplates/functionObject/FUNCTIONOBJECTFunctionObject.C b/etc/codeTemplates/functionObject/FUNCTIONOBJECTFunctionObject.C
new file mode 100644
index 0000000000..b10ecc5098
--- /dev/null
+++ b/etc/codeTemplates/functionObject/FUNCTIONOBJECTFunctionObject.C
@@ -0,0 +1,46 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+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 .
+
+\*---------------------------------------------------------------------------*/
+
+#include "FUNCTIONOBJECTFunctionObject.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ defineNamedTemplateTypeNameAndDebug
+ (
+ FUNCTIONOBJECTFunctionObject,
+ 0
+ );
+
+ addToRunTimeSelectionTable
+ (
+ functionObject,
+ FUNCTIONOBJECTFunctionObject,
+ dictionary
+ );
+}
+
+// ************************************************************************* //
diff --git a/etc/codeTemplates/functionObject/FUNCTIONOBJECTFunctionObject.H b/etc/codeTemplates/functionObject/FUNCTIONOBJECTFunctionObject.H
new file mode 100644
index 0000000000..78e6a7f0b9
--- /dev/null
+++ b/etc/codeTemplates/functionObject/FUNCTIONOBJECTFunctionObject.H
@@ -0,0 +1,54 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+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 .
+
+Typedef
+ Foam::FUNCTIONOBJECTFunctionObject
+
+Description
+ FunctionObject wrapper around FUNCTIONOBJECT to allow them to be
+ created via the functions entry within controlDict.
+
+SourceFiles
+ FUNCTIONOBJECTFunctionObject.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef FUNCTIONOBJECTFunctionObject_H
+#define FUNCTIONOBJECTFunctionObject_H
+
+#include "FUNCTIONOBJECT.H"
+#include "OutputFilterFunctionObject.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ typedef OutputFilterFunctionObject
+ FUNCTIONOBJECTFunctionObject;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/etc/codeTemplates/functionObject/IOFUNCTIONOBJECT.H b/etc/codeTemplates/functionObject/IOFUNCTIONOBJECT.H
new file mode 100644
index 0000000000..0075f798a1
--- /dev/null
+++ b/etc/codeTemplates/functionObject/IOFUNCTIONOBJECT.H
@@ -0,0 +1,49 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+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 .
+
+Typedef
+ Foam::IOFUNCTIONOBJECT
+
+Description
+ Instance of the generic IOOutputFilter for FUNCTIONOBJECT.
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef IOFUNCTIONOBJECT_H
+#define IOFUNCTIONOBJECT_H
+
+#include "FUNCTIONOBJECT.H"
+#include "IOOutputFilter.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ typedef IOOutputFilter IOFUNCTIONOBJECT;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/etc/codeTemplates/functionObject/Make/files b/etc/codeTemplates/functionObject/Make/files
new file mode 100644
index 0000000000..73b9956031
--- /dev/null
+++ b/etc/codeTemplates/functionObject/Make/files
@@ -0,0 +1,4 @@
+FUNCTIONOBJECT.C
+FUNCTIONOBJECTFunctionObject.C
+
+LIB = $(FOAM_USER_LIBBIN)/libFUNCTIONOBJECTFunctionObject
diff --git a/etc/codeTemplates/functionObject/Make/options b/etc/codeTemplates/functionObject/Make/options
new file mode 100644
index 0000000000..a3ae8da833
--- /dev/null
+++ b/etc/codeTemplates/functionObject/Make/options
@@ -0,0 +1,7 @@
+EXE_INC = \
+ -I$(LIB_SRC)/finiteVolume/lnInclude \
+ -I$(LIB_SRC)/meshTools/lnInclude
+
+LIB_LIBS = \
+ -lfiniteVolume \
+ -lmeshTools