diff --git a/src/waveModels/waveModel/waveModel.C b/src/waveModels/waveModel/waveModel.C
index 1f86780e8863191705e7d42550f90f12b0aa5ce6..f0ab70fad28c1c1ef2451164511c83ef8612f0f9 100644
--- a/src/waveModels/waveModel/waveModel.C
+++ b/src/waveModels/waveModel/waveModel.C
@@ -111,6 +111,9 @@ void Foam::waveModel::initialiseGeometry()
         }
     }
 
+    // Set minimum z reference level
+    zMin0_ = gMin(zMin_);
+
     // Local paddle-to-face addressing
     faceToPaddle_.setSize(patch_.size(), -1);
     forAll(faceToPaddle_, facei)
@@ -162,18 +165,21 @@ void Foam::waveModel::setAlpha(const scalarField& level)
         const label paddlei = faceToPaddle_[facei];
         const scalar paddleCalc = level[paddlei];
 
-    	if (zMax_[facei] < paddleCalc)
+        const scalar zMin0 = zMin_[facei] - zMin0_;
+        const scalar zMax0 = zMax_[facei] - zMin0_;
+
+    	if (zMax0 < paddleCalc)
     	{
     	    alpha_[facei] = 1.0;
     	}
-    	else if (zMin_[facei] > paddleCalc)
+    	else if (zMin0 > paddleCalc)
     	{
     	    alpha_[facei] = 0.0;
     	}
     	else
     	{
-    	    scalar dz = paddleCalc - zMin_[facei];
-    	    alpha_[facei] = dz/zSpan_;
+    	    scalar dz = paddleCalc - zMin0;
+    	    alpha_[facei] = dz/(zMax0 - zMin0);
     	}
     }
 }
@@ -190,15 +196,15 @@ void Foam::waveModel::setPaddlePropeties
     const label paddlei = faceToPaddle_[facei];
     const scalar paddleCalc = level[paddlei];
     const scalar paddleHeight = min(paddleCalc, waterDepthRef_);
-    const scalar zMin = zMin_[facei];
-    const scalar zMax = zMax_[facei];
+    const scalar zMin = zMin_[facei] - zMin0_;
+    const scalar zMax = zMax_[facei] - zMin0_;
 
     fraction = 1;
     z = 0;
 
     if (zMax < paddleHeight)
     {
-        z = z_[facei];
+        z = z_[facei] - zMin0_;
     }
     else if (zMin > paddleCalc)
     {
@@ -211,8 +217,8 @@ void Foam::waveModel::setPaddlePropeties
             if ((zMax > paddleCalc) && (zMin < paddleCalc))
             {
                 scalar dz = paddleCalc - zMin;
-	            fraction = dz/zSpan_;
-                z = z_[facei];
+	            fraction = dz/(zMax - zMin);
+                z = z_[facei] - zMin0_;
             }
         }
 	    else
@@ -224,7 +230,7 @@ void Foam::waveModel::setPaddlePropeties
             else if ((zMax > paddleCalc) && (zMin < paddleCalc))
             {
                 scalar dz = paddleCalc - zMin;
-	            fraction = dz/zSpan_;
+	            fraction = dz/(zMax - zMin);
                 z = waterDepthRef_;
             }
         }
@@ -382,7 +388,7 @@ void Foam::waveModel::correct(const scalar t)
             {
                 const label paddlei = faceToPaddle_[facei];
 
-                if (zMin_[facei] < activeLevel[paddlei])
+                if (zMin_[facei] - zMin0_ < activeLevel[paddlei])
                 {
                     scalar UCorr =
                         (calculatedLevel[paddlei] - activeLevel[paddlei])
diff --git a/src/waveModels/waveModel/waveModel.H b/src/waveModels/waveModel/waveModel.H
index f7cea6c719d1b664c69ff06637043f70b627f0ba..36d48ddd8f7a4f3da06ef5f412f1d997d49e38ea 100644
--- a/src/waveModels/waveModel/waveModel.H
+++ b/src/waveModels/waveModel/waveModel.H
@@ -106,6 +106,9 @@ protected:
         //- Maximum z (point) height per patch face / [m]
         scalarField zMax_;
 
+        //- Minimum z reference level / [m]
+        scalar zMin0_;
+
         //- Reference water depth / [m]
         scalar waterDepthRef_;