diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle_09.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle_09.cs
new file mode 100644
index 0000000000000000000000000000000000000000..897d7e22e9a7d5cdf6be13bca038c4628e14b4e1
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle_09.cs
@@ -0,0 +1,133 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile.VehicleInformationFile_0_1;
+
+namespace TUGraz.VectoCore.OutputData.XML
+{
+	/// <summary>
+	/// Create MRF and CIF of the complete(d) step
+	/// </summary>
+	public class XMLDeclarationReportCompletedVehicle_09 : XMLDeclarationReport
+	{
+		#region Constructors
+		//public XMLDeclarationReportCompletedVehicle_09(IReportWriter writer) : base(writer) { }
+		public XMLDeclarationReportCompletedVehicle_09(IReportWriter writer, IManufacturerReportFactory mrfFactory,
+			ICustomerInformationFileFactory cifFactory,
+			IVIFReportFactory vifFactory) : base(writer, mrfFactory, cifFactory)
+		{
+		}
+
+		#endregion
+
+		public IPrimaryVehicleInformationInputDataProvider PrimaryVehicleReportInputData { get; set; }
+
+		#region Overrides of XMLDeclarationReportCompletedVehicle
+
+		protected override void InstantiateReports(VectoRunData modelData)
+		{
+			var inputData = modelData.InputData as IXMLMultistageInputDataProvider;
+			var primaryVehicle = inputData.JobInputData.PrimaryVehicle.Vehicle;
+
+			var ihpc = (primaryVehicle.Components?.ElectricMachines?.Entries)?.Count(electric => electric.ElectricMachine.IHPCType != "None") > 0;
+			var iepc = (primaryVehicle.Components?.IEPC != null);
+			ManufacturerRpt = _mrfFactory.GetManufacturerReport(
+				inputData.JobInputData.ConsolidateManufacturingStage.Vehicle.VehicleCategory,
+				inputData.JobInputData.JobType,
+				primaryVehicle.ArchitectureID,
+				primaryVehicle.ExemptedVehicle,
+				iepc,
+				ihpc);
+
+			CustomerRpt = _cifFactory.GetCustomerReport(
+				inputData.JobInputData.ConsolidateManufacturingStage.Vehicle.VehicleCategory,
+				inputData.JobInputData.JobType,
+				primaryVehicle.ArchitectureID,
+				primaryVehicle.ExemptedVehicle,
+				iepc,
+				ihpc);
+
+		}
+		public override void InitializeReport(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes)
+		{
+			_weightingFactors = EqualWeighting;
+
+			InstantiateReports(modelData);
+
+			ManufacturerRpt.Initialize(modelData, fuelModes);
+			CustomerRpt.Initialize(modelData, fuelModes);
+		}
+		#endregion
+
+
+
+		private static IDictionary<Tuple<MissionType, LoadingType>, double> EqualWeighting =>
+			new ReadOnlyDictionary<Tuple<MissionType, LoadingType>, double>(
+				new Dictionary<Tuple<MissionType, LoadingType>, double>() {
+					{ Tuple.Create(MissionType.LongHaul, LoadingType.LowLoading), 1 },
+					{ Tuple.Create(MissionType.LongHaul, LoadingType.ReferenceLoad), 1 },
+					{ Tuple.Create(MissionType.RegionalDelivery, LoadingType.LowLoading), 1 },
+					{ Tuple.Create(MissionType.RegionalDelivery, LoadingType.ReferenceLoad), 1 },
+					{ Tuple.Create(MissionType.UrbanDelivery, LoadingType.LowLoading), 1 },
+					{ Tuple.Create(MissionType.UrbanDelivery, LoadingType.ReferenceLoad), 1 },
+					{ Tuple.Create(MissionType.LongHaulEMS, LoadingType.LowLoading), 1 },
+					{ Tuple.Create(MissionType.LongHaulEMS, LoadingType.ReferenceLoad), 1 },
+					{ Tuple.Create(MissionType.RegionalDeliveryEMS, LoadingType.LowLoading), 1 },
+					{ Tuple.Create(MissionType.RegionalDeliveryEMS, LoadingType.ReferenceLoad), 1 },
+					{ Tuple.Create(MissionType.MunicipalUtility, LoadingType.LowLoading), 1 },
+					{ Tuple.Create(MissionType.MunicipalUtility, LoadingType.ReferenceLoad), 1 },
+					{ Tuple.Create(MissionType.Construction, LoadingType.LowLoading), 1 },
+					{ Tuple.Create(MissionType.Construction, LoadingType.ReferenceLoad), 1 },
+					{ Tuple.Create(MissionType.HeavyUrban, LoadingType.LowLoading), 1 },
+					{ Tuple.Create(MissionType.HeavyUrban, LoadingType.ReferenceLoad), 1 },
+					{ Tuple.Create(MissionType.Urban, LoadingType.LowLoading), 1 },
+					{ Tuple.Create(MissionType.Urban, LoadingType.ReferenceLoad), 1 },
+					{ Tuple.Create(MissionType.Suburban, LoadingType.LowLoading), 1 },
+					{ Tuple.Create(MissionType.Suburban, LoadingType.ReferenceLoad), 1 },
+					{ Tuple.Create(MissionType.Interurban, LoadingType.LowLoading), 1 },
+					{ Tuple.Create(MissionType.Interurban, LoadingType.ReferenceLoad), 1 },
+					{ Tuple.Create(MissionType.Coach, LoadingType.LowLoading), 1 },
+					{ Tuple.Create(MissionType.Coach, LoadingType.ReferenceLoad), 1 },
+				});
+
+		protected internal override void DoWriteReport()
+		{
+			foreach (var specificResult in Results.Where(x => VehicleClassHelper.IsCompletedBus(x.VehicleClass)).OrderBy(x => x.VehicleClass)
+						.ThenBy(x => x.FuelMode).ThenBy(x => x.Mission))
+			{
+
+				var genericResult = Results.First(x => x.VehicleClass.IsPrimaryBus() && x.FuelMode == specificResult.FuelMode &&
+														x.Mission == specificResult.Mission && x.LoadingType == specificResult.LoadingType);
+				var primaryResult = genericResult.PrimaryResult ?? specificResult.PrimaryResult;
+				if (primaryResult == null)
+				{
+					throw new VectoException(
+						"no primary result entry set for simulation run vehicle class: {0}, mission: {1}, payload: {2}",
+						genericResult.VehicleClass, genericResult.Mission, genericResult.Payload);
+				}
+
+				(ManufacturerRpt as XMLManufacturerReportCompletedBus).WriteResult(genericResult, specificResult, primaryResult);
+				(CustomerRpt as XMLCustomerReportCompletedBus).WriteResult(genericResult, specificResult, primaryResult);
+			}
+
+			GenerateReports();
+
+			if (Writer != null)
+			{
+				OutputReports();
+			}
+		}
+
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportInterimVehicle_09.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportInterimVehicle_09.cs
new file mode 100644
index 0000000000000000000000000000000000000000..68d621f80590b09e7660ecb880d7d4f15c73b9d3
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportInterimVehicle_09.cs
@@ -0,0 +1,80 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile.VehicleInformationFile_0_1;
+
+namespace TUGraz.VectoCore.OutputData.XML
+{
+	/// <summary>
+	/// Create VIF of an interim (or the complete(d) step
+	/// </summary>
+	public class XMLDeclarationReportInterimVehicle_09 : XMLDeclarationReport
+	{
+		protected readonly IVIFReportFactory _vifFactory;
+
+		protected IXMLMultistepIntermediateReport MultistepIntermediateBusReport;
+		protected readonly IVIFReportInterimFactory _interimFactory;
+
+		public XMLDeclarationReportInterimVehicle_09(IReportWriter writer,
+			IManufacturerReportFactory mrfFactory,
+			ICustomerInformationFileFactory cifFactory,
+			IVIFReportFactory vifFactory, IVIFReportInterimFactory interimFactory) : base(writer, mrfFactory, cifFactory)
+		{
+			_vifFactory = vifFactory;
+			_interimFactory = interimFactory;
+		}
+
+		#region Overrides of XMLDeclarationReport
+
+		protected override void InstantiateReports(VectoRunData modelData)
+		{
+			var vehicleData = modelData.VehicleData.InputData;
+			var iepc = vehicleData.Components?.IEPC != null;
+			var ihpc =
+				vehicleData.Components?.ElectricMachines?.Entries?.Count(e => e.ElectricMachine.IHPCType != "None") > 0;
+
+			MultistepIntermediateBusReport = _interimFactory.GetInterimVIFReport(vehicleData.VehicleCategory,
+				vehicleData.VehicleType,
+				vehicleData.ArchitectureID,
+				vehicleData.ExemptedVehicle,
+				iepc,
+				ihpc);
+		}
+
+		#endregion
+
+		public override void InitializeReport(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes)
+		{
+			//_multistageBusReport =
+			//	modelData.Exempted ? new XMLMultistageExemptedBusReport() : new XMLMultistageBusReport();
+			
+			InstantiateReports(modelData);
+
+			MultistepIntermediateBusReport.Initialize(modelData);
+		}
+
+		protected override void GenerateReports()
+		{
+			MultistepIntermediateBusReport.GenerateReport();
+		}
+
+		protected override void OutputReports()
+		{
+			Writer.WriteReport(ReportType.DeclarationReportMultistageVehicleXML, MultistepIntermediateBusReport.Report);
+		}
+
+		protected override void DoStoreResult(ResultEntry entry, VectoRunData runData, IModalDataContainer modData)
+		{
+			throw new NotSupportedException();
+		}
+		protected override void WriteResult(ResultEntry result)
+		{
+			throw new NotSupportedException();
+		}
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportPrimaryVehicle_09.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportPrimaryVehicle_09.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1dc4298633ea76bc033784837b08c5dbbe34ef36
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportPrimaryVehicle_09.cs
@@ -0,0 +1,90 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Xml.Linq;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile;
+using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile.VehicleInformationFile_0_1;
+
+namespace TUGraz.VectoCore.OutputData.XML
+{
+	/// <summary>
+	/// Create MRF and VIF for primary bus
+	/// </summary>
+	public class XMLDeclarationReportPrimaryVehicle_09 : XMLDeclarationReport
+	{
+		private readonly IVIFReportFactory _vifFactory;
+
+		protected IXMLVehicleInformationFile VehicleInformationFile;
+
+
+		public override XDocument CustomerReport => null;
+
+		public override XDocument PrimaryVehicleReport => VehicleInformationFile?.Report;
+
+		
+		public XMLDeclarationReportPrimaryVehicle_09(IReportWriter writer,
+			IManufacturerReportFactory mrfFactory,
+			IVIFReportFactory vifFactory) : base(writer, mrfFactory, null)
+		{
+			_vifFactory = vifFactory;
+		}
+		
+
+
+		#region Overrides of XMLDeclarationReport
+		protected override void InstantiateReports(VectoRunData modelData)
+		{
+			var vehicleData = modelData.VehicleData.InputData;
+			var iepc = vehicleData.Components?.IEPC != null;
+			var ihpc =
+				vehicleData.Components?.ElectricMachines?.Entries?.Count(e => e.ElectricMachine.IHPCType != "None") > 0;
+
+			ManufacturerRpt = _mrfFactory.GetManufacturerReport(vehicleData.VehicleCategory,
+				vehicleData.VehicleType,
+				vehicleData.ArchitectureID,
+				vehicleData.ExemptedVehicle,
+				iepc,
+				ihpc);
+
+			VehicleInformationFile = _vifFactory.GetVIFReport(vehicleData.VehicleCategory,
+				vehicleData.VehicleType,
+				vehicleData.ArchitectureID,
+				vehicleData.ExemptedVehicle,
+				iepc,
+				ihpc);
+
+			
+
+
+		}
+		public override void InitializeReport(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes)
+		{
+			base.InitializeReport(modelData, fuelModes);
+			VehicleInformationFile.Initialize(modelData, fuelModes);
+		}
+		protected override void WriteResult(ResultEntry result)
+		{
+			base.WriteResult(result);
+			VehicleInformationFile.WriteResult(result);
+		}
+
+		protected override void GenerateReports()
+		{
+			ManufacturerRpt.GenerateReport();
+			var fullReportHash = GetSignature(ManufacturerRpt.Report);
+			CustomerRpt.GenerateReport(fullReportHash);
+			VehicleInformationFile.GenerateReport(fullReportHash);
+		}
+
+
+
+		protected override void OutputReports()
+		{
+			Writer.WriteReport(ReportType.DeclarationReportManufacturerXML, ManufacturerRpt.Report);
+			Writer.WriteReport(ReportType.DeclarationReportPrimaryVehicleXML, VehicleInformationFile.Report);
+		}
+		#endregion
+	}
+}
\ No newline at end of file