diff --git a/src/edgeMesh/edgeMeshFormats/edgeMeshFormatsCore.C b/src/edgeMesh/edgeMeshFormats/edgeMeshFormatsCore.C
new file mode 100644
index 0000000000..05385ce662
--- /dev/null
+++ b/src/edgeMesh/edgeMeshFormats/edgeMeshFormatsCore.C
@@ -0,0 +1,199 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011 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 "edgeMeshFormatsCore.H"
+
+#include "Time.H"
+#include "IFstream.H"
+#include "OFstream.H"
+#include "edgeMesh.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+Foam::word Foam::fileFormats::edgeMeshFormatsCore::nativeExt("eMesh");
+
+
+// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
+
+Foam::string Foam::fileFormats::edgeMeshFormatsCore::getLineNoComment
+(
+ IFstream& is
+)
+{
+ string line;
+ do
+ {
+ is.getLine(line);
+ }
+ while ((line.empty() || line[0] == '#') && is.good());
+
+ return line;
+}
+
+
+#if 0
+Foam::fileName Foam::fileFormats::edgeMeshFormatsCore::localMeshFileName
+(
+ const word& meshName
+)
+{
+ const word name(meshName.size() ? meshName : surfaceRegistry::defaultName);
+
+ return fileName
+ (
+ surfaceRegistry::prefix/name/surfMesh::meshSubDir
+ / name + "." + nativeExt
+ );
+}
+
+
+Foam::fileName Foam::fileFormats::edgeMeshFormatsCore::findMeshInstance
+(
+ const Time& t,
+ const word& meshName
+)
+{
+ fileName localName = localMeshFileName(meshName);
+
+ // Search back through the time directories list to find the time
+ // closest to and lower than current time
+
+ instantList ts = t.times();
+ label instanceI;
+
+ for (instanceI = ts.size()-1; instanceI >= 0; --instanceI)
+ {
+ if (ts[instanceI].value() <= t.timeOutputValue())
+ {
+ break;
+ }
+ }
+
+ // Noting that the current directory has already been searched
+ // for mesh data, start searching from the previously stored time directory
+
+ if (instanceI >= 0)
+ {
+ for (label i = instanceI; i >= 0; --i)
+ {
+ if (isFile(t.path()/ts[i].name()/localName))
+ {
+ return ts[i].name();
+ }
+ }
+ }
+
+ return "constant";
+}
+
+
+Foam::fileName Foam::fileFormats::edgeMeshFormatsCore::findMeshFile
+(
+ const Time& t,
+ const word& meshName
+)
+{
+ fileName localName = localMeshFileName(meshName);
+
+ // Search back through the time directories list to find the time
+ // closest to and lower than current time
+
+ instantList ts = t.times();
+ label instanceI;
+
+ for (instanceI = ts.size()-1; instanceI >= 0; --instanceI)
+ {
+ if (ts[instanceI].value() <= t.timeOutputValue())
+ {
+ break;
+ }
+ }
+
+ // Noting that the current directory has already been searched
+ // for mesh data, start searching from the previously stored time directory
+
+ if (instanceI >= 0)
+ {
+ for (label i = instanceI; i >= 0; --i)
+ {
+ fileName testName(t.path()/ts[i].name()/localName);
+
+ if (isFile(testName))
+ {
+ return testName;
+ }
+ }
+ }
+
+ // fallback to "constant"
+ return t.path()/"constant"/localName;
+}
+#endif
+
+
+bool Foam::fileFormats::edgeMeshFormatsCore::checkSupport
+(
+ const wordHashSet& available,
+ const word& ext,
+ const bool verbose,
+ const word& functionName
+)
+{
+ if (available.found(ext))
+ {
+ return true;
+ }
+ else if (verbose)
+ {
+ wordList known = available.sortedToc();
+
+ Info<<"Unknown file extension for " << functionName
+ << " : " << ext << nl
+ <<"Valid types: (";
+ // compact output:
+ forAll(known, i)
+ {
+ Info<<" " << known[i];
+ }
+ Info<<" )" << endl;
+ }
+
+ return false;
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::fileFormats::edgeMeshFormatsCore::edgeMeshFormatsCore()
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+Foam::fileFormats::edgeMeshFormatsCore::~edgeMeshFormatsCore()
+{}
+
+
+// ************************************************************************* //
diff --git a/src/edgeMesh/edgeMeshFormats/edgeMeshFormatsCore.H b/src/edgeMesh/edgeMeshFormats/edgeMeshFormatsCore.H
new file mode 100644
index 0000000000..42e92394ee
--- /dev/null
+++ b/src/edgeMesh/edgeMeshFormats/edgeMeshFormatsCore.H
@@ -0,0 +1,124 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011 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::fileFormats::edgeMeshFormatsCore
+
+Description
+ A collection of helper functions for reading/writing edge formats.
+
+SourceFiles
+ edgeMeshFormatsCore.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef edgeMeshFormatsCore_H
+#define edgeMeshFormatsCore_H
+
+#include "Map.H"
+#include "HashSet.H"
+#include "labelList.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// Forward declaration of classes
+
+class IFstream;
+class Time;
+
+namespace fileFormats
+{
+
+/*---------------------------------------------------------------------------*\
+ Class edgeMeshFormatsCore Declaration
+\*---------------------------------------------------------------------------*/
+
+class edgeMeshFormatsCore
+{
+protected:
+
+ // Protected Member Functions
+
+ //- Read non-comment line
+ static string getLineNoComment(IFstream&);
+
+public:
+
+ // Static Data
+
+ //- The file extension corresponding to 'native' edge format
+ // Normally "eMesh" (edge-mesh)
+ static word nativeExt;
+
+ // Static Member Functions
+
+ static bool checkSupport
+ (
+ const wordHashSet& available,
+ const word& ext,
+ const bool verbose,
+ const word& functionName
+ );
+
+ // //- Return the local file name (within time directory)
+ // // NEEDS FIXING
+ // static fileName localMeshFileName(const word& edgeName="");
+
+ // //- Find instance with edgeName
+ // // NEEDS FIXING
+ // static fileName findMeshInstance
+ // (
+ // const Time&,
+ // const word& edgeName=""
+ // );
+
+ // //- Find mesh file with edgeName
+ // // NEEDS FIXING
+ // static fileName findMeshFile(const Time&, const word& edgeName="");
+
+
+ // Constructors
+
+ //- Construct null
+ edgeMeshFormatsCore();
+
+
+ //- Destructor
+ virtual ~edgeMeshFormatsCore();
+
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace fileFormats
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //