diff --git a/VectoCore/VectoCore/OutputData/IModalDataContainer.cs b/VectoCore/VectoCore/OutputData/IModalDataContainer.cs
index b8ce281cab63bd3b2eeb2a661e888550431e299c..c6ed4b3ab15b92f901d05fe15c2a0f3a37d6f32c 100644
--- a/VectoCore/VectoCore/OutputData/IModalDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/IModalDataContainer.cs
@@ -35,6 +35,7 @@ using System.Data;
 using System.Linq;
 using TUGraz.VectoCommon.BusAuxiliaries;
 using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
@@ -141,6 +142,58 @@ namespace TUGraz.VectoCore.OutputData
 		double BatteryStartSoC();
 		double REESSEndSoC();
 		WattSecond REESSLoss();
+
+		ICorrectedModalData CorrectedModalData { get; }
+	}
+
+	public interface IModalDataPostProcessor
+	{
+		ICorrectedModalData ApplyCorrection(IModalDataContainer modData, VectoRunData runData);
+	}
+
+	public interface ICorrectedModalData
+	{
+		WattSecond WorkESS { get; }
+		WattSecond WorkWHREl { get;  }
+		WattSecond WorkWHRElMech { get;  }
+		WattSecond WorkWHRMech { get;  }
+		WattSecond WorkWHR { get; }
+		WattSecond WorkBusAuxPSCorr { get; }
+		WattSecond WorkBusAuxESMech { get; }
+		WattSecond WorkBusAuxCorr { get; }
+		Joule AuxHeaterDemand { get; }
+
+		IFuelConsumptionCorrection FuelConsumptionCorrection(IFuelProperties fuel);
+
+		KilogramPerMeter KilogramCO2PerMeter { get; }
+		Dictionary<FuelType, IFuelConsumptionCorrection> FuelCorrection { get; }
+		Kilogram CO2Total { get; }
+		Joule EnergyConsumptionTotal { get; }
+	}
+
+	public interface IFuelConsumptionCorrection
+	{
+		IFuelProperties Fuel { get; }
+		KilogramPerWattSecond EngineLineCorrectionFactor { get; }
+		KilogramPerWattSecond VehicleLine { get; }
+		KilogramPerSecond FC_ESS_CORR_H { get; }
+		KilogramPerSecond FC_BusAux_PS_CORR_H { get; }
+		KilogramPerSecond FC_BusAux_ES_CORR_H { get; }
+		KilogramPerSecond FC_WHR_CORR_H { get; }
+		KilogramPerSecond FC_AUXHTR_H { get; }
+		KilogramPerSecond FC_AUXHTR_H_CORR { get; }
+		KilogramPerSecond FC_FINAL_H { get; }
+		KilogramPerMeter FC_WHR_CORR_KM { get; }
+		KilogramPerMeter FC_BusAux_PS_CORR_KM { get; }
+		KilogramPerMeter FC_BusAux_ES_CORR_KM { get; }
+		KilogramPerMeter FC_AUXHTR_KM { get; }
+		KilogramPerMeter FC_AUXHTR_KM_CORR { get; }
+		KilogramPerMeter FC_ESS_CORR_KM { get; }
+		KilogramPerMeter FC_FINAL_KM { get; }
+		VolumePerMeter FuelVolumePerMeter { get; }
+
+		Kilogram TotalFuelConsumptionCorrected { get; }
+		Joule EnergyDemand { get; }
 	}
 
 	public static class ModalDataContainerExtensions
diff --git a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs
index 5d5269c774add1c5e080cdc8e8fce3b9e72e966f..a7b1b69a44191e7e3ecf5db37915e3cbaf2199fd 100644
--- a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs
@@ -108,8 +108,10 @@ namespace TUGraz.VectoCore.OutputData
 		private Dictionary<PowertrainPosition, WattSecond> _eEmRecuperateMot = new Dictionary<PowertrainPosition, WattSecond>();
 
 		protected VectoRunData _runData;
-		
-       
+		private ICorrectedModalData _correctedModalData;
+		public IModalDataPostProcessor PostProcessingCorrection { set; protected get; }
+
+
 		public ModalDataContainer(VectoRunData runData, IModalDataWriter writer, Action<ModalDataContainer> addReportResult, params IModalDataFilter[] filter)
 		{
 			_runData = runData;
@@ -126,6 +128,8 @@ namespace TUGraz.VectoCore.OutputData
 				return;
 			}
 
+			PostProcessingCorrection = new ModalDataPostprocessingCorrection();
+
 			var multipleEngineModes = runData.EngineData?.MultipleEngineFuelModes ?? false;
             var fuels = runData.EngineData?.Fuels ?? new List<CombustionEngineFuelData>();
 			foreach (var fuel in fuels) {
@@ -506,6 +510,12 @@ namespace TUGraz.VectoCore.OutputData
 			return TimeIntegral<WattSecond>(ModalResultField.P_reess_loss);
 		}
 
+		public ICorrectedModalData CorrectedModalData
+		{
+			get { return _correctedModalData ?? (_correctedModalData = PostProcessingCorrection.ApplyCorrection(this, _runData)); }
+		}
+
+
 		public void CalculateAggregateValues()
 		{
 			var duration = Duration;
@@ -585,6 +595,7 @@ namespace TUGraz.VectoCore.OutputData
 			_duration = null;
 			_distance = null;
 			_timeIntegrals.Clear();
+			_correctedModalData = null;
 		}
 
 		protected virtual Second CalcDuration()
diff --git a/VectoCore/VectoCore/OutputData/ModalDataPostprocessingCorrection.cs b/VectoCore/VectoCore/OutputData/ModalDataPostprocessingCorrection.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1c88aa1b1870908c752a53fa43d5908caf13962a
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/ModalDataPostprocessingCorrection.cs
@@ -0,0 +1,215 @@
+using System.Collections.Generic;
+using System.Linq;
+using TUGraz.VectoCommon.BusAuxiliaries;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+
+namespace TUGraz.VectoCore.OutputData
+{
+	public class ModalDataPostprocessingCorrection : IModalDataPostProcessor
+	{
+		
+		#region Implementation of IModalDataPostProcessor
+
+		public ICorrectedModalData ApplyCorrection(IModalDataContainer modData, VectoRunData runData)
+		{
+			var r = new CorrectedModalData();
+			var duration = modData.Duration;
+			var distance = modData.Distance;
+
+			r.WorkESS = modData.WorkAuxiliariesDuringEngineStop() + modData.WorkEngineStart();
+			
+			r.WorkWHREl = modData.TimeIntegral<WattSecond>(ModalResultField.P_WHR_el_corr);
+			r.WorkWHRElMech = -r.WorkWHREl / DeclarationData.AlternaterEfficiency;
+			r.WorkWHRMech = -modData.TimeIntegral<WattSecond>(ModalResultField.P_WHR_mech_corr);
+			//r.WorkWHR = r.WorkWHRElMech + r.WorkWHRMech;
+
+			if (runData.BusAuxiliaries != null) {
+				var workBusAuxPSCompOff = modData.EnergyPneumaticCompressorPowerOff();
+				var workBusAuxPSCompOn = modData.EnergyPneumaticCompressorAlwaysOn();
+				var airBusAuxPSON = modData.AirGeneratedAlwaysOn();
+				var deltaAir = modData.AirConsumed() - modData.AirGenerated();
+
+				var kAir = (workBusAuxPSCompOn - workBusAuxPSCompOff) / (airBusAuxPSON - 0.SI<NormLiter>());
+				r.WorkBusAuxPSCorr = (kAir * deltaAir).Cast<WattSecond>();
+
+				var workBusAuxES = modData.EnergyBusAuxESConsumed() - modData.EnergyBusAuxESGenerated();
+				r.WorkBusAuxESMech = workBusAuxES /
+									runData.BusAuxiliaries.ElectricalUserInputsConfig.AlternatorMap.GetEfficiency(0.RPMtoRad(), 0.SI<Ampere>()) /
+									runData.BusAuxiliaries.ElectricalUserInputsConfig.AlternatorGearEfficiency;
+
+			} else {
+				r.WorkBusAuxPSCorr = 0.SI<WattSecond>();
+				r.WorkBusAuxESMech = 0.SI<WattSecond>();
+			}
+
+			var engineWasteheatSum = modData.FuelData.Aggregate(
+				0.SI<Joule>(),
+				(current, fuel) => current + modData.TotalFuelConsumption(ModalResultField.FCFinal, fuel) *
+					fuel.LowerHeatingValueVecto);
+
+			r.AuxHeaterDemand = modData.AuxHeaterDemandCalc == null
+				? 0.SI<Joule>()
+				: modData.AuxHeaterDemandCalc(duration, engineWasteheatSum);
+
+			var kilogramCO2PerMeter = 0.SI<KilogramPerMeter>();
+
+			var firstFuel = true;
+			foreach (var fuel in modData.FuelData) {
+				var f = new FuelConsumptionCorrection();
+				f.Fuel = fuel;
+				f.Distance = distance != null && distance.IsGreater(0) ? distance : null;
+				f.Duration = duration != null && duration.IsGreater(0) ? duration : null;
+
+				f.EngineLineCorrectionFactor = modData.EngineLineCorrectionFactor(fuel);
+				f.VehicleLine = modData.VehicleLineSlope(fuel);
+
+				f.FcModSum = modData.TotalFuelConsumption(ModalResultField.FCFinal, fuel);
+
+				f.FcEssCorr = f.FcModSum + f.EngineLineCorrectionFactor * r.WorkESS;
+				f.FcBusAuxPsCorr = f.FcEssCorr + f.EngineLineCorrectionFactor * r.WorkBusAuxPSCorr;
+				f.FcBusAuxEsCorr = f.FcBusAuxPsCorr + f.EngineLineCorrectionFactor * r.WorkBusAuxESMech;
+				f.FcWHRCorr = f.FcBusAuxEsCorr + f.EngineLineCorrectionFactor * r.WorkWHR;
+				f.FcAuxHtr = 0.SI<Kilogram>();
+				if (firstFuel) {
+					firstFuel = false;
+					f.FcAuxHtr = r.AuxHeaterDemand / fuel.LowerHeatingValueVecto;
+				}
+				f.FcAuxHtrCorr = f.FcWHRCorr + f.FcAuxHtr;
+				f.FcFinal = f.FcAuxHtrCorr;
+
+				kilogramCO2PerMeter += distance == null || distance.IsEqual(0)
+					? 0.SI<KilogramPerMeter>()
+					: f.FcFinal * fuel.CO2PerFuelWeight / distance;
+				//--
+
+				r.FuelCorrection[fuel.FuelType] = f;
+			}
+
+			r.KilogramCO2PerMeter = kilogramCO2PerMeter;
+			return r;
+		}
+
+		#endregion
+	}
+
+
+	public class CorrectedModalData : ICorrectedModalData
+	{
+		public Dictionary<FuelType, IFuelConsumptionCorrection> FuelCorrection { get; }
+		#region Implementation of ICorrectedModalData
+
+		public CorrectedModalData()
+		{
+			FuelCorrection = new Dictionary<FuelType, IFuelConsumptionCorrection>();
+		}
+
+		public WattSecond WorkESS { get; set; }
+		public WattSecond WorkWHREl { get; set; }
+		public WattSecond WorkWHRElMech { get; set; }
+		public WattSecond WorkWHRMech { get; set; }
+		public WattSecond WorkWHR
+		{
+			get { return WorkWHRElMech + WorkWHRMech; }
+		}
+		public WattSecond WorkBusAuxPSCorr { get; set; }
+		public WattSecond WorkBusAuxESMech { get; set; }
+		public WattSecond WorkBusAuxCorr
+		{
+			get { return WorkBusAuxPSCorr + WorkBusAuxESMech; }
+		}
+
+		public Joule AuxHeaterDemand { get; set; }
+		public KilogramPerMeter KilogramCO2PerMeter { get; set; }
+
+		public IFuelConsumptionCorrection FuelConsumptionCorrection(IFuelProperties fuel)
+		{
+			if (!FuelCorrection.ContainsKey(fuel.FuelType)) {
+				throw new VectoException("Invalid fuel {0}", fuel);
+			}
+
+			return FuelCorrection[fuel.FuelType];
+		}
+
+		public Kilogram CO2Total
+		{
+			get
+			{
+				return FuelCorrection.Sum(x => x.Value.TotalFuelConsumptionCorrected * x.Value.Fuel.CO2PerFuelWeight);
+			}
+		}
+
+		public Joule EnergyConsumptionTotal
+		{
+			get
+			{
+				return FuelCorrection.Sum(x =>
+					x.Value.TotalFuelConsumptionCorrected * x.Value.Fuel.LowerHeatingValueVecto);
+			}
+		}
+
+		#endregion
+	}
+
+	public class FuelConsumptionCorrection : IFuelConsumptionCorrection
+	{
+		
+		public IFuelProperties Fuel { get; set; }
+		public Meter Distance { get; set; }
+		public Second Duration { get; set; }
+
+		public Kilogram FcModSum { get; set; }
+		public Kilogram FcEssCorr { get; set; }
+		public Kilogram FcBusAuxPsCorr { get; set; }
+		public Kilogram FcBusAuxEsCorr { get; set; }
+		public Kilogram FcWHRCorr { get; set; }
+		public Kilogram FcAuxHtrCorr { get; set; }
+		public Kilogram FcAuxHtr { get; set; }
+		public Kilogram FcFinal { get; set; }
+
+		#region Implementation of IFuelConsumptionCorrection
+
+		public KilogramPerWattSecond EngineLineCorrectionFactor { get; set; }
+		public KilogramPerWattSecond VehicleLine { get; set; }
+		public KilogramPerSecond FC_ESS_CORR_H { get { return Duration != null ? (FcEssCorr / Duration) : null; }  }
+		public KilogramPerSecond FC_BusAux_PS_CORR_H { get { return Duration != null ? (FcBusAuxPsCorr / Duration) : null; }  }
+		public KilogramPerSecond FC_BusAux_ES_CORR_H { get { return Duration != null ? (FcBusAuxEsCorr / Duration) : null; }  }
+		public KilogramPerSecond FC_WHR_CORR_H { get { return Duration != null ? (FcWHRCorr / Duration) : null; }  }
+		public KilogramPerSecond FC_AUXHTR_H { get { return Duration != null ? (FcAuxHtr / Duration) : null; }  }
+		public KilogramPerSecond FC_AUXHTR_H_CORR { get { return Duration != null ? (FcAuxHtrCorr / Duration) : null; }  }
+		public KilogramPerSecond FC_FINAL_H { get { return Duration != null ? FcFinal / Duration : null; }  }
+
+		public KilogramPerMeter FC_ESS_CORR_KM { get { return Distance != null ? (FcEssCorr / Distance) : null; } }
+		public KilogramPerMeter FC_WHR_CORR_KM { get { return Distance != null ? (FcWHRCorr / Distance) : null; } }
+		public KilogramPerMeter FC_BusAux_PS_CORR_KM { get { return Distance != null ? (FcBusAuxPsCorr / Distance) : null; } }
+		public KilogramPerMeter FC_BusAux_ES_CORR_KM { get { return Distance != null ? (FcBusAuxEsCorr / Distance) : null; } }
+		public KilogramPerMeter FC_AUXHTR_KM { get { return Distance != null ? (FcAuxHtr / Distance) : null; } }
+		public KilogramPerMeter FC_AUXHTR_KM_CORR { get { return Distance != null ? (FcAuxHtrCorr / Distance) : null; } }
+		public KilogramPerMeter FC_FINAL_KM { get { return Distance != null ? FcFinal / Distance : null; } }
+
+		public VolumePerMeter FuelVolumePerMeter
+		{
+			get
+			{
+				return Fuel.FuelDensity != null && Distance != null
+					? (FcFinal / Distance / Fuel.FuelDensity).Cast<VolumePerMeter>()
+					: null;
+			}
+		}
+
+		public Kilogram TotalFuelConsumptionCorrected
+		{
+			get { return FcFinal; }
+		}
+
+		public Joule EnergyDemand
+		{
+			get { return FcFinal * Fuel.LowerHeatingValueVecto; }
+		}
+		#endregion
+	}
+
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
index f8e8f1dab4b23db70009be1cfd935a470949ef6a..08e55b993c47d20773ff0c5d64fe5e774382c2e6 100644
--- a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
@@ -174,7 +174,7 @@ namespace TUGraz.VectoCore.OutputData
 					Fields.CARGO_VOLUME, Fields.TIME, Fields.DISTANCE, Fields.SPEED, Fields.ALTITUDE_DELTA,
 				}.Select(x => new DataColumn(x, typeof(ConvertedSI))).ToArray());
 
-			
+
 			Table.Columns.AddRange(
 				new[] {
 					Fields.CO2_KM, Fields.CO2_TKM, Fields.CO2_M3KM, Fields.CO2_PKM, Fields.P_WHEEL, Fields.P_WHEEL_POS, Fields.P_FCMAP, Fields.P_FCMAP_POS,
@@ -256,7 +256,7 @@ namespace TUGraz.VectoCore.OutputData
 		{
 			foreach (var entry in modDataFuelData) {
 				foreach (var column in fcColumns.Reverse()) {
-					var colName = string.Format(column, modDataFuelData.Count <= 1 && !engineDataMultipleEngineFuelModes ? "" : "_" +entry.FuelType.GetLabel());
+					var colName = string.Format(column, modDataFuelData.Count <= 1 && !engineDataMultipleEngineFuelModes ? "" : "_" + entry.FuelType.GetLabel());
 					if (!Table.Columns.Contains(colName)) {
 						var col = new DataColumn(colName, typeof(ConvertedSI));
 						Table.Columns.Add(col);
@@ -374,67 +374,24 @@ namespace TUGraz.VectoCore.OutputData
 			WriteGearshiftStats(modData, row, gearCount);
 		}
 
-		
+
 
 		private void WriteFuelconsumptionEntries(
-			IModalDataContainer modData, DataRow row, Kilogram vehicleLoading, 
+			IModalDataContainer modData, DataRow row, Kilogram vehicleLoading,
 			CubicMeter cargoVolume, double? passengers, VectoRunData runData)
 		{
 			var multipleEngineModes = runData.EngineData.MultipleEngineFuelModes;
 			var vtpCycle = runData.Cycle.CycleType == CycleType.VTP;
 
-			var workESS = modData.WorkAuxiliariesDuringEngineStop() +
-						modData.WorkEngineStart();
-
-			var workWHREl = modData.TimeIntegral<WattSecond>(ModalResultField.P_WHR_el_corr);
-			var workWhrElMech = - workWHREl / DeclarationData.AlternaterEfficiency;
-
-			var workWHRMech = -modData.TimeIntegral<WattSecond>(ModalResultField.P_WHR_mech_corr);
-
-			var workWhr = workWhrElMech + workWHRMech;
-
-			row[Fields.E_WHR_EL] = workWHREl.ConvertToKiloWattHour();
-			row[Fields.E_WHR_MECH] = workWHRMech.ConvertToKiloWattHour();
-
-			var workBusAuxPSCorr = 0.SI<WattSecond>();
-			var workBusAuxESMech = 0.SI<WattSecond>();
-			if (runData.BusAuxiliaries != null) {
-				var workBusAuxPSCompOff = modData.EnergyPneumaticCompressorPowerOff();
-				var workBusAuxPSCompOn = modData.EnergyPneumaticCompressorAlwaysOn();
-				var airBusAuxPSON = modData.AirGeneratedAlwaysOn();
-				var deltaAir = modData.AirConsumed() - modData.AirGenerated();
-
-				var kAir = (workBusAuxPSCompOn - workBusAuxPSCompOff) / (airBusAuxPSON - 0.SI<NormLiter>());
-				workBusAuxPSCorr = (kAir * deltaAir).Cast<WattSecond>();
-
-				var workBusAuxES = modData.EnergyBusAuxESConsumed() - modData.EnergyBusAuxESGenerated();
-				workBusAuxESMech = workBusAuxES  /
-										runData.BusAuxiliaries.ElectricalUserInputsConfig.AlternatorMap.GetEfficiency(0.RPMtoRad(), 0.SI<Ampere>()) /
-										runData.BusAuxiliaries.ElectricalUserInputsConfig.AlternatorGearEfficiency;
-
-
-			}
-			row[Fields.E_BusAux_PS_corr] = workBusAuxPSCorr.ConvertToKiloWattHour();
-			row[Fields.E_BusAux_ES_mech_corr] = workBusAuxESMech.ConvertToKiloWattHour();
-
-			var distance = modData.Distance;
-			var duration = modData.Duration;
-
-			var kilogramCO2PerMeter = 0.SI<KilogramPerMeter>();
-
+		   
+			row[Fields.E_WHR_EL] = modData.CorrectedModalData.WorkWHREl.ConvertToKiloWattHour();
+			row[Fields.E_WHR_MECH] = modData.CorrectedModalData.WorkWHRMech.ConvertToKiloWattHour();
 
-			var engineWasteheatSum = modData.FuelData.Aggregate(
-				0.SI<Joule>(),
-				(current, fuel) => current + modData.TotalFuelConsumption(ModalResultField.FCFinal, fuel) *
-									fuel.LowerHeatingValueVecto);
+			row[Fields.E_BusAux_PS_corr] = modData.CorrectedModalData.WorkBusAuxPSCorr.ConvertToKiloWattHour();
+			row[Fields.E_BusAux_ES_mech_corr] = modData.CorrectedModalData.WorkBusAuxESMech.ConvertToKiloWattHour();
 
-			var auxHeaterDemand = modData.AuxHeaterDemandCalc == null
-				? 0.SI<Joule>()
-				: modData.AuxHeaterDemandCalc(duration, engineWasteheatSum);
+			row[Fields.E_BusAux_AuxHeater] = modData.CorrectedModalData.AuxHeaterDemand.Cast<WattSecond>().ConvertToKiloWattHour();
 
-			row[Fields.E_BusAux_AuxHeater] = auxHeaterDemand.Cast<WattSecond>().ConvertToKiloWattHour();
-
-			var firstFuel = true;
 			foreach (var fuel in modData.FuelData) {
 				var suffix = modData.FuelData.Count <= 1 && !multipleEngineModes ? "" : "_" + fuel.FuelType.GetLabel();
 
@@ -459,76 +416,54 @@ namespace TUGraz.VectoCore.OutputData
 				row[FcCol(Fields.FCESS_KM, suffix)] = modData.FuelConsumptionPerMeter(ModalResultField.FCICEStopStart, fuel)
 													?.ConvertToGrammPerKiloMeter();
 
-				var fcModSum = modData.TotalFuelConsumption(ModalResultField.FCFinal, fuel);
+				var fuelConsumption = modData.CorrectedModalData.FuelConsumptionCorrection(fuel);
 
-				var correction = modData.EngineLineCorrectionFactor(fuel);
-				
-				row[FcCol(Fields.K_ENGLINE, suffix)] = correction.ConvertToGramPerKiloWattHour();
+				row[FcCol(Fields.K_ENGLINE, suffix)] = fuelConsumption.EngineLineCorrectionFactor.ConvertToGramPerKiloWattHour();
+				row[FcCol(Fields.K_VEHLINE, suffix)] = fuelConsumption.VehicleLine?.ConvertToGramPerKiloWattHour();
 
 				var vehLine = modData.VehicleLineSlope(fuel);
 				if (vehLine != null) {
 					row[FcCol(Fields.K_VEHLINE, suffix)] = vehLine.ConvertToGramPerKiloWattHour();
 				}
 
-				var fcEssCorr = fcModSum + correction * workESS;
-				row[FcCol(Fields.FCESS_H_CORR, suffix)] = duration != null ? (fcEssCorr / duration).ConvertToGrammPerHour() : null;
+				row[FcCol(Fields.FCESS_H_CORR, suffix)] = fuelConsumption.FC_ESS_CORR_H?.ConvertToGrammPerHour();
+				row[FcCol(Fields.FC_BusAux_PS_CORR_H, suffix)] = fuelConsumption.FC_BusAux_PS_CORR_H?.ConvertToGrammPerHour();
+				row[FcCol(Fields.FC_BusAux_ES_CORR_H, suffix)] = fuelConsumption.FC_BusAux_ES_CORR_H;
+				row[FcCol(Fields.FCWHR_H_CORR, suffix)] = fuelConsumption.FC_WHR_CORR_H;
+				row[FcCol(Fields.FC_AUXHTR_H, suffix)] = fuelConsumption.FC_AUXHTR_H?.ConvertToGrammPerHour();
+				row[FcCol(Fields.FC_AUXHTR_H_CORR, suffix)] = fuelConsumption.FC_AUXHTR_H_CORR?.ConvertToGrammPerHour();
 
-				var fcBusAuxPSCorr = fcEssCorr + correction * workBusAuxPSCorr;
-				row[FcCol(Fields.FC_BusAux_PS_CORR_H, suffix)] =
-					duration != null ? (fcBusAuxPSCorr / duration).ConvertToGrammPerHour() : null;
 
-				var fcBusAuxESCorr = fcBusAuxPSCorr + correction * workBusAuxESMech;
-				row[FcCol(Fields.FC_BusAux_ES_CORR_H, suffix)] =
-					duration != null ? (fcBusAuxESCorr / duration).ConvertToGrammPerHour() : null;
+				row[FcCol(Fields.FCFINAL_H, suffix)] = fuelConsumption.FC_FINAL_H?.ConvertToGrammPerHour();
 
-				var fcWHRCorr = fcBusAuxESCorr + correction * workWhr;
-				row[FcCol(Fields.FCWHR_H_CORR, suffix)] = duration != null ? (fcWHRCorr / duration).ConvertToGrammPerHour() : null;
+				row[FcCol(Fields.FCWHR_KM_CORR, suffix)] = fuelConsumption.FC_WHR_CORR_KM?.ConvertToGrammPerKiloMeter();
+				row[FcCol(Fields.FC_BusAux_PS_CORR_KM, suffix)] = fuelConsumption.FC_BusAux_PS_CORR_KM?.ConvertToGrammPerKiloMeter();
+				row[FcCol(Fields.FC_BusAux_ES_CORR_KM, suffix)] = fuelConsumption.FC_BusAux_ES_CORR_KM?.ConvertToGrammPerKiloMeter();
+				row[FcCol(Fields.FC_AUXHTR_KM, suffix)] = fuelConsumption.FC_AUXHTR_KM?.ConvertToGrammPerKiloMeter();
+				row[FcCol(Fields.FC_AUXHTR_KM_CORR, suffix)] = fuelConsumption.FC_AUXHTR_KM_CORR?.ConvertToGrammPerKiloMeter();
 
-				var fcAuxHtr = 0.SI<Kilogram>();
-				if (firstFuel) {
-					firstFuel = false;
-					fcAuxHtr = auxHeaterDemand / fuel.LowerHeatingValueVecto;
-				}
-				var fcAuxHtrCorr = fcWHRCorr + fcAuxHtr;
-
-				var fcFinal = fcAuxHtrCorr;
-
-				row[FcCol(Fields.FC_AUXHTR_H, suffix)] = (fcAuxHtr / duration).ConvertToGrammPerHour();
-				row[FcCol(Fields.FC_AUXHTR_H_CORR, suffix)] = (fcAuxHtrCorr / duration).ConvertToGrammPerHour();
-
-				row[FcCol(Fields.FCFINAL_H, suffix)] = (fcFinal / duration).ConvertToGrammPerHour();
-
-				if (distance != null && distance.IsGreater(0)) {
-					row[FcCol(Fields.FCWHR_KM_CORR, suffix)] = (fcWHRCorr / distance).ConvertToGrammPerKiloMeter();
-					row[FcCol(Fields.FC_BusAux_PS_CORR_KM, suffix)] = (fcBusAuxPSCorr / distance).ConvertToGrammPerKiloMeter();
-					row[FcCol(Fields.FC_BusAux_ES_CORR_KM, suffix)] = (fcBusAuxESCorr / distance).ConvertToGrammPerKiloMeter();
-					row[FcCol(Fields.FC_AUXHTR_KM, suffix)] = (fcAuxHtr / distance).ConvertToGrammPerKiloMeter();
-					row[FcCol(Fields.FC_AUXHTR_KM_CORR, suffix)] = (fcAuxHtrCorr / distance).ConvertToGrammPerKiloMeter();
-
-					row[FcCol(Fields.FCESS_KM_CORR, suffix)] = (fcEssCorr / distance).ConvertToGrammPerKiloMeter();
-					row[FcCol(Fields.FCFINAL_KM, suffix)] = (fcFinal / distance).ConvertToGrammPerKiloMeter();
-
-					if (fuel.FuelDensity != null) {
-						var fcVolumePerMeter = (fcFinal / distance / fuel.FuelDensity).Cast<VolumePerMeter>();
-
-						row[FcCol(Fields.FCFINAL_LITERPER100KM, suffix)] = fcVolumePerMeter.ConvertToLiterPer100Kilometer();
-						if (vehicleLoading != null && !vehicleLoading.IsEqual(0) && fcFinal != null) {
-							row[FcCol(Fields.FCFINAL_LITERPER100TKM, suffix)] =
-								(fcVolumePerMeter / vehicleLoading).ConvertToLiterPer100TonKiloMeter();
-						}
-						if (cargoVolume > 0 && fcFinal != null) {
-							row[FcCol(Fields.FCFINAL_LiterPer100M3KM, suffix)] =
-								(fcVolumePerMeter / cargoVolume).ConvertToLiterPerCubicMeter100KiloMeter();
-						}
-
-						if (passengers != null) {
-							// subtract driver!
-							row[FcCol(Fields.FCFINAL_LiterPer100PassengerKM, suffix)] =
-								(fcVolumePerMeter / passengers.Value).ConvertToLiterPer100Kilometer();
-						}
+				row[FcCol(Fields.FCESS_KM_CORR, suffix)] = fuelConsumption.FC_ESS_CORR_KM?.ConvertToGrammPerKiloMeter();
+				row[FcCol(Fields.FCFINAL_KM, suffix)] = fuelConsumption.FC_FINAL_KM?.ConvertToGrammPerKiloMeter();
+
+				if (fuel.FuelDensity != null) {
+					
+					var fcVolumePerMeter = fuelConsumption.FuelVolumePerMeter;
+					row[FcCol(Fields.FCFINAL_LITERPER100KM, suffix)] = fcVolumePerMeter.ConvertToLiterPer100Kilometer();
+					
+					if (vehicleLoading != null && !vehicleLoading.IsEqual(0)) {
+						row[FcCol(Fields.FCFINAL_LITERPER100TKM, suffix)] =
+							(fcVolumePerMeter / vehicleLoading).ConvertToLiterPer100TonKiloMeter();
+					}
+					if (cargoVolume > 0) {
+						row[FcCol(Fields.FCFINAL_LiterPer100M3KM, suffix)] =
+							(fcVolumePerMeter / cargoVolume).ConvertToLiterPerCubicMeter100KiloMeter();
 					}
 
-					kilogramCO2PerMeter += fcFinal * fuel.CO2PerFuelWeight / distance;
+					if (passengers != null) {
+						// subtract driver!
+						row[FcCol(Fields.FCFINAL_LiterPer100PassengerKM, suffix)] =
+							(fcVolumePerMeter / passengers.Value).ConvertToLiterPer100Kilometer();
+					}
 				}
 
 				if (vtpCycle) {
@@ -537,17 +472,17 @@ namespace TUGraz.VectoCore.OutputData
 				}
 			}
 
-			
 
-			row[Fields.CO2_KM] = kilogramCO2PerMeter.ConvertToGrammPerKiloMeter();
+
+			row[Fields.CO2_KM] = modData.CorrectedModalData.KilogramCO2PerMeter.ConvertToGrammPerKiloMeter();
 			if (vehicleLoading != null && !vehicleLoading.IsEqual(0)) {
-				row[Fields.CO2_TKM] = (kilogramCO2PerMeter / vehicleLoading).ConvertToGrammPerTonKilometer();
+				row[Fields.CO2_TKM] = (modData.CorrectedModalData.KilogramCO2PerMeter / vehicleLoading).ConvertToGrammPerTonKilometer();
 			}
 			if (cargoVolume > 0) {
-				row[Fields.CO2_M3KM] = (kilogramCO2PerMeter / cargoVolume).ConvertToGrammPerCubicMeterKiloMeter();
+				row[Fields.CO2_M3KM] = (modData.CorrectedModalData.KilogramCO2PerMeter / cargoVolume).ConvertToGrammPerCubicMeterKiloMeter();
 			}
 			if (passengers != null) {
-				row[Fields.CO2_PKM] = (kilogramCO2PerMeter / passengers.Value).ConvertToGrammPerKiloMeter();
+				row[Fields.CO2_PKM] = (modData.CorrectedModalData.KilogramCO2PerMeter / passengers.Value).ConvertToGrammPerKiloMeter();
 			}
 		}
 
@@ -726,7 +661,7 @@ namespace TUGraz.VectoCore.OutputData
 				var emColumns = new List<Tuple<string, ConvertedSI>>() {
 					Tuple.Create(Fields.EM_AVG_SPEED_FORMAT, modData.ElectricMotorAverageSpeed(em.Item1).ConvertToRoundsPerMinute()),
 
-					Tuple.Create(Fields.E_EM_Mot_DRIVE_FORMAT, modData.TotalElectricMotorMotWorkDrive(em.Item1).ConvertToKiloWattHour()), 
+					Tuple.Create(Fields.E_EM_Mot_DRIVE_FORMAT, modData.TotalElectricMotorMotWorkDrive(em.Item1).ConvertToKiloWattHour()),
 					Tuple.Create(Fields.E_EM_Mot_GENERATE_FORMAT, modData.TotalElectricMotorMotWorkRecuperate(em.Item1).ConvertToKiloWattHour()),
 
 					Tuple.Create(Fields.ETA_EM_Mot_DRIVE_FORMAT, new ConvertedSI(modData.ElectricMotorMotEfficiencyDrive(em.Item1), "")),
@@ -735,10 +670,10 @@ namespace TUGraz.VectoCore.OutputData
 
 					Tuple.Create(Fields.E_EM_DRIVE_FORMAT, modData.TotalElectricMotorWorkDrive(em.Item1).ConvertToKiloWattHour()),
 					Tuple.Create(Fields.E_EM_GENERATE_FORMAT, modData.TotalElectricMotorWorkRecuperate(em.Item1).ConvertToKiloWattHour()),
-					
+
 					Tuple.Create(Fields.ETA_EM_DRIVE_FORMAT, new ConvertedSI(modData.ElectricMotorEfficiencyDrive(em.Item1), "")),
 					Tuple.Create(Fields.ETA_EM_GEN_FORMAT, new ConvertedSI(modData.ElectricMotorEfficiencyGenerate(em.Item1), "")),
-					
+
 					Tuple.Create(Fields.E_EM_OFF_Loss_Format, modData.ElectricMotorOffLosses(em.Item1).ConvertToKiloWattHour()),
 					Tuple.Create(Fields.E_EM_LOSS_TRANSM_FORMAT, modData.ElectricMotorTransmissionLosses(em.Item1).ConvertToKiloWattHour()),
 					Tuple.Create(Fields.E_EM_Mot_LOSS_FORMAT, modData.ElectricMotorMotLosses(em.Item1).ConvertToKiloWattHour()),
@@ -786,7 +721,7 @@ namespace TUGraz.VectoCore.OutputData
 			}
 
 			if (runData.BatteryData != null) {
-				row[Fields.REESS_StartSoC] = runData.BatteryData.InitialSoC * 100; 
+				row[Fields.REESS_StartSoC] = runData.BatteryData.InitialSoC * 100;
 				row[Fields.REESS_EndSoC] = modData.REESSEndSoC();
 				row[Fields.REESS_DeltaSoC] = modData.TimeIntegral<WattSecond>(ModalResultField.P_reess_int.GetName())
 					.ConvertToKiloWattHour();
@@ -1183,7 +1118,7 @@ namespace TUGraz.VectoCore.OutputData
 			public const string FCFINAL_LiterPer100PassengerKM = "FC-Final{0} [l/100Pkm]";
 
 			public const string ElectricEnergyConsumptionPerKm = "EC_el_final [kWh/km]";
-			
+
 			public const string CO2_KM = "CO2 [g/km]";
 			public const string CO2_TKM = "CO2 [g/tkm]";
 			public const string CO2_M3KM = "CO2 [g/m³km]";
@@ -1332,7 +1267,7 @@ namespace TUGraz.VectoCore.OutputData
 			public const string E_EM_LOSS_TRANSM_FORMAT = "E_EM_{0}_transm_loss [kWh]";
 			public const string E_EM_Mot_LOSS_FORMAT = "E_EM_{0}-em_loss [kWh]";
 			public const string E_EM_LOSS_FORMAT = "E_EM_{0}_loss [kWh]";
-			public const string E_EM_OFF_TIME_SHARE = "EM {0} off time share [%]"; 
+			public const string E_EM_OFF_TIME_SHARE = "EM {0} off time share [%]";
 
 			public const string REESS_CAPACITY = "REESS Capacity";
 			public const string REESS_StartSoC = "REESS Start SoC [%]";
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
index 9a19997d1985c46a502c84ab06e2fbe7854b83c7..878ed5965fdfc6ca755eb83b4fbebd650550f13b 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
@@ -92,7 +92,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 			public Kilogram CO2Total { get; private set; }
 
-			public Dictionary<FuelType, Kilogram> FuelConsumptionFinal { get; private set; }
+			public Dictionary<FuelType, IFuelConsumptionCorrection> FuelConsumptionFinal { get; private set; }
 
 			public Meter Distance { get; private set; }
 
@@ -156,47 +156,9 @@ namespace TUGraz.VectoCore.OutputData.XML
 				EngineSpeedDrivingMax = entriesDriving.Max(x => x.nEng);
 				Distance = data.Distance;
 
-				var workESS = data.WorkAuxiliariesDuringEngineStop() + data.WorkEngineStart();
-				var workWHR = WorkWHRCorrection(data);
-
-				var workBusAuxCorr = 0.SI<WattSecond>();
-				if (runData.BusAuxiliaries != null) {
-					workBusAuxCorr = WorkBusAuxCorrection(runData, data);
-				}
-				
-
-				FuelConsumptionFinal = new Dictionary<FuelType, Kilogram>();
-				CO2Total = 0.SI<Kilogram>();
-				EnergyConsumptionTotal = 0.SI<Joule>();
-
-				var engineWasteheatSum = data.FuelData.Aggregate(
-					0.SI<Joule>(),
-					(current, fuel) => current + data.TotalFuelConsumption(ModalResultField.FCFinal, fuel) *
-										fuel.LowerHeatingValueVecto);
-
-				var auxHeaterDemand = data.AuxHeaterDemandCalc == null
-					? 0.SI<Joule>()
-					: data.AuxHeaterDemandCalc(data.Duration, engineWasteheatSum);
-
-				var firstFuel = true;
-				foreach (var entry in data.FuelData) {
-					var col = data.GetColumnName(entry, ModalResultField.FCFinal);
-					var fcSum = data.TimeIntegral<Kilogram>(col);
-
-					var correction = 0.SI<KilogramPerWattSecond>();
-					if (!(workWHR + workESS + workBusAuxCorr).IsEqual(0)) {
-						correction = data.EngineLineCorrectionFactor(entry);
-					}
-					var fcAuxHtr = 0.SI<Kilogram>();
-					if (firstFuel) {
-						firstFuel = false;
-						fcAuxHtr = auxHeaterDemand / entry.LowerHeatingValueVecto;
-					}
-					var fcTotalcorr = fcSum + correction * (workESS + workWHR + workBusAuxCorr) + fcAuxHtr;
-					FuelConsumptionFinal[entry.FuelType] = fcTotalcorr;
-					CO2Total += fcTotalcorr * entry.CO2PerFuelWeight;
-					EnergyConsumptionTotal += fcTotalcorr * entry.LowerHeatingValueVecto;
-				}
+				FuelConsumptionFinal = data.CorrectedModalData.FuelCorrection;
+				CO2Total = data.CorrectedModalData.CO2Total;
+				EnergyConsumptionTotal = data.CorrectedModalData.EnergyConsumptionTotal;
 
 				var gbxOutSignal = runData.Retarder.Type == RetarderType.TransmissionOutputRetarder
 					? ModalResultField.P_retarder_in
@@ -214,34 +176,6 @@ namespace TUGraz.VectoCore.OutputData.XML
 				PrimaryResult = runData.PrimaryResult;
 			}
 
-			private static WattSecond WorkWHRCorrection(IModalDataContainer data)
-			{
-				var workWHRel = data.TimeIntegral<WattSecond>(ModalResultField.P_WHR_el_corr);
-				var workWHRelMech = -workWHRel / DeclarationData.AlternaterEfficiency;
-
-				var workWHRmech = -data.TimeIntegral<WattSecond>(ModalResultField.P_WHR_mech_corr);
-
-				var workWHR = workWHRelMech + workWHRmech;
-				return workWHR;
-			}
-
-			private static WattSecond WorkBusAuxCorrection(VectoRunData runData, IModalDataContainer data)
-			{
-				var workBusAuxPSCompOff = data.EnergyPneumaticCompressorPowerOff();
-				var workBusAuxPSCompOn = data.EnergyPneumaticCompressorAlwaysOn();
-				var airBusAuxPSON = data.AirGeneratedAlwaysOn();
-				var deltaAir = data.AirConsumed() - data.AirGenerated();
-
-				var kAir = (workBusAuxPSCompOn - workBusAuxPSCompOff) / (airBusAuxPSON - 0.SI<NormLiter>());
-				var workBusAuxPSCorr = (kAir * deltaAir).Cast<WattSecond>();
-
-				var workBusAuxES = data.EnergyBusAuxESConsumed() - data.EnergyBusAuxESGenerated();
-				
-				var workBusAuxESMech = workBusAuxES /
-										runData.BusAuxiliaries.ElectricalUserInputsConfig.AlternatorMap.GetEfficiency(0.RPMtoRad(), 0.SI<Ampere>()) /
-										runData.BusAuxiliaries.ElectricalUserInputsConfig.AlternatorGearEfficiency;
-				return workBusAuxPSCorr + workBusAuxESMech;
-			}
 		}
 
 		
@@ -362,23 +296,24 @@ namespace TUGraz.VectoCore.OutputData.XML
 			var retVal = new List<XElement>();
 
 			foreach (var fuel in result.FuelData) {
+				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(
 						tns + XMLNames.Report_Results_FuelConsumption,
 						new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/km"),
-						(result.FuelConsumptionFinal[fuel.FuelType] / result.Distance)
+						entry.FC_FINAL_KM
 						.ConvertToGrammPerKiloMeter().ToMinSignificantDigits(3, 1)),
 					new XElement(
 						tns + XMLNames.Report_Results_FuelConsumption,
 						new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/t-km"),
-						(result.FuelConsumptionFinal[fuel.FuelType] / result.Distance / result.Payload)
+						(entry.FC_FINAL_KM / result.Payload)
 						.ConvertToGrammPerTonKilometer().ToMinSignificantDigits(3, 1)),
 					result.CargoVolume > 0
 						? new XElement(
 							tns + XMLNames.Report_Results_FuelConsumption,
 							new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/m³-km"),
-							(result.FuelConsumptionFinal[fuel.FuelType].ConvertToGramm() / result.Distance.ConvertToKiloMeter() /
+							(entry.TotalFuelConsumptionCorrected.ConvertToGramm() / result.Distance.ConvertToKiloMeter() /
 							result.CargoVolume)
 							.Value().ToMinSignificantDigits(3, 1))
 						: null,
@@ -386,7 +321,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 						? new XElement(
 							tns + XMLNames.Report_Results_FuelConsumption,
 							new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/p-km"),
-							(result.FuelConsumptionFinal[fuel.FuelType].ConvertToGramm() / result.Distance.ConvertToKiloMeter() /
+							(entry.TotalFuelConsumptionCorrected.ConvertToGramm() / result.Distance.ConvertToKiloMeter() /
 							result.PassengerCount.Value).ToMinSignificantDigits(3, 1))
 						: null
 				);
@@ -398,13 +333,13 @@ namespace TUGraz.VectoCore.OutputData.XML
 						new XElement(
 							tns + XMLNames.Report_Results_FuelConsumption,
 							new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/km"),
-							(result.FuelConsumptionFinal[fuel.FuelType] * fuel.LowerHeatingValueVecto /
+							(entry.EnergyDemand /
 							result.Distance.ConvertToKiloMeter() / 1e6)
 							.Value().ToMinSignificantDigits(3, 1)),
 						new XElement(
 							tns + XMLNames.Report_Results_FuelConsumption,
 							new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/t-km"),
-							(result.FuelConsumptionFinal[fuel.FuelType] * fuel.LowerHeatingValueVecto /
+							(entry.EnergyDemand /
 							result.Distance.ConvertToKiloMeter() / result.Payload.ConvertToTon() / 1e6)
 							.Value().ToMinSignificantDigits(3, 1)));
 					if (result.CargoVolume > 0) {
@@ -412,7 +347,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 							new XElement(
 								tns + XMLNames.Report_Results_FuelConsumption,
 								new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/m³-km"),
-								(result.FuelConsumptionFinal[fuel.FuelType] * fuel.LowerHeatingValueVecto /
+								(entry.EnergyDemand /
 								result.Distance.ConvertToKiloMeter() / result.CargoVolume / 1e6).Value().ToMinSignificantDigits(3, 1)));
 					}
 					if (result.PassengerCount.HasValue) {
@@ -420,7 +355,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 							new XElement(
 								tns + XMLNames.Report_Results_FuelConsumption,
 								new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/p-km"),
-								(result.FuelConsumptionFinal[fuel.FuelType] * fuel.LowerHeatingValueVecto /
+								(entry.EnergyDemand /
 								result.Distance.ConvertToKiloMeter() / result.PassengerCount.Value / 1e6).Value().ToMinSignificantDigits(3, 1))
 						);
 					}
@@ -430,13 +365,13 @@ namespace TUGraz.VectoCore.OutputData.XML
 						new XElement(
 							tns + XMLNames.Report_Results_FuelConsumption,
 							new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/100km"),
-							(result.FuelConsumptionFinal[fuel.FuelType].ConvertToGramm() / fuel.FuelDensity /
+							(entry.TotalFuelConsumptionCorrected.ConvertToGramm() / fuel.FuelDensity /
 							result.Distance.ConvertToKiloMeter() * 100)
 							.Value().ToMinSignificantDigits(3, 1)),
 						new XElement(
 							tns + XMLNames.Report_Results_FuelConsumption,
 							new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/t-km"),
-							(result.FuelConsumptionFinal[fuel.FuelType].ConvertToGramm() / fuel.FuelDensity /
+							(entry.TotalFuelConsumptionCorrected.ConvertToGramm() / fuel.FuelDensity /
 							result.Distance.ConvertToKiloMeter() /
 							result.Payload.ConvertToTon()).Value().ToMinSignificantDigits(3, 1)));
 					if (result.CargoVolume > 0) {
@@ -444,7 +379,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 							new XElement(
 								tns + XMLNames.Report_Results_FuelConsumption,
 								new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/m³-km"),
-								(result.FuelConsumptionFinal[fuel.FuelType].ConvertToGramm() / fuel.FuelDensity /
+								(entry.TotalFuelConsumptionCorrected.ConvertToGramm() / fuel.FuelDensity /
 								result.Distance.ConvertToKiloMeter() /
 								result.CargoVolume).Value().ToMinSignificantDigits(3, 1)));
 					}
@@ -453,7 +388,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 							new XElement(
 								tns + XMLNames.Report_Results_FuelConsumption,
 								new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/p-km"),
-								(result.FuelConsumptionFinal[fuel.FuelType].ConvertToGramm() / fuel.FuelDensity /
+								(entry.TotalFuelConsumptionCorrected.ConvertToGramm() / fuel.FuelDensity /
 								result.Distance.ConvertToKiloMeter() / result.PassengerCount.Value).Value().ToMinSignificantDigits(3, 1))
 						);
 					}
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs
index b70fecc106ca097a4fb83546707ce054cdb02d00..d79466d8bd9afa212ed19f924e5fbae21daf50c4 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs
@@ -428,7 +428,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 					new XElement(
 						tns + XMLNames.Report_Result_EnergyConsumption,
 						new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/km"),
-						(result.FuelConsumptionFinal[fuel.FuelType] * fuel.LowerHeatingValueVecto /
+						(result.FuelConsumptionFinal[fuel.FuelType].EnergyDemand /
 						result.Distance.ConvertToKiloMeter() / 1e6)
 						.Value().ToMinSignificantDigits(5, 5)));
 				retVal.Add(fcResult);
diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj
index 66111692ea318833e4bc357ddb2c2832d11a3b96..af898f628fc08a346901ab89c80634e5d3bf0c33 100644
--- a/VectoCore/VectoCore/VectoCore.csproj
+++ b/VectoCore/VectoCore/VectoCore.csproj
@@ -435,6 +435,7 @@
     <Compile Include="Models\Simulation\SimulationFactoryNinjectModule.cs" />
     <Compile Include="OutputData\FileIO\BusAuxWriter.cs" />
     <Compile Include="OutputData\FileIO\JSONFileWriter.cs" />
+    <Compile Include="OutputData\ModalDataPostprocessingCorrection.cs" />
     <Compile Include="OutputData\XML\AbstractXMLManufacturerReport.cs" />
     <Compile Include="OutputData\XML\DeclarationJobs\XMLCompletedBusWriter.cs" />
     <Compile Include="OutputData\XML\Engineering\Factory\EngineeringWriterFactory.cs" />
diff --git a/VectoCore/VectoCoreTest/Utils/MockModalDataContainer.cs b/VectoCore/VectoCoreTest/Utils/MockModalDataContainer.cs
index c1d923b5ebdaecdd6ae8eed407a1b0a9b00c249f..823dfe2b31882809a7fcaaab7be5509df0dda699 100644
--- a/VectoCore/VectoCoreTest/Utils/MockModalDataContainer.cs
+++ b/VectoCore/VectoCoreTest/Utils/MockModalDataContainer.cs
@@ -351,6 +351,8 @@ namespace TUGraz.VectoCore.Tests.Utils
 			throw new NotImplementedException();
 		}
 
+		public ICorrectedModalData CorrectedModalData { get; }
+
 		public WattSecond REESSEnergyEnd()
 		{
 			throw new NotImplementedException();