diff --git a/src/OpenFOAM/db/functionObjects/functionObjectFile/functionObjectFile.C b/src/OpenFOAM/db/functionObjects/functionObjectFile/functionObjectFile.C
new file mode 100644
index 0000000000..4ccf40e0b0
--- /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 .
+
+\*---------------------------------------------------------------------------*/
+
+#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::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 0000000000..2b0c737bb9
--- /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 .
+
+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 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& files();
+
+ //- Return file 'i'
+ OFstream& file(const label i);
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //