diff --git a/applications/utilities/preProcessing/createZeroDirectory/Make/files b/applications/utilities/preProcessing/createZeroDirectory/Make/files
new file mode 100644
index 0000000000..379802af21
--- /dev/null
+++ b/applications/utilities/preProcessing/createZeroDirectory/Make/files
@@ -0,0 +1,7 @@
+boundaryInfo.C
+boundaryTemplates.C
+caseInfo.C
+solverTemplate.C
+createZeroDirectory.C
+
+EXE = $(FOAM_APPBIN)/createZeroDirectory
diff --git a/applications/utilities/preProcessing/createZeroDirectory/Make/options b/applications/utilities/preProcessing/createZeroDirectory/Make/options
new file mode 100644
index 0000000000..b6e5516b59
--- /dev/null
+++ b/applications/utilities/preProcessing/createZeroDirectory/Make/options
@@ -0,0 +1,11 @@
+EXE_INC = \
+ -I$(LIB_SRC)/finiteVolume/lnInclude \
+ -I$(LIB_SRC)/dynamicMesh/lnInclude \
+ -I$(LIB_SRC)/meshTools/lnInclude \
+ -I$(LIB_SRC)/regionModels/regionModel/lnInclude
+
+EXE_LIBS = \
+ -lfiniteVolume \
+ -ldynamicMesh \
+ -lmeshTools \
+ -lregionModels
diff --git a/applications/utilities/preProcessing/createZeroDirectory/boundaryInfo.C b/applications/utilities/preProcessing/createZeroDirectory/boundaryInfo.C
new file mode 100644
index 0000000000..6dd055b6a3
--- /dev/null
+++ b/applications/utilities/preProcessing/createZeroDirectory/boundaryInfo.C
@@ -0,0 +1,198 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2015 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 "boundaryInfo.H"
+#include "Time.H"
+#include "polyMesh.H"
+#include "processorPolyPatch.H"
+
+using namespace Foam;
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ defineTemplateTypeNameAndDebug(IOPtrList, 0);
+}
+
+// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
+
+Foam::IOPtrList Foam::boundaryInfo::readBoundaryDict
+(
+ const Time& runTime,
+ const word& regionName
+) const
+{
+ Info<< " Reading mesh boundaries" << endl;
+
+ const_cast(IOPtrList::typeName) = polyBoundaryMesh::typeName;
+ IOPtrList boundaryPatchList
+ (
+ IOobject
+ (
+ "boundary",
+ runTime.findInstance(regionName/polyMesh::meshSubDir, "boundary"),
+ regionName/polyMesh::meshSubDir,
+ runTime,
+ IOobject::MUST_READ,
+ IOobject::NO_WRITE,
+ false
+ )
+ );
+
+ // remove zero-sized patches
+ PtrList boundaryPatchListNew;
+ forAll(boundaryPatchList, patchI)
+ {
+ const dictionary& dict = boundaryPatchList[patchI].dict();
+ const word pType = dict.lookup("type");
+ bool procPatch = pType == processorPolyPatch::typeName;
+
+ bool addPatch = true;
+ if (!procPatch)
+ {
+ label nFaces = readLabel(dict.lookup("nFaces"));
+ reduce(nFaces, sumOp