diff --git a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs
index 176ec2e93ba6fba19938ca48a577bc2bf46c9d18..e74e5aa1df286bc34b47fe54c56dc459760441c8 100644
--- a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs
+++ b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs
@@ -105,6 +105,8 @@ namespace TUGraz.VectoCommon.InputData
 		VectoSimulationJobType JobType { get; }
 
 		bool InputComplete { get; }
+
+		IList<string> InvalidEntries { get; }
 	}
 
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationMultistageInputData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationMultistageInputData.cs
index c5ea9f4bbe0400b8bd3d26a8d043775fa47ca27a..e65ddef508ad1f130fa9d3a3b00ecb82d12257c0 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationMultistageInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationMultistageInputData.cs
@@ -88,6 +88,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		public bool InputComplete => Reader.InputComplete;
 
+		public IList<string> InvalidEntries => Reader.InvalidEntries;
+
 		public IXMLMultistageJobReader Reader { protected get; set; }
 
 		public IXMLMultistageInputDataProvider InputData { get; }
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/IXMLDeclarationInputDataReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/IXMLDeclarationInputDataReader.cs
index 60c24aeed47d0d135d3ee999a171021251685a44..7a2edd40e6f1d2fd25b3bef846cdd52951d5722d 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/IXMLDeclarationInputDataReader.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/IXMLDeclarationInputDataReader.cs
@@ -65,6 +65,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 		VectoSimulationJobType JobType { get; }
 
 		bool InputComplete { get; }
+
+		IList<string> InvalidEntries { get; }
 	}
 
 	public interface IXMLMultistageReader 
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 0e64957144fe4821fc70761f291b12e5c37f622a..a46f804da8fab65497ce26a3c4ecc8d48762c42a 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs
@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Diagnostics;
 using System.Linq;
 using System.Xml;
 using System.Xml.Linq;
@@ -151,6 +152,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			}
 		}
 
+		public IList<string> InvalidEntries
+		{
+			get
+			{
+				return _consolidateManufacturingStages?.GetInvalidEntries(JobType);
+			}
+		}
+
 		private ConsolidateManufacturingStages GetConsolidateManufacturingStage()
 		{
 			return new ConsolidateManufacturingStages(PrimaryVehicle, ManufacturingStages.Reverse());
@@ -286,11 +295,34 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 
 	#region  Generate Consolidated Multistage InputData
-	
 	public abstract class ConsolidatedDataBase 
 	{
 		protected readonly IEnumerable<IManufacturingStageInputData> _manufacturingStages;
-		protected string InvalidEntry { get; private set; }
+		private string _invalidEntry;
+		protected IList<string> _invalidEntries = new List<string>();
+		protected bool _fullChecked = false;
+		protected bool _checked = false;
+		protected bool _isComplete = true;
+
+		protected string InvalidEntry
+		{
+			get => _invalidEntry;
+			private set
+			{
+				_invalidEntry = value;
+
+				if (!_invalidEntries.Contains(_invalidEntry)) {
+					_invalidEntries.Add(_invalidEntry);
+				}
+				_isComplete = false;
+			} 
+		}
+
+		
+		
+
+
+
 
 		public ConsolidatedDataBase(IEnumerable<IManufacturingStageInputData> manufacturingStages)
 		{
@@ -321,10 +353,49 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			return obj;
 		}
 
-		public abstract bool IsInputDataComplete(VectoSimulationJobType jobType);
+		protected abstract bool IsInputDataCompleteTemplate(VectoSimulationJobType jobType, bool fullCheck);
+
+		protected bool IsInputDataComplete(VectoSimulationJobType jobType, bool fullCheck)
+		{
+			return fullCheck ? IsInputDataCompleteFullCheck(jobType) : IsInputDataComplete(jobType);
+		}
+
+		public bool IsInputDataComplete(VectoSimulationJobType jobType)
+		{
+			var result = (_checked && _isComplete) || IsInputDataCompleteTemplate(jobType, fullCheck: false);
+			return result;
+		}
+
+		public bool IsInputDataCompleteFullCheck(VectoSimulationJobType jobType)
+		{
+			if (_isComplete && _checked) {
+				return true;
+			} else {
+				var result = IsInputDataCompleteTemplate(jobType, fullCheck: true);
+				_fullChecked = true;
+				_checked = true;
+				return result;
+			}
+		}
+
+		
 		
+
 		public abstract string GetInvalidEntry();
 
+		protected abstract IList<string> GetInvalidEntriesTemplate(VectoSimulationJobType jobType);
+
+		public IList<string> GetInvalidEntries(VectoSimulationJobType jobType)
+		{
+			if (_checked && _isComplete) {
+				return _invalidEntries; //<- empty
+			} else {
+				IsInputDataCompleteFullCheck(jobType);
+				return GetInvalidEntriesTemplate(jobType);
+			}
+			
+		}
+
 		protected bool MethodComplete(bool result, string methodName)
 		{
 			if (result)
@@ -367,9 +438,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 		public DigestData Signature => _manufacturingStages.First().Signature;
 
-		public override bool IsInputDataComplete(VectoSimulationJobType jobType)
+
+		protected override bool IsInputDataCompleteTemplate(VectoSimulationJobType jobType, bool fullCheck)
 		{
-			return GetConsolidatedVehicleData().IsInputDataComplete(jobType);
+			return fullCheck
+				? GetConsolidatedVehicleData().IsInputDataCompleteFullCheck(jobType)
+				: GetConsolidatedVehicleData().IsInputDataComplete(jobType);
 		}
 
 		public override string GetInvalidEntry()
@@ -377,6 +451,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			return _consolidatedVehicleData.GetInvalidEntry();
 		}
 
+		#region Overrides of ConsolidatedDataBase
+		protected override IList<string> GetInvalidEntriesTemplate(VectoSimulationJobType jobType)
+		{
+			return _invalidEntries.Concat(_consolidatedVehicleData.GetInvalidEntries(jobType)).ToList();
+		}
+		#endregion
+
 		private ConsolidatedVehicleData GetConsolidatedVehicleData()
 		{
 			return _consolidatedVehicleData ??
@@ -570,11 +651,37 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			return validAirdragEntries;
 		}
 
-		public override bool IsInputDataComplete(VectoSimulationJobType jobType)
+		protected override bool IsInputDataCompleteTemplate(VectoSimulationJobType jobType, bool fullCheck)
 		{
 			GetADAS();
 			GetComponents();
+			if (fullCheck) {
+				//use Binary AND to execute all Statements and gather information about missing parameters.
+				return InputComplete(Model, nameof(Model))
+					& InputComplete(LegislativeClass, nameof(LegislativeClass))
+					& InputComplete(CurbMassChassis, nameof(CurbMassChassis))
+					& InputComplete(GrossVehicleMassRating, nameof(GrossVehicleMassRating))
+					& MethodComplete(IsAirdragEntriesValid(), nameof(IsAirdragEntriesValid))
+					& MethodComplete(IsTankSystemValid(), nameof(IsTankSystemValid))
+					& InputComplete(RegisteredClass, nameof(RegisteredClass))
+					& InputComplete(NumberPassengerSeatsLowerDeck, nameof(NumberPassengerSeatsLowerDeck))
+					& InputComplete(NumberPassengerSeatsUpperDeck, nameof(NumberPassengerSeatsUpperDeck))
+					& InputComplete(NumberPassengersStandingLowerDeck, nameof(NumberPassengersStandingLowerDeck))
+					& InputComplete(NumberPassengersStandingUpperDeck, nameof(NumberPassengersStandingUpperDeck))
+					& InputComplete(VehicleCode, nameof(VehicleCode))
+					& InputComplete(LowEntry, nameof(LowEntry)) 
+					& InputComplete(Height, nameof(Height))
+					& InputComplete(Length, nameof(Length)) 
+					& InputComplete(Width, nameof(Width))
+					& InputComplete(EntranceHeight, nameof(EntranceHeight))
+					& InputComplete(DoorDriveTechnology, nameof(DoorDriveTechnology))
+					& InputComplete(_consolidatedADAS, nameof(_consolidatedADAS))
+					& _consolidatedADAS.IsInputDataCompleteFullCheck(jobType)
+					& InputComplete(_consolidatedComponents, nameof(_consolidatedComponents))
+					& _consolidatedComponents.IsInputDataCompleteFullCheck(jobType);
+			}
 			
+		
 			return  InputComplete(Model, nameof(Model)) 
 					&& InputComplete(LegislativeClass, nameof(LegislativeClass)) 
 					&& InputComplete(CurbMassChassis, nameof(CurbMassChassis)) 
@@ -597,6 +704,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 					&& _consolidatedComponents.IsInputDataComplete(jobType);
 		}
 
+
 		public override string GetInvalidEntry()
 		{
 			if (InvalidEntry != null)
@@ -610,6 +718,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 			return null;
 		}
+
+		protected override IList<string> GetInvalidEntriesTemplate(VectoSimulationJobType jobType)
+		{
+			return _invalidEntries.Concat(_consolidatedComponents.GetInvalidEntries(jobType))
+				.Concat(_consolidatedADAS.GetInvalidEntries(jobType)).ToList();
+		}
 	}
 
 	// ---------------------------------------------------------------------------------------
@@ -644,7 +758,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			return default;
 		}
 
-		public override bool IsInputDataComplete(VectoSimulationJobType jobType)
+		protected override bool IsInputDataCompleteTemplate(VectoSimulationJobType jobType, bool fullCheck)
 		{
 			return InputComplete(ATEcoRollReleaseLockupClutch, nameof(ATEcoRollReleaseLockupClutch));
 		}
@@ -653,6 +767,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		{
 			return InvalidEntry;
 		}
+
+		protected override IList<string> GetInvalidEntriesTemplate(VectoSimulationJobType jobType)
+		{
+			return _invalidEntries;
+		}
 	}
 
 	// ---------------------------------------------------------------------------------------
@@ -727,11 +846,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		}
 
 
-		public override bool IsInputDataComplete(VectoSimulationJobType jobType)
+		protected override bool IsInputDataCompleteTemplate(VectoSimulationJobType jobType, bool fullCheck)
 		{
 			GetAirdragInputData();
 			GetBusAuxiliaries();
-
+			if (fullCheck) {
+				//use Binary AND to execute all Statements and gather information about missing parameters.
+				return InputComplete(_consolidateBusAuxiliariesData, nameof(_consolidateBusAuxiliariesData))
+						& _consolidateBusAuxiliariesData.IsInputDataCompleteFullCheck(jobType);
+			}
 			return InputComplete(_consolidateBusAuxiliariesData, nameof(_consolidateBusAuxiliariesData)) 
 					&& _consolidateBusAuxiliariesData.IsInputDataComplete(jobType);
 		}
@@ -749,6 +872,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 			return InvalidEntry;
 		}
+
+		protected override IList<string> GetInvalidEntriesTemplate(VectoSimulationJobType jobType)
+		{
+			return _invalidEntries.Concat(_consolidateBusAuxiliariesData.GetInvalidEntries(jobType)).ToList();
+		}
 	}
 
 	// ---------------------------------------------------------------------------------------
@@ -802,7 +930,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			}
 		}
 
-		public override bool IsInputDataComplete(VectoSimulationJobType jobType)
+		protected override bool IsInputDataCompleteTemplate(VectoSimulationJobType jobType, bool fullCheck)
 		{
 			return InputComplete(AirdragEntry, nameof(AirdragEntry));
 		}
@@ -811,6 +939,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		{
 			return InvalidEntry;
 		}
+
+		protected override IList<string> GetInvalidEntriesTemplate(VectoSimulationJobType jobType)
+		{
+			return _invalidEntries;
+		}
 	}
 
 	// ---------------------------------------------------------------------------------------
@@ -874,11 +1007,18 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		}
 		
 
-		public override bool IsInputDataComplete(VectoSimulationJobType jobType)
+		protected override bool IsInputDataCompleteTemplate(VectoSimulationJobType jobType, bool fullCheck)
 		{
 			GetElectricConsumers();
 			GetHVACAux();
+			if (fullCheck) {
+				//use Binary AND to execute all Statements and gather information about missing parameters.
+				return InputComplete(_consolidateElectricConsumerData, nameof(_consolidateElectricConsumerData))
+					& _consolidateElectricConsumerData.IsInputDataCompleteFullCheck(jobType)
+					& InputComplete(_consolidatedHVACBusAuxiliariesData, nameof(_consolidatedHVACBusAuxiliariesData))
+					& _consolidatedHVACBusAuxiliariesData.IsInputDataCompleteFullCheck(jobType);
 
+			}
 			return InputComplete(_consolidateElectricConsumerData, nameof(_consolidateElectricConsumerData)) 
 					&& _consolidateElectricConsumerData.IsInputDataComplete(jobType)
 					&& InputComplete(_consolidatedHVACBusAuxiliariesData, nameof(_consolidatedHVACBusAuxiliariesData))
@@ -898,6 +1038,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			return null;
 		}
 
+		protected override IList<string> GetInvalidEntriesTemplate(VectoSimulationJobType jobType)
+		{
+			return _invalidEntries.Concat(_consolidateElectricConsumerData.GetInvalidEntries(jobType))
+				.Concat(_consolidatedHVACBusAuxiliariesData.GetInvalidEntries(jobType)).ToList();
+		}
+
 
 		private XmlNode GetBusAuxXMLSource()
 		{
@@ -948,8 +1094,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			return default;
 		}
 
-		public override bool IsInputDataComplete(VectoSimulationJobType jobType)
+		protected override bool IsInputDataCompleteTemplate(VectoSimulationJobType jobType, bool fullCheck)
 		{
+			if (fullCheck) {
+				return InputComplete(InteriorLightsLED, nameof(InteriorLightsLED))
+						& InputComplete(DayrunninglightsLED, nameof(DayrunninglightsLED))
+						& InputComplete(PositionlightsLED, nameof(PositionlightsLED))
+						& InputComplete(HeadlightsLED, nameof(HeadlightsLED))
+						& InputComplete(BrakelightsLED, nameof(BrakelightsLED));
+			}
 			return InputComplete(InteriorLightsLED, nameof(InteriorLightsLED))
 				&& InputComplete(DayrunninglightsLED, nameof(DayrunninglightsLED))
 				&& InputComplete(PositionlightsLED, nameof(PositionlightsLED))
@@ -961,6 +1114,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		{
 			return InvalidEntry;
 		}
+
+		protected override IList<string> GetInvalidEntriesTemplate(VectoSimulationJobType jobType)
+		{
+			return _invalidEntries;
+		}
 	}
 
 	// ---------------------------------------------------------------------------------------
@@ -1043,8 +1201,19 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			}
 		}
 		
-		public override bool IsInputDataComplete(VectoSimulationJobType jobType)
-		{
+		protected override bool IsInputDataCompleteTemplate(VectoSimulationJobType jobType, bool fullCheck)
+		{
+			if (fullCheck) {
+				return MethodComplete(IsCorrectSystemConfiguration(), nameof(IsCorrectSystemConfiguration))
+						& InputComplete(HeatPumpTypeDriverCompartment, nameof(HeatPumpTypeDriverCompartment))
+						& InputComplete(HeatPumpModeDriverCompartment, nameof(HeatPumpModeDriverCompartment))
+						& InputComplete(HeatPumpPassengerCompartments, nameof(HeatPumpPassengerCompartments))
+						& InputComplete(AuxHeaterPower, nameof(AuxHeaterPower))
+						& InputComplete(DoubleGlazing, nameof(DoubleGlazing))
+						& InputComplete(AdjustableAuxiliaryHeater, nameof(AdjustableAuxiliaryHeater))
+						& InputComplete(SeparateAirDistributionDucts, nameof(SeparateAirDistributionDucts))
+						& MethodComplete(RequiredParametersForJobType(jobType), nameof(RequiredParametersForJobType));
+			}
 			return MethodComplete(IsCorrectSystemConfiguration(), nameof(IsCorrectSystemConfiguration))
 					&& InputComplete(HeatPumpTypeDriverCompartment, nameof(HeatPumpTypeDriverCompartment))
 					&& InputComplete(HeatPumpModeDriverCompartment, nameof(HeatPumpModeDriverCompartment))
@@ -1060,6 +1229,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		{
 			return InvalidEntry;
 		}
+
+		protected override IList<string> GetInvalidEntriesTemplate(VectoSimulationJobType jobType)
+		{
+			return _invalidEntries;
+		}
 	}
 
 	#endregion