diff --git a/src/OpenFOAM/db/functionObjects/functionObjectFile/functionObjectFile.C b/src/OpenFOAM/db/functionObjects/functionObjectFile/functionObjectFile.C
new file mode 100644
index 0000000000000000000000000000000000000000..4ccf40e0b086092512c3ce844de6a6a156117261
--- /dev/null
+++ b/src/OpenFOAM/db/functionObjects/functionObjectFile/functionObjectFile.C
@@ -0,0 +1,203 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 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 <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "functionObjectFile.H"
+#include "Time.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+const Foam::word Foam::functionObjectFile::outputPrefix = "postProcessing";
+
+// * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * //
+
+Foam::fileName Foam::functionObjectFile::baseFileDir() const
+{
+    fileName baseDir = obr_.time().path();
+
+    if (Pstream::parRun())
+    {
+        // Put in undecomposed case (Note: gives problems for
+        // distributed data running)
+        baseDir = baseDir/".."/outputPrefix;
+    }
+    else
+    {
+        baseDir = baseDir/outputPrefix;
+    }
+
+    return baseDir;
+}
+
+
+void Foam::functionObjectFile::createFiles()
+{
+    const word startTimeName =
+        obr_.time().timeName(obr_.time().startTime().value());
+
+    label i = 0;
+    forAllConstIter(wordHashSet, names_, iter)
+    {
+        if (Pstream::master() && !filePtrs_.set(i))
+        {
+            fileName outputDir(baseFileDir()/prefix_/startTimeName);
+
+            mkDir(outputDir);
+
+            filePtrs_.set(i, new OFstream(outputDir/(iter.key() + ".dat")));
+
+            writeFileHeader(i);
+        }
+    }
+}
+
+
+void Foam::functionObjectFile::writeFileHeader(const label i)
+{
+    // do nothing
+}
+
+
+void Foam::functionObjectFile::write()
+{
+    if (Pstream::master())
+    {
+        createFiles();
+    }
+}
+
+
+void Foam::functionObjectFile::resetNames(const wordList& names)
+{
+    names_.clear();
+    names_.insert(names);
+
+    filePtrs_.clear();
+    filePtrs_.setSize(names_.toc().size());
+
+    createFiles();
+}
+
+
+void Foam::functionObjectFile::resetName(const word& name)
+{
+    names_.clear();
+    names_.insert(name);
+
+    filePtrs_.clear();
+    filePtrs_.setSize(1);
+
+    createFiles();
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::functionObjectFile::functionObjectFile
+(
+    const objectRegistry& obr,
+    const word& prefix
+)
+:
+    obr_(obr),
+    prefix_(prefix),
+    names_(),
+    filePtrs_()
+{}
+
+
+Foam::functionObjectFile::functionObjectFile
+(
+    const objectRegistry& obr,
+    const word& prefix,
+    const word& name
+)
+:
+    obr_(obr),
+    prefix_(prefix),
+    names_(),
+    filePtrs_()
+{
+    names_.clear();
+    names_.insert(name);
+
+    filePtrs_.clear();
+    filePtrs_.setSize(names_.toc().size());
+}
+
+
+Foam::functionObjectFile::functionObjectFile
+(
+    const objectRegistry& obr,
+    const word& prefix,
+    const wordList& names
+)
+:
+    obr_(obr),
+    prefix_(prefix),
+    names_(names),
+    filePtrs_()
+{
+    names_.clear();
+    names_.insert(names);
+
+    filePtrs_.clear();
+    filePtrs_.setSize(names_.toc().size());
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::functionObjectFile::~functionObjectFile()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+Foam::OFstream& Foam::functionObjectFile::file()
+{
+    if (filePtrs_.size() != 1)
+    {
+        WarningIn("Foam::Ostream& Foam::functionObjectFile::file()")
+            << "Requested single file, but multiple files are present"
+            << endl;
+    }
+
+    return filePtrs_[0];
+}
+
+
+Foam::PtrList<Foam::OFstream>& Foam::functionObjectFile::files()
+{
+    return filePtrs_;
+}
+
+
+Foam::OFstream& Foam::functionObjectFile::file(const label i)
+{
+    return filePtrs_[i];
+}
+
+
+// ************************************************************************* //
diff --git a/src/OpenFOAM/db/functionObjects/functionObjectFile/functionObjectFile.H b/src/OpenFOAM/db/functionObjects/functionObjectFile/functionObjectFile.H
new file mode 100644
index 0000000000000000000000000000000000000000..2b0c737bb90b2cdaec788f18f5b713fde1b059d1
--- /dev/null
+++ b/src/OpenFOAM/db/functionObjects/functionObjectFile/functionObjectFile.H
@@ -0,0 +1,155 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 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 <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::functionObjectFile
+
+Description
+    Base class for output file data handling
+
+See Also
+    Foam::functionObject
+    Foam::OutputFilterFunctionObject
+
+SourceFiles
+    functionObjectFile.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef functionObjectFile_H
+#define functionObjectFile_H
+
+#include "objectRegistry.H"
+#include "OFstream.H"
+#include "PtrList.H"
+#include "HashSet.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+
+/*---------------------------------------------------------------------------*\
+                     Class functionObjectFile Declaration
+\*---------------------------------------------------------------------------*/
+
+class functionObjectFile
+{
+protected:
+
+    // Protected data
+
+        //- Reference to the database
+        const objectRegistry& obr_;
+
+        //- Prefix
+        const word& prefix_;
+
+        //- File names
+        wordHashSet names_;
+
+        //- File pointer
+        PtrList<OFstream> filePtrs_;
+
+
+    // Protected Member Functions
+
+        //- Return the base file directory for output
+        virtual fileName baseFileDir() const;
+
+        //- Create the output file
+        virtual void createFiles();
+
+        //- File header information
+        virtual void writeFileHeader(const label i = 0);
+
+        //- Write function
+        virtual void write();
+
+        //- Reset the list of names from a wordList
+        virtual void resetNames(const wordList& names);
+
+        //- Reset the list of names to a single name entry
+        virtual void resetName(const word& name);
+
+        //- Disallow default bitwise copy construct
+        functionObjectFile(const functionObjectFile&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const functionObjectFile&);
+
+
+public:
+
+    //- Folder prefix
+    static const word outputPrefix;
+
+    // Constructors
+
+        //- Construct null
+        functionObjectFile(const objectRegistry& obr, const word& prefix);
+
+        //- Construct from components
+        functionObjectFile
+        (
+            const objectRegistry& obr,
+            const word& prefix,
+            const word& name
+        );
+
+        //- Construct from components
+        functionObjectFile
+        (
+            const objectRegistry& obr,
+            const word& prefix,
+            const wordList& names
+        );
+
+
+    //- Destructor
+    virtual ~functionObjectFile();
+
+
+    // Member Functions
+
+        //- Return access to the file (if only 1)
+        OFstream& file();
+
+        //- Return access to the files
+        PtrList<OFstream>& files();
+
+        //- Return file 'i'
+        OFstream& file(const label i);
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //