diff --git a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C
index a0a088c2c59e2b74cef0a2f2271835854675229d..a5bb6ce5832f068c844c459dab18863ba7d65264 100644
--- a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C
+++ b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C
@@ -159,7 +159,11 @@ bool Foam::noiseModel::read(const dictionary& dict)
     dict.readIfPresent("rhoRef", rhoRef_);
     dict.readIfPresent("N", nSamples_);
     customBounds_ = false;
-    if (dict.readIfPresent("fl", fLower_) || dict.readIfPresent("fu", fUpper_))
+    if (dict.readIfPresent("fl", fLower_))
+    {
+        customBounds_ = true;
+    }
+    if (dict.readIfPresent("fu", fUpper_))
     {
         customBounds_ = true;
     }
diff --git a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H
index 1db4efb6135d88cb5023fc96ab2c00c941394515..ee3a793545d5fdb629d45230a963320054e86496 100644
--- a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H
+++ b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H
@@ -123,7 +123,7 @@ protected:
         //- Upper frequency limit, default = 10kHz
         scalar fUpper_;
 
-        //- Flagto indicate that custom frequenct bounds are being used
+        //- Flag to indicate that custom frequenct bounds are being used
         bool customBounds_;
 
         //- Start time, default = 0s
diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C
index 21f56d273be2aee123943f2e73985aeb875f540e..1d0703d22489dac8c2b1564d2c84dc21b2355633 100644
--- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C
+++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C
@@ -504,10 +504,16 @@ void surfaceNoise::calculate()
 
         Info<< "Creating noise FFTs" << endl;
 
+        const scalarField freq1(noiseFFT::frequencies(nSamples_, deltaT_));
+
+        // Reset desired frequency range if outside actual frequency range
+        fLower_ = min(fLower_, max(freq1));
+        fUpper_ = min(fUpper_, max(freq1));
+
         // Storage for FFT data
         const label nLocalFace = pData.size();
-        const scalarField freq1(noiseFFT::frequencies(nSamples_, deltaT_));
-        const label nFFT = freq1.size()/fftWriteInterval_;
+        const label nFFT = ceil(freq1.size()/scalar(fftWriteInterval_));
+
         List<scalarField> surfPrmsf(nFFT);
         List<scalarField> surfPSDf(nFFT);
         forAll(surfPrmsf, freqI)
@@ -563,7 +569,7 @@ void surfaceNoise::calculate()
             // Store the frequency results in slot for face of surface
             forAll(surfPrmsf, i)
             {
-                label freqI = (i + 1)*fftWriteInterval_ - 1;
+                label freqI = i*fftWriteInterval_;
                 surfPrmsf[i][faceI] = Prmsf.y()[freqI];
                 surfPSDf[i][faceI] = PSDf.y()[freqI];
             }
@@ -588,14 +594,24 @@ void surfaceNoise::calculate()
         fileName outDir(baseFileDir()/typeName/fNameBase);
 
         const scalar deltaf = 1.0/(deltaT_*win.nSamples());
-        Info<< "Writing fft surface data" << endl;
+        Info<< "Writing fft surface data";
+        if (fftWriteInterval_ == 1)
+        {
+            Info<< endl;
+        }
+        else
+        {
+            Info<< " at every " << fftWriteInterval_ << " frequency points"
+                << endl;
+        }
+
         {
             // Determine frequency range of interest
             // Note: freqencies have fixed interval, and are in the range
-            //       0 to (n-1)*deltaf
-            label f0 = ceil(fLower_/deltaf);
-            label f1 = floor(fUpper_/deltaf);
-            label nFreq = f1 - f0 + 1;
+            //       0 to fftWriteInterval_*(n-1)*deltaf
+            label f0 = ceil(fLower_/deltaf/fftWriteInterval_);
+            label f1 = floor(fUpper_/deltaf/fftWriteInterval_);
+            label nFreq = f0 == f1 ? 0 : f1 - f0 + 1;
 
             scalarField PrmsfAve(nFreq, 0);
             scalarField PSDfAve(nFreq, 0);
@@ -603,9 +619,10 @@ void surfaceNoise::calculate()
 
             for (label i = f0; i <= f1; ++i)
             {
-                label freqI = (i + 1)*fftWriteInterval_ - 1;
+                label freqI = i*fftWriteInterval_;
                 fOut[i] = freq1[freqI];
                 const word gName = "fft";
+
                 PrmsfAve[i] = writeSurfaceData
                 (
                     fNameBase,