diff --git a/src/dynamicFaMesh/interfaceTrackingFvMesh/interfaceTrackingFvMesh.C b/src/dynamicFaMesh/interfaceTrackingFvMesh/interfaceTrackingFvMesh.C
index a8b43d2b36bad27055845194b18e4fb080c8b2cc..82fca716490d5885d16e8d9ba58dd5d7beb30450 100644
--- a/src/dynamicFaMesh/interfaceTrackingFvMesh/interfaceTrackingFvMesh.C
+++ b/src/dynamicFaMesh/interfaceTrackingFvMesh/interfaceTrackingFvMesh.C
@@ -1568,27 +1568,15 @@ Foam::interfaceTrackingFvMesh::interfaceTrackingFvMesh
     dynamicMotionSolverFvMesh(io, doInit),
     aMeshPtr_(new faMesh(*this)),
     fsPatchIndex_(-1),
-    fixedFreeSurfacePatches_
-    (
-        motion().get<wordList>("fixedFreeSurfacePatches")
-    ),
+    fixedFreeSurfacePatches_(),
     nonReflectingFreeSurfacePatches_(),
-    pointNormalsCorrectionPatches_
-    (
-        motion().get<wordList>("pointNormalsCorrectionPatches")
-    ),
-    normalMotionDir_
-    (
-        motion().get<bool>("normalMotionDir")
-    ),
+    pointNormalsCorrectionPatches_(),
+    normalMotionDir_(false),
     motionDir_(Zero),
-    smoothing_(motion().getOrDefault("smoothing", false)),
-    pureFreeSurface_(motion().getOrDefault("pureFreeSurface", true)),
-    rigidFreeSurface_(motion().getOrDefault("rigidFreeSurface", false)),
-    correctContactLineNormals_
-    (
-        motion().getOrDefault("correctContactLineNormals", false)
-    ),
+    smoothing_(false),
+    pureFreeSurface_(true),
+    rigidFreeSurface_(false),
+    correctContactLineNormals_(false),
     sigma0_("zero", dimForce/dimLength/dimDensity, Zero),
     rho_("one", dimDensity, 1.0),
     timeIndex_(-1),
@@ -1605,10 +1593,13 @@ Foam::interfaceTrackingFvMesh::interfaceTrackingFvMesh
     surfactantPtr_(nullptr),
     contactAnglePtr_(nullptr)
 {
-    initializeData();
+    if (doInit)
+    {
+        init(false);    // do not initialise lower levels
+    }
 }
 
-
+/*
 Foam::interfaceTrackingFvMesh::interfaceTrackingFvMesh
 (
     const IOobject& io,
@@ -1630,22 +1621,13 @@ Foam::interfaceTrackingFvMesh::interfaceTrackingFvMesh
     ),
     aMeshPtr_(new faMesh(*this)),
     fsPatchIndex_(-1),
-    fixedFreeSurfacePatches_
-    (
-        motion().get<wordList>("fixedFreeSurfacePatches")
-    ),
+    fixedFreeSurfacePatches_(),
     nonReflectingFreeSurfacePatches_(),
-    pointNormalsCorrectionPatches_
-    (
-        motion().get<wordList>("pointNormalsCorrectionPatches")
-    ),
-    normalMotionDir_
-    (
-        motion().get<bool>("normalMotionDir")
-    ),
+    pointNormalsCorrectionPatches_(),
+    normalMotionDir_(false),
     motionDir_(Zero),
-    smoothing_(motion().getOrDefault("smoothing", false)),
-    pureFreeSurface_(motion().getOrDefault("pureFreeSurface", true)),
+    smoothing_(false),
+    pureFreeSurface_(true),
     sigma0_("zero", dimForce/dimLength/dimDensity, Zero),
     rho_("one", dimDensity, 1.0),
     timeIndex_(-1),
@@ -1661,10 +1643,8 @@ Foam::interfaceTrackingFvMesh::interfaceTrackingFvMesh
     surfaceTensionPtr_(nullptr),
     surfactantPtr_(nullptr),
     contactAnglePtr_(nullptr)
-{
-    initializeData();
-}
-
+{}
+*/
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
@@ -1687,6 +1667,32 @@ Foam::interfaceTrackingFvMesh::~interfaceTrackingFvMesh()
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
+bool Foam::interfaceTrackingFvMesh::init(const bool doInit)
+{
+    if (doInit)
+    {
+        dynamicMotionSolverFvMesh::init(doInit);
+    }
+
+    aMeshPtr_.reset(new faMesh(*this));
+
+    // Set motion-based data
+    fixedFreeSurfacePatches_ =
+        motion().get<wordList>("fixedFreeSurfacePatches");
+
+    pointNormalsCorrectionPatches_ =
+        motion().get<wordList>("pointNormalsCorrectionPatches");
+
+    normalMotionDir_ = motion().get<bool>("normalMotionDir");
+    smoothing_ = motion().getOrDefault("smoothing", false);
+    pureFreeSurface_ = motion().getOrDefault("pureFreeSurface", true);
+
+    initializeData();
+
+    return true;
+}
+
+
 Foam::areaVectorField& Foam::interfaceTrackingFvMesh::Us()
 {
     if (!UsPtr_)
diff --git a/src/dynamicFaMesh/interfaceTrackingFvMesh/interfaceTrackingFvMesh.H b/src/dynamicFaMesh/interfaceTrackingFvMesh/interfaceTrackingFvMesh.H
index 784ecff18a8186c80af1f8179014bfd14b6e3837..2298f1089eec15863327bc8b3cadc4802dbe2240 100644
--- a/src/dynamicFaMesh/interfaceTrackingFvMesh/interfaceTrackingFvMesh.H
+++ b/src/dynamicFaMesh/interfaceTrackingFvMesh/interfaceTrackingFvMesh.H
@@ -252,7 +252,7 @@ public:
 
         //- Construct from IOobject
         interfaceTrackingFvMesh(const IOobject& io, const bool doInit=true);
-
+/*
         //- Construct from components without boundary.
         //  Boundary is added using addFvPatches() member function
         interfaceTrackingFvMesh
@@ -264,7 +264,7 @@ public:
             labelList&& allNeighbour,
             const bool syncPar = true
         );
-
+*/
 
     //- Destructor
     ~interfaceTrackingFvMesh();
@@ -272,6 +272,9 @@ public:
 
     // Member Functions
 
+        //- Initialise all non-demand-driven data
+        virtual bool init(const bool doInit);
+
         fvMesh& mesh()
         {
             return *this;