diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/ISSMInputs.cs b/VectoCommon/VectoCommon/BusAuxiliaries/ISSMInputs.cs
index fad61f432127d46a58624265d4f5adb1c5ba2288..14421829222b6e45712b84184fee4d35b817a4ab 100644
--- a/VectoCommon/VectoCommon/BusAuxiliaries/ISSMInputs.cs
+++ b/VectoCommon/VectoCommon/BusAuxiliaries/ISSMInputs.cs
@@ -221,7 +221,7 @@ namespace TUGraz.VectoCommon.BusAuxiliaries
 			}
 		}
 
-		public static string GetLabel(this HeatPumpType type)
+		public static string GetLabel(this HeatPumpType? type)
 		{
 			switch (type) {
 				case HeatPumpType.none: return NONE;
@@ -263,7 +263,7 @@ namespace TUGraz.VectoCommon.BusAuxiliaries
 			}
 		}
 
-		public static string GetLabel(this HeatPumpMode type)
+		public static string GetLabel(this HeatPumpMode? type)
 		{
 			switch (type)
 			{
diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs
index 24c2462e3a7dfe4f50db93bb6c3c714a3ae6c945..dddce37770b367b37342ed0c04611bd63579e42b 100644
--- a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs
+++ b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs
@@ -618,6 +618,15 @@ namespace TUGraz.VectoCommon.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to DoorDriveTechnology.
+        /// </summary>
+        public static string Bus_DoorDriveTechnology {
+            get {
+                return ResourceManager.GetString("Bus_DoorDriveTechnology", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to DoubleGlazing.
         /// </summary>
@@ -978,6 +987,24 @@ namespace TUGraz.VectoCommon.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to HVAC.
+        /// </summary>
+        public static string BusAux_HVAC {
+            get {
+                return ResourceManager.GetString("BusAux_HVAC", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to LEDLights.
+        /// </summary>
+        public static string BusAux_LEDLights {
+            get {
+                return ResourceManager.GetString("BusAux_LEDLights", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to PneumaticSystem.
         /// </summary>
diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.resx b/VectoCommon/VectoCommon/Resources/XMLNames.resx
index eef1fffb7c9145401e93fc6ec15a75e536e36877..e3656be828189918da7308e6d4d127a4b95e97f3 100644
--- a/VectoCommon/VectoCommon/Resources/XMLNames.resx
+++ b/VectoCommon/VectoCommon/Resources/XMLNames.resx
@@ -1497,4 +1497,13 @@
   <data name="Vehicle_BodyworkCode" xml:space="preserve">
     <value>BodyworkCode</value>
   </data>
+  <data name="BusAux_LEDLights" xml:space="preserve">
+    <value>LEDLights</value>
+  </data>
+  <data name="Bus_DoorDriveTechnology" xml:space="preserve">
+    <value>DoorDriveTechnology</value>
+  </data>
+  <data name="BusAux_HVAC" xml:space="preserve">
+    <value>HVAC</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs
index 03cc921bda8cc7fbb47e758a0fb118fa0fab83ec..4b82c8b89857042c0edd447d5d920451f3cd9dd2 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs
@@ -4,12 +4,11 @@ using System.Linq;
 using System.Text.RegularExpressions;
 using System.Xml;
 using System.Xml.Linq;
+using TUGraz.VectoCommon.BusAuxiliaries;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.InputData.Reader.ComponentData;
-using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Utils;
 
@@ -29,474 +28,378 @@ namespace TUGraz.VectoCore.OutputData.XML
 		protected XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
 
 		protected XNamespace v20 = "urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0";
-		protected XNamespace v21 = "urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1";
 		protected XNamespace v23 = "urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3";
-		protected XNamespace v26 = "urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6";
 		protected XNamespace v28 = "urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8";
 
-		protected XElement PrimaryVehicle;
-		protected XElement InputDataSignature;
-		protected XElement ManufacturerRecordSignature;
-		protected XElement Results;
-		protected XElement ApplicationInformation; 
-		protected XElement PrimarySignature;
-
+		private XElement _primaryVehicle;
+		private List<XElement> _manufacturingStages;
+		private List<XAttribute> _namespaceAttributes;
+		
+		private IPrimaryVehicleInformationInputDataProvider _primaryVehicleInputData;
+		private IList<IManufacturingStageInputData> _manufacturingStageInputData;
+		private IVehicleDeclarationInputData _vehicleInputData;
 
-		private IPrimaryVehicleInformationInputDataProvider primaryVehicleInputData;
-		private IList<IManufacturingStageInputData> manufacturingStageInputData;
-		private IVehicleDeclarationInputData vehicleInputData;
 
 		public XDocument Report { get; protected set; }
 
 		public XMLMultistageBusReport()
 		{
-			PrimaryVehicle = new XElement(tns + XMLNames.Component_Vehicle);
-			InputDataSignature = new XElement(tns + XMLNames.Report_InputDataSignature);
-			ManufacturerRecordSignature = new XElement(tns + "ManufacturerRecordSignature");
-			Results = new XElement(tns + XMLNames.Report_Results);
-			PrimarySignature = new XElement(tns + XMLNames.DI_Signature);
-			ApplicationInformation = new XElement(tns + XMLNames.Report_ApplicationInfo_ApplicationInformation);
+			_manufacturingStages = new List<XElement>();
+			_namespaceAttributes = new List<XAttribute>();
 		}
-
-
-
+		
 		public void Initialize(VectoRunData modelData)
 		{
-			primaryVehicleInputData = modelData.MultistageVIFInputData.MultistageJobInputData.JobInputData.PrimaryVehicle;
-			manufacturingStageInputData = modelData.MultistageVIFInputData.MultistageJobInputData.JobInputData.ManufacturingStages;
-			vehicleInputData = modelData.MultistageVIFInputData.VehicleInputData;
-			
-			SetPrimaryVehicle(primaryVehicleInputData);
-			SetInputDataSignature(primaryVehicleInputData);
-			SetManufacturerRecordSignature(primaryVehicleInputData);
-			SetResults(primaryVehicleInputData);
-			SetApplicationInformation(primaryVehicleInputData);
-			SetPrimarySignature(primaryVehicleInputData);
-		}
-
+			_primaryVehicleInputData = modelData.MultistageVIFInputData.MultistageJobInputData.JobInputData.PrimaryVehicle;
+			_manufacturingStageInputData = modelData.MultistageVIFInputData.MultistageJobInputData.JobInputData.ManufacturingStages;
+			_vehicleInputData = modelData.MultistageVIFInputData.VehicleInputData;
 
+			SetInputXMLData(_primaryVehicleInputData.Vehicle.XMLSource);
+		}
 
-		public void GenerateReport()
+		private void SetInputXMLData(XmlNode primeVehicleNode)
 		{
-			var retVal = new XDocument();
-
-			retVal.Add(
+			var nodes = GetDocumentNodes(primeVehicleNode);
+			var documentNode = GetDocumentNode(nodes);
+			SetXmlNamespaceAttributes(nodes);
 			
-				new XElement(tns + "VectoOutputMultistage",
-					new XAttribute("xmlns" , tns),
-					new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName),
-					new XAttribute(XNamespace.Xmlns + "di", di),
-					new XAttribute(XNamespace.Xmlns + "v2.0", v20),
-					new XAttribute(XNamespace.Xmlns + "v2.1", v21),
-					new XAttribute(XNamespace.Xmlns + "v2.3", v23),
-					new XAttribute(XNamespace.Xmlns + "v2.6", v26),
-					new XAttribute(XNamespace.Xmlns + "v2.8", v28),
-					new XAttribute(
-						xsi + "schemaLocation",
-						string.Format("{0} {1}", tns, @"E:\VECTO_DEV\fk_vecto-dev\VectoCore\VectoCore\Resources\XSD/VectoOutputMultistage.0.1.xsd")),
-
-					new XElement(tns + "PrimaryVehicle",
-
-							new XElement(tns + XMLNames.Report_DataWrap,
-								new XAttribute("id", "text"),
-								new XAttribute(xsi + "type", "PrimaryVehicleDataType"),
-
-									PrimaryVehicle,
-									InputDataSignature,
-									ManufacturerRecordSignature,
-									Results,
-									ApplicationInformation	
-								),
-								PrimarySignature
-							)
-						)
-					);
-			Report = retVal;
+			var xDocument = XElement.Parse(documentNode.InnerXml);
+			foreach (var xElement in xDocument.Descendants())
+			{
+				if(xElement.Name.LocalName == XMLNames.Bus_PrimaryVehicle)
+					_primaryVehicle = xElement;
+				else if (xElement.Name.LocalName == XMLNames.ManufacturingStage)
+					_manufacturingStages.Add(xElement);
+			}
 
+			if (_manufacturingStages.Count == 0)
+				_manufacturingStages = null;
 		}
 
-		private void SetApplicationInformation(IPrimaryVehicleInformationInputDataProvider primaryData)
-		{
-			ApplicationInformation = new XElement(
-				tns + XMLNames.Report_ApplicationInfo_ApplicationInformation,
-				new XElement(tns + XMLNames.Report_ApplicationInfo_SimulationToolVersion, primaryData.ApplicationInformation.SimulationToolVersion),
-				new XElement(
-					tns + XMLNames.Report_ApplicationInfo_Date,
-					XmlConvert.ToString(primaryData.ApplicationInformation.Date, XmlDateTimeSerializationMode.Utc)));
-		}
-		
-		private void SetPrimarySignature(IPrimaryVehicleInformationInputDataProvider primaryData)
-		{
-			PrimarySignature.Add(primaryData.VehicleSignatureHash.ToXML(di));
-		}
 
-		private void SetResults(IPrimaryVehicleInformationInputDataProvider primaryData)
+		private List<XmlNode> GetDocumentNodes(XmlNode primeVehicleNode)
 		{
-			Results.Add(new XElement(tns+ XMLNames.Report_Result_Status, primaryData.ResultsInputData.Status));
-			
-			foreach (var resultEntry in primaryData.ResultsInputData.Results) {
-				SetResult(resultEntry);
-			}
+			var nodes = new List<XmlNode>();
+			NodeParentSearch(primeVehicleNode, nodes);
+			return nodes;
 		}
 
-		private void SetResult(IResult result)
+		private XmlNode GetDocumentNode(List<XmlNode> nodes)
 		{
-			Results.Add(new XElement(
-					tns + XMLNames.Report_Result_Result,
-					new XAttribute(XMLNames.Report_Result_Status_Attr, result.ResultStatus),
-						new XElement(tns + XMLNames.Report_Vehicle_VehicleGroup, result.VehicleGroup.GetClassNumber()),
-						new XElement(tns + XMLNames.Report_Result_Mission, result.Mission.ToXMLFormat()),
-						new XElement(tns + XMLNames.Report_ResultEntry_SimulationParameters,
-							new XElement(
-								tns + XMLNames.Report_ResultEntry_TotalVehicleMass,
-								XMLHelper.ValueAsUnit(result.SimulationParameter.TotalVehicleMass, XMLNames.Unit_kg, 2)),
-							new XElement(
-								tns + XMLNames.Report_Result_Payload,
-								XMLHelper.ValueAsUnit(result.SimulationParameter.Payload, XMLNames.Unit_kg, 2)),
-							new XElement(
-								tns + XMLNames.Report_ResultEntry_PassengerCount,
-								result.SimulationParameter.PassengerCount.ToXMLFormat(2)),
-							new XElement(
-								tns + XMLNames.Report_Result_FuelMode, result.SimulationParameter.FuelMode)
-						),
-						GetResultFuel(result.EnergyConsumption),
-						GetResultCo2(result.CO2)
-					)	
-				);
-		}
+			if (nodes == null || nodes.Count == 0)
+				return null;
 
-		private List<XElement> GetResultFuel(Dictionary<FuelType, JoulePerMeter> fuels)
-		{
-			var resultFuels = new List<XElement>();
-
-			foreach (var fuel in fuels) {
-				resultFuels.Add(
-					new XElement(tns + XMLNames.Report_Results_Fuel,
-						new XAttribute(XMLNames.Report_Results_Fuel_Type_Attr, fuel.Key.ToXMLFormat()),
-						new XElement(tns + XMLNames.Report_Result_EnergyConsumption,
-							XMLHelper.ValueAsUnit(fuel.Value.ConvertToMegaJouleperKilometer(), "MJ/km", 5))
-						)
-					);
+			foreach (var node in nodes)
+			{
+				if (node.NodeType == XmlNodeType.Document)
+					return node;
 			}
-
-			return resultFuels;
+			return null;
 		}
 
-		private List<XElement> GetResultCo2(Dictionary<string, double> co2s)
+		private void SetXmlNamespaceAttributes(List<XmlNode> nodes)
 		{
-			var resultCo2 = new List<XElement>();
+			if (nodes == null || nodes.Count == 0)
+				return;
+			XmlAttributeCollection namespaceAttributes = null;
+			foreach (var node in nodes) {
+				if (node.LocalName == XMLNames.VectoOutputMultistage) {
+					namespaceAttributes = node.Attributes;
+					break;
+				}
+			}
+
+			if (namespaceAttributes == null || namespaceAttributes.Count == 0)
+				return;
 
-			foreach (var co2 in co2s) {
-				resultCo2.Add(
-					new XElement(tns + XMLNames.Report_Results_CO2,
-							XMLHelper.ValueAsUnit(co2.Value, "g/km", 2)));
+			foreach (XmlAttribute attribute in namespaceAttributes) {
+				_namespaceAttributes.Add(string.IsNullOrEmpty(attribute.Prefix)
+					? new XAttribute(attribute.LocalName, attribute.Value)
+					: new XAttribute(XNamespace.Xmlns + attribute.LocalName, attribute.Value));
 			}
+		}
+		
+		private void NodeParentSearch(XmlNode currentNode, List<XmlNode> nodes)
+		{
+			if (currentNode?.ParentNode == null || nodes == null)
+				return;
 
-			return resultCo2;
+			nodes.Add(currentNode.ParentNode);
+			NodeParentSearch(currentNode.ParentNode, nodes);
 		}
 
 
-		private void SetManufacturerRecordSignature(IPrimaryVehicleInformationInputDataProvider primaryData)
+		public void GenerateReport()
 		{
-			ManufacturerRecordSignature.Add(primaryData.ManufacturerRecordHash.ToXML(di));
+			var retVal = new XDocument();
+			retVal.Add(
+				new XElement(tns + XMLNames.VectoOutputMultistage,
+					_namespaceAttributes,
+					_primaryVehicle,
+					_manufacturingStages,
+					GenerateInputManufacturingStage()
+				)
+			);
+			Report = retVal;
 		}
 
-		private void SetInputDataSignature(IPrimaryVehicleInformationInputDataProvider primaryData)
+
+		private XElement GenerateInputManufacturingStage()
 		{
-			InputDataSignature.Add(primaryData.PrimaryVehicleInputDataHash.ToXML(di));
+			return new XElement(tns + XMLNames.ManufacturingStage,
+					new XAttribute("stageCount", GetStageNumber()),
+					new XElement(tns + XMLNames.Report_DataWrap,
+						new XAttribute(xsi + XMLNames.Attr_Type, "BusManufacturingStageDataType"),
+						new XAttribute("id", "AddContent"),
+						GetHashPreviousStageElement(),
+						GetVehicleElement(),
+						GetApplicationInformation()),
+					GetInputdataSignature());
 		}
 		
-		private void SetPrimaryVehicle(IPrimaryVehicleInformationInputDataProvider primaryData)
+		private int GetStageNumber()
 		{
-			var primaryVehicle = primaryData.Vehicle;
-			
-			PrimaryVehicle.Add(
-				new XAttribute(xsi + "type", "VehiclePIFType"),
-				new XElement(tns + XMLNames.ManufacturerPrimaryVehicle, primaryVehicle.Manufacturer),
-				new XElement(tns + XMLNames.ManufacturerAddressPrimaryVehicle, primaryVehicle.ManufacturerAddress),
-				new XElement(tns + XMLNames.Component_Model, primaryVehicle.Model),
-				new XElement(tns + XMLNames.Vehicle_VIN, primaryVehicle.VIN),
-				new XElement(tns + XMLNames.Component_Date, XmlConvert.ToString(primaryVehicle.Date, XmlDateTimeSerializationMode.Utc)),
-				new XElement(tns + XMLNames.Vehicle_VehicleCategory, primaryVehicle.VehicleCategory.ToXMLFormat()),
-				new XElement(tns + XMLNames.Vehicle_AxleConfiguration, primaryVehicle.AxleConfiguration.GetName()),
-				new XElement(tns + XMLNames.Vehicle_Articulated, primaryVehicle.Articulated),
-				new XElement(tns + XMLNames.TPMLM, primaryVehicle.GrossVehicleMassRating.ToXMLFormat(0)),
-				new XElement(tns + XMLNames.Vehicle_IdlingSpeed, primaryVehicle.EngineIdleSpeed.AsRPM.ToXMLFormat(0)),
-				new XElement(tns + XMLNames.Vehicle_RetarderType, primaryVehicle.Components.RetarderInputData.Type.ToXMLFormat()),
-				primaryVehicle.Components.RetarderInputData.Type.IsDedicatedComponent()
-					? new XElement(tns + XMLNames.Vehicle_RetarderRatio, primaryVehicle.Components.RetarderInputData.Ratio.ToXMLFormat(3))
-					: null,
-				new XElement(
-					tns + XMLNames.Vehicle_AngledriveType, (primaryVehicle.Components?.AngledriveInputData?.Type ?? AngledriveType.None).ToXMLFormat()),
-				new XElement(tns + XMLNames.Vehicle_ZeroEmissionVehicle, primaryVehicle.ZeroEmissionVehicle),
-				GetADAS(primaryVehicle.ADAS),
-				GetTorqueLimits(primaryVehicleInputData),
-				GetVehicleComponents(primaryVehicle.Components));
-		}
+			if (_manufacturingStageInputData == null || _manufacturingStageInputData.Count == 0)
+				return 2;
 
-		private XElement GetADAS(IAdvancedDriverAssistantSystemDeclarationInputData adasData)
-		{
-			var ns = XNamespace.Get(adasData.XMLSource.SchemaInfo.SchemaType.QualifiedName.Namespace);
-			var versionNumber = GetNamespaceVersionNumber(ns);
-			return new XElement(
-				tns + XMLNames.Vehicle_ADAS,
-				
-				new XAttribute(
-					xsi + "type",
-					$"{versionNumber}:{adasData.XMLSource.SchemaInfo.SchemaType.QualifiedName.Name}"),
-				new XElement(ns + XMLNames.Vehicle_ADAS_EngineStopStart, adasData.EngineStopStart),
-				new XElement(ns + XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop, adasData.EcoRoll.WithoutEngineStop()),
-				new XElement(ns + XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart, adasData.EcoRoll.WithEngineStop()),
-				new XElement(ns + XMLNames.Vehicle_ADAS_PCC, adasData.PredictiveCruiseControl.ToXMLFormat()),
-				adasData.ATEcoRollReleaseLockupClutch != null 
-					? new XElement(ns + XMLNames.Bus_ADAS_APTEcoRollReleaseLockupClutch, adasData.ATEcoRollReleaseLockupClutch)
-					: null
-				);
+			return _manufacturingStageInputData.Last().StageCount + 1;
 		}
 
-		private XElement GetTorqueLimits(IPrimaryVehicleInformationInputDataProvider vehicleInputData)
+		private XElement GetHashPreviousStageElement()
 		{
-			var inputData = vehicleInputData.Vehicle.XMLSource;
-			var tcLimits = inputData.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.Vehicle_TorqueLimits));
-			if (tcLimits == null)
-			{
-				return null;
+			DigestData digitData;
+			if (_manufacturingStageInputData == null || _manufacturingStageInputData.Count == 0) {
+				digitData = _primaryVehicleInputData.VehicleSignatureHash;
+			} else {
+				digitData = _manufacturingStageInputData.Last().Signature;
 			}
 
-			var ns = XNamespace.Get(tcLimits.SchemaInfo.SchemaType.QualifiedName.Namespace);
-			const string tclPrefix = "tcl";
-			return new XElement(
-				tns + XMLNames.Vehicle_TorqueLimits,
-				new XAttribute(XNamespace.Xmlns + tclPrefix, ns.NamespaceName),
-				new XAttribute(xsi + "type", string.Format("{0}:{1}", tclPrefix, tcLimits.SchemaInfo.SchemaType.QualifiedName.Name)),
-				XElement.Parse(tcLimits.OuterXml).Elements()
-			);
+			return new XElement(tns + "HashPreviousStage",
+				   digitData.ToXML(di));
 		}
 
 
-		protected XElement GetVehicleComponents(IVehicleComponentsDeclaration vehicleComponents)
+		private XElement GetVehicleElement()
 		{
-			return new XElement(
-				tns + XMLNames.Vehicle_Components,
-				new XAttribute(xsi + "type", "VehicleComponentsPIFType"),
-				
-				GetEngineDescription(vehicleComponents.EngineInputData),
-				GetGearboxDescription(vehicleComponents.GearboxInputData),
-				GetTorqueConverterDescription(vehicleComponents.TorqueConverterInputData),
-				GetAngledriveDescription(vehicleComponents.AngledriveInputData),
-				GetAxelgearData(vehicleComponents.AxleGearInputData),
-				GetAxleWheelDescription(vehicleComponents.AxleWheels),
-				GetAuxiliariesDescription(vehicleComponents.BusAuxiliaries)
+			return new XElement(tns + XMLNames.Tag_Vehicle,
+				new XAttribute(xsi + XMLNames.Attr_Type, "v2.8:InterimStageInputType"),
+				new XAttribute("id", GetVehicleId()),
+				new XElement(v28 + XMLNames.Component_Manufacturer, _vehicleInputData.Manufacturer),
+				new XElement(v28 + XMLNames.Component_ManufacturerAddress, _vehicleInputData.ManufacturerAddress),
+				new XElement(v28 + XMLNames.Vehicle_VIN, _vehicleInputData.VIN),
+				new XElement(v28 + XMLNames.Component_Date,
+					XmlConvert.ToString(_vehicleInputData.Date, XmlDateTimeSerializationMode.Utc)),
+				_vehicleInputData.Model != null
+					? new XElement(v28 + XMLNames.Component_Model, _vehicleInputData.Model) : null,
+				_vehicleInputData.LegislativeClass != null
+					? new XElement(v28 + XMLNames.Bus_LegislativeCategory, _vehicleInputData.LegislativeClass.ToXMLFormat()) : null,
+				_vehicleInputData.CurbMassChassis != null
+					? new XElement(v28 + XMLNames.Bus_CorrectedActualMass, _vehicleInputData.CurbMassChassis.ToXMLFormat(0)) : null,
+				_vehicleInputData.GrossVehicleMassRating != null
+					? new XElement(v28 + XMLNames.TPMLM, _vehicleInputData.GrossVehicleMassRating.ToXMLFormat(0)) : null,
+				_vehicleInputData.AirdragModifiedMultistage != null 
+					? new XElement(v28 +  XMLNames.Bus_AirdragModifiedMultistage, _vehicleInputData.AirdragModifiedMultistage) : null,
+				_vehicleInputData.TankSystem != null 
+					? new XElement(v28 + XMLNames.Vehicle_NgTankSystem, _vehicleInputData.TankSystem.ToString()) : null,
+				_vehicleInputData.RegisteredClass != null
+					? new XElement(v28 + XMLNames.Vehicle_RegisteredClass, _vehicleInputData.RegisteredClass.ToXMLFormat()) : null,
+				_vehicleInputData.NumberOfPassengersLowerDeck != null 
+					? new XElement(v28 + XMLNames.Bus_NumberPassengersLowerDeck, _vehicleInputData.NumberOfPassengersLowerDeck.ToString()) : null,
+				_vehicleInputData.NumberOfPassengersUpperDeck != null
+					? new XElement(v28 + XMLNames.Bus_NumberPassengersUpperDeck, _vehicleInputData.NumberOfPassengersUpperDeck.ToString()) : null,
+				_vehicleInputData.VehicleCode != null
+					? new XElement(v28 + XMLNames.Vehicle_BodyworkCode, _vehicleInputData.VehicleCode.ToXMLFormat()) : null,
+				_vehicleInputData.LowEntry != null
+					? new XElement(v28 + XMLNames.Bus_LowEntry, _vehicleInputData.LowEntry) : null,
+				_vehicleInputData.Height != null
+					? new XElement(v28 + XMLNames.Bus_HeighIntegratedBody, _vehicleInputData.Height.Value() * 1000.000) : null,
+				_vehicleInputData.Length != null
+					? new XElement(v28 + XMLNames.Bus_VehicleLength, _vehicleInputData.Length.Value() * 1000) : null,
+				_vehicleInputData.Width != null 
+					? new XElement(v28 + XMLNames.Bus_VehicleWidth, _vehicleInputData.Width.Value() * 1000) : null,
+				_vehicleInputData.EntranceHeight != null 
+					? new XElement(v28 + XMLNames.Bus_EntranceHeight, _vehicleInputData.EntranceHeight.Value() * 1000) : null,
+				_vehicleInputData.DoorDriveTechnology != null
+					? new XElement(v28 + XMLNames.Bus_DoorDriveTechnology, _vehicleInputData.DoorDriveTechnology.ToXMLFormat()) : null,
+				new XElement(v28 + XMLNames.Bus_VehicleDeclarationType, _vehicleInputData.VehicleDeclarationType),
+				GetADAS(_vehicleInputData.ADAS),
+				GetBusVehicleComponents(_vehicleInputData.Components)
 			);
 		}
 
-
-
-		#region Engine Data
-
-		private XElement GetEngineDescription(IEngineDeclarationInputData engineData)
+		private string GetVehicleId()
 		{
-			return new XElement(tns + XMLNames.Component_Engine,
-				new XElement(tns + XMLNames.ComponentDataWrapper,
-					new XAttribute(xsi + "type", "EngineDataPIFType"),
-					GetCommonDescription(engineData),
-					new XElement(tns + XMLNames.Engine_Displacement, engineData.Displacement.ConvertToCubicCentiMeter().ToXMLFormat(0)),
-					new XElement(tns + XMLNames.Engine_RatedSpeed, engineData.RatedSpeedDeclared.AsRPM.ToXMLFormat(0)),
-					new XElement(tns + XMLNames.Engine_RatedPower, engineData.RatedPowerDeclared.ToXMLFormat(0)),
-					new XElement(tns + XMLNames.Engine_MaxTorque, engineData.MaxTorqueDeclared.ToXMLFormat(0)),
-					new XElement(
-						tns + XMLNames.Engine_WHRType,
-						new XElement(
-							v23 + XMLNames.Engine_WHR_MechanicalOutputICE, (engineData.WHRType & WHRType.MechanicalOutputICE) != 0),
-						new XElement(
-							v23 + XMLNames.Engine_WHR_MechanicalOutputIDrivetrain,
-							(engineData.WHRType & WHRType.MechanicalOutputDrivetrain) != 0),
-						new XElement(v23 + XMLNames.Engine_WHR_ElectricalOutput, (engineData.WHRType & WHRType.ElectricalOutput) != 0)
-					),
-					GetEngineModes(engineData)
-				));
+			return  $"{_vehicleInputData.VIN}-{GetStageNumber()}";
 		}
 
-		private List<XElement> GetEngineModes(IEngineDeclarationInputData engineData)
+		private XElement GetADAS(IAdvancedDriverAssistantSystemDeclarationInputData adasData)
 		{
-			var fuels = new List<XElement>();
-			var engineModes = engineData.EngineModes;
-
-			foreach (var mode in engineModes) {
-				fuels.Add(
-					new XElement(
-						tns + XMLNames.Engine_FuelModes,
-						new XElement(tns + XMLNames.Engine_IdlingSpeed, mode.IdleSpeed.AsRPM.ToXMLFormat(0)),
-						new XElement(
-							tns + XMLNames.Engine_FullLoadAndDragCurve,
-							FullLoadCurveReader.Create(mode.FullLoadCurve, true).FullLoadEntries.Select(
-								x => new XElement(
-									tns + XMLNames.Engine_FullLoadCurve_Entry,
-									new XAttribute(XMLNames.Engine_EngineFullLoadCurve_EngineSpeed_Attr,
-										x.EngineSpeed.AsRPM.ToXMLFormat(2)),
-									new XAttribute(XMLNames.Engine_FullLoadCurve_MaxTorque_Attr,
-										x.TorqueFullLoad.ToXMLFormat(2)),
-									new XAttribute(XMLNames.Engine_FullLoadCurve_DragTorque_Attr,
-										x.TorqueDrag.ToXMLFormat(2)))
-							)),
-						new XElement(
-							tns + "Fuels",
-							mode.Fuels.Select(x => new XElement(tns + "FuelType", x.FuelType.ToXMLFormat())))
-					));
-			}
-			return fuels;
+			return new XElement(
+				v28 + XMLNames.Vehicle_ADAS,
+				new XElement(v23 + XMLNames.Vehicle_ADAS_EngineStopStart, adasData.EngineStopStart),
+				new XElement(v23 + XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop, adasData.EcoRoll.WithoutEngineStop()),
+				new XElement(v23 + XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart, adasData.EcoRoll.WithEngineStop()),
+				new XElement(v23 + XMLNames.Vehicle_ADAS_PCC, adasData.PredictiveCruiseControl.ToXMLFormat()),
+				adasData.ATEcoRollReleaseLockupClutch != null
+					? new XElement(v23 + XMLNames.Bus_ADAS_APTEcoRollReleaseLockupClutch, adasData.ATEcoRollReleaseLockupClutch)
+					: null
+			);
 		}
 
-		#endregion
-
-		#region Gearbox/Transmission Data
-
-		private XElement GetGearboxDescription(IGearboxDeclarationInputData transmissionData)
+		private XElement GetBusVehicleComponents(IVehicleComponentsDeclaration vehicleComponents)
 		{
-			return new XElement(tns + XMLNames.Component_Transmission,
-				new XElement(tns + XMLNames.ComponentDataWrapper,
-					new XAttribute(xsi + "type", "TransmissionDataPIFType"),
-					GetCommonDescription(transmissionData, true),
-					new XElement(tns + XMLNames.Gearbox_TransmissionType, transmissionData.Type.ToXMLFormat()),
-					new XElement(
-						tns + XMLNames.Gearbox_Gears,
-						new XAttribute(xsi + "type", "TransmissionGearsPIFType"),
-						transmissionData.Gears.Select(
-							x =>
-								new XElement(
-									tns + XMLNames.Gearbox_Gears_Gear,
-									new XAttribute(XMLNames.Gearbox_Gear_GearNumber_Attr, x.Gear),
-									new XElement(tns + XMLNames.Gearbox_Gear_Ratio, x.Ratio.ToXMLFormat(3)),
-									x.MaxTorque != null
-										? new XElement(tns + XMLNames.Gearbox_Gears_MaxTorque, x.MaxTorque.ToXMLFormat(0))
-										: null,
-									x.MaxInputSpeed != null
-										? new XElement(tns + XMLNames.Gearbox_Gear_MaxSpeed, x.MaxInputSpeed.AsRPM.ToXMLFormat(0))
-										: null)))
-				));
-		}
-
-		#endregion
+			var busAirdrag = GetBusAirdrag(vehicleComponents.AirdragInputData);
+			var busAux = GetBusAuxiliaries(vehicleComponents.BusAuxiliaries);
 
-		#region Torque Converter Data
-
-		private XElement GetTorqueConverterDescription(ITorqueConverterDeclarationInputData tcData)
-		{
-			return new XElement(tns + XMLNames.Component_TorqueConverter,
-				new XElement(tns + XMLNames.ComponentDataWrapper,
-					new XAttribute(xsi + "type", "TorqueConverterDataPIFType"),
-					GetCommonDescription(tcData),
-					GetTorqueConverterCharacteristics(tcData.TCData))
+			if (busAirdrag == null && busAux == null)
+				return null;
+			
+			return new XElement(v28 + XMLNames.Vehicle_Components,
+				new XAttribute(XNamespace.Xmlns + "v2.8", v28),
+				new XAttribute(xsi + XMLNames.Attr_Type, "v2.8:CompletedVehicleComponentsDeclarationType"),
+				busAirdrag,
+				busAux
 			);
 		}
 
-		private XElement GetTorqueConverterCharacteristics(TableData tcData)
+		private XElement GetBusAirdrag(IAirdragDeclarationInputData airdrag)
 		{
-			if (tcData == null)
-				return null;
-			
-			var characteristics = new List<XElement>();
-			for (int i = 0; i < tcData.Rows.Count; i++) {
-				var speedRatio = tcData.Rows[i][TorqueConverterDataReader.Fields.SpeedRatio].ToString();
-				var torqueRatio = tcData.Rows[i][TorqueConverterDataReader.Fields.TorqueRatio].ToString();
-				var torqueRef = tcData.Rows[i][TorqueConverterDataReader.Fields.CharacteristicTorque].ToString();
-
-				characteristics.Add(
-					new XElement(tns +  XMLNames.TorqueConverter_Characteristics_Entry,
-						new XAttribute(XMLNames.TorqueConverterData_SpeedRatio_Attr, speedRatio),
-						new XAttribute(XMLNames.TorqueConverterData_TorqueRatio_Attr, torqueRatio),
-						new XAttribute(XMLNames.TorqueConverterDataMapping_InputTorqueRef_Attr, torqueRef)
-					));
+			if (airdrag != null) {
+				return GetAirdragElement(airdrag);
 			}
 
-			return characteristics.Count == 0 
-				? null : new XElement(tns + XMLNames.TorqueConverter_Characteristics, characteristics);
+			switch (_vehicleInputData.AirdragModifiedMultistage) {
+				case true:
+					return GetBusAirdragUseStandardValues();
+				case false:
+					return GetAirdragElement(_manufacturingStageInputData.Last().Vehicle.Components.AirdragInputData);
+				default:
+					return null;
+			}
 		}
+		
+		private XElement GetAirdragElement(IAirdragDeclarationInputData airdrag)
+		{
+			var component = airdrag as AbstractCommonComponentType;
+			if (component == null)
+				return null;
 
-		#endregion
+			var dataElement = XElement.Parse(component.XMLSource.FirstChild.OuterXml);
+			var signatureElement = XElement.Parse(component.XMLSource.LastChild.OuterXml);
+			dataElement.Attribute(XNamespace.Xmlns + "xsi")?.Remove();
+			
+			return new XElement(v28 + XMLNames.Component_AirDrag,
+				dataElement,
+				signatureElement);
+		}
 
-		#region Angledrive Data
 
-		private XElement GetAngledriveDescription(IAngledriveInputData angledriveData)
+		private XElement GetBusAirdragUseStandardValues()
 		{
-			return new XElement(tns + XMLNames.Component_Angledrive,
-				new XElement(tns + XMLNames.ComponentDataWrapper,
-					new XAttribute(xsi + "type", "AngledriveDataPIFType"),
-					GetCommonDescription(angledriveData),
-					new XElement(tns + XMLNames.AngleDrive_Ratio, angledriveData.Ratio
-					)));
+			return new XElement(v28 + XMLNames.Component_AirDrag,
+				new XElement(v20 + XMLNames.ComponentDataWrapper,
+					new XAttribute(XNamespace.Xmlns + "v2.0", v20),
+					new XAttribute(xsi + XMLNames.Attr_Type, "v2.8:AirDragModifiedUseStandardValueType"),
+					new XAttribute(XMLNames.Component_ID_Attr, "standard")
+				),
+				new XElement(v20 + XMLNames.DI_Signature, XMLHelper.CreateDummySig(di)));
 		}
 
-		#endregion
-
 
-		#region Axelgear Data
-		
-		private XElement GetAxelgearData(IAxleGearInputData axleGearData)
+		private XElement GetBusAuxiliaries(IBusAuxiliariesDeclarationData busAux)
 		{
-			return new XElement(tns + XMLNames.Component_Axlegear,
-				new XElement(tns + XMLNames.ComponentDataWrapper,
-					new XAttribute(xsi + "type", "AxlegearDataPIFType"),
-					GetCommonDescription(axleGearData),
-					new XElement(tns + XMLNames.Axlegear_LineType, axleGearData.LineType.ToXMLFormat()),
-					new XElement(tns + XMLNames.Axlegear_Ratio, axleGearData.Ratio.ToXMLFormat(3))));
-		}
+			var electricSystemEntry = GetElectricSystem(busAux.ElectricConsumers);
+			var hvacEntry = GetHVAC(busAux.HVACAux);
 
-		#endregion
+			if (electricSystemEntry == null && hvacEntry == null)
+				return null;
 
-		#region AxleWheels Data
+			return new XElement(v28 + XMLNames.Component_Auxiliaries,
 
-		private XElement GetAxleWheelDescription(IAxlesDeclarationInputData axleWheelsData)
-		{
-			return new XElement(
-				tns + XMLNames.Component_AxleWheels,
-				new XElement(tns + XMLNames.ComponentDataWrapper,
-					new XAttribute(xsi + "type", "AxleWheelsDataPIFType"),
-					XElement.Parse(axleWheelsData.XMLSource.InnerXml).Elements())
-				);
+					new XElement(v28 + XMLNames.ComponentDataWrapper,
+						new XAttribute(xsi + XMLNames.Attr_Type, "v2.8:CompletedVehicleAuxiliaryDataDeclarationType"),
+						electricSystemEntry != null
+							? GetElectricSystem(busAux.ElectricConsumers) : null,
+						hvacEntry != null
+							? GetHVAC(busAux.HVACAux) : null
+					));
 		}
 
 
-		#endregion
+		private XElement GetElectricSystem(IElectricConsumersDeclarationData electricConsumer)
+		{
+			if (electricConsumer.InteriorLightsLED == null && electricConsumer.DayrunninglightsLED == null &&
+				electricConsumer.PositionlightsLED == null && electricConsumer.BrakelightsLED == null &&
+				electricConsumer.HeadlightsLED == null)
+				return null;
+			
+			return new XElement(v28 + XMLNames.BusAux_ElectricSystem,
+				new XElement(v28 + XMLNames.BusAux_LEDLights,
+					electricConsumer.InteriorLightsLED != null 
+						? new XElement(v28 + XMLNames.Bus_Interiorlights, electricConsumer.InteriorLightsLED) : null,
+					electricConsumer.DayrunninglightsLED != null
+						? new XElement(v28 + XMLNames.Bus_Dayrunninglights, electricConsumer.DayrunninglightsLED) : null,
+					electricConsumer.PositionlightsLED != null
+						? new XElement(v28 + XMLNames.Bus_Positionlights, electricConsumer.PositionlightsLED) : null,
+					electricConsumer.BrakelightsLED != null
+						? new XElement(v28 + XMLNames.Bus_Brakelights, electricConsumer.BrakelightsLED) : null,
+					electricConsumer.HeadlightsLED != null
+						? new XElement(v28 + XMLNames.Bus_Headlights, electricConsumer.HeadlightsLED) : null
+				));
+		}
 
+		private XElement GetHVAC(IHVACBusAuxiliariesDeclarationData hvac)
+		{
+			if (hvac.SystemConfiguration == null &&
+				hvac.HeatPumpModeDriverCompartment == null && hvac.HeatPumpTypeDriverCompartment == null &&
+				hvac.HeatPumpModePassengerCompartment == null && hvac.HeatPumpTypePassengerCompartment == null &&
+				hvac.AuxHeaterPower == null && hvac.DoubleGlazing == null && hvac.AdjustableAuxiliaryHeater == null &&
+				hvac.SeparateAirDistributionDucts == null && hvac.WaterElectricHeater == null &&
+				hvac.AirElectricHeater == null &&
+				hvac.OtherHeatingTechnology == null)
+				return null;
 
-		#region Auxiliary Data
+			return new XElement(v28 + XMLNames.BusAux_HVAC,
+				hvac.SystemConfiguration != null
+					? new XElement(v28 + XMLNames.Bus_SystemConfiguration, hvac.SystemConfiguration.GetXmlFormat()) : null,
+				hvac.HeatPumpTypeDriverCompartment != null
+					? new XElement(v28 + XMLNames.Bus_HeatPumpTypeDriver, hvac.HeatPumpTypeDriverCompartment.GetLabel()) : null,
+				hvac.HeatPumpModeDriverCompartment != null
+					? new XElement(v28 + XMLNames.Bus_HeatPumpModeDriver, hvac.HeatPumpModeDriverCompartment.GetLabel()) : null,
+				hvac.HeatPumpTypePassengerCompartment != null
+					? new XElement(v28 + XMLNames.Bus_HeatPumpTypePassenger, hvac.HeatPumpTypePassengerCompartment.GetLabel()) : null,
+				hvac.HeatPumpModePassengerCompartment != null
+					? new XElement(v28 + XMLNames.Bus_HeatPumpModePassenger, hvac.HeatPumpModePassengerCompartment.GetLabel()) : null,
+				hvac.AuxHeaterPower != null
+					? new XElement(v28 + XMLNames.Bus_AuxiliaryHeaterPower, hvac.AuxHeaterPower.Value()) : null,
+				hvac.DoubleGlazing != null
+					? new XElement(v28 + XMLNames.Bus_DoubleGlazing, hvac.DoubleGlazing) : null,
+				hvac.AdjustableAuxiliaryHeater != null
+					? new XElement(v28 + XMLNames.Bus_AdjustableAuxiliaryHeater, hvac.AdjustableAuxiliaryHeater) : null,
+				hvac.SeparateAirDistributionDucts != null
+					? new XElement(v28 + XMLNames.Bus_SeparateAirDistributionDucts, hvac.SeparateAirDistributionDucts) : null,
+				hvac.WaterElectricHeater != null
+					? new XElement(v28 + XMLNames.Bus_WaterElectricHeater, hvac.WaterElectricHeater) : null,
+				hvac.AirElectricHeater != null
+					? new XElement(v28 + XMLNames.Bus_AirElectricHeater, hvac.AirElectricHeater) : null,
+				hvac.OtherHeatingTechnology != null
+					? new XElement(v28 + XMLNames.Bus_OtherHeatingTechnology, hvac.OtherHeatingTechnology) : null
+			);
+		}
 
-		private XElement GetAuxiliariesDescription(IBusAuxiliariesDeclarationData busAux)
+		private XElement GetApplicationInformation()
 		{
-			var busAuxXML = busAux.XMLSource;
-
 			return new XElement(
-				tns + XMLNames.Component_Auxiliaries,
+				tns + XMLNames.Report_ApplicationInfo_ApplicationInformation,
+				new XElement(tns + XMLNames.Report_ApplicationInfo_SimulationToolVersion, VectoSimulationCore.VersionNumber),
 				new XElement(
-					tns + XMLNames.ComponentDataWrapper,
-					new XAttribute(xsi + "type", "AuxiliaryDataPIFType"),
-					XElement.Parse(busAuxXML.InnerXml).Elements()
-				));
+					tns + XMLNames.Report_ApplicationInfo_Date,
+					XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)));
 		}
-		
-
-		#endregion
-
-
 
-		protected virtual object[] GetCommonDescription(IComponentInputData componentInput, bool isTransmissionData = false)
+		private XElement GetInputdataSignature()
 		{
-			var certificationMethod = componentInput.CertificationMethod != CertificationMethod.Measured ?
-				componentInput.CertificationMethod.ToXMLFormat() : null;
-
-			var certificationMethodTag = isTransmissionData
-				? XMLNames.Component_Gearbox_CertificationMethod
-				: XMLNames.Component_CertificationMethod;
-
-			return new object[] {
-				new XElement(tns + XMLNames.Component_Manufacturer, componentInput.Manufacturer),
-				new XElement(tns + XMLNames.Component_Model, componentInput.Model),
-				certificationMethod != null ? new XElement(tns + certificationMethodTag, certificationMethod) : null,
-				new XElement(tns + XMLNames.Component_CertificationNumber, componentInput.CertificationNumber),
-				new XElement(tns + XMLNames.Component_Date,  XmlConvert.ToString(componentInput.Date, XmlDateTimeSerializationMode.Utc)),
-				new XElement(tns + XMLNames.Component_AppVersion,  componentInput.AppVersion)
-			};
+			return new XElement(tns + XMLNames.DI_Signature, XMLHelper.CreateDummySig(di));
 		}
 
 		private string GetNamespaceVersionNumber(XNamespace ns)
diff --git a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs
index 6b073424cfb152a96b8784342b0c74142ee520f4..d3617eed5cd44a32057b1dbacb5c5fa0707656af 100644
--- a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs
@@ -27,7 +27,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 		const string VIFDirPath = @"TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\";
 		const string InputDirPath = @"TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\";
 		
-		const string InputFilePath = InputDirPath  + "vecto_vehicle-stage_vif_input.xml";
+		const string InputFilePath = InputDirPath  + "vecto_vehicle-stage_input_full-sample.xml";
 		const string VIFInputFile = VIFDirPath  + "vecto_multistage_primary_vehicle_stage_2_3.xml";
 
 		private const string vifResult = VIFDirPath + "vif_vehicle-sample.xml";