diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs
index c547d2ba266205024044fb36fb63cff3d8e17bb3..fdf65e99c486dcc36fc6a3857588c4ae133ea08f 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs
@@ -539,5 +539,30 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			}
 		}
 
+
+		public override IPneumaticSupplyDeclarationData PneumaticSupply
+		{
+			get { return null; }
+		}
+
+		public override IElectricSupplyDeclarationData ElectricSupply
+		{
+			get { return null; }
+		}
+
+		public override IPneumaticConsumersDeclarationData PneumaticConsumers
+		{
+			get { return null; }
+		}
+
+		public override string FanTechnology
+		{
+			get { return null; }
+		}
+
+		public override IList<string> SteeringPumpTechnology
+		{
+			get { return null; }
+		}
 	}
 }
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs
index 7ce1448b37f9315c92e8bcdce74851960661d07e..81a00b88ef33796e7ab6b1996d38661ee3d1db04 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs
@@ -367,10 +367,25 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		public override IBusAuxiliariesDeclarationData BusAuxiliaries
 		{
-			get { return _busAuxiliaries ?? (_busAuxiliaries = ComponentReader.BusAuxiliariesInputData); }
-		}
+			get
+			{
+				if (!ElementExists(XMLNames.Component_Auxiliaries))
+					return null;
 
-	}
+				return _busAuxiliaries ?? (_busAuxiliaries = GetBusAuxiliaries());
+			}
+		}
 
+		private IBusAuxiliariesDeclarationData GetBusAuxiliaries()
+		{
+			var busAux = ComponentReader.BusAuxiliariesInputData;
 
+			if (busAux.ElectricConsumers == null && busAux.HVACAux == null &&
+				busAux.PneumaticConsumers == null && busAux.PneumaticSupply == null &&
+				busAux.ElectricSupply == null && busAux.FanTechnology == null &&
+				busAux.SteeringPumpTechnology == null)
+				return null;
+			return busAux;
+		}
+	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs
index b3ce6d274747e600464488f807bbde76d7f07859..097c8f28bc4426eba9610c0da90862e85a78a40c 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs
@@ -151,16 +151,16 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 				if (ManufacturingStages.IsNullOrEmpty())
 					return false;
 
-				if(_consolidateManufacturingStages == null)
+				if (_consolidateManufacturingStages == null)
 					_consolidateManufacturingStages = GetConsolidateManufacturingStage();
 
-				return _consolidateManufacturingStages.IsInputDataComplete();
+				return _consolidateManufacturingStages.IsInputDataComplete(JobType);
 			}
 		}
 
 		private ConsolidateManufacturingStages GetConsolidateManufacturingStage()
 		{
-			return new ConsolidateManufacturingStages(ManufacturingStages);
+			return new ConsolidateManufacturingStages(PrimaryVehicle, ManufacturingStages.Reverse());
 		}
 
 
@@ -316,12 +316,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 	// ---------------------------------------------------------------------------------------
 
 
-
-	public abstract class ConsolidatedDataBase
+	#region  Generate Consolidated Multistage InputData
+	
+	public abstract class ConsolidatedDataBase 
 	{
-		protected readonly IList<IManufacturingStageInputData> _manufacturingStages;
+		protected readonly IEnumerable<IManufacturingStageInputData> _manufacturingStages;
 
-		public ConsolidatedDataBase(IList<IManufacturingStageInputData> manufacturingStages)
+		public ConsolidatedDataBase(IEnumerable<IManufacturingStageInputData> manufacturingStages)
 		{
 			_manufacturingStages = manufacturingStages;
 		}
@@ -350,89 +351,102 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			return obj;
 		}
 
-		public abstract bool IsInputDataComplete();
+		public abstract bool IsInputDataComplete(VectoSimulationJobType jobType);
 	}
 
+	// ---------------------------------------------------------------------------------------
+
 	public class ConsolidateManufacturingStages : ConsolidatedDataBase, IManufacturingStageInputData
 	{
-
 		private ConsolidatedVehicleData _consolidatedVehicleData;
-
-		public ConsolidateManufacturingStages(IList<IManufacturingStageInputData> manufacturingStages)
-			: base(manufacturingStages) { }
+		private IPrimaryVehicleInformationInputDataProvider _primaryVehicle;
+		
+		public ConsolidateManufacturingStages(IPrimaryVehicleInformationInputDataProvider primaryVehicle, 
+			IEnumerable<IManufacturingStageInputData> manufacturingStages) : base(manufacturingStages)
+		{
+			_primaryVehicle = primaryVehicle;
+		}
 
 		public DigestData HashPreviousStage
 		{
-			get { return _manufacturingStages.Last().HashPreviousStage; }
+			get { return _manufacturingStages.First().HashPreviousStage; }
 		}
 
 		public int StageCount
 		{
-			get { return _manufacturingStages.Last().StageCount; }
+			get { return _manufacturingStages.First().StageCount; }
 		}
 
 		public IVehicleDeclarationInputData Vehicle
 		{
 			get
 			{
-				return _consolidatedVehicleData ??
-					  (_consolidatedVehicleData = new ConsolidatedVehicleData(_manufacturingStages));
+				return GetConsolidatedVehicleData(); 
 			}
 		}
 
 		public IApplicationInformation ApplicationInformation
 		{
-			get { return _manufacturingStages.Last().ApplicationInformation; }
+			get { return _manufacturingStages.First().ApplicationInformation; }
 		}
 
 		public DigestData Signature
 		{
-			get { return _manufacturingStages.Last().Signature; }
+			get { return _manufacturingStages.First().Signature; }
 		}
 
-		public override bool IsInputDataComplete()
+		public override bool IsInputDataComplete(VectoSimulationJobType jobType)
 		{
-			if (_consolidatedVehicleData == null)
-				_consolidatedVehicleData = new ConsolidatedVehicleData(_manufacturingStages);
-			
-			return _consolidatedVehicleData.IsInputDataComplete();
+			return GetConsolidatedVehicleData().IsInputDataComplete(jobType);
+		}
+
+		private ConsolidatedVehicleData GetConsolidatedVehicleData()
+		{
+			return _consolidatedVehicleData ??
+					(_consolidatedVehicleData = new ConsolidatedVehicleData(_primaryVehicle, _manufacturingStages));
 		}
+
 	}
 
+	// ---------------------------------------------------------------------------------------
 
 	public class ConsolidatedVehicleData : ConsolidatedDataBase, IVehicleDeclarationInputData
 	{
 		private ConsolidatedADASData _consolidatedADAS;
 		private ConsolidatedComponentData _consolidatedComponents;
+		private readonly IPrimaryVehicleInformationInputDataProvider _primaryVehicle;
 
-		public ConsolidatedVehicleData(IList<IManufacturingStageInputData> manufacturingStages)
-			: base(manufacturingStages) { }
+		public ConsolidatedVehicleData(IPrimaryVehicleInformationInputDataProvider primaryVehicle,
+			IEnumerable<IManufacturingStageInputData> manufacturingStages) : base(manufacturingStages)
+		{
+			_primaryVehicle = primaryVehicle;
+		}
 
 		#region ManufacturingStage mandatory properties
 
 		public string Manufacturer
 		{
-			get { return _manufacturingStages.Last().Vehicle.Manufacturer; }
+			get { return _manufacturingStages.First().Vehicle.Manufacturer; }
 		}
 
 		public string ManufacturerAddress
 		{
-			get { return _manufacturingStages.Last().Vehicle.ManufacturerAddress; }
+			get { return _manufacturingStages.First().Vehicle.ManufacturerAddress; }
 		}
 		
 		public DateTime Date
 		{
-			get { return _manufacturingStages.Last().Vehicle.Date; }
+			get { return _manufacturingStages.First().Vehicle.Date; }
 		}
 
 		public string VIN
 		{
-			get { return _manufacturingStages.Last().Vehicle.VIN; }
+			get { return _manufacturingStages.First().Vehicle.VIN; }
 		}
 
 		public VehicleDeclarationType VehicleDeclarationType
 		{
-			get { return _manufacturingStages.Last().Vehicle.VehicleDeclarationType; }
+			get { return _manufacturingStages.First().Vehicle.VehicleDeclarationType; }
 		}
 
 		#endregion
@@ -535,27 +549,31 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 		public IAdvancedDriverAssistantSystemDeclarationInputData ADAS
 		{
-			get
-			{
-				if (GetVehiclePropertyValue<IAdvancedDriverAssistantSystemDeclarationInputData>(nameof(ADAS)) == null)
-					return null;
+			get { return GetADAS(); }
+		}
 
-				return _consolidatedADAS
-						?? (_consolidatedADAS = new ConsolidatedADASData(_manufacturingStages));
-			}
+		private IAdvancedDriverAssistantSystemDeclarationInputData GetADAS()
+		{
+			if (GetVehiclePropertyValue<IAdvancedDriverAssistantSystemDeclarationInputData>(nameof(ADAS)) == null)
+				return null;
+
+			return _consolidatedADAS
+					?? (_consolidatedADAS = new ConsolidatedADASData(_manufacturingStages));
 		}
 
+
 		public IVehicleComponentsDeclaration Components
 		{
-			get
-			{
-				if (GetVehiclePropertyValue<IVehicleComponentsDeclaration>(nameof(Components)) == null)
-					return null;
+			get { return GetComponents(); }
+		}
 
-				return _consolidatedComponents
-						?? (_consolidatedComponents = new ConsolidatedComponentData(_manufacturingStages));
+		private IVehicleComponentsDeclaration GetComponents()
+		{
+			if (GetVehiclePropertyValue<IVehicleComponentsDeclaration>(nameof(Components)) == null)
+				return null;
 
-			}
+			return _consolidatedComponents
+					?? (_consolidatedComponents = new ConsolidatedComponentData(_manufacturingStages));
 		}
 
 		#endregion
@@ -591,30 +609,69 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 		private T GetVehiclePropertyValue<T>(string propertyName)
 		{
-			for (int i = _manufacturingStages.Count - 1; i >= 0; i--)
-			{
-				var value = GetPropertyValue<T>(_manufacturingStages[i].Vehicle, propertyName);
+			foreach (var manufacturingStage in _manufacturingStages) {
+				var value = GetPropertyValue<T>(manufacturingStage.Vehicle, propertyName);
 				if (value != null)
 					return value;
 			}
 			return default;
 		}
 
-		public override bool IsInputDataComplete()
+		private bool PrimaryEngineWithNGTankSystem()
+		{
+			var enginePrimaryEngine = _primaryVehicle?.Vehicle?.Components?.EngineInputData;
+			if (enginePrimaryEngine == null)
+				return false;
+
+			foreach (var engineMode in enginePrimaryEngine.EngineModes)
+			{
+				foreach (var fuel in engineMode.Fuels)
+				{
+					if (fuel.FuelType == FuelType.NGPI || fuel.FuelType == FuelType.NGCI)
+						return true;
+				}
+			}
+
+			return false;
+		}
+		
+
+		private bool IsTankSystemValid()
+		{
+			if (PrimaryEngineWithNGTankSystem())
+				return TankSystem != null;
+			return true;
+		}
+		
+		private bool WithoutAirdrag()
+		{
+			foreach (var manufacturingStage in _manufacturingStages) {
+				if (manufacturingStage.Vehicle.AirdragModifiedMultistage != null ||
+					manufacturingStage.Vehicle.Components?.AirdragInputData != null) 
+					return false;
+			}
+			return true;
+		}
+
+		public override bool IsInputDataComplete(VectoSimulationJobType jobType)
 		{
+			GetADAS();
+			GetComponents();
+
 			return Model != null && LegislativeClass != null && CurbMassChassis != null && GrossVehicleMassRating != null 
-					&& AirdragModifiedMultistage != null && TankSystem != null && RegisteredClass != null 
+					&& (WithoutAirdrag() || AirdragModifiedMultistage != null) && IsTankSystemValid() && RegisteredClass != null 
 					&& NumberOfPassengersLowerDeck != null && NumberOfPassengersUpperDeck != null && VehicleCode != null 
 					&& LowEntry != null && Height != null && Length != null && Width != null && EntranceHeight != null 
-					&& DoorDriveTechnology != null && _consolidatedADAS != null && _consolidatedADAS.IsInputDataComplete() 
-					&& _consolidatedComponents != null && _consolidatedComponents.IsInputDataComplete();
+					&& DoorDriveTechnology != null && _consolidatedADAS != null && _consolidatedADAS.IsInputDataComplete(jobType) 
+					&& _consolidatedComponents != null && _consolidatedComponents.IsInputDataComplete(jobType);
 		}
 	}
 
+	// ---------------------------------------------------------------------------------------
 
 	public class ConsolidatedADASData : ConsolidatedDataBase, IAdvancedDriverAssistantSystemDeclarationInputData
 	{
-		public ConsolidatedADASData(IList<IManufacturingStageInputData> manufacturingStages)
+		public ConsolidatedADASData(IEnumerable<IManufacturingStageInputData> manufacturingStages)
 			: base(manufacturingStages) { }
 
 		public bool EngineStopStart
@@ -642,9 +699,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 		private T GetADASPropertyValue<T>(string propertyName)
 		{
-			for (int i = _manufacturingStages.Count - 1; i >= 0; i--)
-			{
-				var adas = _manufacturingStages[i].Vehicle.ADAS;
+			foreach (var manufacturingStage in _manufacturingStages) {
+				var adas = manufacturingStage.Vehicle.ADAS;
 				if (adas == null)
 					continue;
 				var value = GetPropertyValue<T>(adas, propertyName);
@@ -655,32 +711,37 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			return default;
 		}
 
-		public override bool IsInputDataComplete()
+		public override bool IsInputDataComplete(VectoSimulationJobType jobType)
 		{
 			return ATEcoRollReleaseLockupClutch != null;
 		}
 	}
 
+	// ---------------------------------------------------------------------------------------
+
 	public class ConsolidatedComponentData : ConsolidatedDataBase, IVehicleComponentsDeclaration
 	{
 		private ConsolidatedAirdragData _consolidateAirdragData;
 		private ConsolidatedBusAuxiliariesData _consolidateBusAuxiliariesData;
 
-		public ConsolidatedComponentData(IList<IManufacturingStageInputData> manufacturingStages)
+		public ConsolidatedComponentData(IEnumerable<IManufacturingStageInputData> manufacturingStages)
 			: base(manufacturingStages) { }
 
 
 		public IAirdragDeclarationInputData AirdragInputData
 		{
-			get
-			{
-				if (GetComponentPropertyValue<IAirdragDeclarationInputData>(nameof(AirdragInputData)) == null)
-					return null;
+			get { return GetAirdragInputData(); }
+		}
 
-				return _consolidateAirdragData ??
-						(_consolidateAirdragData = new ConsolidatedAirdragData(_manufacturingStages));
-			}
+		private IAirdragDeclarationInputData GetAirdragInputData()
+		{
+			if (GetComponentPropertyValue<IAirdragDeclarationInputData>(nameof(AirdragInputData)) == null)
+				return null;
+
+			return _consolidateAirdragData ??
+					(_consolidateAirdragData = new ConsolidatedAirdragData(_manufacturingStages));
 		}
+
 		public IGearboxDeclarationInputData GearboxInputData
 		{
 			get { return null; }
@@ -720,15 +781,19 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		
 		public IBusAuxiliariesDeclarationData BusAuxiliaries
 		{
-			get
-			{
-				if (GetComponentPropertyValue<IBusAuxiliariesDeclarationData>(nameof(BusAuxiliaries)) == null)
-					return null;
+			get { return GetBusAuxiliaries(); }
+		}
 
-				return _consolidateBusAuxiliariesData ??
-						(_consolidateBusAuxiliariesData = new ConsolidatedBusAuxiliariesData(_manufacturingStages));
-			}
+		private IBusAuxiliariesDeclarationData GetBusAuxiliaries()
+		{
+			if (GetComponentPropertyValue<IBusAuxiliariesDeclarationData>(nameof(BusAuxiliaries)) == null)
+				return null;
+
+			return _consolidateBusAuxiliariesData ??
+					(_consolidateBusAuxiliariesData = new ConsolidatedBusAuxiliariesData(_manufacturingStages));
 		}
+
+
 		public IElectricStorageDeclarationInputData ElectricStorage
 		{
 			get { return null; }
@@ -740,9 +805,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 		private T GetComponentPropertyValue<T>(string propertyName)
 		{
-			for (int i = _manufacturingStages.Count - 1; i >= 0; i--)
-			{
-				var component = _manufacturingStages[i].Vehicle?.Components;
+
+			foreach (var manufacturingStage in _manufacturingStages) {
+				var component = manufacturingStage.Vehicle?.Components;
 				if (component == null)
 					continue;
 				var value = GetPropertyValue<T>(component, propertyName);
@@ -754,19 +819,22 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		}
 
 
-		public override bool IsInputDataComplete()
+		public override bool IsInputDataComplete(VectoSimulationJobType jobType)
 		{
-			return _consolidateBusAuxiliariesData != null && _consolidateBusAuxiliariesData.IsInputDataComplete();
+			GetAirdragInputData();
+			GetBusAuxiliaries();
+
+			return _consolidateBusAuxiliariesData != null && _consolidateBusAuxiliariesData.IsInputDataComplete(jobType);
 		}
 	}
 
-
+	// ---------------------------------------------------------------------------------------
 
 	public class ConsolidatedAirdragData : ConsolidatedDataBase, IAirdragDeclarationInputData
 	{
 		public IAirdragDeclarationInputData AirdragEntry { private set; get; }
 
-		public ConsolidatedAirdragData(IList<IManufacturingStageInputData> manufacturingStages)
+		public ConsolidatedAirdragData(IEnumerable<IManufacturingStageInputData> manufacturingStages)
 			: base(manufacturingStages)
 		{
 			SetLastValidAirdragEntry();
@@ -815,9 +883,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 		private void SetLastValidAirdragEntry()
 		{
-			for (int i = _manufacturingStages.Count - 1; i >= 0; i--)
-			{
-				var airdragData = _manufacturingStages[i].Vehicle?.Components?.AirdragInputData;
+			foreach (var manufacturingStage in _manufacturingStages) {
+				var airdragData = manufacturingStage.Vehicle?.Components?.AirdragInputData;
 				if (airdragData == null)
 					continue;
 
@@ -830,19 +897,21 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			}
 		}
 
-		public override bool IsInputDataComplete()
+		public override bool IsInputDataComplete(VectoSimulationJobType jobType)
 		{
 			return AirdragEntry != null;
 		}
 	}
 
+	// ---------------------------------------------------------------------------------------
+
 	public class ConsolidatedBusAuxiliariesData : ConsolidatedDataBase, IBusAuxiliariesDeclarationData
 	{
 		private ConsolidateElectricConsumerData _consolidateElectricConsumerData;
 		private ConsolidatedHVACBusAuxiliariesData _consolidatedHVACBusAuxiliariesData;
 
 
-		public ConsolidatedBusAuxiliariesData(IList<IManufacturingStageInputData> manufacturingStages)
+		public ConsolidatedBusAuxiliariesData(IEnumerable<IManufacturingStageInputData> manufacturingStages)
 			: base(manufacturingStages) { }
 
 		public XmlNode XMLSource { get; }
@@ -861,14 +930,16 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 		public IElectricConsumersDeclarationData ElectricConsumers
 		{
-			get
-			{
-				if (GetBusAuxPropertyValue<IElectricConsumersDeclarationData>(nameof(ElectricConsumers)) == null)
-					return null;
-					
-				return	_consolidateElectricConsumerData ??
-						(_consolidateElectricConsumerData = new ConsolidateElectricConsumerData(_manufacturingStages));
-			}
+			get { return GetElectricConsumers(); }
+		}
+
+		private IElectricConsumersDeclarationData GetElectricConsumers()
+		{
+			if (GetBusAuxPropertyValue<IElectricConsumersDeclarationData>(nameof(ElectricConsumers)) == null)
+				return null;
+
+			return _consolidateElectricConsumerData ??
+					(_consolidateElectricConsumerData = new ConsolidateElectricConsumerData(_manufacturingStages));
 		}
 
 		public IPneumaticSupplyDeclarationData PneumaticSupply
@@ -883,21 +954,22 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 		public IHVACBusAuxiliariesDeclarationData HVACAux
 		{
-			get
-			{
-				if (GetBusAuxPropertyValue<IHVACBusAuxiliariesDeclarationData>(nameof(HVACAux)) == null)
-					return null;
-				
-				return _consolidatedHVACBusAuxiliariesData ??
-						(_consolidatedHVACBusAuxiliariesData = new ConsolidatedHVACBusAuxiliariesData(_manufacturingStages));
-			}
+			get { return GetHVACAux(); }
+		}
+
+		private IHVACBusAuxiliariesDeclarationData GetHVACAux()
+		{
+			if (GetBusAuxPropertyValue<IHVACBusAuxiliariesDeclarationData>(nameof(HVACAux)) == null)
+				return null;
+
+			return _consolidatedHVACBusAuxiliariesData ??
+					(_consolidatedHVACBusAuxiliariesData = new ConsolidatedHVACBusAuxiliariesData(_manufacturingStages));
 		}
 
 		private T GetBusAuxPropertyValue<T>(string propertyName)
 		{
-			for (int i = _manufacturingStages.Count - 1; i >= 0; i--)
-			{
-				var busAux = _manufacturingStages[i].Vehicle?.Components?.BusAuxiliaries;
+			foreach (var manufacturingStage in _manufacturingStages) {
+				var busAux = manufacturingStage.Vehicle?.Components?.BusAuxiliaries;
 				if (busAux == null)
 					continue;
 				var value = GetPropertyValue<T>(busAux, propertyName);
@@ -908,17 +980,22 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			return default;
 		}
 		
-		public override bool IsInputDataComplete()
+
+		public override bool IsInputDataComplete(VectoSimulationJobType jobType)
 		{
-			return _consolidateElectricConsumerData != null && _consolidateElectricConsumerData.IsInputDataComplete() &&
-					_consolidatedHVACBusAuxiliariesData != null && _consolidatedHVACBusAuxiliariesData.IsInputDataComplete();
+			GetElectricConsumers();
+			GetHVACAux();
+
+			return _consolidateElectricConsumerData != null && _consolidateElectricConsumerData.IsInputDataComplete(jobType) &&
+					_consolidatedHVACBusAuxiliariesData != null && _consolidatedHVACBusAuxiliariesData.IsInputDataComplete(jobType);
 		}
 	}
 
+	// ---------------------------------------------------------------------------------------
 
 	public class ConsolidateElectricConsumerData : ConsolidatedDataBase, IElectricConsumersDeclarationData
 	{
-		public ConsolidateElectricConsumerData(IList<IManufacturingStageInputData> manufacturingStages)
+		public ConsolidateElectricConsumerData(IEnumerable<IManufacturingStageInputData> manufacturingStages)
 			: base(manufacturingStages) { }
 
 		public bool? InteriorLightsLED
@@ -949,30 +1026,28 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 		private T GetElectricConsumerPropertyValue<T>(string propertyName)
 		{
-			for (int i = _manufacturingStages.Count - 1; i >= 0; i--)
-			{
-				var electricConsumer = _manufacturingStages[i].Vehicle?.Components?.BusAuxiliaries?.ElectricConsumers;
+			foreach (var manufacturingStage in _manufacturingStages) {
+				var electricConsumer = manufacturingStage.Vehicle?.Components?.BusAuxiliaries?.ElectricConsumers;
 				if (electricConsumer == null)
 					continue;
 				var value = GetPropertyValue<T>(electricConsumer, propertyName);
 				if (value != null)
 					return value;
 			}
-
 			return default;
 		}
 
-		public override bool IsInputDataComplete()
+		public override bool IsInputDataComplete(VectoSimulationJobType jobType)
 		{
 			return InteriorLightsLED != null && DayrunninglightsLED != null && PositionlightsLED != null &&
 					HeadlightsLED != null && BrakelightsLED != null;
 		}
 	}
 
-
+	// ---------------------------------------------------------------------------------------
 	public class ConsolidatedHVACBusAuxiliariesData : ConsolidatedDataBase, IHVACBusAuxiliariesDeclarationData
 	{
-		public ConsolidatedHVACBusAuxiliariesData(IList<IManufacturingStageInputData> manufacturingStages)
+		public ConsolidatedHVACBusAuxiliariesData(IEnumerable<IManufacturingStageInputData> manufacturingStages)
 			: base(manufacturingStages) { }
 
 		public BusHVACSystemConfiguration? SystemConfiguration
@@ -1078,9 +1153,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 		private T GetHVACBusAuxPropertyValue<T>(string propertyName)
 		{
-			for (int i = _manufacturingStages.Count - 1; i >= 0; i--)
-			{
-				var havacAux = _manufacturingStages[i].Vehicle?.Components?.BusAuxiliaries?.HVACAux;
+			foreach (var manufacturingStage in _manufacturingStages) {
+				var havacAux = manufacturingStage.Vehicle?.Components?.BusAuxiliaries?.HVACAux;
 				if (havacAux == null)
 					continue;
 				var value = GetPropertyValue<T>(havacAux, propertyName);
@@ -1090,13 +1164,55 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 			return default;
 		}
+		
+		private bool IsCorrectSystemConfiguration()
+		{
+			return SystemConfiguration != null && SystemConfiguration != BusHVACSystemConfiguration.Unknown;
+		}
 
-		public override bool IsInputDataComplete()
+		private bool IsCorrectDriverPumpTypeDriverPumpMode()
 		{
-			return SystemConfiguration != null && HeatPumpTypeDriverCompartment != null && HeatPumpModeDriverCompartment != null &&
-					HeatPumpTypePassengerCompartment != null && HeatPumpModePassengerCompartment != null && AuxHeaterPower != null &&
-					DoubleGlazing != null && AdjustableAuxiliaryHeater != null && SeparateAirDistributionDucts != null &&
-					WaterElectricHeater != null && AirElectricHeater != null && OtherHeatingTechnology != null;
+			if (HeatPumpModeDriverCompartment == null)
+				return false;
+
+			if (HeatPumpTypeDriverCompartment == HeatPumpType.none)
+				return HeatPumpModeDriverCompartment == null || HeatPumpModeDriverCompartment == HeatPumpMode.N_A;
+			
+			return HeatPumpTypeDriverCompartment != null && HeatPumpModeDriverCompartment != null;
+		}
+
+		private bool IsCorrectPassengerPumpTypeDriverPumpMode()
+		{
+			if (HeatPumpTypePassengerCompartment == null)
+				return false;
+			if (HeatPumpTypePassengerCompartment == HeatPumpType.none)
+				return HeatPumpModePassengerCompartment == null || HeatPumpModePassengerCompartment == HeatPumpMode.N_A;
+
+			return HeatPumpTypePassengerCompartment != null && HeatPumpModePassengerCompartment != null;
+		}
+
+		private bool RequiredParametersForJobType(VectoSimulationJobType jobType)
+		{
+			switch (jobType) {
+				case VectoSimulationJobType.ConventionalVehicle:
+					return true;
+				case VectoSimulationJobType.ParallelHybridVehicle:
+				case VectoSimulationJobType.SerialHybridVehicle:
+				case VectoSimulationJobType.BatteryElectricVehicle:
+					return WaterElectricHeater != null && AirElectricHeater != null && OtherHeatingTechnology != null;
+				default:
+					return false;
+			}
+		}
+		
+		public override bool IsInputDataComplete(VectoSimulationJobType jobType)
+		{
+			return IsCorrectSystemConfiguration() && IsCorrectDriverPumpTypeDriverPumpMode() &&
+					IsCorrectPassengerPumpTypeDriverPumpMode() && AuxHeaterPower != null && DoubleGlazing != null &&
+					AdjustableAuxiliaryHeater != null && SeparateAirDistributionDucts != null &&
+					RequiredParametersForJobType(jobType);
 		}
 	}
+
+	#endregion
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_consolidated_multiple_stages_NGTankSystem.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_consolidated_multiple_stages_NGTankSystem.xml
index e0dba57e8c097ea76caaf7e07fe09d7d8d0a82e9..f9d02df26c14cdcdf4a2c1e209fd876bbb970b4a 100644
--- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_consolidated_multiple_stages_NGTankSystem.xml
+++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_consolidated_multiple_stages_NGTankSystem.xml
@@ -668,28 +668,6 @@ xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile
 				<v2.8:EntranceHeight>2500</v2.8:EntranceHeight>
 				<v2.8:DeclarationType>interim</v2.8:DeclarationType>
 				<v2.8:Components xmlns:v2.8="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" xsi:type="v2.8:CompletedVehicleComponentsDeclarationType">
-					<v2.8:AirDrag>
-						<v2.0:Data xsi:type="v2.0:AirDragDataDeclarationType" id="CabinX24h">
-						<v2.0:Manufacturer>Generic Manufacturer</v2.0:Manufacturer>
-						<v2.0:Model>Generic Model</v2.0:Model>
-						<v2.0:CertificationNumber>e12*0815/8051*2017/05E1000*00</v2.0:CertificationNumber>
-						<v2.0:Date>2018-03-24T15:00:00Z</v2.0:Date>
-						<v2.0:AppVersion>Vecto AirDrag x.y.z</v2.0:AppVersion>
-						<v2.0:CdxA_0>6.31</v2.0:CdxA_0>
-						<v2.0:TransferredCdxA>6.32</v2.0:TransferredCdxA>
-						<v2.0:DeclaredCdxA>6.36</v2.0:DeclaredCdxA>					
-					</v2.0:Data>
-					<v2.0:Signature>
-						<di:Reference URI="#CabinX24h">
-							<di:Transforms>
-								<di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/>
-								<di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
-							</di:Transforms>
-							<di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
-							<di:DigestValue>b9SHCfOoVrBxFQ8wwDK32OO+9bd85DuaUdgs6j/28N8=</di:DigestValue>
-						</di:Reference>
-					</v2.0:Signature>
-					</v2.8:AirDrag>
 					<v2.8:Auxiliaries>
 						<v2.8:Data xsi:type="v2.8:CompletedVehicleAuxiliaryDataDeclarationType"/>
 					</v2.8:Auxiliaries>
diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_consolidated_one_stage.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_consolidated_one_stage.xml
index aaf56b04d68f75779eb30f00093b626d3e0f8341..0b10feb4885a6a1e025cea2a22a4ab27a7c62a67 100644
--- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_consolidated_one_stage.xml
+++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_consolidated_one_stage.xml
@@ -658,6 +658,11 @@ xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile
 				<v2.8:VIN>VEH-1234567890</v2.8:VIN>
 				<v2.8:Date>2018-02-15T11:00:00Z</v2.8:Date>
 				<v2.8:DeclarationType>interim</v2.8:DeclarationType>
+				<v2.8:Components xmlns:v2.8="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" xsi:type="v2.8:CompletedVehicleComponentsDeclarationType">
+					<v2.8:Auxiliaries>
+						<v2.8:Data xsi:type="v2.8:CompletedVehicleAuxiliaryDataDeclarationType"/>
+					</v2.8:Auxiliaries>
+				</v2.8:Components>
 			</Vehicle>
 			<ApplicationInformation>
 				<SimulationToolVersion>!!NOT FOR CERTIFICATION!!</SimulationToolVersion>
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index 2f9437dc7a68470b86b5716ada9177cbb1e43976..05a4ae7fcc646c3eb852bbf896535533bdd45372 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -4684,6 +4684,18 @@
     <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_multiple_stages.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_multiple_stages_airdrag.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_multiple_stages_heatPump.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_multiple_stages_hev.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_multiple_stages_NGTankSystem.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_one_stage.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
diff --git a/VectoCore/VectoCoreTest/XML/XMLMultistageBusConsolidatedInputDataTest.cs b/VectoCore/VectoCoreTest/XML/XMLMultistageBusConsolidatedInputDataTest.cs
index e52f176edff266e45157337de3ab2e67506ea942..5f19a19789d9d268604f6174f1076af4926e84cf 100644
--- a/VectoCore/VectoCoreTest/XML/XMLMultistageBusConsolidatedInputDataTest.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLMultistageBusConsolidatedInputDataTest.cs
@@ -21,8 +21,13 @@ namespace TUGraz.VectoCore.Tests.XML
 		const string _primaryOnlyInputData = _dirPath + "vecto_multistage_primary_vehicle_only.xml";
 		const string _oneStageInputData = _dirPath + "vecto_multistage_consolidated_one_stage.xml";
 		const string _twoStagesInputData = _dirPath + "vecto_multistage_consolidated_two_stages.xml";
-		
 
+		const string _consolidatedInputDataAirdrag = _dirPath + "vecto_multistage_consolidated_multiple_stages_airdrag.xml";
+		const string _consolidatedInputDataHeatPump = _dirPath + "vecto_multistage_consolidated_multiple_stages_heatPump.xml";
+		const string _consolidatedInputDataHeatHev = _dirPath + "vecto_multistage_consolidated_multiple_stages_hev.xml";
+		const string _consolidatedInputDataHeatNgTank = _dirPath + "vecto_multistage_consolidated_multiple_stages_NGTankSystem.xml";
+
+		
 		[OneTimeSetUp]
 		public void RunBeforeAnyTests()
 		{
@@ -38,8 +43,8 @@ namespace TUGraz.VectoCore.Tests.XML
 		{
 			var reader = XmlReader.Create(_consolidatedInputData);
 			var inputDataProvider = _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider;
-			TestConsolidateManufacturingStage(inputDataProvider.JobInputData.ConsolidateManufacturingStage);
 			Assert.AreEqual(true, inputDataProvider.JobInputData.InputComplete);
+			TestConsolidateManufacturingStage(inputDataProvider.JobInputData.ConsolidateManufacturingStage);
 		}
 
 		private void TestConsolidateManufacturingStage(IManufacturingStageInputData consolidateStage)
@@ -53,7 +58,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			Assert.AreEqual(LegislativeClass.M3, vehicle.LegislativeClass);
 			Assert.AreEqual(15000, vehicle.CurbMassChassis.Value());//CorrectedActualMass
 			Assert.AreEqual(20000, vehicle.GrossVehicleMassRating.Value());//TechnicalPermissibleMaximumLadenMass
-			Assert.AreEqual(false, vehicle.AirdragModifiedMultistage);
+			Assert.AreEqual(null, vehicle.AirdragModifiedMultistage);
 			Assert.AreEqual(TankSystem.Liquefied, vehicle.TankSystem);//NgTankSystem
 			Assert.AreEqual(RegistrationClass.B, vehicle.RegisteredClass);//ClassBus
 			Assert.AreEqual(10, vehicle.NumberOfPassengersLowerDeck);
@@ -177,14 +182,41 @@ namespace TUGraz.VectoCore.Tests.XML
 			Assert.AreEqual(EcoRollType.WithEngineStop, vehicle.ADAS.EcoRoll);
 			Assert.AreEqual(PredictiveCruiseControlType.Option_1_2, vehicle.ADAS.PredictiveCruiseControl);
 			Assert.AreEqual(null, vehicle.ADAS.ATEcoRollReleaseLockupClutch);
+			
+			Assert.AreEqual(null, vehicle.Components);
+		}
 
-			Assert.AreEqual(null, vehicle.Components.AirdragInputData);
 
-			var busAux = vehicle.Components.BusAuxiliaries.ElectricConsumers;
-			Assert.AreEqual(null, busAux);
+		[TestCase]
+		public void TestConsolidateMultistageAirdrag()
+		{
+			var reader = XmlReader.Create(_consolidatedInputDataAirdrag);
+			var inputDataProvider = _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider;
+			Assert.AreEqual(true, inputDataProvider.JobInputData.InputComplete);
+		}
 
-			var busHVACAux = vehicle.Components.BusAuxiliaries.HVACAux;
-			Assert.AreEqual(null, busHVACAux);
+		[TestCase]
+		public void TestConsolidateMultistageHeatPump()
+		{
+			var reader = XmlReader.Create(_consolidatedInputDataHeatPump);
+			var inputDataProvider = _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider;
+			Assert.AreEqual(true, inputDataProvider.JobInputData.InputComplete);
+		}
+		
+		[TestCase]
+		public void TestConsolidateMultistageHeatHev()
+		{
+			var reader = XmlReader.Create(_consolidatedInputDataHeatHev);
+			var inputDataProvider = _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider;
+			Assert.AreEqual(true, inputDataProvider.JobInputData.InputComplete);
+		}
+
+		[TestCase]
+		public void TestConsolidateMultistageHeatNgTankSystem()
+		{
+			var reader = XmlReader.Create(_consolidatedInputDataHeatNgTank);
+			var inputDataProvider = _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider;
+			Assert.AreEqual(true, inputDataProvider.JobInputData.InputComplete);
 		}
 	}
 }
diff --git a/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs b/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs
index 98032576f3886853a4bd64a51a25a6e15a005d6e..414a3f058c3c9f59790c078f8ad8b3af96c6d583 100644
--- a/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs
@@ -203,13 +203,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			Assert.AreEqual(PredictiveCruiseControlType.Option_1_2_3, vehicle.ADAS.PredictiveCruiseControl);
 			Assert.AreEqual(null, vehicle.ADAS.ATEcoRollReleaseLockupClutch);
 			
-			Assert.AreEqual(null, vehicle.Components.AirdragInputData);
-			
-			var electricConsumer = vehicle.Components.BusAuxiliaries.ElectricConsumers;
-			Assert.AreEqual(null, electricConsumer);
-
-			var hvacAux = vehicle.Components.BusAuxiliaries.HVACAux;
-			Assert.AreEqual(null, hvacAux);
+			Assert.AreEqual(null , vehicle.Components);
 		}