diff --git a/src/surfMesh/writers/abaqus/abaqusSurfaceWriterImpl.C b/src/surfMesh/writers/abaqus/abaqusSurfaceWriterImpl.C
index 5de351d28ee605a05fb878cdb768332752bac88c..1ca932b147e7fcc0972567388b85eb35fbf60780 100644
--- a/src/surfMesh/writers/abaqus/abaqusSurfaceWriterImpl.C
+++ b/src/surfMesh/writers/abaqus/abaqusSurfaceWriterImpl.C
@@ -118,9 +118,7 @@ Foam::fileName Foam::surfaceWriters::abaqusWriter::writeTemplate
 
 
     // Implicit geometry merge()
-    tmp<Field<Type>> tfield = mergeField(localValues);
-
-    adjustOutputField(fieldName, tfield.ref());
+    tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
 
     if (verbose_)
     {
diff --git a/src/surfMesh/writers/boundary/boundaryDataSurfaceWriter.C b/src/surfMesh/writers/boundary/boundaryDataSurfaceWriter.C
index 85c095f76642c1a66602903c7bf05e0a5853837d..fde30e2ebcc6a15e96ffa84279b74949d0d9d4a7 100644
--- a/src/surfMesh/writers/boundary/boundaryDataSurfaceWriter.C
+++ b/src/surfMesh/writers/boundary/boundaryDataSurfaceWriter.C
@@ -219,9 +219,7 @@ Foam::fileName Foam::surfaceWriters::boundaryDataWriter::writeTemplate
     const fileName outputFile(surfaceDir/timeName()/fieldName);
 
     // Implicit geometry merge()
-    tmp<Field<Type>> tfield = mergeField(localValues);
-
-    adjustOutputField(fieldName, tfield.ref());
+    tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
 
     if (verbose_)
     {
diff --git a/src/surfMesh/writers/common/surfaceWriter.C b/src/surfMesh/writers/common/surfaceWriter.C
index 2b73f957ef9e38471cb52d249110790a607ba4fa..382e9d0fd9b50158359fbad521ee2c9f55d04082 100644
--- a/src/surfMesh/writers/common/surfaceWriter.C
+++ b/src/surfMesh/writers/common/surfaceWriter.C
@@ -506,10 +506,10 @@ Foam::tmp<Foam::Field<Type>> Foam::surfaceWriter::mergeFieldTemplate
 
 
 template<class Type>
-void Foam::surfaceWriter::adjustOutputFieldTemplate
+Foam::tmp<Foam::Field<Type>> Foam::surfaceWriter::adjustFieldTemplate
 (
     const word& fieldName,
-    Field<Type>& fld
+    const tmp<Field<Type>>& tfield
 ) const
 {
     if (verbose_)
@@ -517,6 +517,8 @@ void Foam::surfaceWriter::adjustOutputFieldTemplate
         Info<< "Writing field " << fieldName;
     }
 
+    tmp<Field<Type>> tadjusted;
+
     // Output scaling for the variable, but not for integer types
     // which are typically ids etc.
     if (!std::is_integral<Type>::value)
@@ -544,7 +546,14 @@ void Foam::surfaceWriter::adjustOutputFieldTemplate
                 Info<< " [level " << refLevel << ']';
             }
 
-            fld -= refLevel;
+            if (!tadjusted)
+            {
+                // Steal or clone
+                tadjusted.reset(tfield.ptr());
+            }
+
+            // Remove offset level
+            tadjusted.ref() -= refLevel;
         }
 
         // Apply scaling
@@ -558,9 +567,19 @@ void Foam::surfaceWriter::adjustOutputFieldTemplate
             {
                 Info<< " [scaling " << value << ']';
             }
-            fld *= value;
+
+            if (!tadjusted)
+            {
+                // Steal or clone
+                tadjusted.reset(tfield.ptr());
+            }
+
+            // Apply scaling
+            tadjusted.ref() *= value;
         }
     }
+
+    return (tadjusted ? tadjusted : tfield);
 }
 
 
@@ -571,13 +590,14 @@ void Foam::surfaceWriter::adjustOutputFieldTemplate
         return mergeFieldTemplate(fld);                                        \
     }                                                                          \
                                                                                \
-    void ThisClass::adjustOutputField                                          \
+    Foam::tmp<Foam::Field<Type>>                                               \
+    ThisClass::adjustField                                                     \
     (                                                                          \
         const word& fieldName,                                                 \
-        Field<Type>& fld                                                       \
+        const tmp<Field<Type>>& tfield                                         \
     ) const                                                                    \
     {                                                                          \
-        adjustOutputFieldTemplate(fieldName, fld);                             \
+        return adjustFieldTemplate(fieldName, tfield);                         \
     }
 
 defineSurfaceFieldMethods(Foam::surfaceWriter, Foam::label);
diff --git a/src/surfMesh/writers/common/surfaceWriter.H b/src/surfMesh/writers/common/surfaceWriter.H
index 4d22644f1fc429a83c21f3cda53ec644897ad694..bb9817e2d2db378c456efbbb14121a8aa94b881c 100644
--- a/src/surfMesh/writers/common/surfaceWriter.H
+++ b/src/surfMesh/writers/common/surfaceWriter.H
@@ -195,17 +195,22 @@ protected:
 
         //- Apply refLevel and fieldScaling
         template<class Type>
-        void adjustOutputFieldTemplate
+        tmp<Field<Type>> adjustFieldTemplate
         (
             const word& fieldName,
-            Field<Type>& fld
+            const tmp<Field<Type>>& tfield
         ) const;
 
 #undef  declareSurfaceFieldMethod
 #define declareSurfaceFieldMethods(Type)                                      \
                                                                               \
         tmp<Field<Type>> mergeField(const Field<Type>& fld) const;            \
-        void adjustOutputField(const word& fieldName, Field<Type>& fld) const;
+                                                                              \
+        tmp<Field<Type>> adjustField                                          \
+        (                                                                     \
+            const word& fieldName,                                            \
+            const tmp<Field<Type>>& tfield                                    \
+        ) const;
 
         declareSurfaceFieldMethods(label);
         declareSurfaceFieldMethods(scalar);
diff --git a/src/surfMesh/writers/ensight/ensightSurfaceWriterCollated.C b/src/surfMesh/writers/ensight/ensightSurfaceWriterCollated.C
index 473676df975eacee1374719bf8a7317288f0c18b..179cfbdb8e09171468ae6000a69c83cd6ac97dc2 100644
--- a/src/surfMesh/writers/ensight/ensightSurfaceWriterCollated.C
+++ b/src/surfMesh/writers/ensight/ensightSurfaceWriterCollated.C
@@ -87,9 +87,7 @@ Foam::fileName Foam::surfaceWriters::ensightWriter::writeCollated
     }
 
     // Implicit geometry merge()
-    tmp<Field<Type>> tfield = mergeField(localValues);
-
-    adjustOutputField(fieldName, tfield.ref());
+    tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
 
     if (verbose_)
     {
diff --git a/src/surfMesh/writers/ensight/ensightSurfaceWriterUncollated.C b/src/surfMesh/writers/ensight/ensightSurfaceWriterUncollated.C
index 8d334dea37a2ad3b927f9976cfa8c4a9c7ec5501..6519f49205c69b9127bdf8d3646de15ddc562f0e 100644
--- a/src/surfMesh/writers/ensight/ensightSurfaceWriterUncollated.C
+++ b/src/surfMesh/writers/ensight/ensightSurfaceWriterUncollated.C
@@ -152,9 +152,7 @@ Foam::fileName Foam::surfaceWriters::ensightWriter::writeUncollated
     }
 
     // Implicit geometry merge()
-    tmp<Field<Type>> tfield = mergeField(localValues);
-
-    adjustOutputField(fieldName, tfield.ref());
+    tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
 
     if (verbose_)
     {
diff --git a/src/surfMesh/writers/foam/foamSurfaceWriter.C b/src/surfMesh/writers/foam/foamSurfaceWriter.C
index 693df2f839ff5b1b6808f01ab13f57ca0a0a0261..0006c67eb85643c960ef22b726c59a755c2fe161 100644
--- a/src/surfMesh/writers/foam/foamSurfaceWriter.C
+++ b/src/surfMesh/writers/foam/foamSurfaceWriter.C
@@ -194,9 +194,7 @@ Foam::fileName Foam::surfaceWriters::foamWriter::writeTemplate
 
 
     // Implicit geometry merge()
-    tmp<Field<Type>> tfield = mergeField(localValues);
-
-    adjustOutputField(fieldName, tfield.ref());
+    tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
 
     if (verbose_)
     {
diff --git a/src/surfMesh/writers/nastran/nastranSurfaceWriterImpl.C b/src/surfMesh/writers/nastran/nastranSurfaceWriterImpl.C
index 9dcb111d5b5dbbce89bbb74cc887853c70e31650..1653bdbcfd310b218fa711d424213deea897fd41 100644
--- a/src/surfMesh/writers/nastran/nastranSurfaceWriterImpl.C
+++ b/src/surfMesh/writers/nastran/nastranSurfaceWriterImpl.C
@@ -224,9 +224,7 @@ Foam::fileName Foam::surfaceWriters::nastranWriter::writeTemplate
     outputFile.ext("bdf");
 
     // Implicit geometry merge()
-    tmp<Field<Type>> tfield = mergeField(localValues);
-
-    adjustOutputField(fieldName, tfield.ref());
+    tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
 
     if (verbose_)
     {
diff --git a/src/surfMesh/writers/raw/rawSurfaceWriterImpl.C b/src/surfMesh/writers/raw/rawSurfaceWriterImpl.C
index d4a089bd64937cc2247fb175342806842ae3a91b..fec67c262f5845537cbf8439538cc465c3974681 100644
--- a/src/surfMesh/writers/raw/rawSurfaceWriterImpl.C
+++ b/src/surfMesh/writers/raw/rawSurfaceWriterImpl.C
@@ -107,9 +107,7 @@ Foam::fileName Foam::surfaceWriters::rawWriter::writeTemplate
 
 
     // Implicit geometry merge()
-    tmp<Field<Type>> tfield = mergeField(localValues);
-
-    adjustOutputField(fieldName, tfield.ref());
+    tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
 
     if (verbose_)
     {
diff --git a/src/surfMesh/writers/starcd/starcdSurfaceWriter.C b/src/surfMesh/writers/starcd/starcdSurfaceWriter.C
index cc1797fc38d74f34debb7c3abfb83465e9f08ac7..4817d1f4f1d69d0d6b4667b990c7746033b66c4d 100644
--- a/src/surfMesh/writers/starcd/starcdSurfaceWriter.C
+++ b/src/surfMesh/writers/starcd/starcdSurfaceWriter.C
@@ -207,9 +207,7 @@ Foam::fileName Foam::surfaceWriters::starcdWriter::writeTemplate
     outputFile.ext("usr");
 
     // Implicit geometry merge()
-    tmp<Field<Type>> tfield = mergeField(localValues);
-
-    adjustOutputField(fieldName, tfield.ref());
+    tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
 
     if (verbose_)
     {
diff --git a/src/surfMesh/writers/vtk/vtkSurfaceWriter.C b/src/surfMesh/writers/vtk/vtkSurfaceWriter.C
index 8fc7b438651b485eac1de00844263c254e556336..862a616967bae1bf4ae9b69856d0769e8983c44d 100644
--- a/src/surfMesh/writers/vtk/vtkSurfaceWriter.C
+++ b/src/surfMesh/writers/vtk/vtkSurfaceWriter.C
@@ -286,9 +286,7 @@ Foam::fileName Foam::surfaceWriters::vtkWriter::writeTemplate
     fileName outputFile = this->write();
 
     // Implicit geometry merge()
-    tmp<Field<Type>> tfield = mergeField(localValues);
-
-    adjustOutputField(fieldName, tfield.ref());
+    tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
 
     if (verbose_)
     {
diff --git a/src/surfMesh/writers/x3d/x3dSurfaceWriter.C b/src/surfMesh/writers/x3d/x3dSurfaceWriter.C
index a97f94e9240843e4f5cc0a41ab9740fc9978299f..25b657f8a0e848fb4bb04453d9fe7e76cad3d850 100644
--- a/src/surfMesh/writers/x3d/x3dSurfaceWriter.C
+++ b/src/surfMesh/writers/x3d/x3dSurfaceWriter.C
@@ -270,9 +270,7 @@ Foam::fileName Foam::surfaceWriters::x3dWriter::writeTemplate
     outputFile.ext("x3d");
 
     // Implicit geometry merge()
-    tmp<Field<Type>> tfield = mergeField(localValues);
-
-    adjustOutputField(fieldName, tfield.ref());
+    tmp<Field<Type>> tfield = adjustField(fieldName, mergeField(localValues));
 
     if (verbose_)
     {