diff --git a/aerodynamic_analysis/aerodynamic_analysis_conf.xml b/aerodynamic_analysis/aerodynamic_analysis_conf.xml
index 327d3d1b905403025cd142d90e7ce8d834c07ad6..0ab8dfa88671bdc5be3e8f808090547612f392e7 100644
--- a/aerodynamic_analysis/aerodynamic_analysis_conf.xml
+++ b/aerodynamic_analysis/aerodynamic_analysis_conf.xml
@@ -104,6 +104,23 @@
             </bwbStrategies>
         </aeroStrategySelection>
         <FlightConditions description="Flight State">
+			<AdaptMachNumbersToCruiseReq description="Relevant parameters in regards to automatic flight condition generation">
+				<setAutomaticFlightConditions description="Switch to allow for automatic flight conditions. Switch: true (adapt flight conditions to initial cruise Mach number) / false (use flight conditions given here in config file)">
+					<value>true</value>
+					<default>true</default>
+				</setAutomaticFlightConditions>
+				<extrapolation_margin description="Margin for extrapolation">
+					<value>1</value>
+					<default>1</default>
+					<unit>1</unit>
+					<lower_boundary>0</lower_boundary>
+					<upper_boundary>1.1</upper_boundary>
+				</extrapolation_margin>
+				<allow_grid_change description="Switch to allow grid change. Switch: true (On) / false (Off)">
+					<value>true</value>
+					<default>true</default>
+				</allow_grid_change>	
+			</AdaptMachNumbersToCruiseReq>
             <FlightCondition ID="0" description="Description of the flight condition">
                 <extrapolation_margin description="Margin for extrapolation">
                     <value>1</value>
diff --git a/aerodynamic_analysis/src/bwb/bwbCalculatePolarConfig.cpp b/aerodynamic_analysis/src/bwb/bwbCalculatePolarConfig.cpp
index 16bc85617ff595bc1f94f22ed7d9b529a174a4ae..eb2849ec4b11518f6d49be30e7b5a48e70961d35 100644
--- a/aerodynamic_analysis/src/bwb/bwbCalculatePolarConfig.cpp
+++ b/aerodynamic_analysis/src/bwb/bwbCalculatePolarConfig.cpp
@@ -46,7 +46,7 @@ bwbCalculatePolarConfig::bwbCalculatePolarConfig(const node& config)
     pathToLiftingLine(EndnodeReadOnly<std::string>("program_settings/LiftingLine/FolderPath")),
     stepWidthCL(EndnodeReadOnly<double>("LiftingLineForTAW/stepWidthCL")),
     // other settings
-    setFlightConditionsMode(EndnodeReadOnly<std::string>("program_settings/FlightConditions/AdaptMachNumbersToCruiseReq")),
+    setFlightConditionsMode(EndnodeReadOnly<bool>("program_settings/FlightConditions/AdaptMachNumbersToCruiseReq/setAutomaticFlightConditions").read(config).value()),
     // lifting line for TAW pitching moment corrections
     delta_CM0(EndnodeReadOnly<double>("LiftingLineForTAW/PitchingMoment/delta_CM0")),
     delta_dCMdCL(EndnodeReadOnly<double>("LiftingLineForTAW/PitchingMoment/delta_dCMdCL")),
@@ -80,7 +80,6 @@ bwbCalculatePolarConfig::bwbCalculatePolarConfig(const node& config)
     factorDragHL(EndnodeReadOnly<double>("program_settings/SemiEmpiricalHighLiftAdaptions/factorDrag")) {
     CLModeAirfoilSelection.read(config);
     stepWidthCL.read(config);
-    setFlightConditionsMode.read(config);
     pathToLiftingLine.read(config);
     manualTransition.read(config);
     manualTransitionWing.read(config);
@@ -110,13 +109,13 @@ bwbCalculatePolarConfig::bwbCalculatePolarConfig(const node& config)
     deltaTotalDragHL.read(config);
     factorDragHL.read(config);
     myRuntimeInfo->out << "config: " << liftingLineFolderPath << endl;
-    if (setFlightConditionsMode.value() == "mode_0") {
+    if (setFlightConditionsMode == false) {
         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);
         }
-    } else if (setFlightConditionsMode.value() == "mode_1") {
+    } else if (setFlightConditionsMode == true) {
         myRuntimeInfo->info << "Hab vergessen was hier rein sollte" << endl;
     }
     CGPositions = {"design", "forward", "aft"};
diff --git a/aerodynamic_analysis/src/bwb/bwbCalculatePolarConfig.h b/aerodynamic_analysis/src/bwb/bwbCalculatePolarConfig.h
index b1186c45792016c41aab196ea53166cbf197e963..d57d47fc97bb6b6cd8670632251c86e465fe4b99 100644
--- a/aerodynamic_analysis/src/bwb/bwbCalculatePolarConfig.h
+++ b/aerodynamic_analysis/src/bwb/bwbCalculatePolarConfig.h
@@ -43,7 +43,7 @@ class bwbCalculatePolarConfig{
     EndnodeReadOnly<std::string> CLModeAirfoilSelection;    /**< Switch which sets if lift coefficient at ICA, at TOC or at average cruise is chosen for airfoil selection */
     EndnodeReadOnly<double> stepWidthCL;
     // fligt condition parameters
-    EndnodeReadOnly<std::string> setFlightConditionsMode;
+    bool setFlightConditionsMode;
     // lifting line pitching moment parameters
     EndnodeReadOnly<double> delta_CM0;
     EndnodeReadOnly<double> delta_dCMdCL;
diff --git a/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.cpp b/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.cpp
index a79dbd21fbe72db78da7d65f30cbb1fca837c721..8fc0fbb6246d864cc79d3459ac980b7fe1afb3f1 100644
--- a/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.cpp
+++ b/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.cpp
@@ -49,7 +49,7 @@ tawCalculatePolarConfig::tawCalculatePolarConfig(const node& config)
     stepWidthCL(EndnodeReadOnly<double>("LiftingLineForTAW/stepWidthCL").read(config)),
     // other settings
     CLModeAirfoilSelection(EndnodeReadOnly<std::string>("program_settings/CLModeAirfoilSelection").read(config)),
-    setFlightConditionsMode(EndnodeReadOnly<std::string>("program_settings/FlightConditions/AdaptMachNumbersToCruiseReq", "mode_0").read(config)),
+    setFlightConditionsMode(EndnodeReadOnly<bool>("program_settings/FlightConditions/AdaptMachNumbersToCruiseReq/setAutomaticFlightConditions").read(config).value()),
     pathToLiftingLine(EndnodeReadOnly<std::string>("program_settings/LiftingLine/FolderPath").read(config)),
     // lifting line for TAW pitching moment corrections
     CM_corr_fuselage_mode(EndnodeReadOnly<std::string>("program_settings/LiftingLineForTAW/PitchingMoment/CM_corr_fuselage").read(config)),
@@ -102,23 +102,23 @@ tawCalculatePolarConfig::tawCalculatePolarConfig(const node& config)
     factorDragHL(EndnodeReadOnly<double>("program_settings/SemiEmpiricalHighLiftAdaptions/factorDrag").read(config)),
     // high lift polars settings
     do_individual_hl_calibration(EndnodeReadOnly<bool>("program_settings/SemiEmpiricalHighLiftAdaptions/do_individual_hl_calibration").read(config).value()),
-    apply_manual_CLmax_hl_values(EndnodeReadOnly<bool>("program_settings/SemiEmpiricalHighLiftAdaptions/apply_manual_CLmax_hl_values").read(config).value()) {
+    apply_manual_CLmax_hl_values(EndnodeReadOnly<bool>("program_settings/SemiEmpiricalHighLiftAdaptions/apply_manual_CLmax_hl_values").read(config).value()),
+    autoFC_allowGridChange(EndnodeReadOnly<bool>("program_settings/FlightConditions/AdaptMachNumbersToCruiseReq/allow_grid_change").read(config).value()),
+    autoFC_extrapolationMargin(EndnodeReadOnly<double>("program_settings/FlightConditions/AdaptMachNumbersToCruiseReq/extrapolation_margin").read(config).value()) {
     // Constructor
     liftingLineFolderPath = pathToLiftingLine.value();
-    myRuntimeInfo->out << "config: " << liftingLineFolderPath << endl;
-    if (setFlightConditionsMode.value() == "mode_0") {
+    myRuntimeInfo->out << "config: " << liftingLineFolderPath << endl;
+    if (!setFlightConditionsMode) {
         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);
         }
-        //Sort flight conditions asc by Mach numbers
+        // 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;
     }
     this->initializeTrimSettings(config);
     this->read_hl_calibration_factors(config);
diff --git a/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.h b/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.h
index 049213a36de5017d1c8559856f02a98a39d95999..5560d23857e7978f12db7e9dc7bf48fefe86849e 100644
--- a/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.h
+++ b/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.h
@@ -45,7 +45,9 @@ class tawCalculatePolarConfig{
     EndnodeReadOnly<double> stepWidthCL;
     EndnodeReadOnly<std::string> CLModeAirfoilSelection;
     // fligt condition parameters
-    EndnodeReadOnly<std::string> setFlightConditionsMode;
+    bool setFlightConditionsMode;
+    bool autoFC_allowGridChange;
+    double autoFC_extrapolationMargin;
     // lifting line pitching moment parameters
     EndnodeReadOnly<std::string> CM_corr_fuselage_mode;
     EndnodeReadOnly<std::string> CM_corr_nacelle_mode;
@@ -121,9 +123,9 @@ class tawCalculatePolarConfig{
 
     /* High lift calibration data */
     struct hl_polar_calibration_values {
-        double CL_max;          /**< maximum CL value which should be reached */
-        double delta_CD;        /**< Constant delta for drag calibration */
-        double factor_CD;       /**< Factor for drag calibration */
+        double CL_max = NAN;          /**< maximum CL value which should be reached */
+        double delta_CD = NAN;        /**< Constant delta for drag calibration */
+        double factor_CD = NAN;       /**< Factor for drag calibration */
     };
     std::unordered_map<std::string, hl_polar_calibration_values> hl_polar_calibration_data; /**< Container for storing all high lift polar calibration and correction values */
 
diff --git a/aerodynamic_analysis/src/taw/tawDefaultData.cpp b/aerodynamic_analysis/src/taw/tawDefaultData.cpp
index 89b07197f7cdce0a2a8b3788e30b7ee79c78bbaf..92d7b680e860e73078a9ba41452b94d3a623f0cc 100644
--- a/aerodynamic_analysis/src/taw/tawDefaultData.cpp
+++ b/aerodynamic_analysis/src/taw/tawDefaultData.cpp
@@ -42,6 +42,8 @@ tawDefaultData::tawDefaultData(const std::shared_ptr<RuntimeIO>& rtIO)
     engineType(EndnodeReadOnly<std::string>("type").read(rtIO->acxml.at("requirements_and_specifications/design_specification/propulsion/propulsor")).value()),
     initialCruiseMachNumber(EndnodeReadOnly<double>("initial_cruise_mach_number").read(
         rtIO->acxml.at("requirements_and_specifications/requirements/top_level_aircraft_requirements/design_mission")).value()),
+    initialCruise_Altitude(
+        EndnodeReadOnly<double>("requirements_and_specifications/requirements/top_level_aircraft_requirements/design_mission/initial_cruise_altitude").read(rtIO->acxml).value()),
     bestCruiseCL(EndnodeReadOnly<double>("analysis/aerodynamics/lift_coefficients/C_LoptimumCruise").read(rtIO->acxml).value()),
     designCoGX(EndnodeReadOnly<double>("analysis/masses_cg_inertia/design_mass/mass_properties/center_of_gravity/x").read(rtIO->acxml).value()),
     designCoGY(EndnodeReadOnly<double>("analysis/masses_cg_inertia/design_mass/mass_properties/center_of_gravity/y").read(rtIO->acxml).value()),
diff --git a/aerodynamic_analysis/src/taw/tawDefaultData.h b/aerodynamic_analysis/src/taw/tawDefaultData.h
index deb545803b0822a12b3e899746a5c0aee795c7d0..2fb7370f68cc38cc6b1b0848eb6824353ac864be 100644
--- a/aerodynamic_analysis/src/taw/tawDefaultData.h
+++ b/aerodynamic_analysis/src/taw/tawDefaultData.h
@@ -50,6 +50,7 @@ class tawDefaultData {
     std::string engineType;         /**< Information about the propulsor type (e.g. fan) [-] */
     double delta_isa;               /**< temperature delta to ISA Standard Atmosphere [K] */
     double initialCruiseMachNumber; /**< Mach number flown in initial cruise phase at initial cruise altitude [-] */
+    double initialCruise_Altitude;  /**< Initial cruise altitude [m] */
     /* All EndnodeReadOnly Values are converted automatically to SI-Units/RADIAN when read in */
     double bestCruiseCL;        /**< optimum cruise lift coefficient */
     double designCoGX;          /**< x Position of design center of gravity in [m] */
diff --git a/aerodynamic_analysis/src/taw/tawDefaultStrategy.cpp b/aerodynamic_analysis/src/taw/tawDefaultStrategy.cpp
index 6663ab4146cc56f6ee005354004728bdd24bd338..94a87e214a26b112654f75c15331fc1416a24d81 100644
--- a/aerodynamic_analysis/src/taw/tawDefaultStrategy.cpp
+++ b/aerodynamic_analysis/src/taw/tawDefaultStrategy.cpp
@@ -50,6 +50,7 @@
 #include "../methods/waveDragMason.h"
 #include "../methods/semiEmpiricalHighLiftAdaption.h"
 #include "../methods/trimInterpolation.h"
+#include "../flightCondition.h"
 
 using std::endl;
 using std::exception;
@@ -86,6 +87,79 @@ void tawDefaultStrategy::run() {
         CoGPositions["aft"] = data_->aftCoG;
     }
 
+    // set individual flight conditions if enabled
+    if (config_->setFlightConditionsMode) {
+        config_->flightConditions.push_back(flightCondition());
+        config_->flightConditions.back().Mach = 0.2;
+        config_->flightConditions.back().Altitude = 0;
+        config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
+        config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
+        config_->machNumbers.push_back(config_->flightConditions.back().Mach);
+
+        config_->flightConditions.push_back(flightCondition());
+        config_->flightConditions.back().Mach = 0.5;
+        config_->flightConditions.back().Altitude = 3048;
+        config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
+        config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
+        config_->machNumbers.push_back(config_->flightConditions.back().Mach);
+
+        config_->flightConditions.push_back(flightCondition());
+        config_->flightConditions.back().Mach = 0.6;
+        config_->flightConditions.back().Altitude = 6096;
+        config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
+        config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
+        config_->machNumbers.push_back(config_->flightConditions.back().Mach);
+
+        config_->flightConditions.push_back(flightCondition());
+        config_->flightConditions.back().Mach = data_->initialCruiseMachNumber - 0.15;
+        config_->flightConditions.back().Altitude = data_->initialCruise_Altitude;
+        config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
+        config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
+        config_->machNumbers.push_back(config_->flightConditions.back().Mach);
+
+        config_->flightConditions.push_back(flightCondition());
+        config_->flightConditions.back().Mach = data_->initialCruiseMachNumber - 0.1;
+        config_->flightConditions.back().Altitude = data_->initialCruise_Altitude;
+        config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
+        config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
+        config_->machNumbers.push_back(config_->flightConditions.back().Mach);
+
+        config_->flightConditions.push_back(flightCondition());
+        config_->flightConditions.back().Mach = data_->initialCruiseMachNumber - 0.05;
+        config_->flightConditions.back().Altitude = data_->initialCruise_Altitude;
+        config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
+        config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
+        config_->machNumbers.push_back(config_->flightConditions.back().Mach);
+
+        config_->flightConditions.push_back(flightCondition());
+        config_->flightConditions.back().Mach = data_->initialCruiseMachNumber - 0.02;
+        config_->flightConditions.back().Altitude = data_->initialCruise_Altitude;
+        config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
+        config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
+        config_->machNumbers.push_back(config_->flightConditions.back().Mach);
+
+        config_->flightConditions.push_back(flightCondition());
+        config_->flightConditions.back().Mach = data_->initialCruiseMachNumber;
+        config_->flightConditions.back().Altitude = data_->initialCruise_Altitude;
+        config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
+        config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
+        config_->machNumbers.push_back(config_->flightConditions.back().Mach);
+
+        config_->flightConditions.push_back(flightCondition());
+        config_->flightConditions.back().Mach = data_->initialCruiseMachNumber + 0.01;
+        config_->flightConditions.back().Altitude = data_->initialCruise_Altitude;
+        config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
+        config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
+        config_->machNumbers.push_back(config_->flightConditions.back().Mach);
+
+        config_->flightConditions.push_back(flightCondition());
+        config_->flightConditions.back().Mach = data_->initialCruiseMachNumber + 0.05;
+        config_->flightConditions.back().Altitude = data_->initialCruise_Altitude;
+        config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
+        config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
+        config_->machNumbers.push_back(config_->flightConditions.back().Mach);
+    }
+
     // loop over all cg positions and stabilizer angles
     for (size_t CGID(0); CGID < config_->CGPositions.size(); ++CGID) {
         for (size_t stabID(0); stabID < config_->stabAngles.size(); ++stabID) {