diff --git a/src/functionObjects/utilities/writeObjects/writeObjects.C b/src/functionObjects/utilities/writeObjects/writeObjects.C
index cad42b801fdcd543001c11a26014e41082f754c5..0fdc9214c7a212e12a586f670b29af87652dd9ce 100644
--- a/src/functionObjects/utilities/writeObjects/writeObjects.C
+++ b/src/functionObjects/utilities/writeObjects/writeObjects.C
@@ -42,9 +42,24 @@ namespace functionObjects
         writeObjects,
         dictionary
     );
+
+    template<>
+    const char* Foam::NamedEnum
+    <
+        Foam::functionObjects::writeObjects::writeOption,
+        3
+    >::names[] =
+    {
+        "autoWrite",
+        "noWrite",
+        "anyWrite"
+    };
 }
 }
 
+const Foam::NamedEnum<Foam::functionObjects::writeObjects::writeOption, 3>
+    Foam::functionObjects::writeObjects::writeOptionNames;
+
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
@@ -63,7 +78,7 @@ Foam::functionObjects::writeObjects::writeObjects
             dict.lookupOrDefault("region", polyMesh::defaultRegion)
         )
     ),
-    exclusiveWriting_(false),
+    writeOption_(ANY_WRITE),
     objectNames_()
 {
     read(dict);
@@ -94,7 +109,14 @@ bool Foam::functionObjects::writeObjects::read(const dictionary& dict)
         dict.lookup("objects") >> objectNames_;
     }
 
-    dict.readIfPresent("exclusiveWriting", exclusiveWriting_);
+    if (dict.found("writeOption"))
+    {
+        writeOption_ = writeOptionNames.read(dict.lookup("writeOption"));
+    }
+    else
+    {
+        writeOption_ = ANY_WRITE;
+    }
 
     return true;
 }
@@ -140,15 +162,49 @@ bool Foam::functionObjects::writeObjects::write()
             obr_.lookupObject<regIOobject>(allNames[i])
         );
 
-        if (exclusiveWriting_)
+        switch(writeOption_)
         {
-            // Switch off automatic writing to prevent double write
-            obj.writeOpt() = IOobject::NO_WRITE;
+            case AUTO_WRITE:
+                if (obj.writeOpt() != IOobject::AUTO_WRITE)
+                {
+                    continue;
+                }
+                else
+                {
+                    break;
+                }
+
+            case NO_WRITE:
+                if (obj.writeOpt() != IOobject::NO_WRITE)
+                {
+                    continue;
+                }
+                else
+                {
+                    break;
+                }
+
+            case ANY_WRITE:
+                break;
+
+            default:
+                continue;
         }
 
-        Info<< "    writing object " << obj.name() << endl;
+        if
+        (
+            obj.writeOpt() == IOobject::AUTO_WRITE
+         && obr_.time().writeTime()
+        )
+        {
+            Info<< "    automatically written object " << obj.name() << endl;
+        }
+        else
+        {
+            Info<< "    writing object " << obj.name() << endl;
 
-        obj.write();
+            obj.write();
+        }
     }
 
     return true;
diff --git a/src/functionObjects/utilities/writeObjects/writeObjects.H b/src/functionObjects/utilities/writeObjects/writeObjects.H
index dbf395637863eb172c929f1bd7b7aa57a471eac9..40cb22f95abb82dbe1ab7976ad3ddc2d87df1911 100644
--- a/src/functionObjects/utilities/writeObjects/writeObjects.H
+++ b/src/functionObjects/utilities/writeObjects/writeObjects.H
@@ -28,11 +28,11 @@ Group
     grpUtilitiesFunctionObjects
 
 Description
-    Allows specification of different writing frequency of objects registered to
-    the database.
+    Allows specification of different writing frequency of objects registered
+    to the database.
 
     It has similar functionality as the main time database through the
-    writeControl setting:
+    \c writeControl setting:
       - timeStep
       - writeTime
       - adjustableRunTime
@@ -40,28 +40,33 @@ Description
       - clockTime
       - cpuTime
 
+    It also has the ability to write the selected objects that were defined
+    with the respective write mode for the requested \c writeOption, namely:
+      - \c autoWrite - objects set to write at output time
+      - \c noWrite   - objects set to not write by default
+      - \c anyWrite  - any option of the previous two
+
     Example of function object specification:
     \verbatim
     writeObjects1
     {
         type        writeObjects;
         libs        ("libutilityFunctionObjects.so");
-        exclusiveWriting     true;
         ...
         objects     (obj1 obj2);
+        writeOption anyWrite;
     }
     \endverbatim
 
 Usage
     \table
         Property     | Description             | Required    | Default value
-        type         | type name: writeObjects | yes |
+        type         | type name: writeObjects | yes         |
         objects      | objects to write        | yes         |
-        exclusiveWriting    | Takes over object writing | no | yes
+        writeOption  | only those with this write option | no   | any
     \endtable
 
-    \c exclusiveWriting disables automatic writing (i.e through database) of the
-    objects to avoid duplicate writing.
+    Note: Regular expressions can also be used in \c objects.
 
 See also
     Foam::functionObject
@@ -77,6 +82,7 @@ SourceFiles
 
 #include "functionObject.H"
 #include "wordReList.H"
+#include "NamedEnum.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -97,13 +103,30 @@ class writeObjects
 :
     public functionObject
 {
+public:
+
+    // Public data types
+
+        //- Re-enumeration defining the write options, based on the original
+        //  ones at IOobject::writeOption
+        enum writeOption
+        {
+            AUTO_WRITE,
+            NO_WRITE,
+            ANY_WRITE
+        };
+
+        static const NamedEnum<writeOption, 3> writeOptionNames;
+
+private:
+
     // Private data
 
-        //- Refererence to Db
+        //- Reference to Db
         const objectRegistry& obr_;
 
         //- Takes over the writing from Db
-        bool exclusiveWriting_;
+        writeOption writeOption_;
 
         //- Names of objects to control
         wordReList objectNames_;