diff --git a/src/surfMesh/writers/surfaceWriter.C b/src/surfMesh/writers/surfaceWriter.C
index dbdc60e2d087c16f10068292f663e44aa392fefa..33ddbb7fb81e54f57ffc97e1ce87983055302177 100644
--- a/src/surfMesh/writers/surfaceWriter.C
+++ b/src/surfMesh/writers/surfaceWriter.C
@@ -135,6 +135,8 @@ Foam::surfaceWriter::New
 Foam::surfaceWriter::surfaceWriter()
 :
     surf_(std::cref<meshedSurf>(emptySurface_)),
+    surfComp_(),
+    useComponents_(false),
     upToDate_(false),
     parallel_(true),
     useTimeDir_(false),
@@ -188,7 +190,9 @@ Foam::surfaceWriter::surfaceWriter
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
 Foam::surfaceWriter::~surfaceWriter()
-{}
+{
+    close();
+}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
@@ -305,7 +309,9 @@ void Foam::surfaceWriter::clear()
 {
     close();
     expire();
+    useComponents_ = false;
     surf_ = std::cref<meshedSurf>(emptySurface_);
+    surfComp_.clear();
 }
 
 
@@ -316,7 +322,9 @@ void Foam::surfaceWriter::setSurface
 )
 {
     expire();
+    useComponents_ = false;
     surf_ = std::cref<meshedSurf>(surf);
+    surfComp_.clear();
     parallel_ = (parallel && Pstream::parRun());
 }
 
@@ -329,7 +337,10 @@ void Foam::surfaceWriter::setSurface
 )
 {
     expire();
-    setSurface(meshedSurfRef(points, faces), parallel);
+    useComponents_ = true;
+    surf_ = std::cref<meshedSurf>(emptySurface_);
+    surfComp_.reset(points, faces);
+    parallel_ = (parallel && Pstream::parRun());
 }
 
 
@@ -372,13 +383,18 @@ bool Foam::surfaceWriter::expire()
 
 bool Foam::surfaceWriter::hasSurface() const
 {
-    return (&emptySurface_ != &(surf_.get()));
+    return (useComponents_ || (&emptySurface_ != &(surf_.get())));
 }
 
 
 bool Foam::surfaceWriter::empty() const
 {
-    const bool value = surf_.get().faces().empty();
+    const bool value =
+    (
+        useComponents_
+      ? surfComp_.faces().empty()
+      : surf_.get().faces().empty()
+    );
 
     return (parallel_ ? returnReduce(value, andOp<bool>()) : value);
 }
@@ -386,7 +402,12 @@ bool Foam::surfaceWriter::empty() const
 
 Foam::label Foam::surfaceWriter::size() const
 {
-    const label value = surf_.get().faces().size();
+    const bool value =
+    (
+        useComponents_
+      ? surfComp_.faces().empty()
+      : surf_.get().faces().empty()
+    );
 
     return (parallel_ ? returnReduce(value, sumOp<label>()) : value);
 }
@@ -411,7 +432,14 @@ bool Foam::surfaceWriter::merge() const
 
     if (parallel_ && Pstream::parRun() && !upToDate_)
     {
-        changed = merged_.merge(surf_.get(), mergeDim_);
+        if (useComponents_)
+        {
+            changed = merged_.merge(surfComp_, mergeDim_);
+        }
+        else
+        {
+            changed = merged_.merge(surf_.get(), mergeDim_);
+        }
     }
     upToDate_ = true;
 
@@ -428,7 +456,14 @@ const Foam::meshedSurf& Foam::surfaceWriter::surface() const
         return merged_;
     }
 
-    return surf_.get();
+    if (useComponents_)
+    {
+        return surfComp_;
+    }
+    else
+    {
+        return surf_.get();
+    }
 }
 
 
diff --git a/src/surfMesh/writers/surfaceWriter.H b/src/surfMesh/writers/surfaceWriter.H
index 0686d333047237e0b5d0d808beda871cce7bf095..a2a7451e87f891aaf63ae9c31f9feda76d1e4c2b 100644
--- a/src/surfMesh/writers/surfaceWriter.H
+++ b/src/surfMesh/writers/surfaceWriter.H
@@ -98,17 +98,23 @@ class surfaceWriter
 {
 protected:
 
-   // Static data members
+   // Static Data Members
 
         //- Placeholder
         static const meshedSurf::emptySurface emptySurface_;
 
 
-    // Protected data
+    // Protected Data
 
-        //- Reference to the surface
+        //- Reference to a surface
         std::reference_wrapper<const meshedSurf> surf_;
 
+        //- Reference to raw surface components
+        meshedSurfRef surfComp_;
+
+        //- Use raw surface components instead of surface reference
+        bool useComponents_;
+
         //- The topology/surface is up-to-date?
         mutable bool upToDate_;
 
diff --git a/src/surfMesh/writers/vtk/vtkSurfaceWriter.C b/src/surfMesh/writers/vtk/vtkSurfaceWriter.C
index a259d8dc183508a3fb8250c5e0f693f92530400d..39deb3d4d5f6a2065487cf05241e4ee724670f1a 100644
--- a/src/surfMesh/writers/vtk/vtkSurfaceWriter.C
+++ b/src/surfMesh/writers/vtk/vtkSurfaceWriter.C
@@ -153,7 +153,9 @@ Foam::surfaceWriters::vtkWriter::vtkWriter
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
 Foam::surfaceWriters::vtkWriter::~vtkWriter()
-{}
+{
+    close();
+}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //