diff --git a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs
index cca4222667c8406191d6272a6a26d12658710ca5..802f0b1b96a828a6ed304415ccf710c3680e1b70 100644
--- a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs
+++ b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs
@@ -99,6 +99,10 @@ namespace TUGraz.VectoCommon.InputData
 		IPrimaryVehicleInformationInputDataProvider PrimaryVehicle { get; }
 
 		IList<IManufacturingStageInputData> ManufacturingStages { get; }
+
+		IManufacturingStageInputData ConsolidateManufacturingStage { get; }
+
+		bool InputComplete { get; }
 	}
 
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs
index c454b9f7ea5e8bc25419dd8bec7517431677dda2..3cdf1d8642b2567f835182c27920dae2d2b671f8 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs
@@ -349,7 +349,20 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		public XMLDeclarationCompleteBusAuxiliariesDataProviderV28(IXMLDeclarationVehicleData vehicle,
 			XmlNode componentNode, string sourceFile)
-			: base(vehicle, componentNode, sourceFile) { }
+			: base(vehicle, componentNode, sourceFile) {}
+
+		private bool IsBusHVACTagEmpty()
+		{
+			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 ;
+		}
+		
+		public override IHVACBusAuxiliariesDeclarationData HVACAux
+		{
+			get { return IsBusHVACTagEmpty() ? null : this; }
+		}
 
 
 		public override BusHVACSystemConfiguration? SystemConfiguration
@@ -458,6 +471,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			}
 		}
 
+		private bool IsElectricConsumersTagEmpty()
+		{
+			return InteriorLightsLED == null && DayrunninglightsLED == null && PositionlightsLED == null &&
+					HeadlightsLED == null && BrakelightsLED == null;
+		}
+
+
+		public override IElectricConsumersDeclarationData ElectricConsumers
+		{
+			get { return IsElectricConsumersTagEmpty() ? null : this; }
+		}
 
 		public override bool? InteriorLightsLED
 		{
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationMultistageInputData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationMultistageInputData.cs
index f45ee74cacdc375eba2784428edc61408c2ad3f3..5919110af9784ca99b5dd0369b43f72371453730 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationMultistageInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationMultistageInputData.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Xml;
 using System.Xml.Linq;
+using Ninject;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
@@ -79,6 +80,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		private IPrimaryVehicleInformationInputDataProvider _primaryVehicle;
 		private IList<IManufacturingStageInputData> _manufacturingStages;
+		private IManufacturingStageInputData _concolidateManfacturingStage;
 
 
 		public XMLDeclarationMultistageJobInputDataV01(XmlNode node, IXMLMultistageInputDataProvider inputProvider,
@@ -98,6 +100,16 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			get { return _manufacturingStages ?? (_manufacturingStages = Reader.ManufacturingStages); }
 		}
 
+		public IManufacturingStageInputData ConsolidateManufacturingStage
+		{
+			get { return _concolidateManfacturingStage ?? (_concolidateManfacturingStage = Reader.ConsolidateManufacturingStage); }
+		}
+
+		public bool InputComplete
+		{
+			get { return Reader.InputComplete; }
+		}
+
 		public IXMLMultistageJobReader Reader { protected get; set; }
 
 		public IXMLMultistageInputDataProvider InputData { get; }
@@ -268,4 +280,39 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		public IXMLMultistageReader Reader { protected get; set; }
 	}
+
+	// ---------------------------------------------------------------------------------------
+
+
+	public class XMLDeclarationVIFInputData : IMultistageVIFInputData
+	{
+
+		private readonly IXMLInputDataReader _xmlInputReader;
+		
+		public XMLDeclarationVIFInputData(string vifFileName, IVehicleDeclarationInputData vehicleInput)
+		{
+
+			var kernel = new StandardKernel(new VectoNinjectModule());
+			_xmlInputReader = kernel.Get<IXMLInputDataReader>();
+
+			VehicleInputData = vehicleInput;
+			MultistageInputData = CreateMultistageReader(vifFileName);
+		}
+
+
+		private IMultistageBusInputDataProvider CreateMultistageReader(string vifFileName)
+		{
+			var reader = XmlReader.Create(vifFileName);
+			return _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider;
+		}
+
+
+		public DataSource DataSource
+		{
+			get { return null; }
+		}
+		public IVehicleDeclarationInputData VehicleInputData { get; }
+		public IMultistageBusInputDataProvider MultistageInputData { get; }
+	}
+
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
index c23c943f063a6607ff7799b282578ec288f861c2..da8ada2f47b16ee1d33efbe1ced12b19841147d5 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
@@ -1336,13 +1336,22 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			}
 		}
 
+		
+
 		public override IVehicleComponentsDeclaration Components
 		{
 			get 
 			{ 
 				if (ComponentNode == null)
 					return null;
-				return _components ?? (_components = ComponentReader.ComponentInputData);
+				
+				if(_components == null)
+					_components = ComponentReader.ComponentInputData;
+
+				if (_components.BusAuxiliaries == null && _components.AirdragInputData == null)
+					return null;
+
+				return _components;
 			}
 		}
 		
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/IXMLDeclarationInputDataReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/IXMLDeclarationInputDataReader.cs
index 7ced5f8e6b8a0a7ca52701ff29217ddadaebd9e8..aa47260eabc8ae332807c37d450302f74e310a55 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/IXMLDeclarationInputDataReader.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/IXMLDeclarationInputDataReader.cs
@@ -28,6 +28,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 		IPrimaryVehicleInformationInputDataProvider PrimaryVehicle { get; }
 
 		IList<IManufacturingStageInputData> ManufacturingStages { get; }
+
+		IManufacturingStageInputData ConsolidateManufacturingStage { get; }
+
+		bool InputComplete { 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 22f586ff33b40aa703464bcb711fc9d8a01e9d33..baef09e2f0582803a35ce6f6adad8bfd12b70681 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs
@@ -1,10 +1,15 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
+using System.Linq;
 using System.Xml;
 using System.Xml.Linq;
 using Castle.Core.Internal;
 using Ninject;
+using TUGraz.VectoCommon.BusAuxiliaries;
 using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
 using TUGraz.VectoCore.Utils;
@@ -63,6 +68,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		protected IXMLDeclarationMultistageJobInputData InputData;
 		protected IPrimaryVehicleInformationInputDataProvider _primaryVehicle;
 		protected IList<IManufacturingStageInputData> _manufacturingStages;
+		protected ConsolidateManufacturingStages _consolidateManufacturingStages;
 
 		private XmlNodeList _manufacturingNodeStages;
 
@@ -77,12 +83,20 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			InputData = inputData;
 			SetManufacturingStageNodes();
 		}
-		
+
 		public IPrimaryVehicleInformationInputDataProvider PrimaryVehicle
 		{
 			get { return _primaryVehicle ?? (_primaryVehicle = CreateComponent(XMLNames.Bus_PrimaryVehicle, PrimaryVehicleCreator)); }
 		}
 
+		protected IPrimaryVehicleInformationInputDataProvider PrimaryVehicleCreator(string version, XmlNode node,
+			string arg3)
+		{
+			var primaryVehicle = Factory.CreatePrimaryMultistageVehicleData(version, node, arg3);
+			primaryVehicle.Reader = Factory.CreatePrimaryVehicleBusInputReader(version, primaryVehicle, node.FirstChild);
+			return primaryVehicle;
+		}
+
 		public IList<IManufacturingStageInputData> ManufacturingStages
 		{
 			get
@@ -94,25 +108,18 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			}
 		}
 
-		protected IPrimaryVehicleInformationInputDataProvider PrimaryVehicleCreator(string version, XmlNode node,
-			string arg3)
-		{
-			var primaryVehicle = Factory.CreatePrimaryMultistageVehicleData(version, node, arg3);
-			primaryVehicle.Reader = Factory.CreatePrimaryVehicleBusInputReader(version, primaryVehicle, node.FirstChild);
-			return primaryVehicle;
-		}
-
 		private IList<IManufacturingStageInputData> ManufacturingStagesCreator()
 		{
 			var stages = new List<IManufacturingStageInputData>();
 
-			foreach (XmlNode manufacturingNodeStage in _manufacturingNodeStages) {
+			foreach (XmlNode manufacturingNodeStage in _manufacturingNodeStages)
+			{
 				var version = XMLHelper.GetXsdType(manufacturingNodeStage?.SchemaInfo.SchemaType);
 				stages.Add(ManufacturingStageCreator(version, manufacturingNodeStage));
 			}
 			return stages;
 		}
-		
+
 		protected IManufacturingStageInputData ManufacturingStageCreator(string version, XmlNode node)
 		{
 			var stage = Factory.CreateMultistageData(version, node, null);
@@ -120,6 +127,38 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			return stage;
 		}
 
+		public IManufacturingStageInputData ConsolidateManufacturingStage
+		{
+			get
+			{
+				if (ManufacturingStages.IsNullOrEmpty())
+					return null;
+
+				return _consolidateManufacturingStages ??
+						(_consolidateManufacturingStages = GetConsolidateManufacturingStage());
+			}
+		}
+
+		public bool InputComplete
+		{
+			get
+			{
+				if (ManufacturingStages.IsNullOrEmpty())
+					return false;
+
+				if(_consolidateManufacturingStages == null)
+					_consolidateManufacturingStages = GetConsolidateManufacturingStage();
+
+				return _consolidateManufacturingStages.IsInputDataComplete();
+			}
+		}
+
+		private ConsolidateManufacturingStages GetConsolidateManufacturingStage()
+		{
+			return new ConsolidateManufacturingStages(ManufacturingStages);
+		}
+
+
 		private void SetManufacturingStageNodes()
 		{
 			_manufacturingNodeStages = BaseNode.SelectNodes(XMLHelper.QueryLocalName(XMLNames.ManufacturingStage));
@@ -127,7 +166,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 	}
 
 	// ---------------------------------------------------------------------------------------
-	
+
 	public class XMLMultistageEntryReaderV01 : AbstractComponentReader, IXMLMultistageReader
 	{
 		public static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_MULTISTAGE_BUS_VEHICLE_NAMESPACE_VO1;
@@ -136,7 +175,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 		public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE);
 
-		
+
 		protected readonly XmlNode JobNode;
 		protected readonly IXMLMultistageEntryInputDataProvider _multistageData;
 		protected IApplicationInformation _applicationInformation;
@@ -151,7 +190,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			JobNode = node;
 			_multistageData = multistageData;
 		}
-		
+
 		public IVehicleDeclarationInputData Vehicle
 		{
 			get { return _vehicle ?? (_vehicle = CreateComponent(XMLNames.Tag_Vehicle, VehicleCreator)); }
@@ -161,17 +200,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		{
 			var vehicle = Factory.CreateVehicleData(version, null, node, arg3);
 
-			if(vehicle.ComponentNode != null)
+			if (vehicle.ComponentNode != null)
 				vehicle.ComponentReader = GetReader(vehicle, vehicle.ComponentNode, Factory.CreateComponentReader);
-			
-			if(vehicle.ADASNode != null)
+
+			if (vehicle.ADASNode != null)
 				vehicle.ADASReader = GetReader(vehicle, vehicle.ADASNode, Factory.CreateADASReader);
-			
+
 			return vehicle;
 		}
 
-		public IApplicationInformation ApplicationInformation 
-		{ 
+		public IApplicationInformation ApplicationInformation
+		{
 			get
 			{
 				return _applicationInformation ??
@@ -189,7 +228,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			return xmlNode == null ? null : new DigestData(xmlNode);
 		}
 	}
-	
+
 	// ---------------------------------------------------------------------------------------
 
 
@@ -201,7 +240,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		public const string XSD_TYPE = "PrimaryVehicleDataType";
 
 		public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE);
-		
+
 		protected XmlNode JobNode;
 		protected IDeclarationJobInputData _jobData;
 		protected IXMLPrimaryVehicleBusInputData _primaryInputData;
@@ -234,7 +273,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			job.Reader = Factory.CreatePrimaryVehicleJobReader(version, job, JobNode);
 			return job;
 		}
-		
+
 		public IResultsInputData ResultsInputData
 		{
 			get
@@ -248,17 +287,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		{
 			return Factory.CreateResultsInputDataReader(version, node);
 		}
-		
+
 		public DigestData GetDigestData(XmlNode xmlNode)
 		{
 			return xmlNode == null ? null : new DigestData(xmlNode);
 		}
-		
+
 		protected IApplicationInformation ApplicationCreator(string version, XmlNode node, string agr3)
 		{
 			return Factory.CreateApplicationInformationReader(version, node);
 		}
-		
+
 		public IApplicationInformation ApplicationInformation
 		{
 			get
@@ -268,4 +307,791 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			}
 		}
 	}
+
+	// ---------------------------------------------------------------------------------------
+
+
+
+	public abstract class ConsolidatedDataBase
+	{
+		protected readonly IList<IManufacturingStageInputData> _manufacturingStages;
+
+		public ConsolidatedDataBase(IList<IManufacturingStageInputData> manufacturingStages)
+		{
+			_manufacturingStages = manufacturingStages;
+		}
+
+		protected T GetPropertyValue<T>(object obj, string name)
+		{
+			var propertyValue = GetPropertyValue(obj, name);
+			if (propertyValue == null)
+				return default;
+
+			return (T)propertyValue;
+		}
+
+		protected object GetPropertyValue(object obj, string name)
+		{
+			foreach (var part in name.Split('.'))
+			{
+				if (obj == null) { return null; }
+
+				var type = obj.GetType();
+				var info = type.GetProperty(part);
+				if (info == null) { return null; }
+
+				obj = info.GetValue(obj, null);
+			}
+			return obj;
+		}
+
+		public abstract bool IsInputDataComplete();
+	}
+
+	public class ConsolidateManufacturingStages : ConsolidatedDataBase, IManufacturingStageInputData
+	{
+
+		private ConsolidatedVehicleData _consolidatedVehicleData;
+
+		public ConsolidateManufacturingStages(IList<IManufacturingStageInputData> manufacturingStages)
+			: base(manufacturingStages) { }
+
+		public DigestData HashPreviousStage
+		{
+			get { return _manufacturingStages.Last().HashPreviousStage; }
+		}
+
+		public int StageCount
+		{
+			get { return _manufacturingStages.Last().StageCount; }
+		}
+
+		public IVehicleDeclarationInputData Vehicle
+		{
+			get
+			{
+				return _consolidatedVehicleData ??
+					  (_consolidatedVehicleData = new ConsolidatedVehicleData(_manufacturingStages));
+			}
+		}
+
+		public IApplicationInformation ApplicationInformation
+		{
+			get { return _manufacturingStages.Last().ApplicationInformation; }
+		}
+
+		public DigestData Signature
+		{
+			get { return _manufacturingStages.Last().Signature; }
+		}
+
+		public override bool IsInputDataComplete()
+		{
+			if (_consolidatedVehicleData == null)
+				_consolidatedVehicleData = new ConsolidatedVehicleData(_manufacturingStages);
+			
+			return _consolidatedVehicleData.IsInputDataComplete();
+		}
+	}
+
+
+	public class ConsolidatedVehicleData : ConsolidatedDataBase, IVehicleDeclarationInputData
+	{
+		private ConsolidatedADASData _consolidatedADAS;
+		private ConsolidatedComponentData _consolidatedComponents;
+
+		public ConsolidatedVehicleData(IList<IManufacturingStageInputData> manufacturingStages)
+			: base(manufacturingStages) { }
+
+		#region ManufacturingStage mandatory properties
+
+		public string Manufacturer
+		{
+			get { return _manufacturingStages.Last().Vehicle.Manufacturer; }
+		}
+
+		public string ManufacturerAddress
+		{
+			get { return _manufacturingStages.Last().Vehicle.ManufacturerAddress; }
+		}
+		
+		public DateTime Date
+		{
+			get { return _manufacturingStages.Last().Vehicle.Date; }
+		}
+
+		public string VIN
+		{
+			get { return _manufacturingStages.Last().Vehicle.VIN; }
+		}
+
+		public VehicleDeclarationType VehicleDeclarationType
+		{
+			get { return _manufacturingStages.Last().Vehicle.VehicleDeclarationType; }
+		}
+
+		#endregion
+
+		#region ManufacturingStage optional properties
+
+		public string Model
+		{
+			get { return GetVehiclePropertyValue<string>(nameof(Model)); }
+		}
+
+		public LegislativeClass? LegislativeClass
+		{
+			get { return GetVehiclePropertyValue<LegislativeClass?>(nameof(LegislativeClass)); }
+		}
+
+		public Kilogram CurbMassChassis
+		{
+			get { return GetVehiclePropertyValue<Kilogram>(nameof(CurbMassChassis)); }
+		}
+
+		public Kilogram GrossVehicleMassRating
+		{
+			get
+			{
+				return GetVehiclePropertyValue<Kilogram>(nameof(GrossVehicleMassRating));
+			}
+		}
+
+		public bool? AirdragModifiedMultistage
+		{
+			get
+			{
+				return GetVehiclePropertyValue<bool?>(nameof(AirdragModifiedMultistage));
+			}
+		}
+
+		public TankSystem? TankSystem
+		{
+			get { return GetVehiclePropertyValue<TankSystem?>(nameof(TankSystem)); }
+		}
+
+		public RegistrationClass? RegisteredClass
+		{
+			get { return GetVehiclePropertyValue<RegistrationClass?>(nameof(RegisteredClass)); }
+		}
+
+
+		public int? NumberOfPassengersUpperDeck
+		{
+			get
+			{
+				return GetVehiclePropertyValue<int?>(nameof(NumberOfPassengersUpperDeck));
+			}
+		}
+
+		public int? NumberOfPassengersLowerDeck
+		{
+			get
+			{
+				return GetVehiclePropertyValue<int?>(nameof(NumberOfPassengersLowerDeck));
+			}
+		}
+
+		public VehicleCode? VehicleCode
+		{
+			get { return GetVehiclePropertyValue<VehicleCode?>(nameof(VehicleCode)); }
+		}
+
+		public bool? LowEntry
+		{
+			get { return GetVehiclePropertyValue<bool?>(nameof(LowEntry)); }
+		}
+
+		public Meter Height
+		{
+			get { return GetVehiclePropertyValue<Meter>(nameof(Height)); }
+		}
+
+		public Meter Length
+		{
+			get { return GetVehiclePropertyValue<Meter>(nameof(Length)); }
+		}
+
+		public Meter Width
+		{
+			get { return GetVehiclePropertyValue<Meter>(nameof(Width)); }
+		}
+
+		public Meter EntranceHeight
+		{
+			get { return GetVehiclePropertyValue<Meter>(nameof(EntranceHeight)); }
+		}
+
+		public ConsumerTechnology? DoorDriveTechnology
+		{
+			get { return GetVehiclePropertyValue<ConsumerTechnology?>(nameof(DoorDriveTechnology)); }
+
+		}
+
+		public IAdvancedDriverAssistantSystemDeclarationInputData ADAS
+		{
+			get
+			{
+				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;
+
+				return _consolidatedComponents
+						?? (_consolidatedComponents = new ConsolidatedComponentData(_manufacturingStages));
+
+			}
+		}
+
+		#endregion
+
+		#region Non set IVehicleDeclarationInputData interface properties
+
+		public DataSource DataSource { get; }
+		public bool SavedInDeclarationMode { get; }
+		public string AppVersion { get; }
+		public CertificationMethod CertificationMethod { get; }
+		public string CertificationNumber { get; }
+		public DigestData DigestValue { get; }
+		public string Identifier { get; }
+		public bool ExemptedVehicle { get; }
+		public VehicleCategory VehicleCategory { get; }
+		public AxleConfiguration AxleConfiguration { get; }
+		public IList<ITorqueLimitInputData> TorqueLimits { get; }
+
+		public PerSecond EngineIdleSpeed { get; }
+		public bool VocationalVehicle { get; }
+		public bool SleeperCab { get; }
+		public bool ZeroEmissionVehicle { get; }
+		public bool HybridElectricHDV { get; }
+		public bool DualFuelVehicle { get; }
+		public Watt MaxNetPower1 { get; }
+		public Watt MaxNetPower2 { get; }
+		public CubicMeter CargoVolume { get; }
+		public bool Articulated { get; }
+
+		public XmlNode XMLSource { get; }
+
+		#endregion
+
+		private T GetVehiclePropertyValue<T>(string propertyName)
+		{
+			for (int i = _manufacturingStages.Count - 1; i >= 0; i--)
+			{
+				var value = GetPropertyValue<T>(_manufacturingStages[i].Vehicle, propertyName);
+				if (value != null)
+					return value;
+			}
+			return default;
+		}
+
+		public override bool IsInputDataComplete()
+		{
+			return Model != null && LegislativeClass != null && CurbMassChassis != null && GrossVehicleMassRating != null 
+					&& AirdragModifiedMultistage != null && TankSystem != null && 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();
+		}
+	}
+
+
+	public class ConsolidatedADASData : ConsolidatedDataBase, IAdvancedDriverAssistantSystemDeclarationInputData
+	{
+		public ConsolidatedADASData(IList<IManufacturingStageInputData> manufacturingStages)
+			: base(manufacturingStages) { }
+
+		public bool EngineStopStart
+		{
+			get { return GetADASPropertyValue<bool>(nameof(EngineStopStart)); }
+		}
+
+		public EcoRollType EcoRoll
+		{
+			get { return GetADASPropertyValue<EcoRollType>(nameof(EcoRoll)); }
+		}
+
+		public PredictiveCruiseControlType PredictiveCruiseControl
+		{
+			get { return GetADASPropertyValue<PredictiveCruiseControlType>(nameof(PredictiveCruiseControl)); }
+		}
+
+		public bool? ATEcoRollReleaseLockupClutch
+		{
+			get { return GetADASPropertyValue<bool?>(nameof(ATEcoRollReleaseLockupClutch)); }
+		}
+
+		public XmlNode XMLSource { get; }
+
+
+		private T GetADASPropertyValue<T>(string propertyName)
+		{
+			for (int i = _manufacturingStages.Count - 1; i >= 0; i--)
+			{
+				var adas = _manufacturingStages[i].Vehicle.ADAS;
+				if (adas == null)
+					continue;
+				var value = GetPropertyValue<T>(adas, propertyName);
+				if (value != null)
+					return value;
+			}
+
+			return default;
+		}
+
+		public override bool IsInputDataComplete()
+		{
+			return ATEcoRollReleaseLockupClutch != null;
+		}
+	}
+
+	public class ConsolidatedComponentData : ConsolidatedDataBase, IVehicleComponentsDeclaration
+	{
+		private ConsolidatedAirdragData _consolidateAirdragData;
+		private ConsolidatedBusAuxiliariesData _consolidateBusAuxiliariesData;
+
+		public ConsolidatedComponentData(IList<IManufacturingStageInputData> manufacturingStages)
+			: base(manufacturingStages) { }
+
+
+		public IAirdragDeclarationInputData AirdragInputData
+		{
+			get
+			{
+				if (GetComponentPropertyValue<IAirdragDeclarationInputData>(nameof(AirdragInputData)) == null)
+					return null;
+
+				return _consolidateAirdragData ??
+						(_consolidateAirdragData = new ConsolidatedAirdragData(_manufacturingStages));
+			}
+		}
+		public IGearboxDeclarationInputData GearboxInputData
+		{
+			get { return null; }
+		}
+		public ITorqueConverterDeclarationInputData TorqueConverterInputData
+		{
+			get { return null; }
+		}
+		public IAxleGearInputData AxleGearInputData
+		{
+			get { return null; }
+		}
+		public IAngledriveInputData AngledriveInputData
+		{
+			get { return null; }
+		}
+		public IEngineDeclarationInputData EngineInputData
+		{
+			get { return null; }
+		}
+		public IAuxiliariesDeclarationInputData AuxiliaryInputData
+		{
+			get { return null; }
+		}
+		public IRetarderInputData RetarderInputData
+		{
+			get { return null; }
+		}
+		public IPTOTransmissionInputData PTOTransmissionInputData
+		{
+			get { return null; }
+		}
+		public IAxlesDeclarationInputData AxleWheels
+		{
+			get { return null; }
+		}
+		
+		public IBusAuxiliariesDeclarationData BusAuxiliaries
+		{
+			get
+			{
+				if (GetComponentPropertyValue<IBusAuxiliariesDeclarationData>(nameof(BusAuxiliaries)) == null)
+					return null;
+
+				return _consolidateBusAuxiliariesData ??
+						(_consolidateBusAuxiliariesData = new ConsolidatedBusAuxiliariesData(_manufacturingStages));
+			}
+		}
+		public IElectricStorageDeclarationInputData ElectricStorage
+		{
+			get { return null; }
+		}
+		public IElectricMachinesDeclarationInputData ElectricMachines
+		{
+			get { return null; }
+		}
+
+		private T GetComponentPropertyValue<T>(string propertyName)
+		{
+			for (int i = _manufacturingStages.Count - 1; i >= 0; i--)
+			{
+				var component = _manufacturingStages[i].Vehicle?.Components;
+				if (component == null)
+					continue;
+				var value = GetPropertyValue<T>(component, propertyName);
+				if (value != null)
+					return value;
+			}
+
+			return default;
+		}
+
+
+		public override bool IsInputDataComplete()
+		{
+			return _consolidateBusAuxiliariesData != null && _consolidateBusAuxiliariesData.IsInputDataComplete();
+		}
+	}
+
+
+
+	public class ConsolidatedAirdragData : ConsolidatedDataBase, IAirdragDeclarationInputData
+	{
+		public IAirdragDeclarationInputData AirdragEntry { private set; get; }
+
+		public ConsolidatedAirdragData(IList<IManufacturingStageInputData> manufacturingStages)
+			: base(manufacturingStages)
+		{
+			SetLastValidAirdragEntry();
+		}
+
+		public string Manufacturer
+		{
+			get { return AirdragEntry?.Manufacturer; }
+		}
+
+		public string Model
+		{
+			get { return AirdragEntry?.Model; }
+		}
+
+		public DateTime Date
+		{
+			get { return AirdragEntry.Date; }
+		}
+
+		public string AppVersion
+		{
+			get { return AirdragEntry?.AppVersion; }
+		}
+		public CertificationMethod CertificationMethod
+		{
+			get { return AirdragEntry.CertificationMethod; }
+		}
+		public string CertificationNumber
+		{
+			get { return AirdragEntry?.CertificationNumber; }
+		}
+		public DigestData DigestValue
+		{
+			get { return AirdragEntry?.DigestValue; }
+		}
+		public SquareMeter AirDragArea
+		{
+			get { return AirdragEntry?.AirDragArea; }
+		}
+		public DataSource DataSource
+		{
+			get { return AirdragEntry?.DataSource; }
+		}
+		public bool SavedInDeclarationMode { get; }
+
+		private void SetLastValidAirdragEntry()
+		{
+			for (int i = _manufacturingStages.Count - 1; i >= 0; i--)
+			{
+				var airdragData = _manufacturingStages[i].Vehicle?.Components?.AirdragInputData;
+				if (airdragData == null)
+					continue;
+
+				var value = airdragData.AirDragArea;
+				if (value == null)
+					continue;
+
+				AirdragEntry = airdragData;
+				return;
+			}
+		}
+
+		public override bool IsInputDataComplete()
+		{
+			return AirdragEntry != null;
+		}
+	}
+
+	public class ConsolidatedBusAuxiliariesData : ConsolidatedDataBase, IBusAuxiliariesDeclarationData
+	{
+		private ConsolidateElectricConsumerData _consolidateElectricConsumerData;
+		private ConsolidatedHVACBusAuxiliariesData _consolidatedHVACBusAuxiliariesData;
+
+
+		public ConsolidatedBusAuxiliariesData(IList<IManufacturingStageInputData> manufacturingStages)
+			: base(manufacturingStages) { }
+
+		public XmlNode XMLSource { get; }
+		public string FanTechnology
+		{
+			get { return null; }
+		}
+		public IList<string> SteeringPumpTechnology
+		{
+			get { return null; }
+		}
+		public IElectricSupplyDeclarationData ElectricSupply
+		{
+			get { return null; }
+		}
+
+		public IElectricConsumersDeclarationData ElectricConsumers
+		{
+			get
+			{
+				if (GetBusAuxPropertyValue<IElectricConsumersDeclarationData>(nameof(ElectricConsumers)) == null)
+					return null;
+					
+				return	_consolidateElectricConsumerData ??
+						(_consolidateElectricConsumerData = new ConsolidateElectricConsumerData(_manufacturingStages));
+			}
+		}
+
+		public IPneumaticSupplyDeclarationData PneumaticSupply
+		{
+			get { return null; }
+		}
+
+		public IPneumaticConsumersDeclarationData PneumaticConsumers
+		{
+			get { return null; }
+		}
+
+		public IHVACBusAuxiliariesDeclarationData HVACAux
+		{
+			get
+			{
+				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;
+				if (busAux == null)
+					continue;
+				var value = GetPropertyValue<T>(busAux, propertyName);
+				if (value != null)
+					return value;
+			}
+
+			return default;
+		}
+		
+		public override bool IsInputDataComplete()
+		{
+			return _consolidateElectricConsumerData != null && _consolidateElectricConsumerData.IsInputDataComplete() &&
+					_consolidatedHVACBusAuxiliariesData != null && _consolidatedHVACBusAuxiliariesData.IsInputDataComplete();
+		}
+	}
+
+
+	public class ConsolidateElectricConsumerData : ConsolidatedDataBase, IElectricConsumersDeclarationData
+	{
+		public ConsolidateElectricConsumerData(IList<IManufacturingStageInputData> manufacturingStages)
+			: base(manufacturingStages) { }
+
+		public bool? InteriorLightsLED
+		{
+			get { return GetElectricConsumerPropertyValue<bool?>(nameof(InteriorLightsLED)); }
+		}
+
+		public bool? DayrunninglightsLED
+		{
+			get { return GetElectricConsumerPropertyValue<bool?>(nameof(DayrunninglightsLED)); }
+		}
+
+		public bool? PositionlightsLED
+		{
+			get { return GetElectricConsumerPropertyValue<bool?>(nameof(PositionlightsLED)); }
+		}
+
+		public bool? HeadlightsLED
+		{
+			get { return GetElectricConsumerPropertyValue<bool?>(nameof(HeadlightsLED)); }
+		}
+
+		public bool? BrakelightsLED
+		{
+			get { return GetElectricConsumerPropertyValue<bool?>(nameof(BrakelightsLED)); }
+		}
+
+
+		private T GetElectricConsumerPropertyValue<T>(string propertyName)
+		{
+			for (int i = _manufacturingStages.Count - 1; i >= 0; i--)
+			{
+				var electricConsumer = _manufacturingStages[i].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()
+		{
+			return InteriorLightsLED != null && DayrunninglightsLED != null && PositionlightsLED != null &&
+					HeadlightsLED != null && BrakelightsLED != null;
+		}
+	}
+
+
+	public class ConsolidatedHVACBusAuxiliariesData : ConsolidatedDataBase, IHVACBusAuxiliariesDeclarationData
+	{
+		public ConsolidatedHVACBusAuxiliariesData(IList<IManufacturingStageInputData> manufacturingStages)
+			: base(manufacturingStages) { }
+
+		public BusHVACSystemConfiguration? SystemConfiguration
+		{
+			get
+			{
+				return GetHVACBusAuxPropertyValue<BusHVACSystemConfiguration?>(nameof(SystemConfiguration));
+			}
+		}
+
+		public HeatPumpType? HeatPumpTypeDriverCompartment
+		{
+			get
+			{
+				return GetHVACBusAuxPropertyValue<HeatPumpType?>(nameof(HeatPumpTypeDriverCompartment));
+			}
+		}
+
+		public HeatPumpMode? HeatPumpModeDriverCompartment
+		{
+			get
+			{
+				return GetHVACBusAuxPropertyValue<HeatPumpMode?>(nameof(HeatPumpModeDriverCompartment));
+			}
+		}
+
+		public HeatPumpType? HeatPumpTypePassengerCompartment
+		{
+			get
+			{
+				return GetHVACBusAuxPropertyValue<HeatPumpType?>(nameof(HeatPumpTypePassengerCompartment));
+			}
+		}
+
+		public HeatPumpMode? HeatPumpModePassengerCompartment
+		{
+			get
+			{
+				return GetHVACBusAuxPropertyValue<HeatPumpMode?>(nameof(HeatPumpModePassengerCompartment));
+			}
+		}
+
+		public Watt AuxHeaterPower
+		{
+			get
+			{
+				return GetHVACBusAuxPropertyValue<Watt>(nameof(AuxHeaterPower));
+			}
+		}
+
+		public bool? DoubleGlazing
+		{
+			get
+			{
+				return GetHVACBusAuxPropertyValue<bool?>(nameof(DoubleGlazing));
+			}
+		}
+
+		public bool? AdjustableAuxiliaryHeater
+		{
+			get
+			{
+				return GetHVACBusAuxPropertyValue<bool?>(nameof(AdjustableAuxiliaryHeater));
+			}
+		}
+
+		public bool? SeparateAirDistributionDucts
+		{
+			get
+			{
+				return GetHVACBusAuxPropertyValue<bool?>(nameof(SeparateAirDistributionDucts));
+			}
+		}
+
+		public bool? WaterElectricHeater
+		{
+			get
+			{
+				return GetHVACBusAuxPropertyValue<bool?>(nameof(WaterElectricHeater));
+			}
+		}
+
+		public bool? AirElectricHeater
+		{
+			get
+			{
+				return GetHVACBusAuxPropertyValue<bool?>(nameof(AirElectricHeater));
+			}
+		}
+
+		public bool? OtherHeatingTechnology
+		{
+			get
+			{
+				return GetHVACBusAuxPropertyValue<bool?>(nameof(OtherHeatingTechnology));
+			}
+		}
+
+		public bool? AdjustableCoolantThermostat { get; }
+
+		public bool EngineWasteGasHeatExchanger { get; }
+
+
+		private T GetHVACBusAuxPropertyValue<T>(string propertyName)
+		{
+			for (int i = _manufacturingStages.Count - 1; i >= 0; i--)
+			{
+				var havacAux = _manufacturingStages[i].Vehicle?.Components?.BusAuxiliaries?.HVACAux;
+				if (havacAux == null)
+					continue;
+				var value = GetPropertyValue<T>(havacAux, propertyName);
+				if (value != null)
+					return value;
+			}
+
+			return default;
+		}
+
+		public override bool IsInputDataComplete()
+		{
+			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;
+		}
+	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index 92a912c391e2f9bd717f3defb62ff5269f78ad23..3f75de7b5c53d2a6e63afde9b738920c0f707386 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -117,6 +117,7 @@
     <Compile Include="Integration\Declaration\TestMaxMassInMUCycle.cs" />
     <Compile Include="Integration\DualFuel\DualFuelTests.cs" />
     <Compile Include="Integration\Hybrid\ParallelHybridTest.cs" />
+    <Compile Include="Integration\Multistage\MultistageVehicleTest.cs" />
     <Compile Include="Integration\VTP\VTPTest.cs" />
     <Compile Include="Integration\FuelTypesTest.cs" />
     <Compile Include="Integration\FullCycleDeclarationTest.cs">
@@ -231,6 +232,7 @@
     <Compile Include="XML\XMLDeclarationReaderVersionsTest.cs" />
     <Compile Include="XML\XMLEngineeringInputRefTest.cs" />
     <Compile Include="XML\XMLEngineeringInputSingleTest.cs" />
+    <Compile Include="XML\XMLMultistageBusConsolidatedInputDataTest.cs" />
     <Compile Include="XML\XMLMultistageBusDataTest.cs" />
     <Compile Include="XML\XMLMultistageBusInputDataTest.cs" />
     <Compile Include="XML\XMLPrimaryBusInputDataTest.cs" />
@@ -4290,6 +4292,7 @@
   </ItemGroup>
   <ItemGroup>
     <Folder Include="Integration\FullPowertrain\" />
+    <Folder Include="TestData\Integration\DeclarationMode\MultistageVehicle\" />
   </ItemGroup>
   <ItemGroup>
     <Content Include="TestData\Integration\ADAS\Group5PCCDecl\Tractor_4x2_vehicle-class-5_5_t_0.xml">
@@ -4675,6 +4678,15 @@
     <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\vecto_vehicle-stage_input_only_mandatory_entries.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <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_one_stage.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_two_stages.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_primary_vehicle_only.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
diff --git a/VectoCore/VectoCoreTest/XML/XMLMultistageBusConsolidatedInputDataTest.cs b/VectoCore/VectoCoreTest/XML/XMLMultistageBusConsolidatedInputDataTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e52f176edff266e45157337de3ab2e67506ea942
--- /dev/null
+++ b/VectoCore/VectoCoreTest/XML/XMLMultistageBusConsolidatedInputDataTest.cs
@@ -0,0 +1,190 @@
+using System;
+using System.IO;
+using System.Xml;
+using Ninject;
+using NUnit.Framework;
+using TUGraz.VectoCommon.BusAuxiliaries;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCore.InputData.FileIO.XML;
+
+namespace TUGraz.VectoCore.Tests.XML
+{
+	[TestFixture]
+	public class XMLMultistageBusConsolidatedInputDataTest
+	{
+		protected IXMLInputDataReader _xmlInputReader;
+		private IKernel _kernel;
+
+		const string _dirPath = @"TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\";
+		const string _consolidatedInputData = _dirPath + "vecto_multistage_consolidated_multiple_stages.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";
+		
+
+		[OneTimeSetUp]
+		public void RunBeforeAnyTests()
+		{
+			Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
+
+			_kernel = new StandardKernel(new VectoNinjectModule());
+			_xmlInputReader = _kernel.Get<IXMLInputDataReader>();
+		}
+
+
+		[TestCase]
+		public void TestConsolidateMultistageVehicle()
+		{
+			var reader = XmlReader.Create(_consolidatedInputData);
+			var inputDataProvider = _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider;
+			TestConsolidateManufacturingStage(inputDataProvider.JobInputData.ConsolidateManufacturingStage);
+			Assert.AreEqual(true, inputDataProvider.JobInputData.InputComplete);
+		}
+
+		private void TestConsolidateManufacturingStage(IManufacturingStageInputData consolidateStage)
+		{
+			var vehicle = consolidateStage.Vehicle;
+			Assert.AreEqual("Intermediate Manufacturer 3", vehicle.Manufacturer);
+			Assert.AreEqual("Intermediate Manufacturer Address 3", vehicle.ManufacturerAddress);
+			Assert.AreEqual("Intermediate Model 1", vehicle.Model);
+			Assert.AreEqual("VEH-2234567866", vehicle.VIN);
+			Assert.AreEqual(DateTime.Parse("2021-02-13T07:20:08.0187663Z").ToUniversalTime(), vehicle.Date);
+			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(TankSystem.Liquefied, vehicle.TankSystem);//NgTankSystem
+			Assert.AreEqual(RegistrationClass.B, vehicle.RegisteredClass);//ClassBus
+			Assert.AreEqual(10, vehicle.NumberOfPassengersLowerDeck);
+			Assert.AreEqual(30, vehicle.NumberOfPassengersUpperDeck);
+			Assert.AreEqual(VehicleCode.CB, vehicle.VehicleCode);
+			Assert.AreEqual(true, vehicle.LowEntry);
+			Assert.AreEqual(3, vehicle.Height.Value());//HeightIntegratedBody
+			Assert.AreEqual(12, vehicle.Length.Value());
+			Assert.AreEqual(2.5, vehicle.Width.Value());
+			Assert.AreEqual(2.5, vehicle.EntranceHeight.Value());
+			Assert.AreEqual(ConsumerTechnology.Mixed, vehicle.DoorDriveTechnology);
+			Assert.AreEqual(VehicleDeclarationType.interim, vehicle.VehicleDeclarationType);
+
+			Assert.AreEqual(true, vehicle.ADAS.EngineStopStart);
+			Assert.AreEqual(EcoRollType.WithEngineStop, vehicle.ADAS.EcoRoll);
+			Assert.AreEqual(PredictiveCruiseControlType.Option_1_2, vehicle.ADAS.PredictiveCruiseControl);
+			Assert.AreEqual(true, vehicle.ADAS.ATEcoRollReleaseLockupClutch);
+
+			Assert.AreEqual(null, vehicle.Components.AirdragInputData);
+
+			var busAux = vehicle.Components.BusAuxiliaries;
+			Assert.AreEqual(true, busAux.ElectricConsumers.InteriorLightsLED);
+			Assert.AreEqual(true, busAux.ElectricConsumers.DayrunninglightsLED);
+			Assert.AreEqual(false, busAux.ElectricConsumers.PositionlightsLED);
+			Assert.AreEqual(false, busAux.ElectricConsumers.BrakelightsLED);
+			Assert.AreEqual(true, busAux.ElectricConsumers.HeadlightsLED);
+
+			var busHVACAux = vehicle.Components.BusAuxiliaries.HVACAux;
+			Assert.AreEqual(BusHVACSystemConfiguration.Configuration1, busHVACAux.SystemConfiguration);
+			Assert.AreEqual(HeatPumpType.non_R_744_2_stage, busHVACAux.HeatPumpTypeDriverCompartment);
+			Assert.AreEqual(HeatPumpMode.heating, busHVACAux.HeatPumpModeDriverCompartment);
+			Assert.AreEqual(HeatPumpType.non_R_744_3_stage, busHVACAux.HeatPumpTypePassengerCompartment);
+			Assert.AreEqual(HeatPumpMode.cooling, busHVACAux.HeatPumpModePassengerCompartment);
+			Assert.AreEqual(50, busHVACAux.AuxHeaterPower.Value());
+			Assert.AreEqual(false, busHVACAux.DoubleGlazing);
+			Assert.AreEqual(true, busHVACAux.AdjustableAuxiliaryHeater);
+			Assert.AreEqual(false, busHVACAux.SeparateAirDistributionDucts);
+			Assert.AreEqual(false, busHVACAux.WaterElectricHeater);
+			Assert.AreEqual(false, busHVACAux.AirElectricHeater);
+			Assert.AreEqual(true, busHVACAux.OtherHeatingTechnology);
+		}
+
+
+		[TestCase]
+		public void TestPrimaryOnlyConsolidateMultistageVehicle()
+		{ 
+			var reader = XmlReader.Create(_primaryOnlyInputData);
+			var inputDataProvider = _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider;
+			
+			Assert.AreEqual(null, inputDataProvider.JobInputData.ConsolidateManufacturingStage);
+			Assert.AreEqual(false, inputDataProvider.JobInputData.InputComplete);
+		}
+
+		[TestCase]
+		public void TestOneStageConsolidateMultistageVehicle()
+		{
+			var reader = XmlReader.Create(_oneStageInputData);
+			var inputDataProvider = _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider;
+			Assert.AreEqual(false, inputDataProvider.JobInputData.InputComplete);
+
+			
+			var vehicle = inputDataProvider.JobInputData.ConsolidateManufacturingStage.Vehicle;
+			Assert.AreEqual("Intermediate Manufacturer 1", vehicle.Manufacturer);
+			Assert.AreEqual("Intermediate Manufacturer Address 1", vehicle.ManufacturerAddress);
+			Assert.AreEqual(null, vehicle.Model);
+			Assert.AreEqual("VEH-1234567890", vehicle.VIN);
+			Assert.AreEqual(DateTime.Parse("2018-02-15T11:00:00Z").ToUniversalTime(), vehicle.Date);
+			Assert.AreEqual(null, vehicle.LegislativeClass);
+			Assert.AreEqual(null, vehicle.CurbMassChassis);//CorrectedActualMass
+			Assert.AreEqual(null, vehicle.GrossVehicleMassRating);//TechnicalPermissibleMaximumLadenMass
+			Assert.AreEqual(null, vehicle.AirdragModifiedMultistage);
+			Assert.AreEqual(null, vehicle.TankSystem);//NgTankSystem
+			Assert.AreEqual(null, vehicle.RegisteredClass);//ClassBus
+			Assert.AreEqual(null, vehicle.NumberOfPassengersLowerDeck);
+			Assert.AreEqual(null, vehicle.NumberOfPassengersUpperDeck);
+			Assert.AreEqual(null, vehicle.VehicleCode);
+			Assert.AreEqual(null, vehicle.LowEntry);
+			Assert.AreEqual(null, vehicle.Height);//HeightIntegratedBody
+			Assert.AreEqual(null, vehicle.Length);
+			Assert.AreEqual(null, vehicle.Width);
+			Assert.AreEqual(null, vehicle.EntranceHeight);
+			Assert.AreEqual(null, vehicle.DoorDriveTechnology);
+			Assert.AreEqual(VehicleDeclarationType.interim, vehicle.VehicleDeclarationType);
+
+			Assert.AreEqual(null, vehicle.ADAS);
+
+			Assert.AreEqual(null, vehicle.Components);
+		}
+
+		[TestCase]
+		public void TestTwoStagesConsolidateMultistageVehicle()
+		{
+			var reader = XmlReader.Create(_twoStagesInputData);
+			var inputDataProvider = _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider;
+			Assert.AreEqual(false, inputDataProvider.JobInputData.InputComplete);
+			
+			var vehicle = inputDataProvider.JobInputData.ConsolidateManufacturingStage.Vehicle;
+			Assert.AreEqual("Intermediate Manufacturer 2", vehicle.Manufacturer);
+			Assert.AreEqual("Intermediate Manufacturer Address 2", vehicle.ManufacturerAddress);
+			Assert.AreEqual("Intermediate Model 1", vehicle.Model);
+			Assert.AreEqual("VEH-2234567890", vehicle.VIN);
+			Assert.AreEqual(DateTime.Parse("2021-02-13T07:20:08.0187663Z").ToUniversalTime(), vehicle.Date);
+			Assert.AreEqual(null, vehicle.LegislativeClass);
+			Assert.AreEqual(15000, vehicle.CurbMassChassis.Value());//CorrectedActualMass
+			Assert.AreEqual(null, vehicle.GrossVehicleMassRating);//TechnicalPermissibleMaximumLadenMass
+			Assert.AreEqual(false, vehicle.AirdragModifiedMultistage);
+			Assert.AreEqual(TankSystem.Compressed, vehicle.TankSystem);//NgTankSystem
+			Assert.AreEqual(null, vehicle.RegisteredClass);//ClassBus
+			Assert.AreEqual(10, vehicle.NumberOfPassengersLowerDeck);
+			Assert.AreEqual(30, vehicle.NumberOfPassengersUpperDeck);
+			Assert.AreEqual(VehicleCode.CB, vehicle.VehicleCode);
+			Assert.AreEqual(true, vehicle.LowEntry);
+			Assert.AreEqual(3, vehicle.Height.Value());//HeightIntegratedBody
+			Assert.AreEqual(12, vehicle.Length.Value());
+			Assert.AreEqual(2.5, vehicle.Width.Value());
+			Assert.AreEqual(2.5, vehicle.EntranceHeight.Value());
+			Assert.AreEqual(ConsumerTechnology.Mixed, vehicle.DoorDriveTechnology);
+			Assert.AreEqual(VehicleDeclarationType.interim, vehicle.VehicleDeclarationType);
+
+			Assert.AreEqual(true, vehicle.ADAS.EngineStopStart);
+			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.AirdragInputData);
+
+			var busAux = vehicle.Components.BusAuxiliaries.ElectricConsumers;
+			Assert.AreEqual(null, busAux);
+
+			var busHVACAux = vehicle.Components.BusAuxiliaries.HVACAux;
+			Assert.AreEqual(null, busHVACAux);
+		}
+	}
+}
diff --git a/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs b/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs
index ab485673803577ac08b930c88677af6ec84164dc..a0ebdde8cd6de1f492f98164457d719d9b2bc645 100644
--- a/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs
@@ -10,6 +10,7 @@ using TUGraz.VectoCore.InputData.FileIO.XML;
 
 namespace TUGraz.VectoCore.Tests.XML
 {
+	[TestFixture]
 	public class XMLMultistageBusInputDataTest
 	{
 		protected IXMLInputDataReader xmlInputReader;
@@ -205,26 +206,10 @@ namespace TUGraz.VectoCore.Tests.XML
 			Assert.AreEqual(null, vehicle.Components.AirdragInputData);
 			
 			var electricConsumer = vehicle.Components.BusAuxiliaries.ElectricConsumers;
-			Assert.AreEqual(null, electricConsumer.InteriorLightsLED);
-			Assert.AreEqual(null, electricConsumer.DayrunninglightsLED);
-			Assert.AreEqual(null, electricConsumer.PositionlightsLED);
-			Assert.AreEqual(null, electricConsumer.BrakelightsLED);
-			Assert.AreEqual(null, electricConsumer.HeadlightsLED);
+			Assert.AreEqual(null, electricConsumer);
 
 			var hvacAux = vehicle.Components.BusAuxiliaries.HVACAux;
-			Assert.AreEqual(null, hvacAux.SystemConfiguration);
-			Assert.AreEqual(null, hvacAux.HeatPumpTypeDriverCompartment);
-			Assert.AreEqual(null, hvacAux.HeatPumpModeDriverCompartment);
-			Assert.AreEqual(null, hvacAux.HeatPumpTypePassengerCompartment);
-			Assert.AreEqual(null, hvacAux.HeatPumpModePassengerCompartment);
-			
-			Assert.AreEqual(null, hvacAux.AuxHeaterPower);
-			Assert.AreEqual(null, hvacAux.DoubleGlazing);
-			Assert.AreEqual(null, hvacAux.AdjustableAuxiliaryHeater);
-			Assert.AreEqual(null, hvacAux.SeparateAirDistributionDucts);
-			Assert.AreEqual(null, hvacAux.WaterElectricHeater);
-			Assert.AreEqual(null, hvacAux.AirElectricHeater);
-			Assert.AreEqual(null, hvacAux.OtherHeatingTechnology);
+			Assert.AreEqual(null, hvacAux);
 		}
 	}
 }