diff --git a/VectoCore/VectoCore/OutputData/DeclarationReport.cs b/VectoCore/VectoCore/OutputData/DeclarationReport.cs
index 98478bd345989e027e8679339223d76acbaafe86..9e37707518cb2e08b888aa2f0553d40933d67587 100644
--- a/VectoCore/VectoCore/OutputData/DeclarationReport.cs
+++ b/VectoCore/VectoCore/OutputData/DeclarationReport.cs
@@ -39,6 +39,7 @@ using TUGraz.VectoCommon.Models;
 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.Engine;
 
 namespace TUGraz.VectoCore.OutputData
@@ -71,12 +72,35 @@ namespace TUGraz.VectoCore.OutputData
 
 	public interface IResultEntry
 	{
+		VectoRun.Status Status { get; }
 		MissionType Mission { get; set; }
 
 		LoadingType LoadingType { get; set; }
 
 		int FuelMode { get; set; }
 		IList<IFuelProperties> FuelData { get; set; }
+
+		MeterPerSecond AverageSpeed { get; }
+
+		MeterPerSecond AverageDrivingSpeed { get; }
+		MeterPerSecond MaxSpeed { get; }
+		MeterPerSecond MinSpeed { get; }
+		MeterPerSquareSecond MaxDeceleration { get; }
+		MeterPerSquareSecond MaxAcceleration { get; }
+
+		PerSecond EngineSpeedDrivingMin { get; }
+		PerSecond EngineSpeedDrivingAvg { get;}
+		PerSecond EngineSpeedDrivingMax { get; }
+		double AverageGearboxEfficiency { get;  }
+
+		double AverageAxlegearEfficiency { get; }
+		Scalar FullLoadPercentage { get; }
+		Scalar GearshiftCount { get; }
+		Meter Distance { get; }
+
+		IFuelConsumptionCorrection FuelConsumptionFinal(FuelType fuelType);
+
+		Kilogram CO2Total { get; }
 		Kilogram Payload { get; set; }
 		Kilogram TotalVehicleMass { get; set; }
 		CubicMeter CargoVolume { get; set; }
@@ -84,7 +108,13 @@ namespace TUGraz.VectoCore.OutputData
 		double? PassengerCount { get; set; }
 		VehicleClass VehicleClass { get; set; }
 
+		double WeightingFactor { get; }
+
 		void SetResultData(VectoRunData runData, IModalDataContainer data, double weightingFactor);
+
+		string Error { get; }
+
+		string StackTrace { get; }
 	}
 
 	/// <summary>
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/AbstractCustomerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/AbstractCustomerReport.cs
index 4fdb8ea0826e9addce27141da4d5242956377f48..0ea4d01fea73b0b8828eec91f2b7d28b33bcad98 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/AbstractCustomerReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/AbstractCustomerReport.cs
@@ -8,7 +8,6 @@ using System.Xml;
 using System.Xml.Linq;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.SimulationComponent;
 using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9.ResultWriter;
@@ -33,7 +32,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 
 		protected XElement Vehicle { get; set; }
-		protected IResultWriter Results { get; set; }
+		protected IResultsWriter Results { get; set; }
 
 		protected XElement InputDataIntegrity { get; set; }
 
@@ -51,7 +50,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 		#region Implementation of IXMLCustomerReport
 
-		public virtual void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes)
+		public virtual void Initialize(VectoRunData modelData)
 		{
 			InitializeVehicleData(modelData.InputData);
 			_ovc = modelData.VehicleData.OffVehicleCharging;
@@ -102,11 +101,16 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 				Vehicle,
 				InputDataIntegrity,
 				new XElement(Cif_0_9 + XMLNames.Report_ManufacturerRecord_Signature, resultSignature),
-				Results.GenerateResults(results),
+				GetResultsXML(),
 				XMLHelper.GetApplicationInfo(Cif_0_9)
 			};
 		}
 
+		protected XElement GetResultsXML()
+		{
+			return Results.GenerateResults(results);
+		}
+
 		#endregion
 
 
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFNinjectModule.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFNinjectModule.cs
index a2146d021a737fed1529ea3361900ec7dbbeaabf..f4a852466e83d364f3c1df4074934391322230cd 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFNinjectModule.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFNinjectModule.cs
@@ -403,19 +403,24 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 	internal class CIFResultsNinjectModule : NinjectModule
 	{
+		private VehicleTypeAndArchitectureStringHelperResults _namingHelper =
+			new VehicleTypeAndArchitectureStringHelperResults();
+
 		public override void Load()
 		{
 			Bind<IResultWriterFactory>().ToFactory(() => new CombineArgumentsToNameInstanceProvider(
 				new CombineArgumentsToNameInstanceProvider.MethodSettings() {
-					combineToNameDelegate = ,
-					skipArguments = 6,
-					takeArguments = 6,
+					combineToNameDelegate = _namingHelper.CreateName,
+					skipArguments = 1,
+					takeArguments = 1,
 					methods = new[] {
 						typeof(IResultWriterFactory).GetMethod(nameof(IResultWriterFactory.GetCIFResultWriter))
 					}
 				}));
 
-			Bind<IResultWriter>().To<ExemptedResultsWriter>();
+			Bind<IResultsWriter>().To<ExemptedResultsWriter>().Named(
+				_namingHelper.GetName(VehicleCategoryHelper.Lorry, true));
+			
 		}
 	}
 }
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CustomerInformationFile/CustomerInformationFile.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CustomerInformationFile/CustomerInformationFile.cs
index 4421f56fcf2df80736271745180bd2bf9a23b153..1670285a516528d5d973bc68a21807ec063c11ee 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CustomerInformationFile/CustomerInformationFile.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CustomerInformationFile/CustomerInformationFile.cs
@@ -7,8 +7,8 @@ using System.Xml.Linq;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Models.Simulation.Impl;
 using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9.ResultWriter;
 using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReport;
 using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter;
@@ -198,16 +198,19 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 	#region CompletedBus
 
-	public abstract class CustomerInformationFileCompletedBus : CustomerInformationFile
+	public abstract class CustomerInformationFileCompletedBus : CustomerInformationFile, IXMLCustomerReportCompletedBus
 	{
+		private bool _allSuccess;
+		private int _resultCount;
+
 		protected XElement InputDataIntegrityPrimaryVehicle { get; set; }
 
 		protected XElement ManufacturerReportIntegrityPrimaryVehicle { get; set; }
 
-		protected CustomerInformationFileCompletedBus(ICustomerInformationFileFactory cifFactory) :
-			base(cifFactory) { }
+		protected CustomerInformationFileCompletedBus(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) :
+			base(cifFactory, resultWriterFactory) { }
 
-		public override void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes)
+		public override void Initialize(VectoRunData modelData)
 		{
 			InitializeVehicleData(modelData.InputData);
 			_ovc = modelData.VehicleData.OffVehicleCharging;
@@ -216,7 +219,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 			if (inputData == null) {
 				throw new VectoException("CompletedBus CustomerInformationFile requires MultistepBusInputData");
 			}
-			Results = new XElement(Cif_0_9 + "Results");
+			Results = _resultFactory.GetCIFResultWriter(modelData.VehicleData.VehicleCategory,
+				modelData.JobType, modelData.VehicleData.OffVehicleCharging, modelData.Exempted);
 			InputDataIntegrity = new XElement(Cif_0_9 + XMLNames.Report_InputDataSignature,
 				inputData.JobInputData.ConsolidateManufacturingStage.Signature == null
 					? XMLHelper.CreateDummySig(_di)
@@ -236,17 +240,32 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 				ManufacturerReportIntegrityPrimaryVehicle,
 				InputDataIntegrity,
 				new XElement(Cif_0_9 + XMLNames.Report_ManufacturerRecord_Signature, resultSignature),
-				Results,
+				GetResultsXML(),
 				XMLHelper.GetApplicationInfo(Cif_0_9)
 			};
 		}
+
+		#region Implementation of IXMLCustomerReportCompletedBus
+
+		public void WriteResult(IResultEntry genericResult, IResultEntry specificResult, IResult primaryResult)
+		{
+			_allSuccess &= genericResult.Status == VectoRun.Status.Success;
+			_allSuccess &= specificResult.Status == VectoRun.Status.Success;
+			_resultCount++;
+			//Results.Add(
+			//	genericResult.Status == VectoRun.Status.Success && specificResult.Status == VectoRun.Status.Success
+			//		? GetSuccessResultEntry(genericResult, specificResult, primaryResult)
+			//		: GetErrorResultEntry(genericResult, specificResult, primaryResult));
+		}
+
+		#endregion
 	}
 
 	public class Conventional_CompletedBusCIF : CustomerInformationFileCompletedBus
 	{
 		public override string OutputDataType => "Conventional_CompletedBusOutputType";
 
-		public Conventional_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory)
+		public Conventional_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory)
         {
         }
 
@@ -260,7 +279,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 	{
 		public override string OutputDataType => "HEV_CompletedBusOutputType";
 
-		public HEV_Px_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory)
+		public HEV_Px_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory)
 		{
 		}
 
@@ -274,7 +293,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 	{
         public override string OutputDataType => "HEV_CompletedBusOutputType";
 
-        public HEV_IHPC_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory)
+        public HEV_IHPC_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory)
         {
         }
 
@@ -288,7 +307,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 	{
 		public override string OutputDataType => "HEV_CompletedBusOutputType";
 
-		public HEV_S2_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory)
+		public HEV_S2_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory)
 		{
 		}
 
@@ -302,7 +321,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 	{
 		public override string OutputDataType => "HEV_CompletedBusOutputType";
 
-		public HEV_S3_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory)
+		public HEV_S3_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory)
 		{
 		}
 
@@ -316,7 +335,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 	{
 		public override string OutputDataType => "HEV_CompletedBusOutputType";
 
-		public HEV_S4_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory)
+		public HEV_S4_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory)
 		{
 		}
 
@@ -330,7 +349,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 	{
 		public override string OutputDataType => "HEV_CompletedBusOutputType";
 
-		public HEV_IEPC_S_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory)
+		public HEV_IEPC_S_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory)
 		{
 		}
 
@@ -344,7 +363,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 	{
 		public override string OutputDataType => "PEV_CompletedBusOutputType";
 
-		public PEV_E2_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory)
+		public PEV_E2_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory)
 		{
 		}
 
@@ -358,7 +377,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 	{
 		public override string OutputDataType => "PEV_CompletedBusOutputType";
 
-		public PEV_E3_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory)
+		public PEV_E3_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory)
 		{
 		}
 
@@ -372,7 +391,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 	{
 		public override string OutputDataType => "PEV_CompletedBusOutputType";
 
-		public PEV_E4_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory)
+		public PEV_E4_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory)
 		{
 		}
 
@@ -386,7 +405,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 	{
 		public override string OutputDataType => "PEV_CompletedBusOutputType";
 
-		public PEV_IEPC_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory)
+		public PEV_IEPC_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory)
 		{
 		}
 
@@ -399,7 +418,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 	public class Exempted_CompletedBusCIF : CustomerInformationFileCompletedBus
 	{
-		public Exempted_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory) { }
+		public Exempted_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory) { }
 
 		#region Overrides of AbstractCustomerReport
 
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/IResultWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/IResultWriter.cs
deleted file mode 100644
index 0c297fb6b6f59ed2aa12127e2d80f3ffca2e2f77..0000000000000000000000000000000000000000
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/IResultWriter.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9.ResultWriter
-{
-	public class IResultWriter
-	{
-		
-	}
-}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/IResultsWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/IResultsWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e36d9d7ef75a592c24c6b2e326f841fb7246128d
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/IResultsWriter.cs
@@ -0,0 +1,34 @@
+using System.Collections.Generic;
+using System.Xml.Linq;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+
+namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9.ResultWriter
+{
+	public interface IResultWriterFactory
+	{
+		IResultsWriter GetCIFResultWriter(VehicleCategory vehicleCategory, VectoSimulationJobType jobType, bool ovc,
+			bool exempted);
+	}
+
+	public interface IResultsWriter
+	{
+		XElement GenerateResults(List<IResultEntry> results);
+	}
+
+	public class ExemptedResultsWriter : IResultsWriter
+	{
+		protected XNamespace XmlNS => XNamespace.Get("urn:tugraz:ivt:VectoAPI:CustomerOutput:v0.9");
+
+		#region Implementation of IResultsWriter
+
+		public XElement GenerateResults(List<IResultEntry> results)
+		{
+			return new XElement(XmlNS + "Results",
+				new XElement(XmlNS + "Status", "success"),
+				new XElement(XmlNS + "ExemptedVehicle"));
+		}
+
+		#endregion
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/IXMLCustomerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/IXMLCustomerReport.cs
index b255e68761613a07cc1c385d3622cd73b582f427..48316e9377ccaa0c23102a20da4391280d001616 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/IXMLCustomerReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/IXMLCustomerReport.cs
@@ -1,5 +1,6 @@
 using System.Collections.Generic;
 using System.Xml.Linq;
+using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 
@@ -7,9 +8,15 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 {
 	public interface IXMLCustomerReport
 	{
-		void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes);
+		void Initialize(VectoRunData modelData);
 		XDocument Report { get; }
 		void WriteResult(IResultEntry resultValue);
 		void GenerateReport(XElement resultSignature);
 	}
+
+	public interface IXMLCustomerReportCompletedBus
+	{
+		void WriteResult(IResultEntry genericResult,
+			IResultEntry specificResult, IResult primaryResult);
+	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReport.cs
index 5f032fc674960a95e2b438411f60a082ace6ceb5..de2e6cb785c2eb53e7931a980a987cc474cd6669 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReport.cs
@@ -176,7 +176,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 		
 
-		public virtual void WriteResult(XMLDeclarationReport.ResultEntry resultEntry)
+		public virtual void WriteResult(IResultEntry resultEntry)
 		{
 			//foreach (var resultEntry in entry.ResultEntry) {
 			_allSuccess &= resultEntry.Status == VectoRun.Status.Success;
@@ -188,7 +188,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 			Results.Add(resultEntry.Status == VectoRun.Status.Success ? GetSuccessResult(resultEntry) : GetErrorResult(resultEntry));
 		}
 
-		private XElement GetErrorResult(XMLDeclarationReport.ResultEntry resultEntry)
+		private XElement GetErrorResult(IResultEntry resultEntry)
 		{
 			var content = new object[] { };
 			switch (resultEntry.Status) {
@@ -213,7 +213,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 				content);
 		}
 
-		private XElement GetSuccessResult(XMLDeclarationReport.ResultEntry result)
+		private XElement GetSuccessResult(IResultEntry result)
 		{
 			return new XElement(
 				tns + XMLNames.Report_Result_Result,
@@ -308,7 +308,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 		}
 
 		public XDocument Report { get; }
-		public void WriteResult(XMLDeclarationReport.ResultEntry resultValue)
+		public void WriteResult(IResultEntry resultValue)
 		{
 			// MQ 2021-06-14 TODO: fill with meat
 		}
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReportCompletedBus.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReportCompletedBus.cs
index b74e6140582b0526c0fb1cb17f762b6f1baabc50..fe1be7891185e278a56a36f465d2108cdc09ec27 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReportCompletedBus.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReportCompletedBus.cs
@@ -306,7 +306,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
             Report = h.AddHash();
         }
 
-        public override void WriteResult(XMLDeclarationReport.ResultEntry resultEntry)
+        public override void WriteResult(IResultEntry resultEntry)
 		{
 			throw new NotSupportedException();
 		}
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/AbstractXMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/AbstractXMLManufacturerReport.cs
index c2a9c329f76bae99a7d608cdd45fe0ff3260d3a3..9997935a93ebe228a8203105b2ed893a5af9677b 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/AbstractXMLManufacturerReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/AbstractXMLManufacturerReport.cs
@@ -108,14 +108,14 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport
 		}
 
 
-		public virtual void WriteResult(XMLDeclarationReport.ResultEntry resultEntry)
+		public virtual void WriteResult(IResultEntry resultEntry)
 		{
 			_allSuccess &= resultEntry.Status == VectoRun.Status.Success;
 			Results.Add(
 				resultEntry.Status == VectoRun.Status.Success ? GetSuccessResult(resultEntry) : GetErrorResult(resultEntry));
 		}
 
-		protected virtual XElement GetErrorResult( XMLDeclarationReport.ResultEntry resultEntry)
+		protected virtual XElement GetErrorResult(IResultEntry resultEntry)
 		{
 			var content = new object[] {};
 			switch (resultEntry.Status) {
@@ -149,7 +149,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport
 				content);
 		}
 
-		protected virtual XElement GetSuccessResult(XMLDeclarationReport.ResultEntry result)
+		protected virtual XElement GetSuccessResult(IResultEntry result)
 		{
 			return new XElement(
 				tns + XMLNames.Report_Result_Result,
@@ -167,7 +167,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport
 			);
 		}
 
-		private XElement GetVehiclePerformance(XMLDeclarationReport.ResultEntry result)
+		private XElement GetVehiclePerformance(IResultEntry result)
 		{
 			return new XElement(
 				tns + XMLNames.Report_ResultEntry_VehiclePerformance,
@@ -212,7 +212,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport
 			);
 		}
 
-		protected virtual XElement GetSimulationParameters(XMLDeclarationReport.ResultEntry result)
+		protected virtual XElement GetSimulationParameters(IResultEntry result)
 		{
 			return new XElement(
 				tns + XMLNames.Report_ResultEntry_SimulationParameters,
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/IXMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/IXMLManufacturerReport.cs
index f6507d5c7f1afaea454aabd98ae59ce12df881c9..31f77a85b8137692855dbe5997679e28af85f043 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/IXMLManufacturerReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/IXMLManufacturerReport.cs
@@ -9,7 +9,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport
 		//void InitializeVehicleData(IDeclarationInputDataProvider inputData);
 		void Initialize(VectoRunData modelData);
 		XDocument Report { get; }
-		void WriteResult(XMLDeclarationReport.ResultEntry resultValue);
+		void WriteResult(IResultEntry resultValue);
 		void GenerateReport();
 	}
 
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/AbstractManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/AbstractManufacturerReport.cs
index 9a6e487b858e57bad9681f28bcf60ede1ac53ed6..6e9db8bad102e144884ff5bc6843d83abfbecfd6 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/AbstractManufacturerReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/AbstractManufacturerReport.cs
@@ -9,7 +9,6 @@ using System.Xml.Linq;
 using System.Xml.XPath;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
-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.Utils;
@@ -52,9 +51,9 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.
 
 		#region Implementation of IXMLManufacturerReport
 
-		public abstract void InitializeVehicleData(IDeclarationInputDataProvider inputData);
+		protected abstract void InitializeVehicleData(IDeclarationInputDataProvider inputData);
 
-		public virtual void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes)
+		public virtual void Initialize(VectoRunData modelData)
 		{
 			InitializeVehicleData(modelData.InputData);
 			_ovc = modelData.VehicleData.OffVehicleCharging;
@@ -68,7 +67,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.
 
 		private List<XMLDeclarationReport.ResultEntry> results = new List<XMLDeclarationReport.ResultEntry>();
 
-		public void WriteResult(XMLDeclarationReport.ResultEntry resultValue)
+		public void WriteResult(IResultEntry resultValue)
 		{
 			
 
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportCompletedBus.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportCompletedBus.cs
index b0ec12765772cfa9ab80b2303abd4e0c917135b0..f9fcdad04e4b98b369be19adf97e8869a3a00e33 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportCompletedBus.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportCompletedBus.cs
@@ -195,7 +195,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport
 			);
 		}
 
-		protected override XElement GetSimulationParameters(XMLDeclarationReport.ResultEntry result)
+		protected override XElement GetSimulationParameters(IResultEntry result)
 		{
 			return new XElement(
 				tns + "SimulationParametersCompletedVehicle",
@@ -397,7 +397,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport
 		
 		#endregion
 
-		public override void WriteResult(XMLDeclarationReport.ResultEntry resultEntry)
+		public override void WriteResult(IResultEntry resultEntry)
 		{
 			throw new NotSupportedException();
 		}
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLPrimaryBusVehicleReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLPrimaryBusVehicleReport.cs
index 9222baa24b73e65197b03d23c2347a4fbf3867c0..5663b85f1a2389ab2f214d0c927e90d4641e523a 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLPrimaryBusVehicleReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLPrimaryBusVehicleReport.cs
@@ -594,7 +594,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF
 					new XElement(
 						tns + XMLNames.Report_Result_EnergyConsumption,
 						new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/km"),
-						(result.FuelConsumptionFinal[fuel.FuelType].EnergyDemand /
+						(result.FuelConsumptionFinal(fuel.FuelType).EnergyDemand /
 						result.Distance.ConvertToKiloMeter() / 1e6)
 						.Value().ToMinSignificantDigits(5, 5)));
 				retVal.Add(fcResult);
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
index 20604bce0570a557479f3f2b88122d0ba450031a..5062105983b6749f695e795b94c0569ed49dfc81 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
@@ -95,9 +95,14 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 			public Joule EnergyConsumptionTotal { get; private set; }
 
-			public Kilogram CO2Total { get; private set; }
+            public IFuelConsumptionCorrection FuelConsumptionFinal(FuelType fuelType)
+			{
+				return CorrectedFinalFuelConsumption[fuelType];
+			}
+
+            public Kilogram CO2Total { get; private set; }
 
-			public Dictionary<FuelType, IFuelConsumptionCorrection> FuelConsumptionFinal { get; private set; }
+			public Dictionary<FuelType, IFuelConsumptionCorrection> CorrectedFinalFuelConsumption { get; private set; }
 
 			public Meter Distance { get; private set; }
 
@@ -161,7 +166,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 				EngineSpeedDrivingMax = entriesDriving.Max(x => x.nEng);
 				Distance = data.Distance;
 
-				FuelConsumptionFinal = data.CorrectedModalData.FuelCorrection;
+				CorrectedFinalFuelConsumption = data.CorrectedModalData.FuelCorrection;
 				CO2Total = data.CorrectedModalData.CO2Total;
 				EnergyConsumptionTotal = data.CorrectedModalData.EnergyConsumptionTotal;
 
@@ -298,13 +303,13 @@ namespace TUGraz.VectoCore.OutputData.XML
 				});
 
 
-		public static IEnumerable<XElement> GetResults(ResultEntry result, XNamespace tns, bool fullOutput)
+		public static IEnumerable<XElement> GetResults(IResultEntry result, XNamespace tns, bool fullOutput)
 		{
 			//var fuel = result.FuelData;
 			var retVal = new List<XElement>();
 
 			foreach (var fuel in result.FuelData) {
-				var entry = result.FuelConsumptionFinal[fuel.FuelType];
+				var entry = result.FuelConsumptionFinal(fuel.FuelType);
 				var fcResult = new XElement(tns + XMLNames.Report_Results_Fuel, new XAttribute(XMLNames.Report_Results_Fuel_Type_Attr, fuel.FuelType.ToXMLFormat()));
 				fcResult.Add(
 					new XElement(
diff --git a/VectoCore/VectoCore/Utils/Ninject/VehicleTypeAndArchitectureStringHelper.cs b/VectoCore/VectoCore/Utils/Ninject/VehicleTypeAndArchitectureStringHelper.cs
index a690fd9ea99ef3c0b9c7c6b3ab11b2339ca8e0bd..916d79e65583bf09c6fd6a3100e4e1e559af71a9 100644
--- a/VectoCore/VectoCore/Utils/Ninject/VehicleTypeAndArchitectureStringHelper.cs
+++ b/VectoCore/VectoCore/Utils/Ninject/VehicleTypeAndArchitectureStringHelper.cs
@@ -127,56 +127,28 @@ namespace TUGraz.VectoCore.Utils.Ninject
 		#endregion
 		public struct VehicleClassification
 		{
-			private readonly VectoSimulationJobType _jobType;
-
-			private VectoSimulationJobType JobType
-			{
-				get
-				{
-					if (Exempted) {
-						return VectoSimulationJobType.ConventionalVehicle; //ignored for exempted vehicles
-					}
-					return _jobType;
-				}
-			}
+			private const string _singlebus = "SingleBus";
 
+			private readonly VectoSimulationJobType _jobType;
+			private readonly bool _exempted;
 			private readonly ArchitectureID _archId;
-
-			private ArchitectureID ArchId
-			{
-				get
-				{
-					if (Exempted) {
-						return ArchitectureID.UNKNOWN; //ignored for exempted vehicles
-                    }
-					return _archId;
-				}
-			}
-
 			private readonly string _vehicleType;
+			private readonly bool _iepc;
+			private readonly bool _ihpc;
+			private readonly bool _isSingleBus;
 
-			private string VehicleType => _vehicleType;
-
-			private readonly bool _exempted;
+			private VectoSimulationJobType JobType => Exempted ? VectoSimulationJobType.ConventionalVehicle : _jobType; //ignored for exempted vehicles
 
-			private bool Exempted
-			{
-				get
-				{
-					return _exempted;
-				}
-			}
+			private ArchitectureID ArchId => Exempted ? ArchitectureID.UNKNOWN : _archId;//ignored for exempted vehicles
+			
+			private string VehicleType => _vehicleType;
 
-			private readonly bool _iepc;
+			private bool Exempted => _exempted;
 
 			private bool Iepc => _iepc;
 
-			private readonly bool _ihpc;
-
 			private bool Ihpc => _ihpc;
 
-			private readonly bool _isSingleBus;
-			private const string _singlebus = "SingleBus";
 			private bool IsSingleBus => _isSingleBus;
 
 			public VehicleClassification(VectoSimulationJobType jobType, ArchitectureID archId, string vehicleType, bool exempted, bool iepc, bool ihpc, bool singleBus = false)
@@ -258,6 +230,85 @@ namespace TUGraz.VectoCore.Utils.Ninject
 					IsSingleBus ? "Single Bus" : "");
 			}
 
+			#endregion
+		}
+
+	}
+
+	public class VehicleTypeAndArchitectureStringHelperResults
+	{
+		public CombineArgumentsToNameInstanceProvider.CombineToName CreateName { get; } = arguments => {
+			if (arguments[0] is ResultsVehicleClassification classification) {
+				return GetName(classification);
+			} else {
+				throw new ArgumentException($"{nameof(arguments)}[0] must be of type {typeof(ResultsVehicleClassification)}");
+			}
+		};
+
+		private static string GetName(ResultsVehicleClassification classification)
+		{
+			return classification.GetHashCode().ToString();
+		}
+
+		public string GetName(string vehicleCategory, VectoSimulationJobType jobType, bool ovc = false,
+			bool exempted = false)
+		{
+			return GetName(new ResultsVehicleClassification(vehicleCategory, jobType, ovc, exempted));
+		}
+
+		public string GetName(string vehicleType, bool exempted)
+		{
+			return GetName(vehicleType, VectoSimulationJobType.ConventionalVehicle, exempted: exempted);
+		}
+
+		public struct ResultsVehicleClassification
+		{
+			private readonly string _vehicleCategory;
+			private readonly VectoSimulationJobType _jobType;
+			private readonly bool _ovc;
+			private readonly bool _exempted;
+
+			public ResultsVehicleClassification(string vehicleCategory, VectoSimulationJobType jobType, bool ovc, bool exempted)
+			{
+				_vehicleCategory = vehicleCategory;
+				_jobType = jobType;
+				_ovc = ovc;
+				_exempted = exempted;
+
+			}
+
+			public bool Exempted => _exempted;
+			public VectoSimulationJobType JobType => Exempted ? VectoSimulationJobType.ConventionalVehicle : _jobType;
+
+			public string VehicleCategory => _vehicleCategory;
+			public bool OVC => _ovc;
+
+			#region Overrides of ValueType
+
+			public override bool Equals(object obj)
+			{
+				return obj is ResultsVehicleClassification other && Equals(other);
+			}
+
+			public bool Equals(ResultsVehicleClassification other)
+			{
+				return VehicleCategory == other.VehicleCategory 
+					&& JobType == other.JobType
+					&& OVC == other.OVC
+					&& Exempted == other.Exempted;
+			}
+
+			public override int GetHashCode()
+			{
+				unchecked {
+					var hashCode = VehicleCategory != null ? VehicleCategory.GetHashCode() : 0;
+					hashCode = (hashCode * 397) ^ (int)JobType;
+					hashCode = (hashCode * 397) ^ OVC.GetHashCode();
+					hashCode = (hashCode * 397) ^ Exempted.GetHashCode();
+					return hashCode;
+				}
+			}
+
 			#endregion
 		}
 	}
diff --git a/VectoMockup/VectoMockup/Reports/MockupCustomerReport.cs b/VectoMockup/VectoMockup/Reports/MockupCustomerReport.cs
index f9829c3707d92fa5713e64b5ecd463a8fb22a56e..9b12db161fa94d4adecc01ec2e4bbc56c79ae162 100644
--- a/VectoMockup/VectoMockup/Reports/MockupCustomerReport.cs
+++ b/VectoMockup/VectoMockup/Reports/MockupCustomerReport.cs
@@ -3,6 +3,7 @@ using System.Xml.Linq;
 using System.Xml.XPath;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.XML;
 using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile;
 using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9;
@@ -48,7 +49,7 @@ namespace TUGraz.VectoMockup.Reports
             }
         }
 
-        public void WriteResult(XMLDeclarationReport.ResultEntry resultValue)
+        public void WriteResult(IResultEntry resultValue)
         {
             _originalCustomerReport.WriteResult(resultValue);
         }
diff --git a/VectoMockup/VectoMockup/Reports/MockupManufacturerReport.cs b/VectoMockup/VectoMockup/Reports/MockupManufacturerReport.cs
index 5e6c8019184f57d38932d0a0a887c65a4fbd1bff..5bd1b7db6f8263c6d09fdcd54cdcf4cd2fb8d383 100644
--- a/VectoMockup/VectoMockup/Reports/MockupManufacturerReport.cs
+++ b/VectoMockup/VectoMockup/Reports/MockupManufacturerReport.cs
@@ -5,6 +5,7 @@ using TUGraz.VectoCommon.BusAuxiliaries;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.XML;
 using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport;
 using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9;
@@ -29,7 +30,7 @@ namespace TUGraz.VectoMockup.Reports
 			Results = new XElement(Mrf + XMLNames.Report_Results);
 		}
 
-		public void WriteMockupResult(XMLDeclarationReport.ResultEntry resultValue)
+		public void WriteMockupResult(IResultEntry resultValue)
 		{
 
 			Results.Add(MockupResultReader.GetMRFMockupResult(_outputData, resultValue, Mrf + "Result", _modelData));