From ed72d7cff9de65545f6b9a60024d3cc425fe3b61 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Wed, 16 Jun 2021 08:58:57 +0200
Subject: [PATCH] removing property legislativeCategory (string) - not needed
 (legislative class already exists) new property for exempted technology for
 exempted vehicles adding schema for exempted primary bus (input, MRF, VIF)
 implementing reading and simulating exempted primary bus restructuring files
 for XML reports removed monitoring report

---
 VECTO.sln.DotSettings                         |   3 +
 VECTO/Input Files/Engine.vb                   |   4 +-
 VECTO/Input Files/Gearbox.vb                  |   2 +-
 VECTO/Input Files/MockVehicleInputData.vb     |   2 +-
 VECTO/Input Files/Vehicle.vb                  |   6 +-
 .../JobEdit/Vehicle/VehicleViewModel.cs       |   4 +-
 .../InterimStageBusVehicleViewModel_v2_8.cs   |   6 +-
 .../InputData/DeclarationInputData.cs         |   5 +-
 .../FileIO/JSON/JSONComponentInputData.cs     |  10 +-
 .../InputData/FileIO/JSON/JSONVehicleData.cs  |  10 +-
 .../XMLDeclarationVehicleDataProvider.cs      | 159 ++++-
 .../XMLDeclarationInputDataV26InjectModule.cs |   3 +
 .../XMLDeclarationMultistageInputReader.cs    |   8 +-
 .../XMLEngineeringVehicleDataProvider.cs      |   7 +-
 .../DeclarationDataAdapterPrimaryBus.cs       |  30 +
 ...rationModeHeavyLorryVectoRunDataFactory.cs |   2 +-
 ...rationModePrimaryBusVectoRunDataFactory.cs |  26 +-
 .../IXMLCustomerReport.cs                     |  15 +
 .../XMLCustomerReport.cs                      | 615 +++++++++---------
 .../XMLCustomerReportCompletedBus.cs          |   4 +-
 .../AbstractXMLManufacturerReport.cs          |  23 +-
 .../IXMLManufacturerReport.cs                 |  15 +
 .../XMLManufacturerReportCompletedBus.cs      |   2 +-
 .../XMLManufacturerReportExemptedTruck.cs     |   3 +-
 .../XMLManufacturerReportExeptedPrimaryBus.cs |  52 ++
 .../XMLManufacturerReportPrimaryBus.cs        |   1 +
 .../XMLManufacturerReportTruck.cs}            |   2 +-
 .../VTPReport}/XMLVTPReport.cs                |   0
 .../IXMLMultistageReport.cs                   |  12 +
 .../IXMLPrimaryVehicleReport.cs               |  15 +
 .../XMLExemptedPrimaryBusVehicleReport.cs     |  53 ++
 .../XMLMultistageBusReport.cs                 |  10 +-
 .../XMLPrimaryBusVehicleReport.cs}            |  25 +-
 .../OutputData/XML/XMLDeclarationReport.cs    |   4 +-
 .../XMLDeclarationReportCompletedVehicle.cs   |   2 +
 ...MLDeclarationReportMultistageBusVehicle.cs |   3 +-
 .../XML/XMLDeclarationReportPrimaryVehicle.cs |  30 +-
 .../OutputData/XML/XMLMonitoringReport.cs     | 218 -------
 .../VectoDeclarationDefinitions.2.6_Buses.xsd |  69 ++
 .../Resources/XSD/VectoOutputDefinitions.xsd  |  33 +-
 .../XSD/VectoOutputManufacturer.0.8.xsd       |   5 +-
 .../XSD/VectoOutputManufacturer.0.9.1.xsd     | 112 ++++
 .../Resources/XSD/VectoOutputManufacturer.xsd |   5 +-
 .../XSD/VectoOutputMultistage.0.1.xsd         | 314 ++++++---
 VectoCore/VectoCore/Utils/XMLValidator.cs     |  10 +-
 VectoCore/VectoCore/VectoCore.csproj          |  30 +-
 .../Declaration/ExemptedVehicleTest.cs        |  54 ++
 .../Multistage/MultistageVehicleTest.cs       |   2 +-
 .../exempted_primary_heavyBus.xml             |  25 +
 .../Utils/MockDeclarationVehicleInputData.cs  |   4 +-
 VectoCore/VectoCoreTest/VectoCoreTest.csproj  |   3 +
 .../XML/XMLMultistageBusDataTest.cs           |   2 +-
 VectoCore/VectoXML.spp                        |   2 +
 53 files changed, 1317 insertions(+), 744 deletions(-)
 create mode 100644 VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/IXMLCustomerReport.cs
 rename VectoCore/VectoCore/OutputData/XML/{ => DeclarationReports/CustomerInformationFile}/XMLCustomerReport.cs (95%)
 rename VectoCore/VectoCore/OutputData/XML/{ => DeclarationReports/CustomerInformationFile}/XMLCustomerReportCompletedBus.cs (98%)
 rename VectoCore/VectoCore/OutputData/XML/{ => DeclarationReports/ManufacturerReport}/AbstractXMLManufacturerReport.cs (97%)
 create mode 100644 VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/IXMLManufacturerReport.cs
 rename VectoCore/VectoCore/OutputData/XML/{ => DeclarationReports/ManufacturerReport}/XMLManufacturerReportCompletedBus.cs (99%)
 rename VectoCore/VectoCore/OutputData/XML/{ => DeclarationReports/ManufacturerReport}/XMLManufacturerReportExemptedTruck.cs (96%)
 create mode 100644 VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExeptedPrimaryBus.cs
 rename VectoCore/VectoCore/OutputData/XML/{ => DeclarationReports/ManufacturerReport}/XMLManufacturerReportPrimaryBus.cs (97%)
 rename VectoCore/VectoCore/OutputData/XML/{XMLManufacturerReport.cs => DeclarationReports/ManufacturerReport/XMLManufacturerReportTruck.cs} (98%)
 rename VectoCore/VectoCore/OutputData/XML/{ => DeclarationReports/VTPReport}/XMLVTPReport.cs (100%)
 create mode 100644 VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLMultistageReport.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLPrimaryVehicleReport.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLExemptedPrimaryBusVehicleReport.cs
 rename VectoCore/VectoCore/OutputData/XML/{ => DeclarationReports/VehicleInformationFile}/XMLMultistageBusReport.cs (99%)
 rename VectoCore/VectoCore/OutputData/XML/{XMLPrimaryVehicleReport.cs => DeclarationReports/VehicleInformationFile/XMLPrimaryBusVehicleReport.cs} (97%)
 delete mode 100644 VectoCore/VectoCore/OutputData/XML/XMLMonitoringReport.cs
 create mode 100644 VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.9.1.xsd
 create mode 100644 VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/exempted_primary_heavyBus.xml

diff --git a/VECTO.sln.DotSettings b/VECTO.sln.DotSettings
index 72ab10a7f7..5838ac9138 100644
--- a/VECTO.sln.DotSettings
+++ b/VECTO.sln.DotSettings
@@ -2,6 +2,7 @@
 	<s:Boolean x:Key="/Default/CodeEditing/GenerateMemberBody/WrapIntoRegions/@EntryValue">True</s:Boolean>
 	<s:Boolean x:Key="/Default/CodeInspection/CodeAnnotations/NamespacesWithAnnotations/=HashingTool_002EAnnotations/@EntryIndexedValue">True</s:Boolean>
 	<s:Boolean x:Key="/Default/CodeInspection/CodeAnnotations/NamespacesWithAnnotations/=VECTO3GUI2020_002EAnnotations/@EntryIndexedValue">True</s:Boolean>
+	<s:Boolean x:Key="/Default/CodeInspection/ExcludedFiles/FileMasksToSkip/=_002A_002Evdri/@EntryIndexedValue">True</s:Boolean>
 	<s:String x:Key="/Default/CodeStyle/CodeCleanup/SilentCleanupProfile/@EntryValue">Default: Reformat Code</s:String>
 	<s:String x:Key="/Default/CodeStyle/CodeFormatting/CommonFormatter/ALIGNMENT_TAB_FILL_STYLE/@EntryValue">USE_TABS_ONLY</s:String>
 	<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/ALIGNMENT_TAB_FILL_STYLE/@EntryValue">USE_TABS_ONLY</s:String>
@@ -124,4 +125,6 @@
 	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EJavaScript_002ECodeStyle_002ESettingsUpgrade_002EJsWrapperSettingsUpgrader/@EntryIndexedValue">True</s:Boolean>
 	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EVB_002ECodeStyle_002ESettingsUpgrade_002EVBSpaceAfterUnaryMigration/@EntryIndexedValue">True</s:Boolean>
 	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EXml_002ECodeStyle_002EFormatSettingsUpgrade_002EXmlMoveToCommonFormatterSettingsUpgrade/@EntryIndexedValue">True</s:Boolean>
+	<s:Boolean x:Key="/Default/Housekeeping/ExcludedProjects/ProjectMasksToIgnore/=_002A_002A_002Evdri/@EntryIndexedValue">False</s:Boolean>
+	<s:Boolean x:Key="/Default/Housekeeping/ExcludedProjects/ProjectMasksToIgnore/=_002A_002Evdri/@EntryIndexedValue">False</s:Boolean>
 	<s:Boolean x:Key="/Default/UserDictionary/Words/=RESS/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
diff --git a/VECTO/Input Files/Engine.vb b/VECTO/Input Files/Engine.vb
index 8d3fa15223..2299291030 100644
--- a/VECTO/Input Files/Engine.vb	
+++ b/VECTO/Input Files/Engine.vb	
@@ -620,7 +620,6 @@ Public Class DummyVehicle
 	Public Property Identifier As String Implements IVehicleDeclarationInputData.Identifier
 	Public Property ExemptedVehicle As Boolean Implements IVehicleDeclarationInputData.ExemptedVehicle
 	Public Property VIN As String Implements IVehicleDeclarationInputData.VIN
-	Public ReadOnly Property LegislativeCategory As String Implements IVehicleDeclarationInputData.LegislativeCategory
 	Public Property LegislativeClass As LegislativeClass? Implements IVehicleDeclarationInputData.LegislativeClass
 	Public Property VehicleCategory As VehicleCategory Implements IVehicleDeclarationInputData.VehicleCategory
 	Public Property AxleConfiguration As AxleConfiguration Implements IVehicleDeclarationInputData.AxleConfiguration
@@ -653,7 +652,8 @@ Public Class DummyVehicle
 	Public Property DualFuelVehicle As Boolean Implements IVehicleDeclarationInputData.DualFuelVehicle
 	Public Property MaxNetPower1 As Watt Implements IVehicleDeclarationInputData.MaxNetPower1
 	Public Property MaxNetPower2 As Watt Implements IVehicleDeclarationInputData.MaxNetPower2
-	Public ReadOnly Property RegisteredClass As RegistrationClass? Implements IVehicleDeclarationInputData.RegisteredClass
+    Public ReadOnly Property ExemptedTechnology As String Implements IVehicleDeclarationInputData.ExemptedTechnology
+    Public ReadOnly Property RegisteredClass As RegistrationClass? Implements IVehicleDeclarationInputData.RegisteredClass
 	Public ReadOnly Property NumberPassengerSeatsUpperDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsUpperDeck
 	Public ReadOnly Property NumberPassengerSeatsLowerDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsLowerDeck
 	Public ReadOnly Property NumberPassengersStandingLowerDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengersStandingLowerDeck
diff --git a/VECTO/Input Files/Gearbox.vb b/VECTO/Input Files/Gearbox.vb
index 3f24eecc22..317fdaaa86 100644
--- a/VECTO/Input Files/Gearbox.vb	
+++ b/VECTO/Input Files/Gearbox.vb	
@@ -802,7 +802,6 @@ Public Class MockEngineeringVehicle
     Public Property Identifier As String Implements IVehicleDeclarationInputData.Identifier
     Public Property ExemptedVehicle As Boolean Implements IVehicleDeclarationInputData.ExemptedVehicle
     Public Property VIN As String Implements IVehicleDeclarationInputData.VIN
-    Public ReadOnly Property LegislativeCategory As String Implements IVehicleDeclarationInputData.LegislativeCategory
     Public Property LegislativeClass As LegislativeClass? Implements IVehicleDeclarationInputData.LegislativeClass
     Public Property VehicleCategory As VehicleCategory Implements IVehicleDeclarationInputData.VehicleCategory
     Public Property AxleConfiguration As AxleConfiguration Implements IVehicleDeclarationInputData.AxleConfiguration
@@ -839,6 +838,7 @@ Public Class MockEngineeringVehicle
     Public Property DualFuelVehicle As Boolean Implements IVehicleDeclarationInputData.DualFuelVehicle
     Public Property MaxNetPower1 As Watt Implements IVehicleDeclarationInputData.MaxNetPower1
     Public Property MaxNetPower2 As Watt Implements IVehicleDeclarationInputData.MaxNetPower2
+    Public ReadOnly Property ExemptedTechnology As String Implements IVehicleDeclarationInputData.ExemptedTechnology
     Public ReadOnly Property RegisteredClass As RegistrationClass? Implements IVehicleDeclarationInputData.RegisteredClass
     Public ReadOnly Property NumberPassengerSeatsUpperDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsUpperDeck
     Public ReadOnly Property NumberPassengerSeatsLowerDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsLowerDeck
diff --git a/VECTO/Input Files/MockVehicleInputData.vb b/VECTO/Input Files/MockVehicleInputData.vb
index 0ff5fff181..3b484d4c04 100644
--- a/VECTO/Input Files/MockVehicleInputData.vb	
+++ b/VECTO/Input Files/MockVehicleInputData.vb	
@@ -19,7 +19,6 @@ Public Class MockVehicleInputData
     Public Property Identifier As String Implements IVehicleDeclarationInputData.Identifier
     Public Property ExemptedVehicle As Boolean Implements IVehicleDeclarationInputData.ExemptedVehicle
     Public Property VIN As String Implements IVehicleDeclarationInputData.VIN
-    Public ReadOnly Property LegislativeCategory As String Implements IVehicleDeclarationInputData.LegislativeCategory
     Public Property LegislativeClass As LegislativeClass? Implements IVehicleDeclarationInputData.LegislativeClass
     Public Property VehicleCategory As VehicleCategory Implements IVehicleDeclarationInputData.VehicleCategory
     Public Property AxleConfiguration As AxleConfiguration Implements IVehicleDeclarationInputData.AxleConfiguration
@@ -41,6 +40,7 @@ Public Class MockVehicleInputData
     Public Property DualFuelVehicle As Boolean Implements IVehicleDeclarationInputData.DualFuelVehicle
     Public Property MaxNetPower1 As Watt Implements IVehicleDeclarationInputData.MaxNetPower1
     Public Property MaxNetPower2 As Watt Implements IVehicleDeclarationInputData.MaxNetPower2
+    Public ReadOnly Property ExemptedTechnology As String Implements IVehicleDeclarationInputData.ExemptedTechnology
     Public ReadOnly Property RegisteredClass As RegistrationClass? Implements IVehicleDeclarationInputData.RegisteredClass
     Public ReadOnly Property NumberPassengerSeatsUpperDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsUpperDeck
     Public ReadOnly Property NumberPassengerSeatsLowerDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsLowerDeck
diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb
index f501510b56..c2259f8da1 100644
--- a/VECTO/Input Files/Vehicle.vb	
+++ b/VECTO/Input Files/Vehicle.vb	
@@ -380,8 +380,6 @@ Public Class Vehicle
 		End Get
 	End Property
 
-	Public ReadOnly Property LegislativeCategory As String Implements IVehicleDeclarationInputData.LegislativeCategory
-
 	Public ReadOnly Property LegislativeClass As LegislativeClass? Implements IVehicleEngineeringInputData.LegislativeClass
 		Get
 			Return legClass
@@ -856,7 +854,9 @@ end Property
 		End Get
 	End Property
 
-	Public ReadOnly Property RegisteredClass As RegistrationClass? Implements IVehicleDeclarationInputData.RegisteredClass
+    Public ReadOnly Property ExemptedTechnology As String Implements IVehicleDeclarationInputData.ExemptedTechnology
+
+    Public ReadOnly Property RegisteredClass As RegistrationClass? Implements IVehicleDeclarationInputData.RegisteredClass
 	Public ReadOnly Property NumberPassengerSeatsUpperDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsUpperDeck
 	Public ReadOnly Property NumberPassengerSeatsLowerDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsLowerDeck
 	Public ReadOnly Property NumberPassengersStandingLowerDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengersStandingLowerDeck
diff --git a/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs b/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs
index 86dbd231f7..9ffa326e26 100644
--- a/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs
+++ b/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs
@@ -179,8 +179,6 @@ namespace VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle
 			set => throw new NotImplementedException();
 		}
 
-		public virtual string LegislativeCategory => throw new NotImplementedException();
-
 		LegislativeClass? IVehicleDeclarationInputData.LegislativeClass { get; }
 
 		public virtual LegislativeClass LegislativeClass
@@ -282,6 +280,8 @@ namespace VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle
 			set => throw new NotImplementedException();
 		}
 
+		public string ExemptedTechnology { get; }
+
 		RegistrationClass? IVehicleDeclarationInputData.RegisteredClass { get; }
 		int? IVehicleDeclarationInputData.NumberPassengerSeatsUpperDeck { get; }
 		int? IVehicleDeclarationInputData.NumberPassengerSeatsLowerDeck { get; }
diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs
index 6acdf14367..c362975ad4 100644
--- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs
+++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs
@@ -687,6 +687,8 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 
 		#endregion;
 
+		public string ExemptedTechnology { get; }
+
 		public RegistrationClass? RegisteredClass
 		{
 			get => _registeredClass;
@@ -739,10 +741,6 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 
 		#region not implemented
 
-		public string LegislativeCategory
-		{
-			get => throw new NotImplementedException();
-		}
 		public IGearboxDeclarationInputData GearboxInputData => throw new NotImplementedException();
 
 		public ITorqueConverterDeclarationInputData TorqueConverterInputData => throw new NotImplementedException();
diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
index d9ba954aa9..e643884fb2 100644
--- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
+++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
@@ -99,8 +99,6 @@ namespace TUGraz.VectoCommon.InputData
 
 		string VIN { get; }
 
-		string LegislativeCategory { get; }
-
 		LegislativeClass? LegislativeClass { get; }
 
 		/// <summary>
@@ -169,6 +167,9 @@ namespace TUGraz.VectoCommon.InputData
 
 		Watt MaxNetPower2 { get; }
 
+		string ExemptedTechnology { get; }
+
+
 		RegistrationClass? RegisteredClass { get; }
 
 		int? NumberPassengerSeatsUpperDeck { get; }
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs
index aa0e5815a8..b3521a3aba 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs
@@ -233,11 +233,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			get { return VehicleData.VIN; }
 		}
 
-		public string LegislativeCategory
-		{
-			get { return null; }
-		}
-
 		public LegislativeClass? LegislativeClass
 		{
 			get { return VehicleData.LegislativeClass; }
@@ -562,6 +557,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			get { return null; }
 		}
 
+		public string ExemptedTechnology
+		{
+			get { return null; }
+		}
+
 		public RegistrationClass? RegisteredClass
 		{
 			get { return RegistrationClass.unknown; }
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
index cd231ad396..6b4e9b9e98 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
@@ -259,11 +259,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			get { return Constants.NOT_AVailABLE; }
 		}
 
-		public string LegislativeCategory
-		{
-			get { return null; }
-		}
-
 		public virtual LegislativeClass? LegislativeClass
 		{
 			get {
@@ -647,6 +642,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			get { return null; }
 		}
 
+		public string ExemptedTechnology
+		{
+			get { return null; }
+		}
+
 		public virtual RegistrationClass? RegisteredClass
 		{
 			get { return RegistrationClass.unknown; }
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
index 15de858e1e..def9197ec7 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
@@ -120,14 +120,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			get { return GetString(XMLNames.Vehicle_VIN); }
 		}
 
-		public virtual string LegislativeCategory
-		{
-			get { return null; }
-		}
-
 		public virtual LegislativeClass? LegislativeClass
 		{
-			get { return GetString(XMLNames.Vehicle_LegislativeClass).ParseEnum<LegislativeClass>(); }
+			get { return GetString("LegislativeCategory").ParseEnum<LegislativeClass>(); }
 		}
 
 		public virtual VehicleCategory VehicleCategory
@@ -150,7 +145,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		public virtual Kilogram GrossVehicleMassRating
 		{
-			get { return GetDouble(XMLNames.Vehicle_GrossVehicleMass).SI<Kilogram>(); }
+			get { return GetDouble(XMLNames.Vehicle_TPMLM).SI<Kilogram>(); }
 		}
 
 		public virtual IList<ITorqueLimitInputData> TorqueLimits
@@ -278,6 +273,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			}
 		}
 
+		public virtual string ExemptedTechnology
+		{
+			get { return null; }
+		}
+
 		public virtual RegistrationClass? RegisteredClass
 		{
 			get { return RegistrationClass.unknown; }
@@ -741,6 +741,123 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 		#endregion
 	}
 
+	public class XMLDeclarationExemptedPrimaryBusDataProviderV26 : XMLDeclarationVehicleDataProviderV20
+	{
+		public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V26;
+
+		public new const string XSD_TYPE = "ExemptedPrimaryHeavyBusType";
+
+		public new static readonly string QUALIFIED_XSD_TYPE =
+			XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE);
+
+		public XMLDeclarationExemptedPrimaryBusDataProviderV26(
+			IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile)
+		{
+			SourceType = DataSourceType.XMLEmbedded;
+
+		}
+
+		#region Overrides of AbstractXMLResource
+
+		protected override XNamespace SchemaNamespace {
+			get { return NAMESPACE_URI; }
+		}
+
+		protected override DataSourceType SourceType { get; }
+
+		#endregion
+
+		public override VehicleCategory VehicleCategory {
+			get { return VehicleCategory.HeavyBusPrimaryVehicle; }
+		}
+
+		public override bool ExemptedVehicle {
+			get { return true; }
+		}
+
+
+		public override IList<ITorqueLimitInputData> TorqueLimits {
+			get { return new List<ITorqueLimitInputData>(); }
+		}
+
+		public override PerSecond EngineIdleSpeed {
+			get { return null; }
+		}
+
+		public override bool VocationalVehicle {
+			get { return false; }
+		}
+
+		public override bool SleeperCab {
+			get { return false; }
+		}
+
+		public override TankSystem? TankSystem {
+			get { return null; }
+		}
+
+		public override IAdvancedDriverAssistantSystemDeclarationInputData ADAS {
+			get { return null; }
+		}
+
+		public override bool ZeroEmissionVehicle {
+			get { return XmlConvert.ToBoolean(GetString(XMLNames.Vehicle_ZeroEmissionVehicle)); }
+		}
+
+		public override bool HybridElectricHDV {
+			get { return false; }
+		}
+
+		public override bool DualFuelVehicle {
+			get { return false; }
+		}
+
+		public override Watt MaxNetPower1 {
+			get { return GetDouble("SumNetPower").SI<Watt>(); }
+		}
+
+		public override Watt MaxNetPower2 {
+			get { return null; }
+		}
+
+		public override string ExemptedTechnology
+		{
+			get { return GetString("Technology"); }
+		}
+
+		public override IVehicleComponentsDeclaration Components {
+			get { return null; }
+		}
+
+		public override XmlElement ComponentNode {
+			get { return null; }
+		}
+
+		public override XmlElement PTONode {
+			get { return null; }
+		}
+
+		public override XmlElement ADASNode {
+			get { return null; }
+		}
+
+		public override AngledriveType AngledriveType {
+			get { return AngledriveType.None; }
+		}
+
+		public override RetarderType RetarderType {
+			get { return RetarderType.None; }
+		}
+
+		public override double RetarderRatio {
+			get { return 0; }
+		}
+
+		public override IPTOTransmissionInputData PTOTransmissionInputData {
+			get { return null; }
+		}
+	}
+
 	public class XMLDeclarationMediumLorryVehicleDataProviderV26 : XMLDeclarationVehicleDataProviderV21
 	{
 		public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V26;
@@ -804,6 +921,28 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 		protected override DataSourceType SourceType { get; }
 
 		#endregion
+
+		public override XmlElement ComponentNode {
+			get { return null; }
+		}
+
+
+		public override XmlElement ADASNode {
+			get { return null; }
+		}
+
+		public override AngledriveType AngledriveType {
+			get { return AngledriveType.None; }
+		}
+
+		public override RetarderType RetarderType {
+			get { return RetarderType.None; }
+		}
+
+		public override double RetarderRatio {
+			get { return 0; }
+		}
+
 	}
 
 	public class XMLDeclarationCompletedBusDataProviderV26 : XMLDeclarationVehicleDataProviderV20
@@ -970,9 +1109,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			get { return GetString(XMLNames.Vehicle_VIN); }
 		}
 
-		public string LegislativeCategory
+		public LegislativeClass? LegislativeClass
 		{
-			get { return GetString(XMLNames.Bus_LegislativeCategory); }
+			get { return GetString(XMLNames.Bus_LegislativeCategory)?.ParseEnum<LegislativeClass>(); }
 		}
 
 		public VehicleCategory VehicleCategory
@@ -1070,7 +1209,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		public string Identifier { get; }
 		public bool ExemptedVehicle { get; }
-		public LegislativeClass? LegislativeClass { get; }
 		public int? NumberPassengerSeatsUpperDeck { get; }
 		public int? NumberPassengerSeatsLowerDeck { get; }
 		public int? NumberPassengersStandingLowerDeck { get; }
@@ -1090,6 +1228,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 		public bool DualFuelVehicle { get; }
 		public Watt MaxNetPower1 { get; }
 		public Watt MaxNetPower2 { get; }
+		public string ExemptedTechnology { get; }
 		public RegistrationClass? RegisteredClass { get; }
 		public VehicleCode? VehicleCode { get; }
 		public bool? LowEntry { get; }
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs
index d2a946a414..ab7b6e506f 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs
@@ -18,6 +18,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.NinjectModules {
 			Bind<IXMLDeclarationVehicleData>().To<XMLDeclarationCompletedBusDataProviderV26>()
 												.Named(XMLDeclarationCompletedBusDataProviderV26.QUALIFIED_XSD_TYPE);
 
+			Bind<IXMLDeclarationVehicleData>().To<XMLDeclarationExemptedPrimaryBusDataProviderV26>()
+				.Named(XMLDeclarationExemptedPrimaryBusDataProviderV26.QUALIFIED_XSD_TYPE);
+
 
 			Bind<IXMLVehicleComponentsDeclaration>().To<XMLDeclarationPrimaryBusComponentsDataProviderV26>()
 													.Named(XMLDeclarationPrimaryBusComponentsDataProviderV26.QUALIFIED_XSD_TYPE);
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 aca0d0a9e7..3fe5644d8b 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs
@@ -13,6 +13,7 @@ using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
 using TUGraz.VectoCore.OutputData.XML;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile;
 using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
@@ -468,11 +469,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			get { return _manufacturingStages.First().Vehicle.VIN; }
 		}
 
-		public string LegislativeCategory
-		{
-			get { return null; }
-		}
-
 		public VehicleDeclarationType VehicleDeclarationType
 		{
 			get { return _manufacturingStages.First().Vehicle.VehicleDeclarationType; }
@@ -633,6 +629,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		public bool DualFuelVehicle { get; }
 		public Watt MaxNetPower1 { get; }
 		public Watt MaxNetPower2 { get; }
+		public string ExemptedTechnology { get; }
+
 		public CubicMeter CargoVolume { get; }
 		public bool Articulated { get; }
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs
index 0856567215..e2fc9ac0e0 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs
@@ -108,11 +108,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
 			get { return GetString(XMLNames.Vehicle_VIN); }
 		}
 
-		public string LegislativeCategory
-		{
-			get { return null; }
-		}
-
 		public virtual LegislativeClass? LegislativeClass
 		{
 			get { return GetString(XMLNames.Vehicle_LegislativeClass).ParseEnum<LegislativeClass>(); }
@@ -206,6 +201,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
 			get { return null; }
 		}
 
+		public string ExemptedTechnology { get; }
+
 		public virtual RegistrationClass? RegisteredClass { get { return RegistrationClass.unknown;} }
 		public virtual int? NumberPassengerSeatsUpperDeck { get { return 0; } }
 		public virtual int? NumberPassengerSeatsLowerDeck { get { return 0; } }
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs
index f7b09265fd..bac7250881 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs
@@ -34,11 +34,41 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 		public override VehicleData CreateVehicleData(IVehicleDeclarationInputData data, Segment segment, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational)
 		{
 			var retVal = base.CreateVehicleData(data, segment, mission, loading, allowVocational);
+			if (data.ExemptedVehicle) {
+				return retVal;
+			}
 			retVal.CurbMass = mission.CurbMass;
 			retVal.GrossVehicleMass = 40000.SI<Kilogram>();
 			return retVal;
 		}
 
+		protected override VehicleData CreateExemptedVehicleData(IVehicleDeclarationInputData data)
+		{
+			var exempted = new VehicleData {
+				InputData = data,
+				SavedInDeclarationMode = data.SavedInDeclarationMode,
+				Manufacturer = data.Manufacturer,
+				ModelName = data.Model,
+				Date = data.Date,
+				//CertificationNumber = data.CertificationNumber,
+				DigestValueInput = data.DigestValue != null ? data.DigestValue.DigestValue : "",
+				VehicleCategory = data.VehicleCategory,
+				//CurbMass = data.CurbMassChassis,
+				GrossVehicleMass = data.GrossVehicleMassRating,
+				AirDensity = Physics.AirDensity,
+			};
+			exempted.VIN = data.VIN;
+			exempted.ManufacturerAddress = data.ManufacturerAddress;
+			exempted.LegislativeClass = data.LegislativeClass;
+			exempted.ZeroEmissionVehicle = data.ZeroEmissionVehicle;
+			exempted.HybridElectricHDV = data.HybridElectricHDV;
+			exempted.DualFuelVehicle = data.DualFuelVehicle;
+			exempted.MaxNetPower1 = data.MaxNetPower1;
+			exempted.MaxNetPower2 = data.MaxNetPower2;
+			exempted.AxleConfiguration = data.AxleConfiguration;
+			return exempted;
+		}
+
 		public override PTOData CreatePTOTransmissionData(IPTOTransmissionInputData pto)
 		{
 			return null;
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs
index 20791a0cba..7a1382a811 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs
@@ -191,6 +191,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 			return simulationRunData;
 		}
 
-
+		
 	}
 }
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs
index fa3fcf02e8..31de49f770 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs
@@ -32,10 +32,19 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 		protected override IEnumerable<VectoRunData> GetNextRun()
 		{
 			if (InputDataProvider.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle) {
-				return VectoRunDataHeavyBusPrimary();
+				if (InputDataProvider.JobInputData.Vehicle.ExemptedVehicle) {
+					yield return CreateVectoRunData(InputDataProvider.JobInputData.Vehicle, 0, null,
+						new KeyValuePair<LoadingType, Tuple<Kilogram, double?>>());
+				} else {
+					foreach (var vectoRunData in VectoRunDataHeavyBusPrimary()) {
+						yield return vectoRunData;
+					}
+				}
 			}
 
-			return new List<VectoRunData>();
+			foreach (var entry in new List<VectoRunData>()) {
+				yield return entry;
+			}
 		}
 
 		protected override Segment GetSegment(IVehicleDeclarationInputData vehicle)
@@ -80,6 +89,19 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 		protected override VectoRunData CreateVectoRunData(
 			IVehicleDeclarationInputData vehicle, int modeIdx, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading)
 		{
+			if (InputDataProvider.JobInputData.Vehicle.ExemptedVehicle) {
+				return new VectoRunData() {
+					Exempted = true,
+					Report = Report,
+					Mission = new Mission() { MissionType = MissionType.ExemptedMission },
+					VehicleData = DataAdapter.CreateVehicleData(InputDataProvider.JobInputData.Vehicle, new Segment(),
+						null,
+						new KeyValuePair<LoadingType, Tuple<Kilogram, double?>>(LoadingType.ReferenceLoad,
+							Tuple.Create<Kilogram, double?>(0.SI<Kilogram>(), null)), _allowVocational),
+					InputDataHash = InputDataProvider.XMLHash
+				};
+			}
+
 			var engine = vehicle.Components.EngineInputData;
 			var engineModes = engine.EngineModes;
 			var engineMode = engineModes[modeIdx];
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/IXMLCustomerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/IXMLCustomerReport.cs
new file mode 100644
index 0000000000..dc7e48050a
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/IXMLCustomerReport.cs
@@ -0,0 +1,15 @@
+using System.Collections.Generic;
+using System.Xml.Linq;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+
+namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile
+{
+	public interface IXMLCustomerReport
+	{
+		void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes);
+		XDocument Report { get; }
+		void WriteResult(XMLDeclarationReport.ResultEntry resultValue);
+		void GenerateReport(XElement resultSignature);
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReport.cs
similarity index 95%
rename from VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs
rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReport.cs
index 7f3224de4d..5cb19313b4 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReport.cs
@@ -1,296 +1,319 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2019 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Xml;
-using System.Xml.Linq;
-using TUGraz.IVT.VectoXML.Writer;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.Models.Declaration;
-using TUGraz.VectoCore.Models.Simulation.Data;
-using TUGraz.VectoCore.Models.Simulation.Impl;
-using TUGraz.VectoCore.Models.SimulationComponent.Data;
-using TUGraz.VectoCore.Utils;
-using TUGraz.VectoHashing;
-
-namespace TUGraz.VectoCore.OutputData.XML
-{
-	public class XMLCustomerReport
-	{
-		public const string CURRENT_SCHEMA_VERSION = "0.8";
-
-		protected readonly XElement VehiclePart;
-
-		protected XElement InputDataIntegrity;
-
-		protected readonly XElement Results;
-
-		protected readonly XNamespace rootNS = XNamespace.Get("urn:tugraz:ivt:VectoAPI:CustomerOutput");
-		protected readonly XNamespace tns = XNamespace.Get("urn:tugraz:ivt:VectoAPI:CustomerOutput:v" + CURRENT_SCHEMA_VERSION);
-		protected readonly XNamespace di = XNamespace.Get("http://www.w3.org/2000/09/xmldsig#");
-		protected readonly XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
-
-		protected bool _allSuccess = true;
-
-		protected KilogramPerMeter _weightedCo2 = 0.SI<KilogramPerMeter>();
-
-		protected Kilogram _weightedPayload = 0.SI<Kilogram>();
-		protected double _passengerCount = 0;
-
-
-		public XMLCustomerReport()
-		{
-			
-			VehiclePart = new XElement(tns + XMLNames.Component_Vehicle);
-			Results = new XElement(tns + XMLNames.Report_Results);
-		}
-
-		public virtual void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes)
-		{
-			var exempted = modelData.Exempted;
-			VehiclePart.Add(
-				new XElement(tns + XMLNames.Component_Model, modelData.VehicleData.ModelName),
-				new XElement(tns + XMLNames.Component_Manufacturer, modelData.VehicleData.Manufacturer),
-				new XElement(tns + XMLNames.Component_ManufacturerAddress, modelData.VehicleData.ManufacturerAddress),
-				new XElement(tns + XMLNames.Vehicle_VIN, modelData.VehicleData.VIN),
-				new XElement(tns + XMLNames.Vehicle_LegislativeClass, modelData.VehicleData.LegislativeClass.ToXMLFormat()),
-				new XElement(
-					tns + XMLNames.Vehicle_GrossVehicleMass,
-					XMLHelper.ValueAsUnit(modelData.VehicleData.GrossVehicleMass, XMLNames.Unit_t, 1)),
-				new XElement(
-					tns + XMLNames.Vehicle_CurbMassChassis, XMLHelper.ValueAsUnit(modelData.VehicleData.CurbMass, XMLNames.Unit_kg)),
-				new XElement(tns + XMLNames.Vehicle_ZeroEmissionVehicle, modelData.VehicleData.ZeroEmissionVehicle),
-				new XElement(tns + XMLNames.Vehicle_HybridElectricHDV, modelData.VehicleData.HybridElectricHDV),
-				new XElement(tns + XMLNames.Vehicle_DualFuelVehicle, modelData.VehicleData.DualFuelVehicle)
-			);
-
-			if (exempted) {
-				VehiclePart.Add(new XAttribute(xsi + "type", "ExemptedVehicleType"), 
-					ExemptedData(modelData));
-				Results.Add(new XElement(tns + XMLNames.Report_ExemptedVehicle));
-			} else {
-				VehiclePart.Add(
-					new XAttribute(xsi + "type", "VehicleType"),
-					new XElement(tns + XMLNames.Vehicle_AxleConfiguration, modelData.VehicleData.AxleConfiguration.GetName()),
-					new XElement(tns + XMLNames.Report_Vehicle_VehicleGroup, modelData.VehicleData.VehicleClass.GetClassNumber()),
-					new XElement(tns + XMLNames.Vehicle_VocationalVehicle, modelData.VehicleData.VocationalVehicle),
-					new XElement(tns + XMLNames.Vehicle_SleeperCab, modelData.VehicleData.SleeperCab),
-					GetADAS(modelData.VehicleData.ADAS),
-					ComponentData(modelData, fuelModes)
-					);
-			}
-			InputDataIntegrity = new XElement(tns + XMLNames.Report_InputDataSignature,
-				modelData.InputDataHash == null ? XMLHelper.CreateDummySig(di) : new XElement(modelData.InputDataHash));
-		}
-
-		private object[] ExemptedData(VectoRunData modelData)
-		{
-			return new object[] {
-				modelData.VehicleData.HybridElectricHDV ? new XElement(tns + XMLNames.Vehicle_MaxNetPower1, XMLHelper.ValueAsUnit(modelData.VehicleData.MaxNetPower1, XMLNames.Unit_W)) : null,
-				modelData.VehicleData.HybridElectricHDV ? new XElement(tns + XMLNames.Vehicle_MaxNetPower2, XMLHelper.ValueAsUnit(modelData.VehicleData.MaxNetPower2, XMLNames.Unit_W)) : null
-			};
-		}
-
-		protected XElement GetADAS(VehicleData.ADASData adasData)
-		{
-			return new XElement(tns + XMLNames.Vehicle_ADAS,
-								new XElement(tns + XMLNames.Vehicle_ADAS_EngineStopStart, adasData.EngineStopStart),
-								new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop, adasData.EcoRoll.WithoutEngineStop()),
-								new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart, adasData.EcoRoll.WithEngineStop()),
-								new XElement(tns + XMLNames.Vehicle_ADAS_PCC, adasData.PredictiveCruiseControl != PredictiveCruiseControlType.None)
-			);
-		}
-
-		protected virtual XElement[] ComponentData(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes)
-		{
-			return new[] {
-				new XElement(
-					tns + XMLNames.Report_Vehicle_EngineRatedPower,
-					XMLHelper.ValueAsUnit(modelData.EngineData.RatedPowerDeclared, XMLNames.Unit_kW)),
-				new XElement(
-					tns + XMLNames.Report_Vehicle_EngineDisplacement,
-					XMLHelper.ValueAsUnit(modelData.EngineData.Displacement, XMLNames.Unit_ltr, 1)),
-				new XElement(
-					tns + XMLNames.Report_Vehicle_FuelTypes,
-					fuelModes.SelectMany(x => x.Select(f => f.FuelType.ToXMLFormat())).Distinct()
-							.Select(x => new XElement(tns + XMLNames.Engine_FuelType, x))
-				),
-				new XElement(
-					tns + XMLNames.Report_Vehicle_TransmissionCertificationMethod,
-					modelData.GearboxData.CertificationMethod.ToXMLFormat()),
-				new XElement(tns + XMLNames.Gearbox_TransmissionType, modelData.GearboxData.Type.ToXMLFormat()),
-				new XElement(tns + XMLNames.Report_GetGearbox_GearsCount, modelData.GearboxData.Gears.Count),
-				new XElement(tns + XMLNames.Report_Vehicle_Retarder, modelData.Retarder.Type.IsDedicatedComponent()),
-				new XElement(tns + XMLNames.Report_Vehicle_AxleRatio, modelData.AxleGearData.AxleGear.Ratio.ToXMLFormat(3)),
-				new XElement(
-					tns + XMLNames.Report_Vehicle_AverageRRC, modelData.VehicleData.AverageRollingResistanceTruck.ToXMLFormat(4)),
-
-				//new XElement(
-				//	tns + XMLNames.Report_Vehicle_AverageRRCLabel,
-				//	DeclarationData.Wheels.TyreClass.Lookup(modelData.VehicleData.AverageRollingResistanceTruck))
-			}.Concat(
-				modelData.VehicleData.AxleData.Where(x => x.AxleType != AxleType.Trailer).Select(
-					(x, idx) => new XElement(tns + "FuelEfficiencyLabelMotorVehicleTyre",
-					new XAttribute("axleNbr", idx+1),
-					x.FuelEfficiencyClass))).ToArray();
-
-		}
-
-		
-
-		public virtual void WriteResult(XMLDeclarationReport.ResultEntry resultEntry)
-		{
-			//foreach (var resultEntry in entry.ResultEntry) {
-			_allSuccess &= resultEntry.Status == VectoRun.Status.Success;
-			if (resultEntry.Status == VectoRun.Status.Success) {
-				_weightedPayload += resultEntry.Payload * resultEntry.WeightingFactor;
-				_weightedCo2 += resultEntry.CO2Total / resultEntry.Distance * resultEntry.WeightingFactor;
-				_passengerCount += (resultEntry.PassengerCount ?? 0) * resultEntry.WeightingFactor;
-			}
-			Results.Add(resultEntry.Status == VectoRun.Status.Success ? GetSuccessResult(resultEntry) : GetErrorResult(resultEntry));
-		}
-
-		private XElement GetErrorResult(XMLDeclarationReport.ResultEntry resultEntry)
-		{
-			var content = new object[] { };
-			switch (resultEntry.Status) {
-				case VectoRun.Status.Pending:
-				case VectoRun.Status.Running:
-					content = null; // should not happen!
-					break;
-				case VectoRun.Status.Canceled:
-				case VectoRun.Status.Aborted:
-					content =  new object[] {
-						new XElement(tns + "Error", resultEntry.Error)
-					};
-					break;
-				default:
-					throw new ArgumentOutOfRangeException();
-			}
-
-			return new XElement(tns + XMLNames.Report_Result_Result,
-				new XAttribute(XMLNames.Report_Result_Status_Attr, "error"),
-				new XAttribute(xsi + "type", "ResultErrorType"),
-				new XElement(tns + XMLNames.Report_Result_Mission, resultEntry.Mission.ToXMLFormat()),
-				content);
-		}
-
-		private XElement GetSuccessResult(XMLDeclarationReport.ResultEntry result)
-		{
-			return new XElement(
-				tns + XMLNames.Report_Result_Result,
-				new XAttribute(XMLNames.Report_Result_Status_Attr, "success"),
-				new XAttribute(xsi + "type", "ResultSuccessType"),
-				new XElement(tns + XMLNames.Report_Result_Mission, result.Mission.ToXMLFormat()),
-				new XElement(tns + XMLNames.Report_ResultEntry_TotalVehicleMass,
-					XMLHelper.ValueAsUnit(result.TotalVehicleMass, XMLNames.Unit_kg)),
-				new XElement(tns + XMLNames.Report_ResultEntry_Payload, XMLHelper.ValueAsUnit(result.Payload, XMLNames.Unit_kg)),
-				result.PassengerCount.HasValue && result.PassengerCount.Value > 0
-					? new XElement(tns + "PassengerCount", result.PassengerCount.Value.ToMinSignificantDigits(3, 1))
-					: null,
-				new XElement(tns + XMLNames.Report_Result_FuelMode,
-					result.FuelData.Count > 1 ? XMLNames.Report_Result_FuelMode_Val_Dual : XMLNames.Report_Result_FuelMode_Val_Single),
-				new XElement(tns + XMLNames.Report_Results_AverageSpeed, XMLHelper.ValueAsUnit(result.AverageSpeed, XMLNames.Unit_kmph, 1)),
-				XMLDeclarationReport.GetResults(result, tns, false).Cast<object>().ToArray()
-			);
-		}
-
-		protected XElement GetApplicationInfo()
-		{
-			var versionNumber = VectoSimulationCore.VersionNumber;
-#if CERTIFICATION_RELEASE
-			// add nothing to version number
-#else
-			versionNumber += " !!NOT FOR CERTIFICATION!!";
-#endif
-			return new XElement(tns + XMLNames.Report_ApplicationInfo_ApplicationInformation,
-				new XElement(tns + XMLNames.Report_ApplicationInfo_SimulationToolVersion, versionNumber),
-				new XElement(tns + XMLNames.Report_ApplicationInfo_Date,
-					XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)));
-		}
-
-		public virtual void GenerateReport(XElement resultSignature)
-		{
-			
-			var retVal = new XDocument();
-			var results = new XElement(Results);
-			results.AddFirst(new XElement(tns + XMLNames.Report_Result_Status, _allSuccess ? "success" : "error"));
-			var summary = _allSuccess && _weightedPayload > 0
-				? new XElement(tns + XMLNames.Report_Results_Summary,
-					new XElement(tns + XMLNames.Report_SpecificCO2Emissions,
-						new XAttribute(XMLNames.Report_Results_Unit_Attr, XMLNames.Unit_gCO2Pertkm),
-						(_weightedCo2 / _weightedPayload).ConvertToGrammPerTonKilometer().ToXMLFormat(1)
-					),
-					new XElement(tns + XMLNames.Report_AveragePayload,
-						new XAttribute(XMLNames.Report_Results_Unit_Attr, XMLNames.Unit_t),
-						_weightedPayload.ConvertToTon().ToXMLFormat(3)
-					),
-					_passengerCount > 0 ? new XElement(tns + "AveragePAssengerCount", _passengerCount.ToMinSignificantDigits(2)) : null
-				)
-				: null;
-			results.Add(summary);
-			var vehicle = new XElement(VehiclePart);
-			vehicle.Add(InputDataIntegrity);
-			retVal.Add(new XProcessingInstruction("xml-stylesheet", "href=\"https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/CSS/VectoReports.css\""));
-			retVal.Add(new XElement(rootNS + XMLNames.VectoCustomerReport,
-				//new XAttribute("schemaVersion", CURRENT_SCHEMA_VERSION),
-				new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName),
-				new XAttribute("xmlns", tns),
-				new XAttribute(XNamespace.Xmlns + "tns", rootNS),
-				new XAttribute(XNamespace.Xmlns + "di", di),
-				new XAttribute(xsi + "schemaLocation",
-					string.Format("{0} {1}DEV/VectoOutputCustomer.xsd", rootNS, AbstractXMLWriter.SchemaLocationBaseUrl)),
-				new XElement(rootNS + XMLNames.Report_DataWrap,
-					new XAttribute(xsi + "type", "VectoOutputDataType"),
-					vehicle,
-					new XElement(tns + XMLNames.Report_ResultData_Signature, resultSignature),
-					results,
-					GetApplicationInfo())
-				)
-				);
-			var stream = new MemoryStream();
-			var writer = new StreamWriter(stream);
-			writer.Write(retVal);
-			writer.Flush();
-			stream.Seek(0, SeekOrigin.Begin);
-			var h = VectoHash.Load(stream);
-			Report = h.AddHash();
-		}
-
-		public XDocument Report { get; protected set; }
-	}
-}
+/*
+* This file is part of VECTO.
+*
+* Copyright © 2012-2019 European Union
+*
+* Developed by Graz University of Technology,
+*              Institute of Internal Combustion Engines and Thermodynamics,
+*              Institute of Technical Informatics
+*
+* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
+* by the European Commission - subsequent versions of the EUPL (the "Licence");
+* You may not use VECTO except in compliance with the Licence.
+* You may obtain a copy of the Licence at:
+*
+* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
+*
+* Unless required by applicable law or agreed to in writing, VECTO
+* distributed under the Licence is distributed on an "AS IS" basis,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the Licence for the specific language governing permissions and
+* limitations under the Licence.
+*
+* Authors:
+*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
+*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
+*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
+*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
+*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
+*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
+*/
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Xml;
+using System.Xml.Linq;
+using TUGraz.IVT.VectoXML.Writer;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+using TUGraz.VectoCore.Utils;
+using TUGraz.VectoHashing;
+
+namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile
+{
+	public class XMLCustomerReport : IXMLCustomerReport
+	{
+		public const string CURRENT_SCHEMA_VERSION = "0.8";
+
+		protected readonly XElement VehiclePart;
+
+		protected XElement InputDataIntegrity;
+
+		protected readonly XElement Results;
+
+		protected readonly XNamespace rootNS = XNamespace.Get("urn:tugraz:ivt:VectoAPI:CustomerOutput");
+		protected readonly XNamespace tns = XNamespace.Get("urn:tugraz:ivt:VectoAPI:CustomerOutput:v" + CURRENT_SCHEMA_VERSION);
+		protected readonly XNamespace di = XNamespace.Get("http://www.w3.org/2000/09/xmldsig#");
+		protected readonly XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
+
+		protected bool _allSuccess = true;
+
+		protected KilogramPerMeter _weightedCo2 = 0.SI<KilogramPerMeter>();
+
+		protected Kilogram _weightedPayload = 0.SI<Kilogram>();
+		protected double _passengerCount = 0;
+
+
+		public XMLCustomerReport()
+		{
+			
+			VehiclePart = new XElement(tns + XMLNames.Component_Vehicle);
+			Results = new XElement(tns + XMLNames.Report_Results);
+		}
+
+		public virtual void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes)
+		{
+			var exempted = modelData.Exempted;
+			VehiclePart.Add(
+				new XElement(tns + XMLNames.Component_Model, modelData.VehicleData.ModelName),
+				new XElement(tns + XMLNames.Component_Manufacturer, modelData.VehicleData.Manufacturer),
+				new XElement(tns + XMLNames.Component_ManufacturerAddress, modelData.VehicleData.ManufacturerAddress),
+				new XElement(tns + XMLNames.Vehicle_VIN, modelData.VehicleData.VIN),
+				new XElement(tns + XMLNames.Vehicle_LegislativeClass, modelData.VehicleData.LegislativeClass.ToXMLFormat()),
+				new XElement(
+					tns + XMLNames.Vehicle_GrossVehicleMass,
+					XMLHelper.ValueAsUnit(modelData.VehicleData.GrossVehicleMass, XMLNames.Unit_t, 1)),
+				new XElement(
+					tns + XMLNames.Vehicle_CurbMassChassis, XMLHelper.ValueAsUnit(modelData.VehicleData.CurbMass, XMLNames.Unit_kg)),
+				new XElement(tns + XMLNames.Vehicle_ZeroEmissionVehicle, modelData.VehicleData.ZeroEmissionVehicle),
+				new XElement(tns + XMLNames.Vehicle_HybridElectricHDV, modelData.VehicleData.HybridElectricHDV),
+				new XElement(tns + XMLNames.Vehicle_DualFuelVehicle, modelData.VehicleData.DualFuelVehicle)
+			);
+
+			if (exempted) {
+				VehiclePart.Add(new XAttribute(xsi + "type", "ExemptedVehicleType"), 
+					ExemptedData(modelData));
+				Results.Add(new XElement(tns + XMLNames.Report_ExemptedVehicle));
+			} else {
+				VehiclePart.Add(
+					new XAttribute(xsi + "type", "VehicleType"),
+					new XElement(tns + XMLNames.Vehicle_AxleConfiguration, modelData.VehicleData.AxleConfiguration.GetName()),
+					new XElement(tns + XMLNames.Report_Vehicle_VehicleGroup, modelData.VehicleData.VehicleClass.GetClassNumber()),
+					new XElement(tns + XMLNames.Vehicle_VocationalVehicle, modelData.VehicleData.VocationalVehicle),
+					new XElement(tns + XMLNames.Vehicle_SleeperCab, modelData.VehicleData.SleeperCab),
+					GetADAS(modelData.VehicleData.ADAS),
+					ComponentData(modelData, fuelModes)
+					);
+			}
+			InputDataIntegrity = new XElement(tns + XMLNames.Report_InputDataSignature,
+				modelData.InputDataHash == null ? XMLHelper.CreateDummySig(di) : new XElement(modelData.InputDataHash));
+		}
+
+		private object[] ExemptedData(VectoRunData modelData)
+		{
+			return new object[] {
+				modelData.VehicleData.HybridElectricHDV ? new XElement(tns + XMLNames.Vehicle_MaxNetPower1, XMLHelper.ValueAsUnit(modelData.VehicleData.MaxNetPower1, XMLNames.Unit_W)) : null,
+				modelData.VehicleData.HybridElectricHDV ? new XElement(tns + XMLNames.Vehicle_MaxNetPower2, XMLHelper.ValueAsUnit(modelData.VehicleData.MaxNetPower2, XMLNames.Unit_W)) : null
+			};
+		}
+
+		protected XElement GetADAS(VehicleData.ADASData adasData)
+		{
+			return new XElement(tns + XMLNames.Vehicle_ADAS,
+								new XElement(tns + XMLNames.Vehicle_ADAS_EngineStopStart, adasData.EngineStopStart),
+								new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop, adasData.EcoRoll.WithoutEngineStop()),
+								new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart, adasData.EcoRoll.WithEngineStop()),
+								new XElement(tns + XMLNames.Vehicle_ADAS_PCC, adasData.PredictiveCruiseControl != PredictiveCruiseControlType.None)
+			);
+		}
+
+		protected virtual XElement[] ComponentData(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes)
+		{
+			return new[] {
+				new XElement(
+					tns + XMLNames.Report_Vehicle_EngineRatedPower,
+					XMLHelper.ValueAsUnit(modelData.EngineData.RatedPowerDeclared, XMLNames.Unit_kW)),
+				new XElement(
+					tns + XMLNames.Report_Vehicle_EngineDisplacement,
+					XMLHelper.ValueAsUnit(modelData.EngineData.Displacement, XMLNames.Unit_ltr, 1)),
+				new XElement(
+					tns + XMLNames.Report_Vehicle_FuelTypes,
+					fuelModes.SelectMany(x => x.Select(f => f.FuelType.ToXMLFormat())).Distinct()
+							.Select(x => new XElement(tns + XMLNames.Engine_FuelType, x))
+				),
+				new XElement(
+					tns + XMLNames.Report_Vehicle_TransmissionCertificationMethod,
+					modelData.GearboxData.CertificationMethod.ToXMLFormat()),
+				new XElement(tns + XMLNames.Gearbox_TransmissionType, modelData.GearboxData.Type.ToXMLFormat()),
+				new XElement(tns + XMLNames.Report_GetGearbox_GearsCount, modelData.GearboxData.Gears.Count),
+				new XElement(tns + XMLNames.Report_Vehicle_Retarder, modelData.Retarder.Type.IsDedicatedComponent()),
+				new XElement(tns + XMLNames.Report_Vehicle_AxleRatio, modelData.AxleGearData.AxleGear.Ratio.ToXMLFormat(3)),
+				new XElement(
+					tns + XMLNames.Report_Vehicle_AverageRRC, modelData.VehicleData.AverageRollingResistanceTruck.ToXMLFormat(4)),
+
+				//new XElement(
+				//	tns + XMLNames.Report_Vehicle_AverageRRCLabel,
+				//	DeclarationData.Wheels.TyreClass.Lookup(modelData.VehicleData.AverageRollingResistanceTruck))
+			}.Concat(
+				modelData.VehicleData.AxleData.Where(x => x.AxleType != AxleType.Trailer).Select(
+					(x, idx) => new XElement(tns + "FuelEfficiencyLabelMotorVehicleTyre",
+					new XAttribute("axleNbr", idx+1),
+					x.FuelEfficiencyClass))).ToArray();
+
+		}
+
+		
+
+		public virtual void WriteResult(XMLDeclarationReport.ResultEntry resultEntry)
+		{
+			//foreach (var resultEntry in entry.ResultEntry) {
+			_allSuccess &= resultEntry.Status == VectoRun.Status.Success;
+			if (resultEntry.Status == VectoRun.Status.Success) {
+				_weightedPayload += resultEntry.Payload * resultEntry.WeightingFactor;
+				_weightedCo2 += resultEntry.CO2Total / resultEntry.Distance * resultEntry.WeightingFactor;
+				_passengerCount += (resultEntry.PassengerCount ?? 0) * resultEntry.WeightingFactor;
+			}
+			Results.Add(resultEntry.Status == VectoRun.Status.Success ? GetSuccessResult(resultEntry) : GetErrorResult(resultEntry));
+		}
+
+		private XElement GetErrorResult(XMLDeclarationReport.ResultEntry resultEntry)
+		{
+			var content = new object[] { };
+			switch (resultEntry.Status) {
+				case VectoRun.Status.Pending:
+				case VectoRun.Status.Running:
+					content = null; // should not happen!
+					break;
+				case VectoRun.Status.Canceled:
+				case VectoRun.Status.Aborted:
+					content =  new object[] {
+						new XElement(tns + "Error", resultEntry.Error)
+					};
+					break;
+				default:
+					throw new ArgumentOutOfRangeException();
+			}
+
+			return new XElement(tns + XMLNames.Report_Result_Result,
+				new XAttribute(XMLNames.Report_Result_Status_Attr, "error"),
+				new XAttribute(xsi + "type", "ResultErrorType"),
+				new XElement(tns + XMLNames.Report_Result_Mission, resultEntry.Mission.ToXMLFormat()),
+				content);
+		}
+
+		private XElement GetSuccessResult(XMLDeclarationReport.ResultEntry result)
+		{
+			return new XElement(
+				tns + XMLNames.Report_Result_Result,
+				new XAttribute(XMLNames.Report_Result_Status_Attr, "success"),
+				new XAttribute(xsi + "type", "ResultSuccessType"),
+				new XElement(tns + XMLNames.Report_Result_Mission, result.Mission.ToXMLFormat()),
+				new XElement(tns + XMLNames.Report_ResultEntry_TotalVehicleMass,
+					XMLHelper.ValueAsUnit(result.TotalVehicleMass, XMLNames.Unit_kg)),
+				new XElement(tns + XMLNames.Report_ResultEntry_Payload, XMLHelper.ValueAsUnit(result.Payload, XMLNames.Unit_kg)),
+				result.PassengerCount.HasValue && result.PassengerCount.Value > 0
+					? new XElement(tns + "PassengerCount", result.PassengerCount.Value.ToMinSignificantDigits(3, 1))
+					: null,
+				new XElement(tns + XMLNames.Report_Result_FuelMode,
+					result.FuelData.Count > 1 ? XMLNames.Report_Result_FuelMode_Val_Dual : XMLNames.Report_Result_FuelMode_Val_Single),
+				new XElement(tns + XMLNames.Report_Results_AverageSpeed, XMLHelper.ValueAsUnit(result.AverageSpeed, XMLNames.Unit_kmph, 1)),
+				XMLDeclarationReport.GetResults(result, tns, false).Cast<object>().ToArray()
+			);
+		}
+
+		protected XElement GetApplicationInfo()
+		{
+			var versionNumber = VectoSimulationCore.VersionNumber;
+#if CERTIFICATION_RELEASE
+			// add nothing to version number
+#else
+			versionNumber += " !!NOT FOR CERTIFICATION!!";
+#endif
+			return new XElement(tns + XMLNames.Report_ApplicationInfo_ApplicationInformation,
+				new XElement(tns + XMLNames.Report_ApplicationInfo_SimulationToolVersion, versionNumber),
+				new XElement(tns + XMLNames.Report_ApplicationInfo_Date,
+					XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)));
+		}
+
+		public virtual void GenerateReport(XElement resultSignature)
+		{
+			
+			var retVal = new XDocument();
+			var results = new XElement(Results);
+			results.AddFirst(new XElement(tns + XMLNames.Report_Result_Status, _allSuccess ? "success" : "error"));
+			var summary = _allSuccess && _weightedPayload > 0
+				? new XElement(tns + XMLNames.Report_Results_Summary,
+					new XElement(tns + XMLNames.Report_SpecificCO2Emissions,
+						new XAttribute(XMLNames.Report_Results_Unit_Attr, XMLNames.Unit_gCO2Pertkm),
+						(_weightedCo2 / _weightedPayload).ConvertToGrammPerTonKilometer().ToXMLFormat(1)
+					),
+					new XElement(tns + XMLNames.Report_AveragePayload,
+						new XAttribute(XMLNames.Report_Results_Unit_Attr, XMLNames.Unit_t),
+						_weightedPayload.ConvertToTon().ToXMLFormat(3)
+					),
+					_passengerCount > 0 ? new XElement(tns + "AveragePAssengerCount", _passengerCount.ToMinSignificantDigits(2)) : null
+				)
+				: null;
+			results.Add(summary);
+			var vehicle = new XElement(VehiclePart);
+			vehicle.Add(InputDataIntegrity);
+			retVal.Add(new XProcessingInstruction("xml-stylesheet", "href=\"https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/CSS/VectoReports.css\""));
+			retVal.Add(new XElement(rootNS + XMLNames.VectoCustomerReport,
+				//new XAttribute("schemaVersion", CURRENT_SCHEMA_VERSION),
+				new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName),
+				new XAttribute("xmlns", tns),
+				new XAttribute(XNamespace.Xmlns + "tns", rootNS),
+				new XAttribute(XNamespace.Xmlns + "di", di),
+				new XAttribute(xsi + "schemaLocation",
+					string.Format("{0} {1}DEV/VectoOutputCustomer.xsd", rootNS, AbstractXMLWriter.SchemaLocationBaseUrl)),
+				new XElement(rootNS + XMLNames.Report_DataWrap,
+					new XAttribute(xsi + "type", "VectoOutputDataType"),
+					vehicle,
+					new XElement(tns + XMLNames.Report_ResultData_Signature, resultSignature),
+					results,
+					GetApplicationInfo())
+				)
+				);
+			var stream = new MemoryStream();
+			var writer = new StreamWriter(stream);
+			writer.Write(retVal);
+			writer.Flush();
+			stream.Seek(0, SeekOrigin.Begin);
+			var h = VectoHash.Load(stream);
+			Report = h.AddHash();
+		}
+
+		public XDocument Report { get; protected set; }
+	}
+
+	public class XMLCustomerReportExemptedPrimaryBus : IXMLCustomerReport
+	{
+		#region Implementation of IXMLCustomerReport
+
+		public void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes)
+		{
+			// MQ 2021-06-14 TODO: fill with meat
+		}
+
+		public XDocument Report { get; }
+		public void WriteResult(XMLDeclarationReport.ResultEntry resultValue)
+		{
+			// MQ 2021-06-14 TODO: fill with meat
+		}
+
+		public void GenerateReport(XElement resultSignature)
+		{
+			// MQ 2021-06-14 TODO: fill with meat
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReportCompletedBus.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReportCompletedBus.cs
similarity index 98%
rename from VectoCore/VectoCore/OutputData/XML/XMLCustomerReportCompletedBus.cs
rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReportCompletedBus.cs
index c53f43e48c..56d42396c3 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReportCompletedBus.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReportCompletedBus.cs
@@ -4,7 +4,6 @@ using System.IO;
 using System.Linq;
 using System.Xml.Linq;
 using TUGraz.IVT.VectoXML.Writer;
-using TUGraz.VectoCommon.BusAuxiliaries;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
@@ -12,10 +11,11 @@ using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport;
 using TUGraz.VectoCore.Utils;
 using TUGraz.VectoHashing;
 
-namespace TUGraz.VectoCore.OutputData.XML {
+namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile {
 	public class XMLCustomerReportCompletedBus : XMLCustomerReport
 	{
 		private int _resultCount = 0;
diff --git a/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/AbstractXMLManufacturerReport.cs
similarity index 97%
rename from VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs
rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/AbstractXMLManufacturerReport.cs
index 920521811c..7663933f52 100644
--- a/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/AbstractXMLManufacturerReport.cs
@@ -18,16 +18,8 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
 using TUGraz.VectoCore.Utils;
 using TUGraz.VectoHashing;
 
-namespace TUGraz.VectoCore.OutputData.XML
+namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport
 {
-	public interface IXMLManufacturerReport
-	{
-		void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes);
-		XDocument Report { get; }
-		void WriteResult(XMLDeclarationReport.ResultEntry resultValue);
-		void GenerateReport();
-	}
-
 	public abstract class AbstractXMLManufacturerReport : IXMLManufacturerReport
 	{
 		protected XElement VehiclePart;
@@ -38,10 +30,12 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 		protected XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
 		protected XNamespace tns = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8";
+		protected XNamespace vns;
 		protected XNamespace di = "http://www.w3.org/2000/09/xmldsig#";
 
 		protected AbstractXMLManufacturerReport()
 		{
+			vns = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8";
 			VehiclePart = new XElement(tns + XMLNames.Component_Vehicle);
 			Results = new XElement(tns + XMLNames.Report_Results);
 		}
@@ -67,16 +61,17 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 					//new XAttribute("schemaVersion", CURRENT_SCHEMA_VERSION),
 					new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName),
-					new XAttribute("xmlns", tns),
+					new XAttribute("xmlns", vns),
 					new XAttribute(XNamespace.Xmlns + "di", di),
-					//new XAttribute(XNamespace.Xmlns + "tns", tns),
-					new XAttribute(XNamespace.Xmlns + "mrf", mrf),
+                    new XAttribute(XNamespace.Xmlns + "tns", tns),
+					new XAttribute(XNamespace.Xmlns + "vns", vns),
+                    new XAttribute(XNamespace.Xmlns + "mrf", mrf),
 					new XAttribute(
 						xsi + "schemaLocation",
 						string.Format("{0} {1}/DEV/VectoOutputManufacturer.xsd", mrf, AbstractXMLWriter.SchemaLocationBaseUrl)),
 					new XElement(
 						mrf + XMLNames.Report_DataWrap,
-						new XAttribute(xsi + "type", "VectoOutputDataType"),
+						new XAttribute(xsi + "type", "tns:VectoOutputDataType"),
 						vehicle,
 						results,
 						GetApplicationInfo())
@@ -229,7 +224,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 		protected virtual XElement GetInputDataSignature(VectoRunData modelData)
 		{
 			return new XElement(
-				tns + XMLNames.Report_Input_Signature,
+				vns + XMLNames.Report_Input_Signature,
 				modelData.InputDataHash == null ? CreateDummySig() : new XElement(modelData.InputDataHash));
 		}
 
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/IXMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/IXMLManufacturerReport.cs
new file mode 100644
index 0000000000..7bc1304820
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/IXMLManufacturerReport.cs
@@ -0,0 +1,15 @@
+using System.Collections.Generic;
+using System.Xml.Linq;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+
+namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport
+{
+	public interface IXMLManufacturerReport
+	{
+		void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes);
+		XDocument Report { get; }
+		void WriteResult(XMLDeclarationReport.ResultEntry resultValue);
+		void GenerateReport();
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportCompletedBus.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportCompletedBus.cs
similarity index 99%
rename from VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportCompletedBus.cs
rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportCompletedBus.cs
index cb166c50c4..e4bf8ccf77 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportCompletedBus.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportCompletedBus.cs
@@ -14,7 +14,7 @@ using TUGraz.VectoCore.Models.Simulation.Impl;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Utils;
 
-namespace TUGraz.VectoCore.OutputData.XML {
+namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport {
 	public class XMLManufacturerReportCompletedBus : AbstractXMLManufacturerReport
 	{
 
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportExemptedTruck.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExemptedTruck.cs
similarity index 96%
rename from VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportExemptedTruck.cs
rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExemptedTruck.cs
index 510bae3f30..1fe9400d30 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportExemptedTruck.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExemptedTruck.cs
@@ -6,7 +6,8 @@ using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Utils;
 
-namespace TUGraz.VectoCore.OutputData.XML {
+namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport 
+{
 	public class XMLManufacturerReportExemptedTruck : AbstractXMLManufacturerReport
 	{
 		public override void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes)
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExeptedPrimaryBus.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExeptedPrimaryBus.cs
new file mode 100644
index 0000000000..0a656e0ccb
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExeptedPrimaryBus.cs
@@ -0,0 +1,52 @@
+using System.Collections.Generic;
+using System.Xml.Linq;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport
+{
+	public class XMLManufacturerReportExeptedPrimaryBus : AbstractXMLManufacturerReport
+	{
+
+		public XMLManufacturerReportExeptedPrimaryBus()
+		{
+            vns = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:DEV:v0.9.1";
+        }
+
+		public override void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes)
+		{
+			VehiclePart.Add(
+				new XAttribute(xsi + "type", "VehicleExemptedPrimaryBusType"),
+				new XElement(vns + XMLNames.Component_Manufacturer, modelData.VehicleData.Manufacturer),
+				new XElement(vns + XMLNames.Component_ManufacturerAddress, modelData.VehicleData.ManufacturerAddress),
+				new XElement(vns + XMLNames.Component_Model, modelData.VehicleData.ModelName),
+				new XElement(vns + XMLNames.Vehicle_VIN, modelData.VehicleData.VIN),
+				new XElement(vns + "LegislativeCategory", modelData.VehicleData.LegislativeClass.ToXMLFormat()),
+				new XElement(vns + XMLNames.Bus_ChassisConfiguration, "Bus"),
+				new XElement(vns + XMLNames.Vehicle_AxleConfiguration, modelData.VehicleData.AxleConfiguration.GetName()),
+				new XElement(vns + XMLNames.Vehicle_Articulated, modelData.VehicleData.InputData.Articulated),
+				new XElement(
+					vns + XMLNames.Vehicle_TPMLM,
+					XMLHelper.ValueAsUnit(modelData.VehicleData.GrossVehicleMass, XMLNames.Unit_kg, 1)),
+				//new XElement(
+				//	tns + XMLNames.Vehicle_CurbMassChassis, XMLHelper.ValueAsUnit(modelData.VehicleData.CurbMass, XMLNames.Unit_kg)),
+				new XElement(vns + XMLNames.Vehicle_ZeroEmissionVehicle, modelData.VehicleData.ZeroEmissionVehicle),
+				new XElement(vns + "SumNetPower", XMLHelper.ValueAsUnit(modelData.VehicleData.MaxNetPower1, XMLNames.Unit_W)),
+				new XElement(vns + "Technology", modelData.VehicleData.InputData.ExemptedTechnology)
+				
+			);
+			Results.Add(new XElement(tns + XMLNames.Report_ExemptedVehicle));
+
+			InputDataIntegrity = GetInputDataSignature(modelData);
+		}
+
+		protected override XElement VehicleComponents(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes)
+		{
+			return null;
+		}
+
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportPrimaryBus.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportPrimaryBus.cs
similarity index 97%
rename from VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportPrimaryBus.cs
rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportPrimaryBus.cs
index f1b62a28de..3b8604cb9a 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportPrimaryBus.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportPrimaryBus.cs
@@ -5,6 +5,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport;
 using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.OutputData.XML {
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportTruck.cs
similarity index 98%
rename from VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs
rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportTruck.cs
index d14364d236..e65b797203 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportTruck.cs
@@ -38,7 +38,7 @@ using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Utils;
 
-namespace TUGraz.VectoCore.OutputData.XML
+namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport
 {
 	public class XMLManufacturerReportTruck : AbstractXMLManufacturerReport
 	{
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VTPReport/XMLVTPReport.cs
similarity index 100%
rename from VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs
rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/VTPReport/XMLVTPReport.cs
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLMultistageReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLMultistageReport.cs
new file mode 100644
index 0000000000..8111f0f903
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLMultistageReport.cs
@@ -0,0 +1,12 @@
+using System.Xml.Linq;
+using TUGraz.VectoCore.Models.Simulation.Data;
+
+namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile
+{
+	public interface IXMLMultistageReport
+	{
+		void Initialize(VectoRunData modelData);
+		XDocument Report { get; }
+		void GenerateReport();
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLPrimaryVehicleReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLPrimaryVehicleReport.cs
new file mode 100644
index 0000000000..f28672258a
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLPrimaryVehicleReport.cs
@@ -0,0 +1,15 @@
+using System.Collections.Generic;
+using System.Xml.Linq;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+
+namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile
+{
+	public interface IXMLPrimaryVehicleReport
+	{
+		void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes);
+		void WriteResult(XMLDeclarationReport.ResultEntry result);
+		void GenerateReport(XElement fullReportHash);
+		XDocument Report { get; }
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLExemptedPrimaryBusVehicleReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLExemptedPrimaryBusVehicleReport.cs
new file mode 100644
index 0000000000..7857a92f0a
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLExemptedPrimaryBusVehicleReport.cs
@@ -0,0 +1,53 @@
+using System.Collections.Generic;
+using System.Xml.Linq;
+using TUGraz.VectoCommon.Hashing;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile
+{
+	public class XMLExemptedPrimaryBusVehicleReport : XMLPrimaryBusVehicleReport
+	{
+		#region Implementation of IXMLPrimaryVehicleReport
+
+		public override void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes)
+		{
+			VehiclePart.Add(
+				new XAttribute(xsi + "type", "VehicleExemptedPrimaryBusType"),
+				new XElement(tns + XMLNames.Component_Manufacturer, modelData.VehicleData.Manufacturer),
+				new XElement(tns + XMLNames.Component_ManufacturerAddress, modelData.VehicleData.ManufacturerAddress),
+				new XElement(tns + XMLNames.Component_Model, modelData.VehicleData.ModelName),
+				new XElement(tns + XMLNames.Vehicle_VIN, modelData.VehicleData.VIN),
+				new XElement(tns + "LegislativeCategory", modelData.VehicleData.LegislativeClass.ToXMLFormat()),
+				new XElement(tns + XMLNames.Bus_ChassisConfiguration, "Bus"),
+				new XElement(tns + XMLNames.Vehicle_AxleConfiguration, modelData.VehicleData.AxleConfiguration.GetName()),
+				new XElement(tns + XMLNames.Vehicle_Articulated, modelData.VehicleData.InputData.Articulated),
+				new XElement(
+					tns + XMLNames.Vehicle_TPMLM,
+					XMLHelper.ValueAsUnit(modelData.VehicleData.GrossVehicleMass, XMLNames.Unit_kg, 1)),
+				//new XElement(
+				//	tns + XMLNames.Vehicle_CurbMassChassis, XMLHelper.ValueAsUnit(modelData.VehicleData.CurbMass, XMLNames.Unit_kg)),
+				new XElement(tns + XMLNames.Vehicle_ZeroEmissionVehicle, modelData.VehicleData.ZeroEmissionVehicle),
+				new XElement(tns + "SumNetPower", XMLHelper.ValueAsUnit(modelData.VehicleData.MaxNetPower1, XMLNames.Unit_W)),
+				new XElement(tns + "Technology", modelData.VehicleData.InputData.ExemptedTechnology)
+
+			);
+			Results.Add(new XElement(tns + XMLNames.Report_ExemptedVehicle));
+
+			InputDataIntegrity = new XElement(tns + XMLNames.Report_InputDataSignature,
+				modelData.InputDataHash == null ? XMLHelper.CreateDummySig(di) : new XElement(modelData.InputDataHash));
+
+		}
+
+		public override void WriteResult(XMLDeclarationReport.ResultEntry result)
+		{
+			// no results for exempted vehicle
+		}
+
+
+		#endregion
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLMultistageBusReport.cs
similarity index 99%
rename from VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs
rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLMultistageBusReport.cs
index 106ef6b5d0..f4689b1324 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLMultistageBusReport.cs
@@ -18,16 +18,8 @@ using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Utils;
 using TUGraz.VectoHashing;
 
-
-namespace TUGraz.VectoCore.OutputData.XML
+namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile
 {
-	public interface IXMLMultistageReport
-	{
-		void Initialize(VectoRunData modelData);
-		XDocument Report { get; }
-		void GenerateReport();
-	}
-
 	public class XMLMultistageBusReport: IXMLMultistageReport 
 	{
 		protected XNamespace tns = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1";
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLPrimaryBusVehicleReport.cs
similarity index 97%
rename from VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs
rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLPrimaryBusVehicleReport.cs
index 1f3a724259..378038f5eb 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLPrimaryBusVehicleReport.cs
@@ -21,9 +21,9 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
 using TUGraz.VectoCore.Utils;
 using TUGraz.VectoHashing;
 
-namespace TUGraz.VectoCore.OutputData.XML
+namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile
 {
-	public class XMLPrimaryVehicleReport
+	public class XMLPrimaryBusVehicleReport : IXMLPrimaryVehicleReport
 	{
 		protected XNamespace tns = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1";
 		protected XNamespace di = "http://www.w3.org/2000/09/xmldsig#";
@@ -40,19 +40,19 @@ namespace TUGraz.VectoCore.OutputData.XML
 		protected XElement InputDataIntegrity;
 		protected XElement Results;
 
-		private bool _allSuccess = true;
+		protected bool _allSuccess = true;
 
 
-		public XMLPrimaryVehicleReport()
+		public XMLPrimaryBusVehicleReport()
 		{
 			VehiclePart = new XElement(tns + XMLNames.Component_Vehicle);
 			Results = new XElement(tns + XMLNames.Report_Results);
 		}
 
-		public XDocument Report { get; private set; }
+		public XDocument Report { get; protected set; }
 
 
-		public void GenerateReport(XElement resultSignature)
+		public virtual void GenerateReport(XElement resultSignature)
 		{
 			var retVal = new XDocument();
 			retVal.Add(
@@ -73,7 +73,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 			Report = retVal;
 		}
 		
-		private XElement GeneratePrimaryVehicle(XElement resultSignature)
+		protected virtual XElement GeneratePrimaryVehicle(XElement resultSignature)
 		{
 			var results = new XElement(Results);
 			results.AddFirst(new XElement(tns + XMLNames.Report_Result_Status, _allSuccess ? "success" : "error"));
@@ -95,7 +95,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 			return primaryVehicle;
 		}
 
-		private XElement GetSignatureElement(XElement stage)
+		protected XElement GetSignatureElement(XElement stage)
 		{
 			var stream = new MemoryStream();
 			var writer = new StreamWriter(stream);
@@ -108,7 +108,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 					(VectoHash.DefaultCanonicalizationMethod, VectoHash.DefaultDigestMethod));
 		}
 
-		private XElement GetApplicationInfo()
+		protected XElement GetApplicationInfo()
 		{
 			var versionNumber = VectoSimulationCore.VersionNumber;
 #if CERTIFICATION_RELEASE // add nothing to version number
@@ -518,7 +518,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 			};
 		}
 
-		public void WriteResult(XMLDeclarationReport.ResultEntry resultEntry)
+		public virtual void WriteResult(XMLDeclarationReport.ResultEntry resultEntry)
 		{
 			_allSuccess &= resultEntry.Status == VectoRun.Status.Success;
 
@@ -594,11 +594,10 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 			return retVal.Cast<object>().ToArray();
 		}
-		
-		private string GetGUID()
+
+		protected string GetGUID()
 		{
 			return Guid.NewGuid().ToString("n").Substring(0, 20);
 		}
 	}
-
 }
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
index 8c9264c404..5cc169a643 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
@@ -46,6 +46,8 @@ using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport;
 
 namespace TUGraz.VectoCore.OutputData.XML
 {
@@ -53,7 +55,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 	{
 		protected IXMLManufacturerReport ManufacturerRpt;
 
-		protected XMLCustomerReport CustomerRpt;
+		protected IXMLCustomerReport CustomerRpt;
 
 
 		protected IDictionary<Tuple<MissionType, LoadingType>, double> _weightingFactors;
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs
index 918d4055ff..22c3b6e80a 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs
@@ -7,6 +7,8 @@ using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport;
 
 namespace TUGraz.VectoCore.OutputData.XML {
 	public class XMLDeclarationReportCompletedVehicle : XMLDeclarationReport
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportMultistageBusVehicle.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportMultistageBusVehicle.cs
index b26cbb222e..b203ee8c5b 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportMultistageBusVehicle.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportMultistageBusVehicle.cs
@@ -5,12 +5,13 @@ using System.Text;
 using System.Threading.Tasks;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile;
 
 namespace TUGraz.VectoCore.OutputData.XML
 {
 	public class XMLDeclarationReportMultistageBusVehicle : XMLDeclarationReport
 	{
-		private readonly XMLMultistageBusReport _multistageBusReport;
+		private readonly IXMLMultistageReport _multistageBusReport;
 
 		public XMLDeclarationReportMultistageBusVehicle(IReportWriter writer)
 			: base(writer)
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportPrimaryVehicle.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportPrimaryVehicle.cs
index 55b66e65de..276ef4230d 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportPrimaryVehicle.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportPrimaryVehicle.cs
@@ -3,16 +3,18 @@ using System.Collections.Generic;
 using System.Xml.Linq;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile;
 
 namespace TUGraz.VectoCore.OutputData.XML {
 	public class XMLDeclarationReportPrimaryVehicle : XMLDeclarationReport
 	{
-		private XMLPrimaryVehicleReport _primaryReport;
+		protected IXMLPrimaryVehicleReport PrimaryReport;
 
 
 		public XMLDeclarationReportPrimaryVehicle(IReportWriter writer, bool writePIF = false) : base(writer)
 		{
-			_primaryReport = new XMLPrimaryVehicleReport();
 		}
 
 		public override XDocument CustomerReport
@@ -22,7 +24,7 @@ namespace TUGraz.VectoCore.OutputData.XML {
 
 		public override XDocument PrimaryVehicleReport
 		{
-			get { return _primaryReport?.Report; }
+			get { return PrimaryReport?.Report; }
 		}
 
 		
@@ -30,14 +32,24 @@ namespace TUGraz.VectoCore.OutputData.XML {
 
 		protected override void InstantiateReports(VectoRunData modelData)
 		{
-			ManufacturerRpt = new XMLManufacturerReportPrimaryBus();
-			CustomerRpt = new XMLCustomerReport();
+			if (modelData.Exempted) {
+				ManufacturerRpt = new XMLManufacturerReportExeptedPrimaryBus();
+				CustomerRpt = new XMLCustomerReportExemptedPrimaryBus();
+				PrimaryReport = new XMLExemptedPrimaryBusVehicleReport();
+
+			} else {
+				ManufacturerRpt = new XMLManufacturerReportPrimaryBus();
+				CustomerRpt = new XMLCustomerReport();
+				PrimaryReport = new XMLPrimaryBusVehicleReport();
+			}
+
+
 		}
 
 		public override void InitializeReport(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes)
 		{
 			base.InitializeReport(modelData, fuelModes);
-			_primaryReport.Initialize(modelData,fuelModes);
+			PrimaryReport.Initialize(modelData,fuelModes);
 		}
 
 
@@ -45,7 +57,7 @@ namespace TUGraz.VectoCore.OutputData.XML {
 		protected override void WriteResult(ResultEntry result)
 		{
 			base.WriteResult(result);
-			_primaryReport.WriteResult(result);
+			PrimaryReport.WriteResult(result);
 		}
 
 		protected override void GenerateReports()
@@ -53,7 +65,7 @@ namespace TUGraz.VectoCore.OutputData.XML {
 			ManufacturerRpt.GenerateReport();
 			var fullReportHash = GetSignature(ManufacturerRpt.Report);
 			CustomerRpt.GenerateReport(fullReportHash);
-			_primaryReport.GenerateReport(fullReportHash);
+			PrimaryReport.GenerateReport(fullReportHash);
 		}
 
 	
@@ -61,7 +73,7 @@ namespace TUGraz.VectoCore.OutputData.XML {
 		protected override void OutputReports()
 		{
 			Writer.WriteReport(ReportType.DeclarationReportManufacturerXML, ManufacturerRpt.Report);
-			Writer.WriteReport(ReportType.DeclarationReportPrimaryVehicleXML, _primaryReport.Report);
+			Writer.WriteReport(ReportType.DeclarationReportPrimaryVehicleXML, PrimaryReport.Report);
 		}
 
 		#endregion
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLMonitoringReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLMonitoringReport.cs
deleted file mode 100644
index fee1b8a01c..0000000000
--- a/VectoCore/VectoCore/OutputData/XML/XMLMonitoringReport.cs
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2019 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Xml;
-using System.Xml.Linq;
-using System.Xml.Schema;
-using System.Xml.XPath;
-using TUGraz.IVT.VectoXML.Writer;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCore.Models.Simulation.Data;
-using TUGraz.VectoCore.Utils;
-using XmlDocumentType = TUGraz.VectoCore.Utils.XmlDocumentType;
-
-namespace TUGraz.VectoCore.OutputData.XML
-{
-	public class XMLMonitoringReport
-	{
-		public const string CURRENT_SCHEMA_VERSION = "0.8";
-
-		public const string NAMESPACE_BASE_URI = "urn:tugraz:ivt:VectoAPI:MonitoringOutput";
-
-		private readonly IXMLManufacturerReport _manufacturerReport;
-
-		protected XNamespace tns;
-		protected XNamespace di;
-		private XElement _additionalFields;
-
-
-		public XMLMonitoringReport(IXMLManufacturerReport manufacturerReport)
-		{
-			di = "http://www.w3.org/2000/09/xmldsig#";
-			tns = NAMESPACE_BASE_URI + ":v" + CURRENT_SCHEMA_VERSION;
-			_manufacturerReport = manufacturerReport;
-		}
-
-		public XDocument Report
-		{
-			get {
-				var mrf = _manufacturerReport.Report;
-				if (mrf == null) {
-					return null;
-				}
-
-				var errors = new List<string>();
-				var mrfErrors = false;
-				mrf.Validate(XMLValidator.GetXMLSchema(XmlDocumentType.ManufacturerReport), (o, e) => {
-					mrfErrors = true;
-					errors.Add(e.Message);
-				}, true);
-				if (mrfErrors) {
-					LogManager.GetLogger(typeof(XMLMonitoringReport).FullName).Warn("XML Validation of manufacturer record failed! errors: {0}", string.Join(System.Environment.NewLine, errors));
-				}
-
-				var mrfType = mrf.Root?.GetSchemaInfo()?.SchemaType?.QualifiedName ?? new XmlQualifiedName("urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:AbstractVectoOutputManufacturerType");
-
-				var retVal = GenerateReport();
-				var prefix = "mrf" + mrfType.Namespace.Split(':').Last();
-				
-				var xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
-
-				retVal.Root?.Add(
-					new XAttribute(XNamespace.Xmlns + prefix, mrfType.Namespace),
-					new XElement(
-						tns + "ManufacturerRecord",
-						new XAttribute(xsi + "type", string.Format("{0}:{1}", prefix, mrfType.Name)),
-						new XAttribute("xmlns", mrfType.Namespace),
-						new XAttribute(XNamespace.Xmlns + "m", tns),
-						GetManufacturerData(mrf)),
-					_additionalFields
-				);
-				return retVal;
-			}
-		}
-
-		private XmlQualifiedName GetXMLType(XElement mrfRoot)
-		{
-			var si = mrfRoot.GetSchemaInfo();
-
-			return si?.SchemaType?.BaseXmlSchemaType.QualifiedName; 
-		}
-
-
-		private object[] GetManufacturerData(XDocument mrf)
-		{
-			return mrf.Root?.XPathSelectElements("./*").ToArray<object>();
-		}
-
-		private XDocument GenerateReport()
-		{
-			var xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
-			var retVal = new XDocument();
-
-			//retVal.Add(
-			//	new XProcessingInstruction(
-			//		"xml-stylesheet", "href=\"https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/CSS/VectoReports.css\""));
-			retVal.Add(
-				new XElement(
-					tns + "VectoMonitoring",
-					new XAttribute("schemaVersion", CURRENT_SCHEMA_VERSION),
-					new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName),
-					new XAttribute("xmlns", tns),
-					new XAttribute(XNamespace.Xmlns + "di", di),
-					new XAttribute(
-						xsi + "schemaLocation",
-						string.Format(
-							"{0} {1}VectoMonitoring.xsd", NAMESPACE_BASE_URI, AbstractXMLWriter.SchemaLocationBaseUrl))
-				)
-			);
-			return retVal;
-		}
-
-		public void Initialize(VectoRunData modelData)
-		{
-			var numAxles = modelData.VehicleData.AxleData?.Count(x => x.AxleType != AxleType.Trailer) ?? 0;
-			var axleData = new object[numAxles];
-			for (var i = 0; i < axleData.Length; i++) {
-				axleData[i] = new XElement(tns + "Axle",
-					new XAttribute("axleNumber", i+1),
-					new XElement(tns + "Tyre", GetStandardFields(string.Format("TYRE_{0}", i+1))
-					));
-			}
-
-			var components = new object[0];
-			if (!modelData.Exempted) {
-				components = new object[] {
-					new XElement(
-						tns + "Engine",
-						new XElement(
-							tns + "WHTC",
-							new XElement(tns + "CO2", XMLHelper.ValueAsUnit(double.NaN, "g/kWh", 0)),
-							new XElement(tns + "FuelConsumption", XMLHelper.ValueAsUnit(double.NaN, "g/kWh", 0))
-						),
-						new XElement(
-							tns + "WHSC",
-							new XElement(tns + "CO2", XMLHelper.ValueAsUnit(double.NaN, "g/kWh", 0)),
-							new XElement(tns + "FuelConsumption", XMLHelper.ValueAsUnit(double.NaN, "g/kWh", 0))
-						)
-					),
-					new XElement(tns + "Gearbox", GetStandardFields("GEARBOX")),
-					new XElement(tns + "Axlegear", GetStandardFields("AXLEGEAR")),
-					new XElement(tns + "AxleWheels", axleData),
-				};
-			}
-			_additionalFields = new XElement(
-				tns + "AdditionalData",
-				new XElement(tns + "Vehicle",
-							new XElement(tns + "Make", "##VEHICLE_MAKE##")),
-				components,
-				new XElement(tns + "AdvancedReducingTechnologies", new XComment(GetReducingTechnologiesExample())),
-				new XElement(tns + "VectoLicenseNbr", "##VECTO_LICENSE_NUMBER##")
-			);
-		}
-
-		private object[] GetStandardFields(string prefix)
-		{
-			return new[] {
-				new XElement(tns + "Manufacturer", string.Format("##{0}_MANUFACTURER##", prefix)),
-				new XElement(tns + "ManufacturerAddress", string.Format("##{0}_MANUFACTURERADDRESS##", prefix)),
-				new XElement(tns + "Make", string.Format("##{0}_MAKE##", prefix))
-			};
-		}
-
-		private  string GetReducingTechnologiesExample()
-		{
-			var categories = new[] {
-				"advanced aerodynamic measures",
-				"advanced rolling resistance measures",
-				"advanced drivetrain technologies",
-				"advanced engine technologies",
-				"advanced auxiliary technologies",
-				"additional ADAS technologies",
-				"advanced powertrain integration and hybridisation",
-				"other"
-			};
-			var retVal = new object[categories.Length];
-			//var tmp = new XElement(tns + "foo");
-			for (var i = 0; i < retVal.Length; i++) { 
-				retVal[i] = new XElement("Entry",
-					new XAttribute("category", categories[i]),
-					"##TECHNOLOGY_BRAND_NAME##"
-					);
-			}
-
-			return Environment.NewLine + string.Join(Environment.NewLine, retVal.Select(x => x.ToString())) + Environment.NewLine;
-		}
-	}
-}
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.6_Buses.xsd b/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.6_Buses.xsd
index d326dd4776..6bb0fa8e1e 100644
--- a/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.6_Buses.xsd
+++ b/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.6_Buses.xsd
@@ -640,4 +640,73 @@
 			<xs:enumeration value="CJ"/>
 		</xs:restriction>
 	</xs:simpleType>
+	<xs:complexType name="ExemptedPrimaryHeavyBusType">
+		<xs:complexContent>
+			<xs:extension base="v2.0:AbstractVehicleDeclarationType">
+				<xs:sequence>
+					<xs:element name="Manufacturer" type="v1.0:ManufacturerType"/>
+					<xs:element name="ManufacturerAddress" type="v1.0:ManufacturerAddressType"/>
+					<xs:element name="Model" type="v1.0:ModelType">
+						<xs:annotation>
+							<xs:documentation>P236</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="VIN" type="v1.0:VINType">
+						<xs:annotation>
+							<xs:documentation>P238</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="Date" type="v1.0:DateTimeWithTimezone">
+						<xs:annotation>
+							<xs:documentation>P239</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="LegislativeCategory" type="v2.6:LegislativeClassDeclarationType">
+						<xs:annotation>
+							<xs:documentation>P251 - enum</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="ChassisConfiguration" type="v2.6:ChassisConfigurationDeclarationType">
+						<xs:annotation>
+							<xs:documentation>P036 - enum</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="AxleConfiguration" type="v2.6:VehicleAxleConfigurationDeclarationType">
+						<xs:annotation>
+							<xs:documentation>P037 - enum</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="Articulated" type="xs:boolean"/>
+					<xs:element name="TechnicalPermissibleMaximumLadenMass" type="v1.0:VehicleGrossVehicleMassType">
+						<xs:annotation>
+							<xs:documentation>P041 - [kg]</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="ZeroEmissionVehicle" type="xs:boolean"/>
+					<xs:element name="SumNetPower" type="xs:int">
+						<xs:annotation>
+							<xs:documentation>P331 - [W]</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="Technology">
+						<xs:annotation>
+							<xs:documentation>P332 - enum</xs:documentation>
+						</xs:annotation>
+						<xs:simpleType>
+							<xs:restriction base="xs:string">
+								<xs:enumeration value="HEV Article 9 exempted"/>
+								<xs:enumeration value="PEV Article 9 exempted"/>
+								<xs:enumeration value="HV Article 9 exempted"/>
+								<xs:enumeration value="Fuel cell vehicle"/>
+								<xs:enumeration value="H2 ICE"/>
+								<xs:enumeration value="Dual fuel vehicle Article 9 exempted"/>
+								<xs:enumeration value="In-motion charging Article 9 exempted"/>
+								<xs:enumeration value="Other technology Article 9 exempted"/>
+							</xs:restriction>
+						</xs:simpleType>
+					</xs:element>
+				</xs:sequence>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
 </xs:schema>
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputDefinitions.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputDefinitions.xsd
index c04dc2a75d..43f695abf0 100644
--- a/VectoCore/VectoCore/Resources/XSD/VectoOutputDefinitions.xsd
+++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputDefinitions.xsd
@@ -1,8 +1,35 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) -->
+<!-- edited with XMLSpy v2021 (x64) (http://www.altova.com) by Markus Quaritsch (Technische Universität Graz) -->
 <xs:schema xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:common="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" xmlns:mrf="urn:tugraz:ivt:VectoAPI:DeclarationOutput" xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:ns1="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.8">
-	<xs:complexType name="AbstractVTPReportDataType" abstract="true"/>
 	<xs:complexType name="AbstractPrimaryVehicleDataPIFType" abstract="true"/>
-	<xs:complexType name="AbstractVectoOutputManufacturerDataType" abstract="true"/>
 	<xs:complexType name="AbstractVectoOutputCustomerDataType" abstract="true"/>
+	<xs:complexType name="AbstractVectoOutputManufacturerDataType" abstract="true"/>
+	<xs:complexType name="AbstractVTPReportDataType" abstract="true"/>
+	<xs:simpleType name="DistanceUnitType">
+		<xs:restriction base="xs:token">
+			<xs:enumeration value="km"/>
+		</xs:restriction>
+	</xs:simpleType>
+	<xs:simpleType name="MassUnitType">
+		<xs:restriction base="xs:token">
+			<xs:enumeration value="kg"/>
+			<xs:enumeration value="t"/>
+		</xs:restriction>
+	</xs:simpleType>
+	<xs:simpleType name="PercentType">
+		<xs:restriction base="xs:string">
+			<xs:enumeration value="%"/>
+		</xs:restriction>
+	</xs:simpleType>
+	<xs:simpleType name="PowerUnitType">
+		<xs:restriction base="xs:string">
+			<xs:enumeration value="kW"/>
+			<xs:enumeration value="W"/>
+		</xs:restriction>
+	</xs:simpleType>
+	<xs:simpleType name="SpeedUnitType">
+		<xs:restriction base="xs:token">
+			<xs:enumeration value="km/h"/>
+		</xs:restriction>
+	</xs:simpleType>
 </xs:schema>
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd
index e1bfb206fc..c40ec091c6 100644
--- a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd
+++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) -->
+<!-- edited with XMLSpy v2021 (x64) (http://www.altova.com) by Markus Quaritsch (Technische Universität Graz) -->
 <!--W3C XML Schema generated by XMLSpy vXMLSpy Professional Edition v2016 rel. 2 (x64) (http://www.altova.com)-->
 <xs:schema xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:common="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" xmlns:mrf="urn:tugraz:ivt:VectoAPI:DeclarationOutput" xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:out="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" xmlns:v2.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.8">
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/>
@@ -1126,6 +1126,9 @@
 		</xs:sequence>
 	</xs:complexType>
 	<xs:complexType name="VehiclePrimaryBusType">
+		<xs:annotation>
+			<xs:documentation>No longer neede?</xs:documentation>
+		</xs:annotation>
 		<xs:complexContent>
 			<xs:extension base="AbstractVehicleType">
 				<xs:sequence>
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.9.1.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.9.1.xsd
new file mode 100644
index 0000000000..522aca7742
--- /dev/null
+++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.9.1.xsd
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) -->
+<!--W3C XML Schema generated by XMLSpy vXMLSpy Professional Edition v2016 rel. 2 (x64) (http://www.altova.com)-->
+<xs:schema xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:DEV:v0.9.1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:common="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" xmlns:mrf="urn:tugraz:ivt:VectoAPI:DeclarationOutput" xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:out="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" xmlns:v2.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xmlns:v0.8="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:DEV:v0.9.1" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.8">
+	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/>
+	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" schemaLocation="VectoDeclarationDefinitions.2.0.xsd"/>
+	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" schemaLocation="VectoDeclarationDefinitions.2.1.xsd"/>
+	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" schemaLocation="VectoDeclarationDefinitions.2.6_Buses.xsd"/>
+	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" schemaLocation="VectoDeclarationDefinitions.xsd"/>
+	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" schemaLocation="VectoOutputDefinitions.xsd"/>
+	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" schemaLocation="VectoOutputManufacturer.0.8.xsd"/>
+	<xs:complexType name="VehicleExemptedPrimaryBusType">
+		<xs:complexContent>
+			<xs:extension base="v0.8:AbstractVehicleType">
+				<xs:sequence>
+					<xs:element name="Manufacturer" type="vdecdef:ManufacturerType">
+						<xs:annotation>
+							<xs:documentation>P235 / I.1.1.1 / #14</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="ManufacturerAddress" type="vdecdef:ManufacturerAddressType">
+						<xs:annotation>
+							<xs:documentation>P252 / I.1.1.1 / #14</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="Model" type="vdecdef:ModelType">
+						<xs:annotation>
+							<xs:documentation>P236 / I.1.1.2</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="VIN" type="vdecdef:VINType">
+						<xs:annotation>
+							<xs:documentation>P238 / I.1.1.3 / #1</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="LegislativeCategory">
+						<xs:annotation>
+							<xs:documentation>P251 / I.1.1.4 / #10</xs:documentation>
+						</xs:annotation>
+						<xs:simpleType>
+							<xs:restriction base="xs:string">
+								<xs:minLength value="1"/>
+							</xs:restriction>
+						</xs:simpleType>
+					</xs:element>
+					<xs:element name="ChassisConfiguration" type="v2.6:ChassisConfigurationDeclarationType">
+						<xs:annotation>
+							<xs:documentation>P036 - enum</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="AxleConfiguration" type="v2.6:VehicleAxleConfigurationDeclarationType">
+						<xs:annotation>
+							<xs:documentation>P037 - enum</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="Articulated" type="xs:boolean"/>
+					<xs:element name="TechnicalPermissibleMaximumLadenMass">
+						<xs:annotation>
+							<xs:documentation>P041 / I.1.1.6 / #12</xs:documentation>
+						</xs:annotation>
+						<xs:complexType>
+							<xs:simpleContent>
+								<xs:extension base="xs:double">
+									<xs:attribute name="unit" type="out:MassUnitType" use="required"/>
+								</xs:extension>
+							</xs:simpleContent>
+						</xs:complexType>
+					</xs:element>
+					<xs:element name="ZeroEmissionVehicle" type="xs:boolean">
+						<xs:annotation>
+							<xs:documentation>P269 / I.1.1.10</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="SumNetPower">
+						<xs:annotation>
+							<xs:documentation>P277</xs:documentation>
+						</xs:annotation>
+						<xs:complexType>
+							<xs:simpleContent>
+								<xs:extension base="xs:double">
+									<xs:attribute name="unit" type="out:PowerUnitType" use="required"/>
+								</xs:extension>
+							</xs:simpleContent>
+						</xs:complexType>
+					</xs:element>
+					<xs:element name="Technology">
+						<xs:annotation>
+							<xs:documentation>P332 - enum</xs:documentation>
+						</xs:annotation>
+						<xs:simpleType>
+							<xs:restriction base="xs:string">
+								<xs:enumeration value="HEV Article 9 exempted"/>
+								<xs:enumeration value="PEV Article 9 exempted"/>
+								<xs:enumeration value="HV Article 9 exempted"/>
+								<xs:enumeration value="Fuel cell vehicle"/>
+								<xs:enumeration value="H2 ICE"/>
+								<xs:enumeration value="Dual fuel vehicle Article 9 exempted"/>
+								<xs:enumeration value="In-motion charging Article 9 exempted"/>
+								<xs:enumeration value="Other technology Article 9 exempted"/>
+							</xs:restriction>
+						</xs:simpleType>
+					</xs:element>
+					<xs:element name="InputDataSignature" type="vdecdef:SignatureType">
+						<xs:annotation>
+							<xs:documentation>I.3.1.3</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+				</xs:sequence>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+</xs:schema>
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.xsd
index 1c14db9cfe..946f5f9d82 100644
--- a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.xsd
+++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.xsd
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) -->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mrf="urn:tugraz:ivt:VectoAPI:DeclarationOutput" xmlns:mrf0.5="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.5" xmlns:mrf0.6="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.6" xmlns:mrf0.7="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.7" xmlns:mrf0.8="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" xmlns:out="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" xmlns:common="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" xmlns:v1.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput" elementFormDefault="qualified" attributeFormDefault="unqualified" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:ParameterDocumentation ParameterDocumentation.xsd">
+<!-- edited with XMLSpy v2021 (x64) (http://www.altova.com) by Markus Quaritsch (Technische Universität Graz) -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mrf="urn:tugraz:ivt:VectoAPI:DeclarationOutput" xmlns:mrf0.5="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.5" xmlns:mrf0.6="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.6" xmlns:mrf0.7="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.7" xmlns:mrf0.8="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" xmlns:mrf0.9.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.9.1" xmlns:out="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" xmlns:common="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" xmlns:v1.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:ns1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:DEV:v0.9.1" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput" elementFormDefault="qualified" attributeFormDefault="unqualified" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:ParameterDocumentation ParameterDocumentation.xsd">
 	<!-- 
 
          This is a convienience file that imports the schema for all supported versions of manufacturer records file and all supported declaration definitions
@@ -11,6 +11,7 @@
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.6" schemaLocation="VectoOutputManufacturer.0.6.xsd"/>
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.7" schemaLocation="VectoOutputManufacturer.0.7.xsd"/>
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" schemaLocation="VectoOutputManufacturer.0.8.xsd"/>
+	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:DEV:v0.9.1" schemaLocation="VectoOutputManufacturer.0.9.1.xsd"/>
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" schemaLocation="VectoDeclarationDefinitions.xsd"/>
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/>
 	<xs:element name="VectoOutput" type="mrf:VectoOutputManufacturerType">
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputMultistage.0.1.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputMultistage.0.1.xsd
index a85e0519d4..7aee298418 100644
--- a/VectoCore/VectoCore/Resources/XSD/VectoOutputMultistage.0.1.xsd
+++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputMultistage.0.1.xsd
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- edited with XMLSpy v2021 (x64) (http://www.altova.com) by Franz Josef Kober (Technische Universität Graz) -->
+<!-- edited with XMLSpy v2021 (x64) (http://www.altova.com) by Markus Quaritsch (Technische Universität Graz) -->
 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vif="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1" xmlns:v1.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xmlns:v2.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" xmlns:v2.3="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3" xmlns:v2.4="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.4" xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:v2.8="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" xmlns:out="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" xmlns:common="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1" elementFormDefault="qualified" attributeFormDefault="unqualified" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:ParameterDocumentation ParameterDocumentation.xsd">
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" schemaLocation="VectoOutputDefinitions.xsd"/>
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" schemaLocation="VectoDeclarationDefinitions.xsd"/>
@@ -9,47 +9,88 @@
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3" schemaLocation="VectoDeclarationDefinitions.2.3_DEV.xsd"/>
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" schemaLocation="VectoDeclarationDefinitions.2.6_Buses.xsd"/>
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" schemaLocation="VectoDeclarationDefinitions.2.8_Stage.xsd"/>
-	<xs:complexType name="AbstractAxleWheelsComponentPIFType" abstract="true"/>
-	<xs:complexType name="AbstractAxleWheelsDataPIFType" abstract="true"/>
-	<xs:complexType name="AxleWheelsComponentPIFType">
-		<xs:complexContent>
-			<xs:extension base="vif:AbstractAxleWheelsComponentPIFType">
-				<xs:sequence>
-					<xs:element name="Data" type="vif:AbstractAxleWheelsDataPIFType"/>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="AxleWheelsDataPIFType">
-		<xs:annotation>
-			<xs:documentation>Axles &amp; Wheels Component</xs:documentation>
-		</xs:annotation>
-		<xs:complexContent>
-			<xs:extension base="vif:AbstractAxleWheelsDataPIFType">
-				<xs:sequence>
-					<xs:element name="Axles">
-						<xs:complexType>
-							<xs:sequence>
-								<xs:element name="Axle" type="v2.0:AbstractAxleDataDeclarationType" minOccurs="2" maxOccurs="4"/>
-							</xs:sequence>
-						</xs:complexType>
-					</xs:element>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
 	<xs:element name="VectoOutputMultistage" type="vif:VectoOutputMultistageType">
 		<xs:annotation>
 			<xs:documentation>Comment describing your root element</xs:documentation>
 		</xs:annotation>
 	</xs:element>
 	<xs:complexType name="AbstractAngledriveDataPIFType" abstract="true"/>
+	<xs:complexType name="AbstractAuxiliaryDataPIFType" abstract="true"/>
 	<xs:complexType name="AbstractAxlegearDataPIFType" abstract="true"/>
+	<xs:complexType name="AbstractAxleWheelsComponentPIFType" abstract="true"/>
+	<xs:complexType name="AbstractAxleWheelsDataPIFType" abstract="true"/>
 	<xs:complexType name="AbstractEngineDataPIFType" abstract="true"/>
 	<xs:complexType name="AbstractManufacturingStageDataType" abstract="true">
 		<xs:attribute name="id" type="xs:NCName" use="required"/>
 	</xs:complexType>
-	<xs:complexType name="AbstractAuxiliaryDataPIFType" abstract="true"/>
+	<xs:complexType name="AbstractPrimaryVehicleType" abstract="true"/>
+	<xs:complexType name="AbstractTorqueConverterDataPIFType" abstract="true"/>
+	<xs:complexType name="AbstractTransmissionDataPIFType" abstract="true"/>
+	<xs:complexType name="AbstractTransmissionGearsPIFType" abstract="true"/>
+	<xs:complexType name="AbstractVehicleComponentsPIFType" abstract="true"/>
+	<xs:complexType name="AngledriveDataPIFType">
+		<xs:complexContent>
+			<xs:extension base="vif:AbstractAngledriveDataPIFType">
+				<xs:sequence>
+					<xs:element name="Manufacturer" type="v1.0:ManufacturerType">
+						<xs:annotation>
+							<xs:documentation>P220</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="Model" type="v1.0:ModelType">
+						<xs:annotation>
+							<xs:documentation>P221</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="CertificationMethod" type="v1.0:AngledriveCertificationOptionType">
+						<xs:annotation>
+							<xs:documentation>P258 - [-]</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="CertificationNumber" type="v1.0:CertificationNumberType" minOccurs="0">
+						<xs:annotation>
+							<xs:documentation>P265</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="Date" type="v1.0:DateTimeWithTimezone">
+						<xs:annotation>
+							<xs:documentation>P223</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="AppVersion" type="v1.0:AppVersionType">
+						<xs:annotation>
+							<xs:documentation>P224</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="Ratio"/>
+				</xs:sequence>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+	<xs:complexType name="AngledrivePIFType">
+		<xs:sequence>
+			<xs:element name="Data" type="vif:AbstractAngledriveDataPIFType"/>
+		</xs:sequence>
+	</xs:complexType>
+	<xs:complexType name="ApplicationInformationPrimaryVehicleType">
+		<xs:sequence>
+			<xs:element name="SimulationToolVersion" type="xs:string">
+				<xs:annotation>
+					<xs:documentation>II.2.5</xs:documentation>
+				</xs:annotation>
+			</xs:element>
+			<xs:element name="Date" type="v1.0:DateTimeWithTimezone">
+				<xs:annotation>
+					<xs:documentation>II.2.5</xs:documentation>
+				</xs:annotation>
+			</xs:element>
+		</xs:sequence>
+	</xs:complexType>
+	<xs:complexType name="AuxiliaryComponentPIFType">
+		<xs:sequence>
+			<xs:element name="Data" type="vif:AbstractAuxiliaryDataPIFType"/>
+		</xs:sequence>
+	</xs:complexType>
 	<xs:complexType name="AuxiliaryDataPIFType">
 		<xs:complexContent>
 			<xs:extension base="vif:AbstractAuxiliaryDataPIFType">
@@ -254,72 +295,9 @@
 			</xs:extension>
 		</xs:complexContent>
 	</xs:complexType>
-	<xs:complexType name="AbstractPrimaryVehicleType" abstract="true"/>
-	<xs:complexType name="AbstractTorqueConverterDataPIFType" abstract="true"/>
-	<xs:complexType name="AbstractTransmissionDataPIFType" abstract="true"/>
-	<xs:complexType name="AbstractTransmissionGearsPIFType" abstract="true"/>
-	<xs:complexType name="AbstractVehicleComponentsPIFType" abstract="true"/>
-	<xs:complexType name="AngledriveDataPIFType">
-		<xs:complexContent>
-			<xs:extension base="vif:AbstractAngledriveDataPIFType">
-				<xs:sequence>
-					<xs:element name="Manufacturer" type="v1.0:ManufacturerType">
-						<xs:annotation>
-							<xs:documentation>P220</xs:documentation>
-						</xs:annotation>
-					</xs:element>
-					<xs:element name="Model" type="v1.0:ModelType">
-						<xs:annotation>
-							<xs:documentation>P221</xs:documentation>
-						</xs:annotation>
-					</xs:element>
-					<xs:element name="CertificationMethod" type="v1.0:AngledriveCertificationOptionType">
-						<xs:annotation>
-							<xs:documentation>P258 - [-]</xs:documentation>
-						</xs:annotation>
-					</xs:element>
-					<xs:element name="CertificationNumber" type="v1.0:CertificationNumberType" minOccurs="0">
-						<xs:annotation>
-							<xs:documentation>P265</xs:documentation>
-						</xs:annotation>
-					</xs:element>
-					<xs:element name="Date" type="v1.0:DateTimeWithTimezone">
-						<xs:annotation>
-							<xs:documentation>P223</xs:documentation>
-						</xs:annotation>
-					</xs:element>
-					<xs:element name="AppVersion" type="v1.0:AppVersionType">
-						<xs:annotation>
-							<xs:documentation>P224</xs:documentation>
-						</xs:annotation>
-					</xs:element>
-					<xs:element name="Ratio"/>
-				</xs:sequence>
-			</xs:extension>
-		</xs:complexContent>
-	</xs:complexType>
-	<xs:complexType name="AngledrivePIFType">
-		<xs:sequence>
-			<xs:element name="Data" type="vif:AbstractAngledriveDataPIFType"/>
-		</xs:sequence>
-	</xs:complexType>
-	<xs:complexType name="ApplicationInformationPrimaryVehicleType">
-		<xs:sequence>
-			<xs:element name="SimulationToolVersion" type="xs:string">
-				<xs:annotation>
-					<xs:documentation>II.2.5</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:element name="Date" type="v1.0:DateTimeWithTimezone">
-				<xs:annotation>
-					<xs:documentation>II.2.5</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-		</xs:sequence>
-	</xs:complexType>
-	<xs:complexType name="AuxiliaryComponentPIFType">
+	<xs:complexType name="AxlegearComponentPIFType">
 		<xs:sequence>
-			<xs:element name="Data" type="vif:AbstractAuxiliaryDataPIFType"/>
+			<xs:element name="Data" type="vif:AbstractAxlegearDataPIFType"/>
 		</xs:sequence>
 	</xs:complexType>
 	<xs:complexType name="AxlegearDataPIFType">
@@ -362,10 +340,32 @@
 			</xs:extension>
 		</xs:complexContent>
 	</xs:complexType>
-	<xs:complexType name="AxlegearComponentPIFType">
-		<xs:sequence>
-			<xs:element name="Data" type="vif:AbstractAxlegearDataPIFType"/>
-		</xs:sequence>
+	<xs:complexType name="AxleWheelsComponentPIFType">
+		<xs:complexContent>
+			<xs:extension base="vif:AbstractAxleWheelsComponentPIFType">
+				<xs:sequence>
+					<xs:element name="Data" type="vif:AbstractAxleWheelsDataPIFType"/>
+				</xs:sequence>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+	<xs:complexType name="AxleWheelsDataPIFType">
+		<xs:annotation>
+			<xs:documentation>Axles &amp; Wheels Component</xs:documentation>
+		</xs:annotation>
+		<xs:complexContent>
+			<xs:extension base="vif:AbstractAxleWheelsDataPIFType">
+				<xs:sequence>
+					<xs:element name="Axles">
+						<xs:complexType>
+							<xs:sequence>
+								<xs:element name="Axle" type="v2.0:AbstractAxleDataDeclarationType" minOccurs="2" maxOccurs="4"/>
+							</xs:sequence>
+						</xs:complexType>
+					</xs:element>
+				</xs:sequence>
+			</xs:extension>
+		</xs:complexContent>
 	</xs:complexType>
 	<xs:complexType name="BusManufacturingStageDataType">
 		<xs:complexContent>
@@ -551,7 +551,12 @@
 	<xs:complexType name="ResultsPrimaryVehicleType">
 		<xs:sequence>
 			<xs:element name="Status"/>
-			<xs:element name="Result" type="vif:ResultPrimaryVehicleType" maxOccurs="unbounded"/>
+			<xs:choice>
+				<xs:element name="Result" type="vif:ResultPrimaryVehicleType" maxOccurs="unbounded"/>
+				<xs:element name="ExemptedVehicle">
+					<xs:complexType/>
+				</xs:element>
+			</xs:choice>
 		</xs:sequence>
 	</xs:complexType>
 	<xs:complexType name="SimulationParametersType">
@@ -717,6 +722,12 @@
 			</xs:extension>
 		</xs:complexContent>
 	</xs:complexType>
+	<xs:complexType name="VectoOutputMultistageType">
+		<xs:sequence>
+			<xs:element name="PrimaryVehicle" type="vif:PrimaryVehicleType"/>
+			<xs:element name="ManufacturingStage" type="vif:ManufacturingStageType" minOccurs="0" maxOccurs="unbounded"/>
+		</xs:sequence>
+	</xs:complexType>
 	<xs:complexType name="VehicleComponentsPIFType">
 		<xs:complexContent>
 			<xs:extension base="vif:AbstractVehicleComponentsPIFType">
@@ -732,6 +743,101 @@
 			</xs:extension>
 		</xs:complexContent>
 	</xs:complexType>
+	<xs:complexType name="VehicleExemptedPrimaryBusType">
+		<xs:complexContent>
+			<xs:extension base="vif:AbstractPrimaryVehicleType">
+				<xs:sequence>
+					<xs:element name="Manufacturer" type="v1.0:ManufacturerType">
+						<xs:annotation>
+							<xs:documentation>P235 / I.1.1.1 / #14</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="ManufacturerAddress" type="v1.0:ManufacturerAddressType">
+						<xs:annotation>
+							<xs:documentation>P252 / I.1.1.1 / #14</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="Model" type="v1.0:ModelType">
+						<xs:annotation>
+							<xs:documentation>P236 / I.1.1.2</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="VIN" type="v1.0:VINType">
+						<xs:annotation>
+							<xs:documentation>P238 / I.1.1.3 / #1</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="LegislativeCategory">
+						<xs:annotation>
+							<xs:documentation>P251 / I.1.1.4 / #10</xs:documentation>
+						</xs:annotation>
+						<xs:simpleType>
+							<xs:restriction base="xs:string">
+								<xs:minLength value="1"/>
+							</xs:restriction>
+						</xs:simpleType>
+					</xs:element>
+					<xs:element name="ChassisConfiguration" type="v2.6:ChassisConfigurationDeclarationType">
+						<xs:annotation>
+							<xs:documentation>P036 - enum</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="AxleConfiguration" type="v2.6:VehicleAxleConfigurationDeclarationType">
+						<xs:annotation>
+							<xs:documentation>P037 - enum</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="Articulated" type="xs:boolean"/>
+					<xs:element name="TechnicalPermissibleMaximumLadenMass">
+						<xs:annotation>
+							<xs:documentation>P041 / I.1.1.6 / #12</xs:documentation>
+						</xs:annotation>
+						<xs:complexType>
+							<xs:simpleContent>
+								<xs:extension base="xs:double">
+									<xs:attribute name="unit" type="out:MassUnitType" use="required"/>
+								</xs:extension>
+							</xs:simpleContent>
+						</xs:complexType>
+					</xs:element>
+					<xs:element name="ZeroEmissionVehicle" type="xs:boolean">
+						<xs:annotation>
+							<xs:documentation>P269 / I.1.1.10</xs:documentation>
+						</xs:annotation>
+					</xs:element>
+					<xs:element name="SumNetPower">
+						<xs:annotation>
+							<xs:documentation>P277</xs:documentation>
+						</xs:annotation>
+						<xs:complexType>
+							<xs:simpleContent>
+								<xs:extension base="xs:double">
+									<xs:attribute name="unit" type="out:PowerUnitType" use="required"/>
+								</xs:extension>
+							</xs:simpleContent>
+						</xs:complexType>
+					</xs:element>
+					<xs:element name="Technology">
+						<xs:annotation>
+							<xs:documentation>P332 - enum</xs:documentation>
+						</xs:annotation>
+						<xs:simpleType>
+							<xs:restriction base="xs:string">
+								<xs:enumeration value="HEV Article 9 exempted"/>
+								<xs:enumeration value="PEV Article 9 exempted"/>
+								<xs:enumeration value="HV Article 9 exempted"/>
+								<xs:enumeration value="Fuel cell vehicle"/>
+								<xs:enumeration value="H2 ICE"/>
+								<xs:enumeration value="Dual fuel vehicle Article 9 exempted"/>
+								<xs:enumeration value="In-motion charging Article 9 exempted"/>
+								<xs:enumeration value="Other technology Article 9 exempted"/>
+							</xs:restriction>
+						</xs:simpleType>
+					</xs:element>
+				</xs:sequence>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
 	<xs:complexType name="VehiclePIFType">
 		<xs:complexContent>
 			<xs:extension base="vif:AbstractPrimaryVehicleType">
@@ -805,10 +911,4 @@
 			<xs:enumeration value="Coach"/>
 		</xs:restriction>
 	</xs:simpleType>
-	<xs:complexType name="VectoOutputMultistageType">
-		<xs:sequence>
-			<xs:element name="PrimaryVehicle" type="vif:PrimaryVehicleType"/>
-			<xs:element name="ManufacturingStage" type="vif:ManufacturingStageType" minOccurs="0" maxOccurs="unbounded"/>
-		</xs:sequence>
-	</xs:complexType>
 </xs:schema>
diff --git a/VectoCore/VectoCore/Utils/XMLValidator.cs b/VectoCore/VectoCore/Utils/XMLValidator.cs
index 40bb4f8bfb..b7fa13ed4e 100644
--- a/VectoCore/VectoCore/Utils/XMLValidator.cs
+++ b/VectoCore/VectoCore/Utils/XMLValidator.cs
@@ -30,6 +30,7 @@
 */
 
 using System;
+using System.Collections.Generic;
 using System.IO;
 using System.Xml;
 using System.Xml.Schema;
@@ -44,6 +45,7 @@ namespace TUGraz.VectoCore.Utils
 		private readonly Action<bool> _resultAction;
 		private bool _valid;
 		private  XmlDocument _doc;
+		private List<string> _validationErrors = new List<string>();
 
 		private XMLValidator(Action<bool> resultaction, Action<XmlSeverityType, ValidationEvent> validationErrorAction)
 		{
@@ -70,6 +72,7 @@ namespace TUGraz.VectoCore.Utils
 		public bool ValidateXML(XmlDocumentType docType)
 		{
 			_valid = true;
+			_validationErrors.Clear();
 			if (_doc.DocumentElement == null) {
 				throw new Exception("empty XML document");
 			}
@@ -91,11 +94,14 @@ namespace TUGraz.VectoCore.Utils
 		{
 			_resultAction(false);
 			_valid = false;
-			ValidationError = args?.Message ?? "no schema found";
+			_validationErrors.Add(args?.Message ?? "no schema found");
 			_validationErrorAction(args?.Severity ?? XmlSeverityType.Error, new ValidationEvent { ValidationEventArgs = args });
 		}
 
-		public string ValidationError { get; private set; }
+		public string ValidationError
+		{
+			get { return string.Join(Environment.NewLine, _validationErrors); }
+		}
 
 		public static void CallBackExceptionOnError(XmlSeverityType severity, ValidationEvent evt)
 		{
diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj
index 63c6b8e93a..1e978ac418 100644
--- a/VectoCore/VectoCore/VectoCore.csproj
+++ b/VectoCore/VectoCore/VectoCore.csproj
@@ -445,8 +445,12 @@
     <Compile Include="OutputData\FileIO\FileOutputVIFWriter.cs" />
     <Compile Include="OutputData\FileIO\JSONFileWriter.cs" />
     <Compile Include="OutputData\ModalDataPostprocessingCorrection.cs" />
-    <Compile Include="OutputData\XML\AbstractXMLManufacturerReport.cs" />
+    <Compile Include="OutputData\XML\DeclarationReports\CustomerInformationFile\IXMLCustomerReport.cs" />
+    <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\AbstractXMLManufacturerReport.cs" />
     <Compile Include="OutputData\XML\DeclarationJobs\XMLCompletedBusWriter.cs" />
+    <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\IXMLManufacturerReport.cs" />
+    <Compile Include="OutputData\XML\DeclarationReports\VehicleInformationFile\IXMLMultistageReport.cs" />
+    <Compile Include="OutputData\XML\DeclarationReports\VehicleInformationFile\IXMLPrimaryVehicleReport.cs" />
     <Compile Include="OutputData\XML\Engineering\Factory\EngineeringWriterFactory.cs" />
     <Compile Include="OutputData\XML\Engineering\Factory\IEngineeringWriterInjectFactory.cs" />
     <Compile Include="OutputData\XML\Engineering\Interfaces\IXMLEngineeringComponentWriter.cs" />
@@ -481,15 +485,17 @@
     <Compile Include="OutputData\XML\Engineering\XMLEngineeringWriter.cs" />
     <Compile Include="OutputData\XML\Engineering\XMLEngineeringWriterInjectModule.cs" />
     <Compile Include="OutputData\XML\Engineering\XMLWriterMapping.cs" />
-    <Compile Include="OutputData\XML\XMLCustomerReportCompletedBus.cs" />
+    <Compile Include="OutputData\XML\DeclarationReports\CustomerInformationFile\XMLCustomerReportCompletedBus.cs" />
     <Compile Include="OutputData\XML\XMLDeclarationReportCompletedVehicle.cs" />
     <Compile Include="OutputData\XML\XMLDeclarationReportMultistageBusVehicle.cs" />
     <Compile Include="OutputData\XML\XMLDeclarationReportPrimaryVehicle.cs" />
-    <Compile Include="OutputData\XML\XMLManufacturerReportCompletedBus.cs" />
-    <Compile Include="OutputData\XML\XMLManufacturerReportExemptedTruck.cs" />
-    <Compile Include="OutputData\XML\XMLManufacturerReportPrimaryBus.cs" />
-    <Compile Include="OutputData\XML\XMLMultistageBusReport.cs" />
-    <Compile Include="OutputData\XML\XMLPrimaryVehicleReport.cs" />
+    <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\XMLManufacturerReportCompletedBus.cs" />
+    <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\XMLManufacturerReportExemptedTruck.cs" />
+    <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\XMLManufacturerReportExeptedPrimaryBus.cs" />
+    <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\XMLManufacturerReportPrimaryBus.cs" />
+    <Compile Include="OutputData\XML\DeclarationReports\VehicleInformationFile\XMLExemptedPrimaryBusVehicleReport.cs" />
+    <Compile Include="OutputData\XML\DeclarationReports\VehicleInformationFile\XMLMultistageBusReport.cs" />
+    <Compile Include="OutputData\XML\DeclarationReports\VehicleInformationFile\XMLPrimaryBusVehicleReport.cs" />
     <Compile Include="Utils\Ninject\UseFirstArgumentAsInstanceProvider.cs" />
     <Compile Include="InputData\FileIO\XML\Declaration\NinjectModules\XMLDeclarationReaderInjectModule.cs" />
     <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationVehicleDataProvider.cs" />
@@ -578,17 +584,16 @@
     <Compile Include="Models\SimulationComponent\Impl\VTPCycle.cs" />
     <Compile Include="Models\Simulation\Data\ShiftStrategyParameters.cs" />
     <Compile Include="Models\Simulation\Impl\ExemptedRun.cs" />
-    <Compile Include="OutputData\XML\XMLMonitoringReport.cs" />
-    <Compile Include="OutputData\XML\XMLVTPReport.cs" />
+    <Compile Include="OutputData\XML\DeclarationReports\VTPReport\XMLVTPReport.cs" />
     <Compile Include="OutputData\VTPReport.cs" />
     <Compile Include="OutputData\ModFilter\ActualModalDataFilter.cs" />
     <Compile Include="OutputData\ModFilter\ModalData1HzFilter.cs" />
     <Compile Include="OutputData\XML\AbstractXMLWriter.cs" />
     <Compile Include="OutputData\XML\AttributeMappings.cs" />
-    <Compile Include="OutputData\XML\XMLCustomerReport.cs" />
+    <Compile Include="OutputData\XML\DeclarationReports\CustomerInformationFile\XMLCustomerReport.cs" />
     <Compile Include="OutputData\XML\XMLDeclarationReport.cs" />
     <Compile Include="OutputData\XML\XMLDeclarationWriter.cs" />
-    <Compile Include="OutputData\XML\XMLManufacturerReport.cs" />
+    <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\XMLManufacturerReportTruck.cs" />
     <Compile Include="Utils\Interpolate2D.cs" />
     <Compile Include="Utils\DataIntegrityHelper.cs" />
     <Compile Include="Utils\MeanShiftClustering.cs" />
@@ -968,6 +973,9 @@
     <EmbeddedResource Include="Resources\XSD\VectoOutputMultistage.0.1.xsd">
       <SubType>Designer</SubType>
     </EmbeddedResource>
+    <EmbeddedResource Include="Resources\XSD\VectoOutputManufacturer.0.9.1.xsd">
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
     <None Include="Utils\VectoVersionCore.tt">
       <Generator>TextTemplatingFileGenerator</Generator>
       <LastGenOutput>VectoVersionCore.cs</LastGenOutput>
diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs b/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs
index 4be58cff7d..62a0412fc1 100644
--- a/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs
@@ -58,6 +58,8 @@ namespace TUGraz.VectoCore.Tests.Integration
 	{
 		const string ExemptedVehicle = @"Testdata\Integration\DeclarationMode\ExemptedVehicle\vecto_vehicle-sample_exempted.xml";
 
+		const string ExemptedPrimaryBus = @"TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\exempted_primary_heavyBus.xml";
+
 		protected IXMLInputDataReader xmlInputReader;
 		private IKernel _kernel;
 
@@ -287,5 +289,57 @@ namespace TUGraz.VectoCore.Tests.Integration
 				manager);
 			hybridNode.SetValue(hybrid.ToString().ToLowerInvariant());
 		}
+
+		[TestCase(ExemptedPrimaryBus, 1)]
+		public void TestSimulationExemptedPrimaryBusVehicle(string filename, int numRuns)
+		{
+			var writer = new FileOutputWriter(filename);
+
+			var primaryReportFile = writer.XMLPrimaryVehicleReportName;
+			var manufactuerFile = writer.XMLFullReportName;
+			var monitoringFile = writer.XMLMonitoringReportName;
+			if (File.Exists(primaryReportFile)) {
+				File.Delete(primaryReportFile);
+			}
+			if (File.Exists(manufactuerFile)) {
+				File.Delete(manufactuerFile);
+			}
+			if (File.Exists(monitoringFile)) {
+				File.Delete(monitoringFile);
+			}
+
+			var inputData = xmlInputReader.CreateDeclaration(filename);
+
+			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
+				WriteModalResults = true,
+				ActualModalData = true
+			};
+			var jobContainer = new JobContainer(new MockSumWriter());
+
+			var runs = factory.SimulationRuns().ToList();
+			Assert.AreEqual(numRuns, runs.Count);
+			foreach (var run in runs) {
+				jobContainer.AddRun(run);
+			}
+			//jobContainer.AddRuns(factory);
+
+			jobContainer.Execute();
+			jobContainer.WaitFinished();
+			var progress = jobContainer.GetProgress();
+			Assert.IsTrue(progress.All(r => r.Value.Success), string.Concat<Exception>(progress.Select(r => r.Value.Error)));
+
+			Assert.IsTrue(File.Exists(manufactuerFile));
+			Assert.IsTrue(File.Exists(primaryReportFile));
+
+			var validator = new XMLValidator(XmlReader.Create(manufactuerFile));
+			Assert.IsTrue(validator.ValidateXML(XmlDocumentType.ManufacturerReport), validator.ValidationError);
+
+			var val2 = new XMLValidator(XmlReader.Create(primaryReportFile));
+			Assert.IsTrue(val2.ValidateXML(XmlDocumentType.MultistageOutputData), val2.ValidationError);
+
+			//var val3 = new XMLValidator(XmlReader.Create(monitoringFile));
+			//Assert.IsTrue(val3.ValidateXML(XmlDocumentType.MonitoringReport), val3.ValidationError);
+
+		}
 	}
 }
diff --git a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs
index ed000eb7d3..237476aff8 100644
--- a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs
@@ -451,7 +451,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 			Assert.AreEqual("Generic Model", vehicleData.Model);
 			Assert.AreEqual("VEH-1234567890", vehicleData.VIN);
 			Assert.AreEqual(DateTime.Parse("2017-02-15T11:00:00Z").ToUniversalTime(), vehicleData.Date);
-			Assert.AreEqual("M3", vehicleData.LegislativeCategory);
+			Assert.AreEqual(LegislativeClass.M3, vehicleData.LegislativeClass);
 			Assert.AreEqual("Bus", vehicleData.VehicleCategory.ToXMLFormat());
 			Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleData.AxleConfiguration);
 			Assert.AreEqual(false, vehicleData.Articulated);
diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/exempted_primary_heavyBus.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/exempted_primary_heavyBus.xml
new file mode 100644
index 0000000000..aef216779b
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/exempted_primary_heavyBus.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tns:VectoInputDeclaration schemaVersion="2.0" 
+xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" 
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" 
+xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:v2.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" 
+xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" 
+xmlns:di="http://www.w3.org/2000/09/xmldsig#" 
+xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationJob v:\VectoCore\VectoCore\Resources\XSD/VectoDeclarationJob.xsd">
+	<v2.0:Vehicle id="VEH-1234567890" xsi:type="v2.6:ExemptedPrimaryHeavyBusType">
+		<Manufacturer>Some Manufacturer</Manufacturer>
+		<ManufacturerAddress>Infinite Loop 1</ManufacturerAddress>
+		<Model>Sample Bus Model</Model>
+		<VIN>VEH-1234567890</VIN>
+		<Date>2020-01-09T11:00:00Z</Date>
+		<LegislativeCategory>N2</LegislativeCategory>
+		<ChassisConfiguration>Bus</ChassisConfiguration>
+		<AxleConfiguration>6x2</AxleConfiguration>
+		<Articulated>false</Articulated>
+		<TechnicalPermissibleMaximumLadenMass>15400</TechnicalPermissibleMaximumLadenMass>
+		<ZeroEmissionVehicle>true</ZeroEmissionVehicle>
+		<SumNetPower>350000</SumNetPower>
+		<Technology>Fuel cell vehicle</Technology>
+	</v2.0:Vehicle>
+</tns:VectoInputDeclaration>
diff --git a/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs b/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs
index aa367932f7..aa2acbcdee 100644
--- a/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs
+++ b/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs
@@ -29,7 +29,6 @@ namespace TUGraz.VectoCore.Tests.Utils {
 		public string Identifier { get; }
 		public bool ExemptedVehicle { get; }
 		public string VIN { get; }
-		public string LegislativeCategory { get; }
 		public LegislativeClass? LegislativeClass { get; }
 		public VehicleCategory VehicleCategory { get; }
 		public AxleConfiguration AxleConfiguration { get; }
@@ -48,6 +47,7 @@ namespace TUGraz.VectoCore.Tests.Utils {
 		public bool DualFuelVehicle { get; }
 		public Watt MaxNetPower1 { get; }
 		public Watt MaxNetPower2 { get; }
+		public string ExemptedTechnology { get; }
 		public RegistrationClass? RegisteredClass { get; set; }
 		public int? NumberPassengerSeatsUpperDeck { get; set; }
 		public int? NumberPassengerSeatsLowerDeck { get; set; }
@@ -121,6 +121,7 @@ namespace TUGraz.VectoCore.Tests.Utils {
 		public ConsumerTechnology? DoorDriveTechnology { get; }
 		public VehicleDeclarationType VehicleDeclarationType { get; }
 		public Watt MaxNetPower2 { get; }
+		public string ExemptedTechnology { get; }
 		public RegistrationClass? RegisteredClass { get; set; }
 		public int? NumberPassengerSeatsUpperDeck { get; set; }
 		public int? NumberPassengerSeatsLowerDeck { get; set; }
@@ -141,7 +142,6 @@ namespace TUGraz.VectoCore.Tests.Utils {
 		public string Identifier { get; }
 		public bool ExemptedVehicle { get; }
 		public string VIN { get; }
-		public string LegislativeCategory { get; }
 		public LegislativeClass? LegislativeClass { get; }
 		public VehicleCategory VehicleCategory { get; }
 		public AxleConfiguration AxleConfiguration { get; }
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index 2572f74355..41e878b0fe 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -5837,6 +5837,9 @@
     <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.3\vehicle_sampleDualModeDualFuel.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\exempted_primary_heavyBus.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\PIF-heavyBus-sample.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
diff --git a/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs b/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs
index 6a337e3dac..3f32009dea 100644
--- a/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs
@@ -71,7 +71,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			Assert.AreEqual("Generic Model", vehicleData.Model);
 			Assert.AreEqual("VEH-1234567890_nonSmart-ESS", vehicleData.VIN);
 			Assert.AreEqual(DateTime.Parse("2017-02-15T11:00:00Z").ToUniversalTime(), vehicleData.Date);
-			Assert.AreEqual("M3", vehicleData.LegislativeCategory);
+			Assert.AreEqual(LegislativeClass.M3, vehicleData.LegislativeClass);
 			Assert.AreEqual("Bus", vehicleData.VehicleCategory.ToXMLFormat());
 			Assert.AreEqual(AxleConfiguration.AxleConfig_8x2, vehicleData.AxleConfiguration);
 			Assert.AreEqual(true, vehicleData.Articulated);
diff --git a/VectoCore/VectoXML.spp b/VectoCore/VectoXML.spp
index a18bdad0c3..3c9d46d22c 100644
--- a/VectoCore/VectoXML.spp
+++ b/VectoCore/VectoXML.spp
@@ -15,6 +15,7 @@
 			<File FilePath="VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.3\vehicle_sampleDualModeDualFuel.xml" HomeFolder="Yes"/>
 		</Folder>
 		<Folder FolderName="Schema 2.6DEV Buses ML">
+			<File FilePath="E:\QUAM\Workspace\VECTO_DEV_Buses\VectoCore\VectoCoreTest\bin\Debug\TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\exempted_primary_heavyBus.xml" HomeFolder="Yes"/>
 			<File FilePath="VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\PIF-heavyBus-sample.xml" HomeFolder="Yes"/>
 			<File FilePath="VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\vecto_vehicle-completed_heavyBus-sample.xml" HomeFolder="Yes"/>
 			<File FilePath="VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\vecto_vehicle-medium_lorryFWD-sample.xml" HomeFolder="Yes"/>
@@ -144,6 +145,7 @@
 			<File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.6.xsd" HomeFolder="Yes"/>
 			<File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.7.xsd" HomeFolder="Yes"/>
 			<File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.8.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.9.1.xsd" HomeFolder="Yes"/>
 			<File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.xsd" HomeFolder="Yes"/>
 			<File FilePath="VectoCore\Resources\XSD\VectoOutputMultistage.0.1.xsd" HomeFolder="Yes"/>
 			<File FilePath="VectoCore\Resources\XSD\VectoOutputPrimaryBus.xsd" HomeFolder="Yes"/>
-- 
GitLab