diff --git a/aerodynamic_analysis/src/bwb/bwbCalculatePolarConfig.cpp b/aerodynamic_analysis/src/bwb/bwbCalculatePolarConfig.cpp
index 216fa992ddf9957d10d2a652c654434cc5ee8bed..16bc85617ff595bc1f94f22ed7d9b529a174a4ae 100644
--- a/aerodynamic_analysis/src/bwb/bwbCalculatePolarConfig.cpp
+++ b/aerodynamic_analysis/src/bwb/bwbCalculatePolarConfig.cpp
@@ -114,7 +114,7 @@ bwbCalculatePolarConfig::bwbCalculatePolarConfig(const node& config)
         myRuntimeInfo->info << "set flight conditions from config xml" << endl;
         size_t numberFlightConditions(config.getVector(("program_settings/FlightConditions/FlightCondition"), 2).size());
         for (size_t i(0); i < numberFlightConditions; i++) {
-            readflightConditions(config, i);
+            readFlightConditions(config, i);
         }
     } else if (setFlightConditionsMode.value() == "mode_1") {
         myRuntimeInfo->info << "Hab vergessen was hier rein sollte" << endl;
@@ -122,7 +122,7 @@ bwbCalculatePolarConfig::bwbCalculatePolarConfig(const node& config)
     CGPositions = {"design", "forward", "aft"};
 }
 
-void bwbCalculatePolarConfig::readflightConditions(const node& config, size_t ID) {
+void bwbCalculatePolarConfig::readFlightConditions(const node& config, size_t ID) {
     EndnodeReadOnly flightConditionExtrapolationMargin(EndnodeReadOnly<double>("program_settings/FlightConditions/FlightCondition@" + num2Str(ID) + "/extrapolation_margin"));
     EndnodeReadOnly flightConditionAltitude(EndnodeReadOnly<double>("program_settings/FlightConditions/FlightCondition@" + num2Str(ID) + "/Altitude"));
     EndnodeReadOnly flightConditionMach(EndnodeReadOnly<double>("program_settings/FlightConditions/FlightCondition@" + num2Str(ID) + "/Mach"));
diff --git a/aerodynamic_analysis/src/bwb/bwbCalculatePolarConfig.h b/aerodynamic_analysis/src/bwb/bwbCalculatePolarConfig.h
index 1f9983ca1e7f1dbeb1ba161c3d3ccfe0d7b6963e..b1186c45792016c41aab196ea53166cbf197e963 100644
--- a/aerodynamic_analysis/src/bwb/bwbCalculatePolarConfig.h
+++ b/aerodynamic_analysis/src/bwb/bwbCalculatePolarConfig.h
@@ -82,7 +82,6 @@ class bwbCalculatePolarConfig{
     EndnodeReadOnly<double> deltaTotalDragHL;
     EndnodeReadOnly<double> factorDragHL;
 
-    void readflightConditions(const node& config, size_t ID);
     explicit bwbCalculatePolarConfig(const node& config);
     virtual ~bwbCalculatePolarConfig() {}
     // explicit calculatePolarSettings(const node& configXML);
@@ -130,9 +129,10 @@ class bwbCalculatePolarConfig{
      */
     void readPolarSettings(const node& polarNode);
     /** \brief Function reads flight condition settings from configuration XML and stores them in class variables
-     *  \param &flightConditionNode aixml node that contains flight condition information from corresponding XML file
+     *  \param &config aixml node that contains the config root
+     *  \param ID an index value of the current flight condition
      */
-    void readFlightConditions(const node& flightConditionNode);
+    void readFlightConditions(const node& config, size_t ID);
     /** \brief Function reads viscous drag settings from configuration XML and stores them in class variables
      *  \param &viscousDragNode aixml node that contains flight condition information from corresponding XML file
      */
diff --git a/aerodynamic_analysis/src/bwb/bwbDefaultStrategy.cpp b/aerodynamic_analysis/src/bwb/bwbDefaultStrategy.cpp
index 2d03ca0fcf1d086b1160b095d7517b92ce7219aa..fee01261d1318389f580371963dd4583a8c387de 100644
--- a/aerodynamic_analysis/src/bwb/bwbDefaultStrategy.cpp
+++ b/aerodynamic_analysis/src/bwb/bwbDefaultStrategy.cpp
@@ -123,18 +123,28 @@ void bwbDefaultStrategy::initializeLiLiPolar(LiLiPolarInitialization *myLiLiPola
     myLiLiPolarInit->factorDragCleanPolar = config_->factorIndDragCleanPolar.value();
     myLiLiPolarInit->bestCruiseCL = data_->bestCruiseCL.value();
     myLiLiPolarInit->initialMachCruise = data_->initialCruiseMachNumber;
-    for (size_t flightConditionID(0); flightConditionID < config_->flightConditions.size(); ++flightConditionID) {
-        flightCondition* aLiLiFlightCondition = new flightCondition;
-        aLiLiFlightCondition->Mach = config_->flightConditions.at(flightConditionID).Mach;
-        aLiLiFlightCondition->Altitude = config_->flightConditions.at(flightConditionID).Altitude;
-        aLiLiFlightCondition->extrapolationMargin = config_->flightConditions.at(flightConditionID).extrapolationMargin;
-        aLiLiFlightCondition->allowGridChange = config_->flightConditions.at(flightConditionID).allowGridChange;
-        myLiLiPolarInit->flightConditions.push_back(*aLiLiFlightCondition);
-        if (accuracyCheck(aLiLiFlightCondition->Mach, data_->initialCruiseMachNumber, ACCURACY_HIGH)) {
-            myLiLiPolarInit->cruiseMachID = flightConditionID;
-        }
-        delete aLiLiFlightCondition;
+    myLiLiPolarInit->flightConditions = config_->flightConditions;
+    std::vector<flightCondition>::iterator theCruiseFlightConditionIterator(std::find_if(myLiLiPolarInit->flightConditions.begin(), myLiLiPolarInit->flightConditions.end(),
+                                                [myLiLiPolarInit](const flightCondition& aFlightCondition) {
+                                                    return accuracyCheck(aFlightCondition.Mach, myLiLiPolarInit->initialMachCruise, ACCURACY_HIGH);
+                                                }));
+    if (theCruiseFlightConditionIterator == myLiLiPolarInit->flightConditions.end()) { //Cruise flight condition not yet available
+        flightCondition* theCruiseFlightCondition = new flightCondition;
+        theCruiseFlightCondition->Mach = data_->initialCruiseMachNumber;
+        theCruiseFlightCondition->Altitude = myLiLiPolarInit->flightConditions.back().Altitude;
+        theCruiseFlightCondition->extrapolationMargin = myLiLiPolarInit->flightConditions.back().extrapolationMargin;
+        theCruiseFlightCondition->allowGridChange = myLiLiPolarInit->flightConditions.back().allowGridChange;
+        theCruiseFlightConditionIterator = std::find_if(myLiLiPolarInit->flightConditions.begin(), myLiLiPolarInit->flightConditions.end(),
+                                                                [myLiLiPolarInit](const flightCondition& aFlightCondition) {
+                                                                        return myLiLiPolarInit->initialMachCruise <= aFlightCondition.Mach;
+                                                                    });
+        theCruiseFlightConditionIterator = (myLiLiPolarInit->flightConditions).insert(theCruiseFlightConditionIterator, *theCruiseFlightCondition);
+        std::stringstream warnMessage;
+        warnMessage << "Initial Cruise Mach number of Ma = " << myLiLiPolarInit->initialMachCruise << " is not available in flight conditions given in config file. ";
+        warnMessage << "Inserted flight condition for Ma = " << myLiLiPolarInit->initialMachCruise << " automatically.";
+        myRuntimeInfo->warn << warnMessage.str() << std::endl;
     }
+    myLiLiPolarInit->cruiseMachID = static_cast<int>(theCruiseFlightConditionIterator - myLiLiPolarInit->flightConditions.begin());
     myLiLiPolarInit->liftingSurfaces = liftingSurfaces;
 }
 
@@ -177,7 +187,7 @@ void bwbDefaultStrategy::initializeWaveDragMason(waveDragInitialization *myWaveD
 }
 
 void bwbDefaultStrategy::getPolarDataFromLiftingLine(const liftingLinePolar& myLiftingLinePolar) {
-    for (size_t machID(0); machID < config_->flightConditions.size(); ++machID) {
+    for (size_t machID(0); machID < myLiftingLinePolar.theCleanPolars.size(); ++machID) {
         tawDefaultPolar aCleanPolar;
         aCleanPolar.extrapolationMargin = myLiftingLinePolar.theCleanPolars.at(machID).extrapolationMargin;
         aCleanPolar.allowGridChange = myLiftingLinePolar.theCleanPolars.at(machID).allowGridChange;
diff --git a/aerodynamic_analysis/src/laminarTAW/laminarTAWConfig.cpp b/aerodynamic_analysis/src/laminarTAW/laminarTAWConfig.cpp
index 8c55441ec18d31a8f7b3415ab9bd74a8505654ab..747e0df3cbeb1618100ee3b4a86683f510d1037d 100644
--- a/aerodynamic_analysis/src/laminarTAW/laminarTAWConfig.cpp
+++ b/aerodynamic_analysis/src/laminarTAW/laminarTAWConfig.cpp
@@ -135,7 +135,7 @@ laminarTAWConfig::laminarTAWConfig(const node& config)
         myRuntimeInfo->info << "set flight conditions from config xml" << endl;
         size_t numberFlightConditions(config.getVector(("program_settings/FlightConditions/FlightCondition"), 2).size());
         for (size_t i(0); i < numberFlightConditions; i++) {
-            readflightConditions(config, i);
+            readFlightConditions(config, i);
         }
     } else if (setFlightConditionsMode.value() == "mode_1") {
         myRuntimeInfo->info << "Hab vergessen was hier rein sollte" << endl;
@@ -143,7 +143,7 @@ laminarTAWConfig::laminarTAWConfig(const node& config)
     this->initializeTrimSettings();
 }
 
-void laminarTAWConfig::readflightConditions(const node& config, size_t ID) {
+void laminarTAWConfig::readFlightConditions(const node& config, size_t ID) {
     EndnodeReadOnly flightConditionAllowExtrapolation(EndnodeReadOnly<std::string>("program_settings/FlightConditions/FlightCondition@" + num2Str(ID) + "/AllowExtrapolation"));
     EndnodeReadOnly flightConditionAltitude(EndnodeReadOnly<double>("program_settings/FlightConditions/FlightCondition@" + num2Str(ID) + "/Altitude"));
     EndnodeReadOnly flightConditionMach(EndnodeReadOnly<double>("program_settings/FlightConditions/FlightCondition@" + num2Str(ID) + "/Mach"));
diff --git a/aerodynamic_analysis/src/laminarTAW/laminarTAWConfig.h b/aerodynamic_analysis/src/laminarTAW/laminarTAWConfig.h
index 790883e8f312d6ff1d812825b5ac2125feb02e4a..8296ed256d6ad8ee848b9731512ad19252f318b8 100644
--- a/aerodynamic_analysis/src/laminarTAW/laminarTAWConfig.h
+++ b/aerodynamic_analysis/src/laminarTAW/laminarTAWConfig.h
@@ -88,7 +88,7 @@ class laminarTAWConfig{
     // semi empirical high lift adaptions
     EndnodeReadOnly<double> deltaTotalDragHL;
     EndnodeReadOnly<double> factorDragHL;
-    void readflightConditions(const node& config, size_t ID);
+
     void initializeTrimSettings();
 
     explicit laminarTAWConfig(const node& config);
@@ -130,9 +130,10 @@ class laminarTAWConfig{
      */
     void readPolarSettings(const node& polarNode);
     /** \brief Function reads flight condition settings from configuration XML and stores them in class variables
-     *  \param &flightConditionNode aixml node that contains flight condition information from corresponding XML file
+     *  \param &config aixml node that contains the config root
+     *  \param ID an index value of the current flight condition
      */
-    void readFlightConditions(const node& flightConditionNode);
+    void readFlightConditions(const node& config, size_t ID);
     /** \brief Function reads viscous drag settings from configuration XML and stores them in class variables
      *  \param &viscousDragNode aixml node that contains flight condition information from corresponding XML file
      */
diff --git a/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.cpp b/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.cpp
index eba25fff371724f6c0ee796141e22289bcd886a8..a79dbd21fbe72db78da7d65f30cbb1fca837c721 100644
--- a/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.cpp
+++ b/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.cpp
@@ -110,8 +110,13 @@ tawCalculatePolarConfig::tawCalculatePolarConfig(const node& config)
         myRuntimeInfo->info << "set flight conditions from config xml" << endl;
         size_t numberFlightConditions(config.getVector(("program_settings/FlightConditions/FlightCondition"), 2).size());
         for (size_t i(0); i < numberFlightConditions; i++) {
-            readflightConditions(config, i);
+            readFlightConditions(config, i);
         }
+        //Sort flight conditions asc by Mach numbers
+        std::sort(flightConditions.begin(), flightConditions.end(),
+                    [](const flightCondition& firstFC, const flightCondition& secondFC) {
+                        return firstFC.Mach <= secondFC.Mach;
+                    });
     } else if (setFlightConditionsMode.value() == "mode_1") {
         myRuntimeInfo->info << "Hab vergessen was hier rein sollte" << endl;
     }
@@ -119,7 +124,7 @@ tawCalculatePolarConfig::tawCalculatePolarConfig(const node& config)
     this->read_hl_calibration_factors(config);
 }
 
-void tawCalculatePolarConfig::readflightConditions(const node& config, size_t ID) {
+void tawCalculatePolarConfig::readFlightConditions(const node& config, size_t ID) {
     EndnodeReadOnly flightConditionExtrapolationMargin(EndnodeReadOnly<double>("program_settings/FlightConditions/FlightCondition@" + num2Str(ID) + "/extrapolation_margin"));
     EndnodeReadOnly flightConditionAltitude(EndnodeReadOnly<double>("program_settings/FlightConditions/FlightCondition@" + num2Str(ID) + "/Altitude"));
     EndnodeReadOnly flightConditionMach(EndnodeReadOnly<double>("program_settings/FlightConditions/FlightCondition@" + num2Str(ID) + "/Mach"));
diff --git a/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.h b/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.h
index db29ce14784675db9d04987cfec7dbf565cf6035..049213a36de5017d1c8559856f02a98a39d95999 100644
--- a/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.h
+++ b/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.h
@@ -99,7 +99,6 @@ class tawCalculatePolarConfig{
     bool apply_manual_CLmax_hl_values;
 
     //Methods
-    void readflightConditions(const node& config, size_t ID);
     void initializeTrimSettings(const node& config);
     void read_hl_calibration_factors(const node& config);
     explicit tawCalculatePolarConfig(const node& config);
@@ -135,9 +134,10 @@ class tawCalculatePolarConfig{
      */
     void readPolarSettings(const node& polarNode);
     /** \brief Function reads flight condition settings from configuration XML and stores them in class variables
-     *  \param &flightConditionNode aixml node that contains flight condition information from corresponding XML file
+     *  \param &config aixml node that contains the config root
+     *  \param ID an index value of the current flight condition
      */
-    void readFlightConditions(const node& flightConditionNode);
+    void readFlightConditions(const node& config, size_t ID);
     /** \brief Function reads viscous drag settings from configuration XML and stores them in class variables
      *  \param &viscousDragNode aixml node that contains flight condition information from corresponding XML file
      */
diff --git a/aerodynamic_analysis/src/taw/tawDefaultStrategy.cpp b/aerodynamic_analysis/src/taw/tawDefaultStrategy.cpp
index 5893e58a861f08e65f5a5c1c4efa7ad5aee4b5a9..6663ab4146cc56f6ee005354004728bdd24bd338 100644
--- a/aerodynamic_analysis/src/taw/tawDefaultStrategy.cpp
+++ b/aerodynamic_analysis/src/taw/tawDefaultStrategy.cpp
@@ -212,27 +212,28 @@ void tawDefaultStrategy::initializeLiLiforTAW(LiLiforTAWInitialization *myLiLiIn
     myLiLiInit->bestCruiseCL = data_->bestCruiseCL;
     myLiLiInit->initialMachCruise = data_->initialCruiseMachNumber;
     myLiLiInit->engineType = data_->engineType;
-    myLiLiInit->cruiseMachID = 0;
-    for (size_t flightConditionID(0); flightConditionID < config_->flightConditions.size(); ++flightConditionID) {
-        flightCondition* aLiLiFlightCondition = new flightCondition;
-        aLiLiFlightCondition->Mach = config_->flightConditions.at(flightConditionID).Mach;
-        aLiLiFlightCondition->Altitude = config_->flightConditions.at(flightConditionID).Altitude;
-        aLiLiFlightCondition->extrapolationMargin = config_->flightConditions.at(flightConditionID).extrapolationMargin;
-        aLiLiFlightCondition->allowGridChange = config_->flightConditions.at(flightConditionID).allowGridChange;
-        myLiLiInit->flightConditions.push_back(*aLiLiFlightCondition);
-        if (accuracyCheck(aLiLiFlightCondition->Mach, data_->initialCruiseMachNumber, ACCURACY_HIGH)) {
-            myLiLiInit->cruiseMachID = flightConditionID;
-        }
-        delete aLiLiFlightCondition;
-    }
-    // Check availability of cruise Mach number in polar set
-    //if cruiseMachID is still 0 and this flight condition is not cruise Mach, abort program
-    if (!myLiLiInit->cruiseMachID
-        && !accuracyCheck(myLiLiInit->flightConditions.at(myLiLiInit->cruiseMachID).Mach, myLiLiInit->initialMachCruise, ACCURACY_MEDIUM)) {
-            std::stringstream errorMessage;
-            errorMessage << "Initial Cruise Mach number of Ma = " << myLiLiInit->initialMachCruise << " is not available in flight conditions given in config file. Abort program!";
-            throwError(__FILE__, __func__, __LINE__, errorMessage.str());
+    myLiLiInit->flightConditions = config_->flightConditions;
+    std::vector<flightCondition>::iterator theCruiseFlightConditionIterator(std::find_if(myLiLiInit->flightConditions.begin(), myLiLiInit->flightConditions.end(),
+                                                [myLiLiInit](const flightCondition& aFlightCondition) {
+                                                    return accuracyCheck(aFlightCondition.Mach, myLiLiInit->initialMachCruise, ACCURACY_HIGH);
+                                                }));
+    if (theCruiseFlightConditionIterator == myLiLiInit->flightConditions.end()) { //Cruise flight condition not yet available
+        flightCondition* theCruiseFlightCondition = new flightCondition;
+        theCruiseFlightCondition->Mach = data_->initialCruiseMachNumber;
+        theCruiseFlightCondition->Altitude = myLiLiInit->flightConditions.back().Altitude;
+        theCruiseFlightCondition->extrapolationMargin = myLiLiInit->flightConditions.back().extrapolationMargin;
+        theCruiseFlightCondition->allowGridChange = myLiLiInit->flightConditions.back().allowGridChange;
+        theCruiseFlightConditionIterator = std::find_if(myLiLiInit->flightConditions.begin(), myLiLiInit->flightConditions.end(),
+                                                                [myLiLiInit](const flightCondition& aFlightCondition) {
+                                                                        return myLiLiInit->initialMachCruise <= aFlightCondition.Mach;
+                                                                    });
+        theCruiseFlightConditionIterator = (myLiLiInit->flightConditions).insert(theCruiseFlightConditionIterator, *theCruiseFlightCondition);
+        std::stringstream warnMessage;
+        warnMessage << "Initial Cruise Mach number of Ma = " << myLiLiInit->initialMachCruise << " is not available in flight conditions given in config file. ";
+        warnMessage << "Inserted flight condition for Ma = " << myLiLiInit->initialMachCruise << " automatically.";
+        myRuntimeInfo->warn << warnMessage.str() << std::endl;
     }
+    myLiLiInit->cruiseMachID = static_cast<int>(theCruiseFlightConditionIterator - myLiLiInit->flightConditions.begin());
     myLiLiInit->liftingSurfaces = liftingSurfaces;
     myLiLiInit->theFuselage = fuselage;
     myLiLiInit->theNacelles = nacelles;
@@ -295,7 +296,7 @@ void tawDefaultStrategy::initializeWaveDragMason(waveDragInitialization *myWaveD
 }
 
 void tawDefaultStrategy::getPolarDataFromLiftingLine(const liftingLineForTAW& liftingLineForTAW) {
-    for (size_t machID(0); machID < config_->flightConditions.size(); ++machID) {
+    for (size_t machID(0); machID < liftingLineForTAW.theCleanPolars.size(); ++machID) {
         tawDefaultPolar aCleanPolar;
         aCleanPolar.extrapolationMargin = liftingLineForTAW.theCleanPolars.at(machID).extrapolationMargin;
         aCleanPolar.allowGridChange = liftingLineForTAW.theCleanPolars.at(machID).allowGridChange;
@@ -610,7 +611,8 @@ void tawDefaultStrategy::doTrimInterpolation() {
         vector<vector<trimInterpolation::interpolationPoint>> polarSet;
         // copy polar data into the generalized interpolation container
         for (size_t polarID(0); polarID < polarDataCGMap.at(CGID).at(0).cleanPolars.size(); ++polarID) {
-            myRuntimeInfo->out << "Interpolate trim for clean polars at " << config_->CGPositions.at(CGID) << " CoG at Ma " << config_->machNumbers.at(polarID) << "..." << endl;
+            myRuntimeInfo->out << "Interpolate trim for clean polars at " << config_->CGPositions.at(CGID) 
+                               << " CoG at Ma " << polarDataCGMap.at(CGID).at(0).cleanPolars.at(polarID).MachNumber << "..." << endl;
             for (size_t stabID(0); stabID < config_->stabAngles.size(); ++stabID) {
                 vector<trimInterpolation::interpolationPoint> aStabPolar;
                 for (size_t pointID(0); pointID < polarDataCGMap.at(CGID).at(stabID).cleanPolars.at(polarID).Points.size(); ++pointID) {