diff --git a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C
index a5bb6ce5832f068c844c459dab18863ba7d65264..b98f00c8bda13ec2afc036a9bb0e2ae7c9a24849 100644
--- a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C
+++ b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C
@@ -112,10 +112,18 @@ Foam::label Foam::noiseModel::findStartTimeIndex
 }
 
 
-Foam::fileName Foam::noiseModel::baseFileDir() const
+Foam::fileName Foam::noiseModel::baseFileDir(const label dataseti) const
 {
     fileName baseDir("$FOAM_CASE");
-    baseDir = baseDir.expand()/"postProcessing"/"noise";
+    word datasetName("input" + Foam::name(dataseti));
+    baseDir =
+        baseDir.expand()
+       /"postProcessing"
+       /"noise"
+       /outputPrefix_
+       /type()
+       /datasetName;
+
     return baseDir;
 }
 
@@ -133,6 +141,7 @@ Foam::noiseModel::noiseModel(const dictionary& dict, const bool readFields)
     startTime_(0),
     windowModelPtr_(),
     graphFormat_("raw"),
+    outputPrefix_(),
     writePrmsf_(true),
     writeSPL_(true),
     writePSD_(true),
@@ -169,6 +178,7 @@ bool Foam::noiseModel::read(const dictionary& dict)
     }
     dict.readIfPresent("startTime", startTime_);
     dict.readIfPresent("graphFormat", graphFormat_);
+    dict.readIfPresent("outputPrefix", outputPrefix_);
 
     // Check number of samples  - must be a power of 2 for our FFT
     bool powerOf2 = ((nSamples_ != 0) && !(nSamples_ & (nSamples_ - 1)));
diff --git a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H
index ee3a793545d5fdb629d45230a963320054e86496..7b625096cea8b742e2a28b5b6d5539c60ea0e9a7 100644
--- a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H
+++ b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H
@@ -36,6 +36,8 @@ Description
     fu              25;
     startTime       0;
 
+    outputPrefix    "test1";
+
     // Optional write options dictionary
     writeOptions
     {
@@ -49,18 +51,19 @@ Description
 
     where
     \table
-        Property    | Description                   | Required  | Default value
-        rhoRef      | Reference density             | no        | 1
-        N           | Number of samples in sampling window | no | 65536 (2^16)
-        fl          | Lower frequency bounds        | no        | 25
-        fu          | Upper frequency bounds        | no        | 10000
-        startTime   | Start time                    | no        | 0
-        graphFormat | Graph format                  | no        | raw
-        writePrmsf  | Write Prmsf data              | no        | yes
-        writeSPL    | Write SPL data                | no        | yes
-        writePSD    | Write PSD data                | no        | yes
-        writePSDf   | Write PSDf data               | no        | yes
-        writeOctaves| Write octaves data            | no        | yes
+        Property     | Description                   | Required  | Default value
+        rhoRef       | Reference density             | no        | 1
+        N            | Number of samples in sampling window | no | 65536 (2^16)
+        fl           | Lower frequency bounds        | no        | 25
+        fu           | Upper frequency bounds        | no        | 10000
+        startTime    | Start time                    | no        | 0
+        outputPrefix | Prefix applied to output files| no        | ''
+        graphFormat  | Graph format                  | no        | raw
+        writePrmsf   | Write Prmsf data              | no        | yes
+        writeSPL     | Write SPL data                | no        | yes
+        writePSD     | Write PSD data                | no        | yes
+        writePSDf    | Write PSDf data               | no        | yes
+        writeOctaves | Write octaves data            | no        | yes
     \endtable
 
 Note
@@ -138,6 +141,9 @@ protected:
 
         // Write options
 
+            //- Output  file prefix, default = ''
+            fileName outputPrefix_;
+
             //- Write Prmsf; default = yes
             bool writePrmsf_;
 
@@ -178,7 +184,7 @@ protected:
         ) const;
 
         //- Return the base output directory
-        fileName baseFileDir() const;
+        fileName baseFileDir(const label dataseti) const;
 
 
 public:
diff --git a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C
index ddbb419fce0f1fff7727455392e7eeaec4c9de77..decddc9609163ff1e4c8e4d482283146832b37f8 100644
--- a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C
+++ b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C
@@ -66,7 +66,11 @@ void pointNoise::filterTimeData
 }
 
 
-void pointNoise::processData(const Function1Types::CSV<scalar>& data)
+void pointNoise::processData
+(
+    const label dataseti,
+    const Function1Types::CSV<scalar>& data
+)
 {
     Info<< "Reading data file " << data.fName() << endl;
 
@@ -86,7 +90,7 @@ void pointNoise::processData(const Function1Types::CSV<scalar>& data)
     windowModelPtr_->validate(t.size());
     const windowModel& win = windowModelPtr_();
     const scalar deltaf = 1.0/(deltaT*win.nSamples());
-    fileName outDir(baseFileDir()/typeName/fNameBase);
+    fileName outDir(baseFileDir(dataseti)/fNameBase);
 
     // Create the fft
     noiseFFT nfft(deltaT, p);
@@ -200,6 +204,25 @@ void pointNoise::processData(const Function1Types::CSV<scalar>& data)
 }
 
 
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+pointNoise::pointNoise(const dictionary& dict, const bool readFields)
+:
+    noiseModel(dict, false)
+{
+    if (readFields)
+    {
+        read(dict);
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+pointNoise::~pointNoise()
+{}
+
+
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 void pointNoise::calculate()
@@ -211,9 +234,9 @@ void pointNoise::calculate()
     }
 
 
-    forAll(inputFileNames_, i)
+    forAll(inputFileNames_, filei)
     {
-        fileName fName = inputFileNames_[i];
+        fileName fName = inputFileNames_[filei];
         fName.expand();
         if (!fName.isAbsolute())
         {
@@ -221,30 +244,11 @@ void pointNoise::calculate()
         }
         fName.expand();
         Function1Types::CSV<scalar> data("pressure", dict_, "Data", fName);
-        processData(data);
+        processData(filei, data);
     }
 }
 
 
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-pointNoise::pointNoise(const dictionary& dict, const bool readFields)
-:
-    noiseModel(dict, false)
-{
-    if (readFields)
-    {
-        read(dict);
-    }
-}
-
-
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-pointNoise::~pointNoise()
-{}
-
-
 bool pointNoise::read(const dictionary& dict)
 {
     if (noiseModel::read(dict))
diff --git a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.H b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.H
index 374678487f5089f83ec31bcdd7009a5372cf77de..693418939a8bacea33782a1726705dc9aa5504df 100644
--- a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.H
+++ b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.H
@@ -117,7 +117,11 @@ protected:
         ) const;
 
         //- Process the CSV data
-        void processData(const Function1Types::CSV<scalar>& data);
+        void processData
+        (
+            const label dataseti,
+            const Function1Types::CSV<scalar>& data
+        );
 
 
 public:
diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C
index c1fefd3d1cc21802f81ea5b5da648d7ce1b0d69e..6cea3fc855cd588220d0b95950208b54a8820d77 100644
--- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C
+++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C
@@ -226,8 +226,8 @@ void surfaceNoise::readSurfaceData
 
 Foam::scalar surfaceNoise::writeSurfaceData
 (
+    const fileName& outDirBase,
     const word& fName,
-    const word& groupName,
     const word& title,
     const scalar freq,
     const scalarField& data,
@@ -237,7 +237,7 @@ Foam::scalar surfaceNoise::writeSurfaceData
 {
     Info<< "    processing " << title << " for frequency " << freq << endl;
 
-    fileName outDir(baseFileDir()/groupName/Foam::name(freq));
+    const fileName outDir(outDirBase/Foam::name(freq));
 
     if (Pstream::parRun())
     {
@@ -463,9 +463,9 @@ bool surfaceNoise::read(const dictionary& dict)
 
 void surfaceNoise::calculate()
 {
-    forAll(inputFileNames_, i)
+    forAll(inputFileNames_, filei)
     {
-        fileName fName = inputFileNames_[i];
+        fileName fName = inputFileNames_[filei];
         fName.expand();
 
         if (!fName.isAbsolute())
@@ -591,7 +591,7 @@ void surfaceNoise::calculate()
         const word& fNameBase = fName.name(true);
 
         // Output directory for graphs
-        fileName outDir(baseFileDir()/typeName/fNameBase);
+        fileName outDirBase(baseFileDir(filei)/fNameBase);
 
         const scalar deltaf = 1.0/(deltaT_*win.nSamples());
         Info<< "Writing fft surface data";
@@ -606,6 +606,8 @@ void surfaceNoise::calculate()
         }
 
         {
+            fileName outDir(outDirBase/"fft");
+
             // Determine frequency range of interest
             // Note: freqencies have fixed interval, and are in the range
             //       0 to fftWriteInterval_*(n-1)*deltaf
@@ -629,12 +631,12 @@ void surfaceNoise::calculate()
                 {
                     label freqI = (i + f0)*fftWriteInterval_;
                     fOut[i] = freq1[freqI];
-                    const word gName = "fft";
+
 
                     PrmsfAve[i] = writeSurfaceData
                     (
+                        outDir,
                         fNameBase,
-                        gName,
                         "Prmsf",
                         freq1[freqI],
                         surfPrmsf[i + f0],
@@ -644,8 +646,8 @@ void surfaceNoise::calculate()
 
                     PSDfAve[i] = writeSurfaceData
                     (
+                        outDir,
                         fNameBase,
-                        gName,
                         "PSDf",
                         freq1[freqI],
                         surfPSDf[i + f0],
@@ -654,8 +656,8 @@ void surfaceNoise::calculate()
                     );
                     writeSurfaceData
                     (
+                        outDir,
                         fNameBase,
-                        gName,
                         "PSD",
                         freq1[freqI],
                         noiseFFT::PSD(surfPSDf[i + f0]),
@@ -664,8 +666,8 @@ void surfaceNoise::calculate()
                     );
                     writeSurfaceData
                     (
+                        outDir,
                         fNameBase,
-                        gName,
                         "SPL",
                         freq1[freqI],
                         noiseFFT::SPL(surfPSDf[i + f0]*deltaf),
@@ -719,16 +721,17 @@ void surfaceNoise::calculate()
 
         Info<< "Writing one-third octave surface data" << endl;
         {
+            fileName outDir(outDirBase/"oneThirdOctave");
+
             scalarField PSDfAve(surfPSD13f.size(), 0);
             scalarField Prms13f2Ave(surfPSD13f.size(), 0);
 
             forAll(surfPSD13f, i)
             {
-                const word gName = "oneThirdOctave";
                 PSDfAve[i] = writeSurfaceData
                 (
+                    outDir,
                     fNameBase,
-                    gName,
                     "PSD13f",
                     octave13FreqCentre[i],
                     surfPSD13f[i],
@@ -737,8 +740,8 @@ void surfaceNoise::calculate()
                 );
                 writeSurfaceData
                 (
+                    outDir,
                     fNameBase,
-                    gName,
                     "PSD13",
                     octave13FreqCentre[i],
                     noiseFFT::PSD(surfPSD13f[i]),
@@ -747,8 +750,8 @@ void surfaceNoise::calculate()
                 );
                 writeSurfaceData
                 (
+                    outDir,
                     fNameBase,
-                    gName,
                     "SPL13",
                     octave13FreqCentre[i],
                     noiseFFT::SPL(surfPrms13f2[i]),
diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H
index b513af162fb77c87cb13edd867ccc1ea2188003b..6450881d76f4006fc300983312d4de123126552c 100644
--- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H
+++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H
@@ -183,8 +183,8 @@ protected:
         //  Returns the area average value
         scalar writeSurfaceData
         (
+            const fileName& outDirBase,
             const word& fName,
-            const word& groupName,
             const word& title,
             const scalar freq,
             const scalarField& data,