diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
index b9ea1483e3eca735d7968eb1f47a5d4b43a21ec6..6e95bcd208f1a3112a2993e129a7203b5c471d7d 100644
--- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
+++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
@@ -62,6 +62,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Impl;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.XML;
 using Point = TUGraz.VectoCommon.Utils.Point;
+using System.Net.WebSockets;
 
 namespace TUGraz.VectoCore.Models.Declaration
 {
@@ -1799,7 +1800,8 @@ namespace TUGraz.VectoCore.Models.Declaration
 				UtilityFactor = D32_utilityFactor,
 				ElectricEnergyConsumption = D36_electricEnergyConsumptionWeighted,
 				FuelConsumption = D37_fuelConsumptionWeighted,
-				CO2Total = D32_utilityFactor * cdResult.CO2Total + (1 - D32_utilityFactor) * csResult.CO2Total,
+
+				CO2PerMeter = D32_utilityFactor * (cdResult.CO2Total / cdResult.Distance) + (1 - D32_utilityFactor) * (csResult.CO2Total / csResult.Distance),
 
 				AuxHeaterFuel = cdResult.AuxHeaterFuel,
 				ZEV_CO2 =
@@ -1888,7 +1890,8 @@ namespace TUGraz.VectoCore.Models.Declaration
 			}
 
 			var fuels = entries.First().FuelData;
-			return new WeightedResult() {
+			var result = new WeightedResult()
+			{
 				Status = VectoRun.Status.Success,
 				AverageSpeed = null,
 				AverageDrivingSpeed = null,
@@ -1900,8 +1903,13 @@ namespace TUGraz.VectoCore.Models.Declaration
 						entries.All(e => e.FuelConsumptionFinal(f.FuelType) != null) ? entries.Sum(e =>
 							e.FuelConsumptionFinal(f.FuelType).TotalFuelConsumptionCorrected * e.WeightingFactor) : null))
 					.ToDictionary(x => x.Item1, x => x.Item2),
+
+				FuelConsumptionPerMeter = fuels.Select(f => Tuple.Create(f,
+						entries.All(e => e.FuelConsumptionFinal(f.FuelType) != null) ? entries.Sum(e =>
+							(e.FuelConsumptionFinal(f.FuelType).TotalFuelConsumptionCorrected / e.Distance) * e.WeightingFactor) : null))
+					.ToDictionary(x => x.Item1, x => x.Item2),
 				ElectricEnergyConsumption = entries.All(e => e.ElectricEnergyConsumption != null) ? entries.Sum(e => e.ElectricEnergyConsumption * e.WeightingFactor) : null,
-				CO2Total = entries.All(e => e.CO2Total != null) ? entries.Sum(e => e.CO2Total * e.WeightingFactor) : null,
+				CO2PerMeter = entries.All(e => e.CO2Total != null) ? entries.Sum(e => (e.CO2Total / e.Distance) * e.WeightingFactor) : null,
 				ActualChargeDepletingRange = entries.All(e => e.ActualChargeDepletingRange != null) ? entries.Sum(e => e.ActualChargeDepletingRange * e.WeightingFactor) : null,
 				EquivalentAllElectricRange = entries.All(e => e.EquivalentAllElectricRange != null) ? entries.Sum(e => e.EquivalentAllElectricRange * e.WeightingFactor) : null,
 				ZeroCO2EmissionsRange = entries.All(e => e.ZeroCO2EmissionsRange != null) ? entries.Sum(e => e.ZeroCO2EmissionsRange * e.WeightingFactor) : null,
@@ -1911,6 +1919,8 @@ namespace TUGraz.VectoCore.Models.Declaration
 				ZEV_CO2 = entries.Sum(e => (e?.ZEV_CO2 ?? 0.SI<Kilogram>()) * e.WeightingFactor),
 				ZEV_FuelConsumption_AuxHtr = entries.Sum(e => (e?.ZEV_FuelConsumption_AuxHtr ?? 0.SI<Kilogram>()) * e.WeightingFactor),
 			};
+
+			return result;
 		}
 
 		public static IWeightedResult CalculateWeightedSummary(IList<IOVCResultEntry> entries)
@@ -1924,7 +1934,8 @@ namespace TUGraz.VectoCore.Models.Declaration
 			}
 
 			var fuels = entries.First().ChargeDepletingResult.FuelData;
-			return new WeightedResult() {
+			return new WeightedResult()
+			{
 				Status = VectoRun.Status.Success,
 				AverageSpeed = null,
 				AverageDrivingSpeed = null,
@@ -1937,7 +1948,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 							e.Weighted.FuelConsumption[f] * e.ChargeDepletingResult.WeightingFactor)))
 					.ToDictionary(x => x.Item1, x => x.Item2),
 				ElectricEnergyConsumption = entries.Sum(e => e.Weighted.ElectricEnergyConsumption * e.ChargeDepletingResult.WeightingFactor),
-				CO2Total = entries.Sum(e => e.Weighted.CO2Total * e.ChargeDepletingResult.WeightingFactor),
+				CO2PerMeter = entries.All(e => e.Weighted.CO2PerMeter != null) ? entries.Sum(e => (e.Weighted.CO2PerMeter) * e.ChargeDepletingResult.WeightingFactor) : null,
 				ActualChargeDepletingRange = entries.Sum(e => e.Weighted.ActualChargeDepletingRange * e.ChargeDepletingResult.WeightingFactor),
 				EquivalentAllElectricRange = entries.Sum(e => e.Weighted.EquivalentAllElectricRange * e.ChargeDepletingResult.WeightingFactor),
 				ZeroCO2EmissionsRange = entries.Sum(e => e.Weighted.ZeroCO2EmissionsRange * e.ChargeDepletingResult.WeightingFactor),
diff --git a/VectoCore/VectoCore/OutputData/DeclarationReport.cs b/VectoCore/VectoCore/OutputData/DeclarationReport.cs
index 54bf1b1372635b4dbd1b5c43bae54a47b68d2581..cb903818d692694530137e858525adf62259b204 100644
--- a/VectoCore/VectoCore/OutputData/DeclarationReport.cs
+++ b/VectoCore/VectoCore/OutputData/DeclarationReport.cs
@@ -158,10 +158,12 @@ namespace TUGraz.VectoCore.OutputData
 		double? PassengerCount { get; }
 
 		IDictionary<IFuelProperties, Kilogram> FuelConsumption { get; }
+		
+		IDictionary<IFuelProperties, KilogramPerMeter> FuelConsumptionPerMeter { get; }
 
 		WattSecond ElectricEnergyConsumption { get; }
 
-		Kilogram CO2Total { get; }
+		KilogramPerMeter CO2PerMeter { get; }
 
 		Meter ActualChargeDepletingRange { get; }
 
diff --git a/VectoCore/VectoCore/OutputData/OvcResultEntry.cs b/VectoCore/VectoCore/OutputData/OvcResultEntry.cs
index 75c64424a79120750b001246d2af871c89b04604..e92520887534eaf823414921faa5b13cdcb4ed05 100644
--- a/VectoCore/VectoCore/OutputData/OvcResultEntry.cs
+++ b/VectoCore/VectoCore/OutputData/OvcResultEntry.cs
@@ -19,26 +19,42 @@ namespace TUGraz.VectoCore.OutputData
 
 	public class WeightedResult : IWeightedResult
 	{
-
 		#region Implementation of IWeightedResult
 
 		public Meter Distance  { get; internal set; }
+		
 		public Kilogram Payload { get; internal set; }
+		
 		public CubicMeter CargoVolume { get; internal set; }
+		
 		public double? PassengerCount { get; internal set; }
+		
 		public MeterPerSecond AverageSpeed { get; internal set; }
+		
 		public MeterPerSecond AverageDrivingSpeed { get; internal set; }
 
 		public IDictionary<IFuelProperties, Kilogram> FuelConsumption { get; internal set; }
+		
+		public IDictionary<IFuelProperties, KilogramPerMeter> FuelConsumptionPerMeter { get; internal set; }
+
 		public WattSecond ElectricEnergyConsumption { get; internal set; }
-		public Kilogram CO2Total { get; internal set; }
+		
+		public KilogramPerMeter CO2PerMeter { get; internal set; }
+		
 		public Meter ActualChargeDepletingRange { get; internal set; }
+		
 		public Meter EquivalentAllElectricRange { get; internal set; }
+		
 		public Meter ZeroCO2EmissionsRange { get; internal set; }
+		
 		public double UtilityFactor { get; internal set; }
+		
 		public IFuelProperties AuxHeaterFuel { get; set; }
+		
 		public Kilogram ZEV_FuelConsumption_AuxHtr { get; set; }
+		
 		public Kilogram ZEV_CO2 { get; set; }
+		
 		public VectoRun.Status Status { get; set; }
 
 		#endregion
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/CO2Writer.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/CO2Writer.cs
index 73fa2b5efb998027b33dd06533ca6005714aa6ca..f0714c83a0aaed7a1b348ee02fd03a10e7afd1fc 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/CO2Writer.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/CO2Writer.cs
@@ -5,7 +5,6 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Models.Simulation.Impl;
-using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9.ResultWriter;
 using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
@@ -17,14 +16,12 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
         public virtual XElement[] GetElements(IResultEntry entry)
 		{
 			if (entry.Status == VectoRun.Status.PrimaryBusSimulationIgnore) {
-				return GetCO2ResultEntries(entry.CO2Total, entry.Distance, entry.Payload, entry.CargoVolume,
-						entry.PassengerCount)
+				return GetCO2ResultEntries(entry.CO2Total, entry.Distance, entry.Payload, entry.CargoVolume, entry.PassengerCount)
 					.Select(x => new XElement(TNS + XMLNames.Report_Results_CO2,
 						new ConvertedSI(double.NaN, x.Value.Units).ValueAsUnit()))
 					.ToArray();
 			}
-			return GetCO2ResultEntries(entry.CO2Total, entry.Distance, entry.Payload, entry.CargoVolume,
-					entry.PassengerCount)
+			return GetCO2ResultEntries(entry.CO2Total, entry.Distance, entry.Payload, entry.CargoVolume, entry.PassengerCount)
 				.Select(x => new XElement(TNS + XMLNames.Report_Results_CO2, x.GetElement()))
 				.ToArray();
 		}
@@ -32,77 +29,111 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
         public virtual XElement[] GetElements(IWeightedResult entry)
 		{
 			if (entry.Status == VectoRun.Status.PrimaryBusSimulationIgnore) {
-				return GetCO2ResultEntries(entry.CO2Total, entry.Distance, entry.Payload, entry.CargoVolume,
-						entry.PassengerCount)
-					.Select(x => new XElement(TNS + XMLNames.Report_Results_CO2, new ConvertedSI(double.NaN, x.Value.Units).ValueAsUnit()))
+				return GetCO2ResultEntries(entry.CO2PerMeter, entry.Payload, entry.CargoVolume, entry.PassengerCount)
+					.Select(x => new XElement(TNS + XMLNames.Report_Results_CO2,
+						new ConvertedSI(double.NaN, x.Value.Units).ValueAsUnit()))
 					.ToArray();
             }
 
-			return GetCO2ResultEntries(entry.CO2Total, entry.Distance, entry.Payload, entry.CargoVolume,
-					entry.PassengerCount)
-				.Select(x => new XElement(TNS + XMLNames.Report_Results_CO2,
-					x.GetElement()))
+			return GetCO2ResultEntries(entry.CO2PerMeter, entry.Payload, entry.CargoVolume, entry.PassengerCount)
+				.Select(x => new XElement(TNS + XMLNames.Report_Results_CO2, x.GetElement()))
 				.ToArray();
 		}
 
-		protected abstract IList<FormattedReportValue> GetCO2ResultEntries(Kilogram co2, Meter distance, Kilogram payload,
-			CubicMeter volume, double? passengers);
+		protected abstract IList<FormattedReportValue> GetCO2ResultEntries(
+			Kilogram co2,
+			Meter distance,
+			Kilogram payload,
+			CubicMeter volume,
+			double? passengers);
 
-		
-		
 
-    }
+		protected abstract IList<FormattedReportValue> GetCO2ResultEntries(
+			KilogramPerMeter co2PerMeter,
+			Kilogram payload,
+			CubicMeter volume,
+			double? passengers);
+	}
 
 	public class LorryCO2Writer : CO2WriterBase
     {
         public LorryCO2Writer(ICommonResultsWriterFactory factory, XNamespace ns) : base(factory, ns) { }
 
-
-		protected override IList<FormattedReportValue> GetCO2ResultEntries(Kilogram CO2Total, Meter distance, Kilogram payload,
-			CubicMeter volume, double? passengers)
+		protected override IList<FormattedReportValue> GetCO2ResultEntries(Kilogram CO2Total, Meter distance, Kilogram payload, CubicMeter volume, double? passengers)
 		{
 			var retVal = new List<FormattedReportValue>() {
 				new FormattedReportValue((CO2Total / distance).ConvertToGrammPerKiloMeter()),
 				new FormattedReportValue((CO2Total / distance / payload).ConvertToGrammPerTonKilometer()),
 			};
-			if (volume.IsGreater(0)) {
+
+			if (volume.IsGreater(0))
+			{
 				retVal.Add(new FormattedReportValue((CO2Total / distance / volume).ConvertToGrammPerCubicMeterKiloMeter()));
 			}
+
 			return retVal;
 		}
 
+		protected override IList<FormattedReportValue> GetCO2ResultEntries(KilogramPerMeter CO2PerMeter, Kilogram payload, CubicMeter volume, double? passengers)
+		{
+			var retVal = new List<FormattedReportValue>() {
+				new FormattedReportValue(CO2PerMeter.ConvertToGrammPerKiloMeter()),
+				new FormattedReportValue((CO2PerMeter / payload).ConvertToGrammPerTonKilometer()),
+			};
+
+			if (volume.IsGreater(0)) {
+				retVal.Add(new FormattedReportValue((CO2PerMeter / volume).ConvertToGrammPerCubicMeterKiloMeter()));
+			}
+
+			return retVal;
+		}
 	}
 
 	public class LorrySummaryCO2Writer : CO2WriterBase
 	{
 		public LorrySummaryCO2Writer(ICommonResultsWriterFactory factory, XNamespace ns) : base(factory, ns) { }
 
-
-		protected override IList<FormattedReportValue> GetCO2ResultEntries(Kilogram CO2Total, Meter distance, Kilogram payload,
-			CubicMeter volume, double? passengers)
+		protected override IList<FormattedReportValue> GetCO2ResultEntries(Kilogram CO2Total, Meter distance, Kilogram payload, CubicMeter volume, double? passengers)
 		{
-			if (distance.IsEqual(0)) {
+			if (distance.IsEqual(0))
+			{
 				// in some testcases only a single cycle is simulated which has a weighting of 0. consider this to generate a valid report
 				return new List<FormattedReportValue>() { new FormattedReportValue((CO2Total / 1.SI<Meter>()).ConvertToGrammPerKiloMeter()), };
 			}
-            var retVal = new List<FormattedReportValue>() {
+
+			var retVal = new List<FormattedReportValue>() {
 				new FormattedReportValue((CO2Total / distance).ConvertToGrammPerKiloMeter()),
 				new FormattedReportValue((CO2Total / distance / payload).ConvertToGrammPerTonKilometer(), FormattedReportValue.Format2Decimal),
 			};
-			if (volume.IsGreater(0)) {
+
+			if (volume.IsGreater(0))
+			{
 				retVal.Add(new FormattedReportValue((CO2Total / distance / volume).ConvertToGrammPerCubicMeterKiloMeter()));
 			}
+
 			return retVal;
 		}
 
+		protected override IList<FormattedReportValue> GetCO2ResultEntries(KilogramPerMeter CO2PerMeter, Kilogram payload, CubicMeter volume, double? passengers)
+		{
+            var retVal = new List<FormattedReportValue>() {
+				new FormattedReportValue(CO2PerMeter.ConvertToGrammPerKiloMeter()),
+				new FormattedReportValue((CO2PerMeter / payload).ConvertToGrammPerTonKilometer(), FormattedReportValue.Format2Decimal),
+			};
+
+			if (volume.IsGreater(0)) {
+				retVal.Add(new FormattedReportValue((CO2PerMeter / volume).ConvertToGrammPerCubicMeterKiloMeter()));
+			}
+
+			return retVal;
+		}
 	}
 
-    public class BusCO2Writer : CO2WriterBase
+	public class BusCO2Writer : CO2WriterBase
     {
         public BusCO2Writer(ICommonResultsWriterFactory factory, XNamespace ns) : base(factory, ns) { }
 
-		protected override IList<FormattedReportValue> GetCO2ResultEntries(Kilogram CO2Total, Meter distance, Kilogram payload,
-			CubicMeter volume, double? passengers)
+		protected override IList<FormattedReportValue> GetCO2ResultEntries(Kilogram CO2Total, Meter distance, Kilogram payload, CubicMeter volume, double? passengers)
 		{
 			return new[] {
 				new FormattedReportValue((CO2Total / distance).ConvertToGrammPerKiloMeter()),
@@ -110,14 +141,21 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
 			};
 		}
 
+		protected override IList<FormattedReportValue> GetCO2ResultEntries(KilogramPerMeter CO2PerMeter, Kilogram payload,
+			CubicMeter volume, double? passengers)
+		{
+			return new[] {
+				new FormattedReportValue(CO2PerMeter.ConvertToGrammPerKiloMeter()),
+				new FormattedReportValue((CO2PerMeter / passengers.Value).ConvertToGrammPerPassengerKilometer()),
+			};
+		}
 	}
 
 	public class BusSummaryCO2Writer : CO2WriterBase
 	{
 		public BusSummaryCO2Writer(ICommonResultsWriterFactory factory, XNamespace ns) : base(factory, ns) { }
 
-		protected override IList<FormattedReportValue> GetCO2ResultEntries(Kilogram CO2Total, Meter distance, Kilogram payload,
-			CubicMeter volume, double? passengers)
+		protected override IList<FormattedReportValue> GetCO2ResultEntries(Kilogram CO2Total, Meter distance, Kilogram payload, CubicMeter volume, double? passengers)
 		{
 			return new[] {
 				new FormattedReportValue((CO2Total / distance).ConvertToGrammPerKiloMeter()),
@@ -125,6 +163,13 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
 			};
 		}
 
+		protected override IList<FormattedReportValue> GetCO2ResultEntries(KilogramPerMeter CO2PerMeter, Kilogram payload, CubicMeter volume, double? passengers)
+		{
+			return new[] {
+				new FormattedReportValue(CO2PerMeter.ConvertToGrammPerKiloMeter()),
+				new FormattedReportValue((CO2PerMeter / passengers.Value).ConvertToGrammPerPassengerKilometer(), FormattedReportValue.Format2Decimal),
+			};
+		}
 	}
 
     public class BusPEVCO2Writer : BusCO2Writer
@@ -140,10 +185,9 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
             }
 
 			if (entry.Status == VectoRun.Status.PrimaryBusSimulationIgnore) {
-				GetCO2ResultEntries(entry.CO2Total, entry.Distance, entry.Payload, entry.CargoVolume,
-						entry.PassengerCount)
+				GetCO2ResultEntries(entry.CO2Total, entry.Distance, entry.Payload, entry.CargoVolume, entry.PassengerCount)
 					.Select(x => new XElement(TNS + XMLNames.Report_Results_CO2,
-						new ConvertedSI(double.NaN, x.Value.Units).ValueAsUnit()))
+							   new ConvertedSI(double.NaN, x.Value.Units).ValueAsUnit()))
 					.ToArray();
 			}
 
@@ -156,9 +200,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
 						new XElement(TNS + XMLNames.Report_Results_FuelConsumption, new FormattedReportValue(x).GetElement()))
 				),
 				new XElement(TNS + XMLNames.Report_ResultEntry_CO2ZEVAuxHeater,
-					GetCO2ResultEntries(entry.ZEV_CO2, entry.Distance, entry.Payload, entry.CargoVolume,
-						entry.PassengerCount).Select(x =>
-						new XElement(TNS + XMLNames.Report_Results_CO2, x.GetElement()))
+					GetCO2ResultEntries(entry.ZEV_CO2, entry.Distance, entry.Payload, entry.CargoVolume, entry.PassengerCount)
+						.Select(x => new XElement(TNS + XMLNames.Report_Results_CO2, x.GetElement()))
 				)
 			};
 		}
@@ -178,9 +221,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
                         new XElement(TNS + XMLNames.Report_Results_FuelConsumption, new FormattedReportValue(x).GetElement()))
                 ),
                 new XElement(TNS + XMLNames.Report_ResultEntry_CO2ZEVAuxHeater,
-                    GetCO2ResultEntries(entry.ZEV_CO2, entry.Distance, entry.Payload, entry.CargoVolume,
-                        entry.PassengerCount).Select(x =>
-                        new XElement(TNS + XMLNames.Report_Results_CO2, x.GetElement()))
+                    GetCO2ResultEntries(entry.ZEV_CO2, entry.Distance, entry.Payload, entry.CargoVolume, entry.PassengerCount)
+						.Select(x => new XElement(TNS + XMLNames.Report_Results_CO2, x.GetElement()))
                 )
             };
         }
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/FuelConsumptionWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/FuelConsumptionWriter.cs
index 078531c9766b09ce69b12083f3eb8e03682ce4d9..e588f692ed3b8b9e325c7876afee649bb16771b9 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/FuelConsumptionWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/FuelConsumptionWriter.cs
@@ -30,13 +30,26 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
 			return GetElement(fc.TotalFuelConsumptionCorrected, fc.Fuel, entry.Distance, entry.Payload, entry.CargoVolume, entry.PassengerCount);
         }
 
-        public XElement GetElement(IWeightedResult entry, IFuelProperties fuel, Kilogram consumption)
+		public XElement[] GetElements(IWeightedResult entry)
 		{
-			if (entry.Status == VectoRun.Status.PrimaryBusSimulationIgnore) {
-				return GetElementIgnore(consumption, fuel, entry.Distance, entry.Payload,
-					entry.CargoVolume, entry.PassengerCount);
+			if (entry.Status == VectoRun.Status.PrimaryBusSimulationIgnore)
+			{
+				List<XElement> fcElementsIgnore = new List<XElement>();
+				foreach (var fcEntry in entry.FuelConsumptionPerMeter)
+				{
+					fcElementsIgnore.Add(GetElementIgnore(fcEntry.Value, fcEntry.Key, entry.Payload, entry.CargoVolume, entry.PassengerCount));
+				}
+
+				return fcElementsIgnore.ToArray();
+			}
+
+			List<XElement> fcElements = new List<XElement>();
+			foreach (var fcEntry in entry.FuelConsumptionPerMeter)
+			{
+				fcElements.Add(GetElement(fcEntry.Value, fcEntry.Key, entry.Payload, entry.CargoVolume, entry.PassengerCount));
 			}
-            return GetElement(consumption, fuel, entry.Distance, entry.Payload, entry.CargoVolume, entry.PassengerCount);
+
+			return fcElements.ToArray();
 		}
 
 		protected virtual XElement GetElement(Kilogram consumption, IFuelProperties fuel, Meter distance, Kilogram payLoad, CubicMeter cargoVolume, double? passengerCount)
@@ -57,13 +70,43 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
 						new FormattedReportValue(new ConvertedSI(double.NaN, x.Units)).GetElement()))
 			);
 		}
-        #endregion
 
-        public abstract IList<ConvertedSI> GetFuelConsumptionEntries(Kilogram fc,
-			IFuelProperties fuel, Meter distance, Kilogram payload, CubicMeter volume,
+
+		protected virtual XElement GetElement(KilogramPerMeter consumption, IFuelProperties fuel, Kilogram payLoad, CubicMeter cargoVolume, double? passengerCount)
+		{
+			return new XElement(TNS + XMLNames.Report_Results_Fuel,
+				new XAttribute(XMLNames.Report_Results_Fuel_Type_Attr, fuel.FuelType.ToXMLFormat()),
+				GetFuelConsumptionEntries(consumption, fuel, payLoad, cargoVolume, passengerCount).Select(x =>
+					new XElement(TNS + FCElementName, new FormattedReportValue(x).GetElement()))
+			);
+		}
+
+		protected virtual XElement GetElementIgnore(KilogramPerMeter consumption, IFuelProperties fuel, Kilogram payLoad, CubicMeter cargoVolume, double? passengerCount)
+		{
+			return new XElement(TNS + XMLNames.Report_Results_Fuel,
+				new XAttribute(XMLNames.Report_Results_Fuel_Type_Attr, fuel.FuelType.ToXMLFormat()),
+				GetFuelConsumptionEntries(consumption, fuel, payLoad, cargoVolume, passengerCount).Select(x =>
+					new XElement(TNS + FCElementName,
+						new FormattedReportValue(new ConvertedSI(double.NaN, x.Units)).GetElement()))
+			);
+		}
+		#endregion
+
+		public abstract IList<ConvertedSI> GetFuelConsumptionEntries(
+			Kilogram fc,
+			IFuelProperties fuel,
+			Meter distance,
+			Kilogram payload,
+			CubicMeter volume,
 			double? passenger);
 
-    }
+		public abstract IList<ConvertedSI> GetFuelConsumptionEntries(
+			KilogramPerMeter fcPerMeter,
+			IFuelProperties fuel,
+			Kilogram payload,
+			CubicMeter volume,
+			double? passenger);
+	}
 
     public class LorryFuelConsumptionWriter : FuelConsumptionWriterBase
     {
@@ -111,8 +154,51 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
             return retVal;
         }
 
-        #endregion
-    }
+		public override IList<ConvertedSI> GetFuelConsumptionEntries(KilogramPerMeter fcPerMeter, IFuelProperties fuel, Kilogram payload, CubicMeter volume, double? passenger)
+		{
+			if (fcPerMeter == null)
+			{
+				return new List<ConvertedSI>();
+			}
+
+			var retVal = new List<ConvertedSI> {
+				(fcPerMeter).ConvertToGrammPerKiloMeter(),
+				(fcPerMeter /payload).ConvertToGrammPerTonKilometer()};
+			if (volume.IsGreater(0))
+			{
+				retVal.Add((fcPerMeter / volume).ConvertToGrammPerCubicMeterKiloMeter());
+			}
+
+			JoulePerMeter fcPerMeterlowerHeatingValue = (fcPerMeter.Value() * fuel.LowerHeatingValueVecto.Value()).SI<JoulePerMeter>();
+			retVal.AddRange(new[] {
+				(fcPerMeterlowerHeatingValue).ConvertToMegaJoulePerKilometer(),
+				(fcPerMeterlowerHeatingValue / payload).ConvertToMegaJoulePerTonKiloMeter(),
+			});
+
+			if (volume.IsGreater(0))
+			{
+				retVal.Add((fcPerMeterlowerHeatingValue / volume).ConvertToMegaJoulePerCubicMeterKiloMeter());
+			}
+
+			if (fuel.FuelDensity != null)
+			{
+				CubicMeterPerMeter fcPerMeterDensity = (fcPerMeter.Value() / fuel.FuelDensity.Value()).SI<CubicMeterPerMeter>();
+				retVal.AddRange(new[] {
+					(fcPerMeterDensity).ConvertToLiterPer100KiloMeter(),
+					(fcPerMeterDensity / payload).ConvertToLiterPerTonKiloMeter(),
+				});
+
+				if (volume.IsGreater(0))
+				{
+					retVal.Add((fcPerMeterDensity / volume).ConvertToLiterPerCubicMeterKiloMeter());
+				}
+			}
+
+			return retVal;
+		}
+
+		#endregion
+	}
 
     public class BusFuelConsumptionWriter : FuelConsumptionWriterBase
     {
@@ -143,7 +229,31 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
             return retVal;
         }
 
-        #endregion
+		public override IList<ConvertedSI> GetFuelConsumptionEntries(KilogramPerMeter fcPerMeter, IFuelProperties fuel, Kilogram payload, CubicMeter volume, double? passenger)
+		{
+			JoulePerMeter fcPerMeterLowerHeatingValue = (fcPerMeter.Value() * fuel.LowerHeatingValueVecto.Value()).SI<JoulePerMeter>();
+
+			var retVal = new List<ConvertedSI> {
+				(fcPerMeter).ConvertToGrammPerKiloMeter(),
+				(fcPerMeter / passenger.Value).ConvertToGrammPerPassengerKilometer(),
+				(fcPerMeterLowerHeatingValue).ConvertToMegaJoulePerKilometer(),
+				(fcPerMeterLowerHeatingValue / passenger.Value)
+				.ConvertToMegaJoulePerPassengerKilometer(),
+			};
+
+			if (fuel.FuelDensity != null)
+			{
+				CubicMeterPerMeter fcPerMeterDensity = (fcPerMeter.Value() / fuel.FuelDensity.Value()).SI<CubicMeterPerMeter>();
+				retVal.AddRange(new[] {
+					(fcPerMeterDensity).ConvertToLiterPer100KiloMeter(),
+					(fcPerMeterDensity / passenger.Value).ConvertToLiterPerPassengerKiloMeter(),
+				});
+			}
+
+			return retVal;
+		}
+
+		#endregion
 
-    }
+	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/IResultsWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/IResultsWriter.cs
index 166c2bc79509d06be7f6921a102a949f789f1b8b..5aff2701fc60534a03ad9878f96c1095319b24b1 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/IResultsWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/IResultsWriter.cs
@@ -112,10 +112,22 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
 	public interface IFuelConsumptionWriter
 	{
 		XElement GetElement(IResultEntry entry, IFuelConsumptionCorrection fuelConsumptionCorrection);
-		XElement GetElement(IWeightedResult entry, IFuelProperties fuel, Kilogram consumption);
+		
+		XElement[] GetElements(IWeightedResult entry);
+
+		IList<ConvertedSI> GetFuelConsumptionEntries(
+			Kilogram fc,
+			IFuelProperties fuel,
+			Meter distance,
+			Kilogram payload,
+			CubicMeter volume,
+			double? passenger);
 
-		IList<ConvertedSI> GetFuelConsumptionEntries(Kilogram fc,
-			IFuelProperties fuel, Meter distance, Kilogram payload, CubicMeter volume,
+		IList<ConvertedSI> GetFuelConsumptionEntries(
+			KilogramPerMeter fcPerMeter,
+			IFuelProperties fuel,
+			Kilogram payload,
+			CubicMeter volume,
 			double? passenger);
 	}
 
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultTotalWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultTotalWriter.cs
index bbdb7028f570593bb9067ee8dd72db7baa8d5e91..4076722a29b2aaf7bbcacb5efec735cf0b527204 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultTotalWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultTotalWriter.cs
@@ -147,8 +147,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
 
         protected override XElement[] GetFuelConsumption(IOVCResultEntry entry)
         {
-            return entry.Weighted.FuelConsumption.Select(e =>
-                    _factory.GetFuelConsumptionLorry(_factory, TNS).GetElement(entry.Weighted, e.Key, e.Value)).ToArray();
+            return _factory.GetFuelConsumptionLorry(_factory, TNS).GetElements(entry.Weighted);
         }
 
         protected override XElement GetElectricConsumption(IOVCResultEntry entry)
@@ -222,9 +221,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
 
         protected override XElement[] GetFuelConsumption(IOVCResultEntry entry)
         {
-            return entry.Weighted.FuelConsumption.Select(e =>
-                _factory.GetFuelConsumptionBus(_factory, TNS).GetElement(entry.Weighted, e.Key, e.Value)).ToArray();
-        }
+            return _factory.GetFuelConsumptionBus(_factory, TNS).GetElements(entry.Weighted);
+		}
 
         protected override XElement GetElectricConsumption(IOVCResultEntry entry)
         {
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/SummaryWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/SummaryWriter.cs
index eaae74f19ca799ee9356a6562c32e08520684343..3f0a30051b85e50229f766f2109e866b39a686d5 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/SummaryWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/SummaryWriter.cs
@@ -39,7 +39,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 				GetSummary(weighted),
 				fcWriter != null
 					? weighted.FuelConsumption.Select(x =>
-						fcWriter.GetElement(weighted, x.Key, x.Value)).ToArray()
+						fcWriter.GetElements(weighted))
 					: null,
 				ElectricEnergyConsumptionWriter?.GetElement(weighted),
 				CO2Writer?.GetElements(weighted),
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/ResultWriter/ResultGroupWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/ResultWriter/ResultGroupWriter.cs
index b9042b46730d91252ad2ead095e1ebf70bc1a78f..9ba378f6e14b9e690e0c9f719e9a5907baa20c3b 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/ResultWriter/ResultGroupWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/ResultWriter/ResultGroupWriter.cs
@@ -122,6 +122,13 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF
 			};
 		}
 
+		public override IList<ConvertedSI> GetFuelConsumptionEntries(KilogramPerMeter fcPerMeter, IFuelProperties fuel, Kilogram payload, CubicMeter volume, double? passenger)
+		{
+			JoulePerMeter fcPerMeterlowerHeatingValue = (fcPerMeter.Value() * fuel.LowerHeatingValueVecto.Value()).SI<JoulePerMeter>();
+			return new List<ConvertedSI> {
+				(fcPerMeterlowerHeatingValue).ConvertToMegaJoulePerKilometer(),
+			};
+		}
 	}
 
 	public class VIFElectricEnergyConsumptionWriter : ElectricEnergyConsumptionWriterBase
diff --git a/VectoCore/VectoCoreTest/Reports/TestXMLResultsWriting.cs b/VectoCore/VectoCoreTest/Reports/TestXMLResultsWriting.cs
index ad7b4414328f884cdfcd8a4f6670096475cf680f..9bc20641936cc7abe92171033c1c881eb1244784 100644
--- a/VectoCore/VectoCoreTest/Reports/TestXMLResultsWriting.cs
+++ b/VectoCore/VectoCoreTest/Reports/TestXMLResultsWriting.cs
@@ -451,7 +451,7 @@ public class TestXMLResultsWriting
 		var weighted = DeclarationData.CalculateWeightedResult(cdResult, csResult);
 
 		Console.WriteLine($"{weighted.ActualChargeDepletingRange.Value().ToXMLFormat(3)} {weighted.EquivalentAllElectricRange.Value().ToXMLFormat(3)} {weighted.ZeroCO2EmissionsRange.Value().ToXMLFormat(3)} {weighted.UtilityFactor.ToXMLFormat(3)}" +
-						$" {weighted.ElectricEnergyConsumption.Value().ToXMLFormat(3)} {weighted.FuelConsumption[FuelData.Diesel].Value().ToXMLFormat(3)} {weighted.CO2Total.Value().ToXMLFormat(3)}");
+						$" {weighted.ElectricEnergyConsumption.Value().ToXMLFormat(3)} {weighted.FuelConsumption[FuelData.Diesel].Value().ToXMLFormat(3)} {weighted.CO2PerMeter.Value().ToXMLFormat(3)}");
 
 		//1518.750 1366.875 1366.875 0.004 795230.237 30.890 20.000
 
@@ -461,7 +461,8 @@ public class TestXMLResultsWriting
 		Assert.AreEqual(0.004, weighted.UtilityFactor, 1e-3);
 		Assert.AreEqual(795230.237, weighted.ElectricEnergyConsumption.Value(), 1e-3);
 		Assert.AreEqual(30.890, weighted.FuelConsumption[FuelData.Diesel].Value(), 1e-3);
-		Assert.AreEqual(20.000, weighted.CO2Total.Value(), 1e-3);
+		Assert.AreEqual(30000.0, weighted.Distance.Value(), 1e-3);
+		Assert.AreEqual(20.0/30000.0, weighted.CO2PerMeter.Value(), 1e-8);
 
 	}