diff --git a/aerodynamic_analysis/src/bwb/bwbDefaultStrategy.cpp b/aerodynamic_analysis/src/bwb/bwbDefaultStrategy.cpp
index 98b7052a278b53b3d74055e8b132daf3d03ea5a6..2d03ca0fcf1d086b1160b095d7517b92ce7219aa 100644
--- a/aerodynamic_analysis/src/bwb/bwbDefaultStrategy.cpp
+++ b/aerodynamic_analysis/src/bwb/bwbDefaultStrategy.cpp
@@ -232,7 +232,26 @@ void bwbDefaultStrategy::calculateWaveDragMason(waveDragMason *myWaveDragMason)
                                             = myWaveDragMason->calculateWaveDrag(currentPolarSet.cleanPolars.at(polarID).Points.at(pointID),
                                                                                 currentPolarSet.cleanPolars.at(polarID).MachNumber,
                                                                                 0, 0, currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).yStations,
-                                                                                currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).Cl_distr, true);
+                                                                                currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).Cl_distr);
+        }
+        //calibration of wing wave drag if calibration is active
+        if (myWaveDragMason->doWaveDragMasonCalibration && currentPolarSet.cleanPolars.at(polarID).PointsWing.back().CD_wave > 0) { // check if polar has wave drag
+            for (size_t pointID(0); pointID < currentPolarSet.cleanPolars.at(polarID).Points.size(); ++pointID) {
+                currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).CD_wave += myWaveDragMason->calculateWaveDragCorrectionByCalibration(
+                    currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).CD_wave, currentPolarSet.cleanPolars.at(polarID).Points.at(pointID),
+                    currentPolarSet.cleanPolars.at(polarID).MachNumber);
+            }
+        }
+        //correction of wing wave drag and summation to total drag
+        for (size_t pointID(0); pointID < currentPolarSet.cleanPolars.at(polarID).Points.size(); ++pointID) {
+            //wing
+            currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).CD_wave +=
+                myWaveDragMason->calculateWaveDragCorrectionByDragCounts(myWaveDragMason->waveDragCtCorrForCalibrationWing);
+            //check negative wave drag due to correction
+            if (currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).CD_wave < 0.) { // Check if wing wave drag is negative due to calibration; if so, set to zero
+                currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).CD_wave = 0.;
+            }
+            //calculate total wave drag
             currentPolarSet.cleanPolars.at(polarID).Points.at(pointID).CD_wave = currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).CD_wave;
         }
     }
diff --git a/aerodynamic_analysis/src/methods/waveDragMason.cpp b/aerodynamic_analysis/src/methods/waveDragMason.cpp
index f513b5116dcf542d2adda0918a90356b24be68e6..eabd9229117694abd4cf56d22110b979475f3bed 100644
--- a/aerodynamic_analysis/src/methods/waveDragMason.cpp
+++ b/aerodynamic_analysis/src/methods/waveDragMason.cpp
@@ -102,7 +102,7 @@ waveDragMason::waveDragMason(const std::shared_ptr<RuntimeIO>& rtIO, const waveD
 }
 
 double waveDragMason::calculateWaveDrag(const PolarPoint& aPolarPoint, const double aMachNumber, size_t liftingSurfaceIndex, const double chordWiseSweepPosition,
-                                        const std::vector<double>& spanStations, const std::vector<double>& Cl_distribution, const bool doCorrection) {
+                                        const std::vector<double>& spanStations, const std::vector<double>& Cl_distribution) {
     // consistency check
     if (spanStations.size() != Cl_distribution.size()) {
             stringstream errorMessage;
@@ -179,22 +179,14 @@ double waveDragMason::calculateWaveDrag(const PolarPoint& aPolarPoint, const dou
     }
     // double the drag to account for the whole wing
     C_DWaveTotal = 2. * std::accumulate(C_DWaveSegment.begin(), C_DWaveSegment.end(), 0.0) / liftingSurfaceRefArea;
-    if (doCorrection) {
-        C_DWaveTotal += calculateWaveDragCorrectionByCalibration(C_DWaveTotal, aPolarPoint, aMachNumber);
-    }
     return C_DWaveTotal;
 }
 
 double waveDragMason::calculateWaveDragCorrectionByCalibration(const double& waveDragBeforeCorrection, const PolarPoint& aPolarPoint, const double& aMachNumber) {
-    double totalWaveDragCorrection(0.);
     /* Drag calibration. First introduced in commit [4eab519c2] based on experimental data in [Lam2010], 23.06.2010. After several changes, 
        the current definition and values in config are from Risse, commit [2ec91580] on 02.08.2015. Especially for wave drag calibration, the values should be used 
        carefully, as they usually only fit to one specific airfoil family and, thus, k-factor. */    
-    totalWaveDragCorrection = CLFact * pow(aMachNumber * aPolarPoint.CL, CLExp);
-    if (aMachNumber >= 0.5) {
-        totalWaveDragCorrection = CLFact * pow(aMachNumber * aPolarPoint.CL, CLExp);
-    }
-    return totalWaveDragCorrection;
+    return CLFact * pow(aMachNumber * aPolarPoint.CL, CLExp);
 }
 
 double waveDragMason::calculateWaveDragCorrectionByDragCounts(const double& waveDragCtCorrForCalibration) {
diff --git a/aerodynamic_analysis/src/methods/waveDragMason.h b/aerodynamic_analysis/src/methods/waveDragMason.h
index 49d3ab638acfad8a2c2c115b8ff37223c84ff5b8..a5f886d635d16a4c73cc09973635b570e97e3391 100644
--- a/aerodynamic_analysis/src/methods/waveDragMason.h
+++ b/aerodynamic_analysis/src/methods/waveDragMason.h
@@ -78,10 +78,9 @@ class waveDragMason{
      *  \param liftingSurfaceIndex the index of the lifting surface, which gets calculated
      *  \param spanStations vector of span coordinates of the wing corresponding to the lift points
      *  \param Cl_distribution vector of lift coefficients corresponding to the span station coordinates
-     *  \param doCorrection switch do enable CL based calibraiton
      */
     double calculateWaveDrag(const PolarPoint& aPolarPoint, const double machNumber, size_t liftingSurfaceIndex, const double chordWiseSweepPosition,
-                                const std::vector<double>& spanStations, const std::vector<double>& Cl_distribution, const bool doCorrection);
+                                const std::vector<double>& spanStations, const std::vector<double>& Cl_distribution);
     /** \brief Function calculates the wave drag correction for a polar point using a clibration function
      *  \details this function should only be used for wing and not for stabilizer
      *  \param waveDragBeforeCorrection the value of the uncorrected wave drag point
diff --git a/aerodynamic_analysis/src/taw/tawDefaultStrategy.cpp b/aerodynamic_analysis/src/taw/tawDefaultStrategy.cpp
index 30863d8f9c3c12e124f170617610aa90bf0deb7f..319c179644f05286334a5cb9389d61c9effb8ae5 100644
--- a/aerodynamic_analysis/src/taw/tawDefaultStrategy.cpp
+++ b/aerodynamic_analysis/src/taw/tawDefaultStrategy.cpp
@@ -404,30 +404,43 @@ void tawDefaultStrategy::calculateWaveDragMason(waveDragMason *myWaveDragMason)
             sweepPosition = 0.5;
         }
         for (size_t pointID(0); pointID < currentPolarSet.cleanPolars.at(polarID).Points.size(); ++pointID) {
-            // wave drag wing
+            // wave drag wing (uncorrected; correction will be applied afterwards)
             currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).CD_wave
                                             = myWaveDragMason->calculateWaveDrag(currentPolarSet.cleanPolars.at(polarID).Points.at(pointID),
                                                                                 currentPolarSet.cleanPolars.at(polarID).MachNumber,
                                                                                 0, sweepPosition, currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).yStations,
-                                                                                currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).Cl_distr,
-                                                                                myWaveDragMason->doWaveDragMasonCalibration)
-                                            + myWaveDragMason->calculateWaveDragCorrectionByDragCounts(myWaveDragMason->waveDragCtCorrForCalibrationWing);
-            if (currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).CD_wave < 0.) { // Check if drag is negative due to calibration; if so, set to zero
-                currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).CD_wave = 0.;
-            }
-            // wave drag stabilizer
+                                                                                currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).Cl_distr);
+            // wave drag stabilizer (uncorrected; no calibration needed/assumed for stabilizer)
             currentPolarSet.cleanPolars.at(polarID).PointsStab.at(pointID).CD_wave
                                             = myWaveDragMason->calculateWaveDrag(currentPolarSet.cleanPolars.at(polarID).Points.at(pointID),
                                                                                 currentPolarSet.cleanPolars.at(polarID).MachNumber,
                                                                                 1, sweepPosition, currentPolarSet.cleanPolars.at(polarID).PointsStab.at(pointID).yStations,
-                                                                                currentPolarSet.cleanPolars.at(polarID).PointsStab.at(pointID).Cl_distr,
-                                                                                false)
-                                            + myWaveDragMason->calculateWaveDragCorrectionByDragCounts(myWaveDragMason->waveDragCtCorrForCalibrationStabilizer);
-            if (currentPolarSet.cleanPolars.at(polarID).PointsStab.at(pointID).CD_wave < 0.) { // Check if drag is negative due to calibration; if so, set to zero
+                                                                                currentPolarSet.cleanPolars.at(polarID).PointsStab.at(pointID).Cl_distr);
+        }
+        //calibration of wing wave drag if calibration is active
+        if (myWaveDragMason->doWaveDragMasonCalibration && currentPolarSet.cleanPolars.at(polarID).PointsWing.back().CD_wave > 0) { // check if polar has wave drag
+            for (size_t pointID(0); pointID < currentPolarSet.cleanPolars.at(polarID).Points.size(); ++pointID) {
+                currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).CD_wave += myWaveDragMason->calculateWaveDragCorrectionByCalibration(
+                    currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).CD_wave, currentPolarSet.cleanPolars.at(polarID).Points.at(pointID),
+                    currentPolarSet.cleanPolars.at(polarID).MachNumber);
+            }
+        }
+        //correction of wing and stabilizer wave drag and summation to total drag
+        for (size_t pointID(0); pointID < currentPolarSet.cleanPolars.at(polarID).Points.size(); ++pointID) {
+            //wing
+            currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).CD_wave +=
+                myWaveDragMason->calculateWaveDragCorrectionByDragCounts(myWaveDragMason->waveDragCtCorrForCalibrationWing);
+            //stabilizer
+            currentPolarSet.cleanPolars.at(polarID).PointsStab.at(pointID).CD_wave +=
+                myWaveDragMason->calculateWaveDragCorrectionByDragCounts(myWaveDragMason->waveDragCtCorrForCalibrationStabilizer);
+            //check negative wave drag due to correction
+            if (currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).CD_wave < 0.) { // Check if wing wave drag is negative due to calibration; if so, set to zero
+                currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).CD_wave = 0.;
+            }
+            if (currentPolarSet.cleanPolars.at(polarID).PointsStab.at(pointID).CD_wave < 0.) { // Check if stabilizer wave drag is negative due to calibration; if so, set to zero
                 currentPolarSet.cleanPolars.at(polarID).PointsStab.at(pointID).CD_wave = 0.;
             }
-
-            // total wave drag
+            //calculate total wave drag
             currentPolarSet.cleanPolars.at(polarID).Points.at(pointID).CD_wave = currentPolarSet.cleanPolars.at(polarID).PointsWing.at(pointID).CD_wave
                                                                                + currentPolarSet.cleanPolars.at(polarID).PointsStab.at(pointID).CD_wave;
         }