diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs
index 3bc0f5f6868fa9ce3b016550b1834b0e8a0c93b0..29b2a1683d1e8ee4d5928c13cedb4dec5fafba0b 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs
@@ -100,6 +100,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			retVal.ManufacturerAddress = data.ManufacturerAddress;
 			retVal.LegislativeClass = data.LegislativeClass;
 			retVal.ZeroEmissionVehicle = data.ZeroEmissionVehicle;
+			retVal.SleeperCab = data.SleeperCab;
 			retVal.TrailerGrossVehicleWeight = mission.Trailer.Sum(t => t.TrailerGrossVehicleWeight).DefaultIfNull(0);
 
 			retVal.BodyAndTrailerWeight = (mission.MissionType == MissionType.MunicipalUtility
diff --git a/VectoCore/VectoCore/Models/Declaration/WeightingFactors.cs b/VectoCore/VectoCore/Models/Declaration/WeightingFactors.cs
index 3856a7eda5f0740eafeda7c0a766bc59bad73f81..49c8366517e392b09b27f9305e2ff36a7f5b39d8 100644
--- a/VectoCore/VectoCore/Models/Declaration/WeightingFactors.cs
+++ b/VectoCore/VectoCore/Models/Declaration/WeightingFactors.cs
@@ -14,7 +14,11 @@ namespace TUGraz.VectoCore.Models.Declaration
 
 		public IDictionary<Tuple<MissionType, LoadingType>, double> Lookup(WeightingGroup group)
 		{
-			return new ReadOnlyDictionary<Tuple<MissionType, LoadingType>, double>(Data[group]);
+			try {
+				return new ReadOnlyDictionary<Tuple<MissionType, LoadingType>, double>(Data[group]);
+			} catch (Exception e) {
+				throw new VectoException(ErrorMessage, e, group);
+			}
 		}
 
 		#region Overrides of LookupData
diff --git a/VectoCore/VectoCore/Models/Declaration/WeightingGroups.cs b/VectoCore/VectoCore/Models/Declaration/WeightingGroups.cs
index be71310a1134783df05f3dbf8392b6e29f366d27..396b303e23ee11269871b0f7dad75939b0fed331 100644
--- a/VectoCore/VectoCore/Models/Declaration/WeightingGroups.cs
+++ b/VectoCore/VectoCore/Models/Declaration/WeightingGroups.cs
@@ -19,7 +19,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 		Group9LH,
 		Group10RD,
 		Group10LH,
-		Unknonw
+		Unknown
 	}
 
 	public class WeightingGroupHelper
@@ -60,7 +60,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 			var rows = Entries.FindAll(
 				x => x.VehicleGroup == group && x.SleeperCab == sleeperCab && engineRatedPower >= x.RatedPowerMin &&
 					engineRatedPower < x.RatedPowerMax);
-			return rows.Count == 0 ? WeightingGroup.Unknonw : rows.First().WeightingGroup;
+			return rows.Count == 0 ? WeightingGroup.Unknown : rows.First().WeightingGroup;
 		}
 		#endregion
 
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs
index 79915c78f42950e55d12e30abf4f9ff24f1640bd..21a24b0fcd54c12f55003ceea4f4cfd38fab14d3 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs
@@ -210,6 +210,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 		public bool DualFuelVehicle { get; internal set; }
 		public Watt MaxNetPower1 { get; internal set; }
 		public Watt MaxNetPower2 { get; internal set; }
+		public bool SleeperCab { get; internal set; }
 
 		protected void ComputeRollResistanceAndReducedMassWheels()
 		{
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs
index da39ead9342e3b49900ca64a326f6a44cfe1b664..b63b0b225857819c156ddd5e360007c260a066d6 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs
@@ -137,7 +137,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 				);
 		}
 
-		public void AddResult(
+		public void WriteResult(
 			DeclarationReport<XMLDeclarationReport.ResultEntry>.ResultContainer<XMLDeclarationReport.ResultEntry> entry)
 		{
 			foreach (var resultEntry in entry.ResultEntry) {
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
index cb5ab10f5ab4c147b306fec09fde821a77133cc1..70bda1d2215213b67c70ac0e38507ccbf1f39719 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
@@ -29,7 +29,9 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
+using System;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using System.Data;
 using System.Linq;
 using System.Text;
@@ -52,6 +54,8 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 		private readonly IOutputDataWriter _writer;
 
+		private IDictionary<Tuple<MissionType, LoadingType>, double> _weightingFactors;
+
 		public class ResultEntry
 		{
 			public MeterPerSecond AverageSpeed { get; private set; }
@@ -95,8 +99,10 @@ namespace TUGraz.VectoCore.OutputData.XML
 			public PerSecond EngineSpeedDrivingAvg { get; private set; }
 			public PerSecond EngineSpeedDrivingMax { get; private set; }
 
+			public double WeightingFactor { get; set; }
+
 
-			public virtual void SetResultData(VectoRunData runData, IModalDataContainer data)
+			public virtual void SetResultData(VectoRunData runData, IModalDataContainer data, double weightingFactor)
 			{
 				FuelType = data.FuelData.FuelType;
 				Payload = runData.VehicleData.Loading;
@@ -131,15 +137,17 @@ namespace TUGraz.VectoCore.OutputData.XML
 				FuelConsumptionTotal = data.TimeIntegral<Kilogram>(ModalResultField.FCFinal);
 				CO2Total = FuelConsumptionTotal * data.FuelData.CO2PerFuelWeight;
 				EnergyConsumptionTotal = FuelConsumptionTotal * data.FuelData.LowerHeatingValueVecto;
+
+				WeightingFactor = weightingFactor;
 			}
+
 		}
 
 		public XMLDeclarationReport(IOutputDataWriter writer = null)
 		{
-			_manufacturerReport = new XMLManufacturerReport(); //new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
+			_manufacturerReport = new XMLManufacturerReport();
 			_customerReport = new XMLCustomerReport();
-			//CustomerReport = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
-
+			
 			_writer = writer;
 		}
 
@@ -156,14 +164,15 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 		protected override void DoAddResult(ResultEntry entry, VectoRunData runData, IModalDataContainer modData)
 		{
-			entry.SetResultData(runData, modData);
+			var factor = _weightingFactors[Tuple.Create(runData.Mission.MissionType, runData.Loading)];
+			entry.SetResultData(runData, modData, factor);
 		}
 
 		protected internal override void DoWriteReport()
 		{
 			foreach (var result in Missions.OrderBy(m => m.Key)) {
-				_manufacturerReport.AddResult(result.Value);
-				_customerReport.AddResult(result.Value);
+				_manufacturerReport.WriteResult(result.Value);
+				_customerReport.WriteResult(result.Value);
 			}
 
 			_manufacturerReport.GenerateReport();
@@ -184,10 +193,36 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 		public override void InitializeReport(VectoRunData modelData)
 		{
+			var weightingGroup = DeclarationData.WeightingGroup.Lookup(
+				modelData.VehicleData.VehicleClass, modelData.VehicleData.SleeperCab,
+				modelData.EngineData.RatedPowerDeclared);
+			_weightingFactors = weightingGroup == WeightingGroup.Unknown ? ZeroWeighting : DeclarationData.WeightingFactors.Lookup(weightingGroup);
 			_manufacturerReport.Initialize(modelData);
 			_customerReport.Initialize(modelData);
 		}
 
+		private static IDictionary<Tuple<MissionType, LoadingType>, double> ZeroWeighting
+		{
+			get {
+				return new ReadOnlyDictionary<Tuple<MissionType, LoadingType>, double>(new Dictionary<Tuple<MissionType, LoadingType>, double>() {
+					{ Tuple.Create(MissionType.LongHaul, LoadingType.LowLoading), 0},
+					{ Tuple.Create(MissionType.LongHaul, LoadingType.ReferenceLoad), 0},
+					{ Tuple.Create(MissionType.RegionalDelivery, LoadingType.LowLoading), 0},
+					{ Tuple.Create(MissionType.RegionalDelivery, LoadingType.ReferenceLoad), 0},
+					{ Tuple.Create(MissionType.UrbanDelivery, LoadingType.LowLoading), 0},
+					{ Tuple.Create(MissionType.UrbanDelivery, LoadingType.ReferenceLoad), 0},
+					{ Tuple.Create(MissionType.LongHaulEMS, LoadingType.LowLoading), 0},
+					{ Tuple.Create(MissionType.LongHaulEMS, LoadingType.ReferenceLoad), 0},
+					{ Tuple.Create(MissionType.RegionalDeliveryEMS, LoadingType.LowLoading), 0},
+					{ Tuple.Create(MissionType.RegionalDeliveryEMS, LoadingType.ReferenceLoad), 0},
+					{ Tuple.Create(MissionType.MunicipalUtility, LoadingType.LowLoading), 0},
+					{ Tuple.Create(MissionType.MunicipalUtility, LoadingType.ReferenceLoad), 0},
+					{ Tuple.Create(MissionType.Construction, LoadingType.LowLoading), 0},
+					{ Tuple.Create(MissionType.Construction, LoadingType.ReferenceLoad), 0},
+				});
+			}
+		}
+
 
 		public static IEnumerable<XElement> GetResults(ResultEntry result, XNamespace tns, bool fullOutput)
 		{
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs
index ec04e73e3f50c8b581bfdf5b8b82707b22632e6a..eea58b1522ac3d5000bce5e942f11682f9d03503 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs
@@ -62,8 +62,13 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 		protected XNamespace tns;
 		protected XNamespace di;
+
 		private bool _allSuccess = true;
 
+		private KilogramPerMeter _weightedCo2 = 0.SI<KilogramPerMeter>();
+
+		private Kilogram _weightedPayload = 0.SI<Kilogram>();
+
 		public XMLManufacturerReport()
 		{
 			di = "http://www.w3.org/2000/09/xmldsig#";
@@ -301,11 +306,13 @@ namespace TUGraz.VectoCore.OutputData.XML
 			};
 		}
 
-		public void AddResult(
+		public void WriteResult(
 			DeclarationReport<XMLDeclarationReport.ResultEntry>.ResultContainer<XMLDeclarationReport.ResultEntry> entry)
 		{
 			foreach (var resultEntry in entry.ResultEntry) {
 				_allSuccess &= resultEntry.Value.Status == VectoRun.Status.Success;
+				_weightedPayload += resultEntry.Value.Payload * resultEntry.Value.WeightingFactor;
+				_weightedCo2 += resultEntry.Value.CO2Total / resultEntry.Value.Distance * resultEntry.Value.WeightingFactor;
 				Results.Add(new XElement(tns + XMLNames.Report_Result_Result,
 					new XAttribute(XMLNames.Report_Result_Status_Attr,
 						resultEntry.Value.Status == VectoRun.Status.Success ? "success" : "error"),
@@ -382,6 +389,21 @@ namespace TUGraz.VectoCore.OutputData.XML
 			var retVal = new XDocument();
 			var results = new XElement(Results);
 			results.AddFirst(new XElement(tns + XMLNames.Report_Result_Status, _allSuccess ? "success" : "error"));
+			var summary = _weightedPayload > 0
+				? new XElement(
+					"Summary",
+					new XElement(
+						"SpecificCO2Emissions",
+						new XAttribute(XMLNames.Report_Results_Unit_Attr, "gCO2/tkm"),
+						(_weightedCo2 / _weightedPayload).ConvertToGrammPerTonKilometer().ToXMLFormat(1)
+					),
+					new XElement(
+						"AveragePayload",
+						new XAttribute(XMLNames.Report_Results_Unit_Attr, XMLNames.Unit_t),
+						_weightedPayload.ConvertToTon().ToXMLFormat(3)
+					)
+				)
+				: null;
 			var vehicle = new XElement(VehiclePart);
 			vehicle.Add(InputDataIntegrity);
 			retVal.Add(new XProcessingInstruction("xml-stylesheet", "href=\"https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/CSS/VectoReports.css\""));
@@ -395,6 +417,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 				new XElement(tns + "Data",
 					vehicle,
 					results,
+					summary,
 					GetApplicationInfo())
 				)
 				);
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs
index f9face57e24637c892b29aaf2c3daba527efdd44..a78c665bfb8ce757d0c93bd0779796cc102988df 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs
@@ -89,9 +89,9 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 			#region Overrides of ResultEntry
 
-			public override void SetResultData(VectoRunData runData, IModalDataContainer data)
+			public override void SetResultData(VectoRunData runData, IModalDataContainer data, double factor)
 			{
-				base.SetResultData(runData, data);
+				base.SetResultData(runData, data, factor);
 
 				if (runData.SimulationType != SimulationType.VerificationTest) {
 					return;
@@ -163,7 +163,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 		protected override void DoAddResult(
 			ResultEntry entry, VectoRunData runData, IModalDataContainer modData)
 		{
-			entry.SetResultData(runData, modData);
+			entry.SetResultData(runData, modData, 0.0);
 		}
 
 		protected internal override void DoWriteReport()