diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
index bcd154415feb4b73ecc654dce8aaadbecb614c91..386b80b08b18932d1a94aececc204f1dba122d51 100644
--- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
+++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
@@ -278,7 +278,7 @@ namespace TUGraz.VectoCommon.InputData
 		double Efficiency { get; }
 	}
 
-	public interface ITorqueConverterDeclarationInputData
+	public interface ITorqueConverterDeclarationInputData : IComponentInputData
 	{
 		/// <summary>
 		/// P091
diff --git a/VectoCommon/VectoCommon/Models/AngledriveType.cs b/VectoCommon/VectoCommon/Models/AngledriveType.cs
index fe72337f4045a4ce5c785bdd632e6d1fc420875c..0c6065efd338b409c7f051f8defd0a06cec089d1 100644
--- a/VectoCommon/VectoCommon/Models/AngledriveType.cs
+++ b/VectoCommon/VectoCommon/Models/AngledriveType.cs
@@ -55,5 +55,19 @@ namespace TUGraz.VectoCommon.Models
 					throw new ArgumentOutOfRangeException("AngledriveType", type, null);
 			}
 		}
+
+		public static string ToXMLFormat(this AngledriveType type)
+		{
+			switch (type) {
+				case AngledriveType.None:
+					return "None";
+				case AngledriveType.SeparateAngledrive:
+					return "Separate Angledrive";
+				case AngledriveType.LossesIncludedInGearbox:
+					return "Losses included in Gearbox";
+				default:
+					throw new ArgumentOutOfRangeException("Angledrive Type", type, null);
+			}
+		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCommon/VectoCommon/Models/GearboxType.cs b/VectoCommon/VectoCommon/Models/GearboxType.cs
index b392c7bcd0e21d86cb9faee563c6a157ef0fb461..a6060586f142ac0343d0e33df48e8ee60ceed31e 100644
--- a/VectoCommon/VectoCommon/Models/GearboxType.cs
+++ b/VectoCommon/VectoCommon/Models/GearboxType.cs
@@ -98,5 +98,23 @@ namespace TUGraz.VectoCommon.Models
 			}
 			return 0.SI<Second>();
 		}
+
+		public static string ToXMLFormat(this GearboxType type)
+		{
+			switch (type) {
+				case GearboxType.MT:
+					return "SMT";
+				case GearboxType.AMT:
+					return "AMT";
+				case GearboxType.DrivingCycle:
+					return type.ToString();
+				case GearboxType.ATSerial:
+					return "APT-S";
+				case GearboxType.ATPowerSplit:
+					return "APT-P";
+				default:
+					throw new ArgumentOutOfRangeException("GearboxType", type, null);
+			}
+		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCommon/VectoCommon/Utils/DoubleExtensionMethods.cs b/VectoCommon/VectoCommon/Utils/DoubleExtensionMethods.cs
index 871438e5422e6f73cf48377c2846cee9cb9fcdea..1aadb5ad13018291a9b2400db2c3d144431c5107 100644
--- a/VectoCommon/VectoCommon/Utils/DoubleExtensionMethods.cs
+++ b/VectoCommon/VectoCommon/Utils/DoubleExtensionMethods.cs
@@ -260,6 +260,14 @@ namespace TUGraz.VectoCommon.Utils
 		{
 			return self.ToString(CultureInfo.InvariantCulture);
 		}
+
+		[DebuggerStepThrough]
+		[MethodImpl(MethodImplOptions.AggressiveInlining)]
+		public static string ToXMLFormat(this double self, uint? decimals = null)
+		{
+			decimals = decimals ?? 2;
+			return self.ToString("F" + decimals.Value);
+		}
 	}
 
 	public static class FloatExtensionMethods
diff --git a/VectoCommon/VectoCommon/Utils/SI.cs b/VectoCommon/VectoCommon/Utils/SI.cs
index edcb5b50388b4f33d360ad1f9764c4b8a17196bc..574421d027711e491377b17e5fb5a0cfc0dabb1b 100644
--- a/VectoCommon/VectoCommon/Utils/SI.cs
+++ b/VectoCommon/VectoCommon/Utils/SI.cs
@@ -2274,5 +2274,11 @@ namespace TUGraz.VectoCommon.Utils
 		{
 			return Val.ToGUIFormat();
 		}
+
+		public string ToXMLFormat(uint? decimals = null)
+		{
+			decimals = decimals ?? 2;
+			return Val.ToString("F" + decimals.Value);
+		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
index 3a4de9a8f6e53f305c2f7028411d0ec75dbf0a08..a235de9368957c9a053f52569adb372a90284c85 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
@@ -310,7 +310,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		public string Model
 		{
-			get { return "N/A"; }
+			get { return "N.A."; }
 		}
 
 		public string Creator
@@ -325,12 +325,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		public string TechnicalReportId
 		{
-			get { return "N/A"; }
+			get { return "N.A."; }
 		}
 
 		public string CertificationNumber
 		{
-			get { return "N/A"; }
+			get { return "N.A."; }
 		}
 
 		public string DigestValue
diff --git a/VectoCore/VectoCore/OutputData/XML/AbstractXMLWriter.cs b/VectoCore/VectoCore/OutputData/XML/AbstractXMLWriter.cs
index 1f06181ff8d649cee952199e01de80800c44ccb9..216a296f2ea1e41e38f21ad435fa0c86f124e498 100644
--- a/VectoCore/VectoCore/OutputData/XML/AbstractXMLWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/AbstractXMLWriter.cs
@@ -5,6 +5,7 @@ using System.Linq;
 using System.Xml;
 using System.Xml.Linq;
 using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Resources;
 
 namespace TUGraz.IVT.VectoXML.Writer
@@ -17,6 +18,7 @@ namespace TUGraz.IVT.VectoXML.Writer
 
 		protected XNamespace tns;
 		protected XNamespace rootNamespace;
+		protected XNamespace di;
 
 		private const string Creator = "TU Graz, IVT-EM XML Exporter";
 		protected readonly string Vendor;
@@ -28,27 +30,45 @@ namespace TUGraz.IVT.VectoXML.Writer
 		{
 			BasePath = basePath;
 			Vendor = vendor;
+
+			di = "http://www.w3.org/2000/09/xmldsig#";
+		}
+
+		protected XElement[] GetDefaultComponentElements(string componentId, string makeAndModel)
+		{
+			return new[] {
+				new XElement(tns + XMLNames.Component_Manufacturer, string.Format("{0,-5}", Vendor)),
+				new XElement(tns + XMLNames.Component_Model, string.Format("{0,-10}", makeAndModel)),
+				new XElement(tns + XMLNames.Component_TechnicalReportId, string.Format("{0,-10}", componentId)),
+				new XElement(tns + XMLNames.Component_Date, XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)),
+				new XElement(tns + XMLNames.Component_AppVersion, "VectoCore"),
+			};
 		}
 
-		protected XElement[] GetDefaultComponentElements(string typeId, string makeAndModel)
+		protected XElement[] GetDefaultComponentElements(string vin, string makeAndModel, string address)
 		{
 			return new[] {
 				new XElement(tns + XMLNames.Component_Manufacturer, String.Format("{0,-5}", Vendor)),
-				new XElement(tns + XMLNames.Component_Creator, String.Format("{0,-10}", Creator)),
+				new XElement(tns + XMLNames.Component_ManufacturerAddress, address),
+				new XElement(tns + XMLNames.Component_Model, string.Format("{0,-10}", makeAndModel)),
+				new XElement(tns + XMLNames.Vehicle_VIN, string.Format("{0,-10}", vin)),
 				new XElement(tns + XMLNames.Component_Date, XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)),
-				new XElement(tns + XMLNames.Component_Model, String.Format("{0,-10}", makeAndModel)),
-				new XElement(tns + XMLNames.Component_CertificationNumber, String.Format("{0,-10}", typeId)),
 			};
 		}
 
-		protected object[] EmbedDataTable(DataTable table, Dictionary<string, string> mapping, string tagName = "Entry")
+		protected object[] EmbedDataTable(DataTable table, Dictionary<string, string> mapping, string tagName = "Entry",
+			Dictionary<string, uint> precision = null)
 		{
 			return (from DataRow row in table.Rows
 				select
 					new XElement(tns + tagName,
 						table.Columns.Cast<DataColumn>()
 							.Where(c => mapping.ContainsKey(c.ColumnName))
-							.Select(c => new XAttribute(mapping[c.ColumnName], row[c])))).Cast<object>().ToArray();
+							.Select(c => {
+								var p = precision != null && precision.ContainsKey(c.ColumnName) ? precision[c.ColumnName] : 2;
+								return new XAttribute(mapping[c.ColumnName], row.Field<string>(c).ToDouble().ToXMLFormat(p));
+							})))
+				.Cast<object>().ToArray();
 		}
 
 		protected string GetVehicleCategoryXML(VehicleCategory vehicleCategory)
@@ -102,21 +122,5 @@ namespace TUGraz.IVT.VectoXML.Writer
 					throw new ArgumentOutOfRangeException("RetarderType", type, null);
 			}
 		}
-
-		protected string GearboxtypeToXML(GearboxType type)
-		{
-			switch (type) {
-				case GearboxType.MT:
-				case GearboxType.AMT:
-				case GearboxType.DrivingCycle:
-					return type.ToString();
-				case GearboxType.ATSerial:
-					return "AT - Serial";
-				case GearboxType.ATPowerSplit:
-					return "AT - PowerSplit";
-				default:
-					throw new ArgumentOutOfRangeException("type", type, null);
-			}
-		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs
index da5bb8c6b96253b2212da08ba242d759b7fe2075..85ed7e47faa0c0aba770b889ae5e6d6602569838 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs
@@ -2,10 +2,15 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Xml.Linq;
+using DocumentFormat.OpenXml.Drawing.Diagrams;
 using TUGraz.IVT.VectoXML;
 using TUGraz.IVT.VectoXML.Writer;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.Reader;
+using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine;
 using TUGraz.VectoCore.Resources;
 
 namespace TUGraz.VectoCore.OutputData.XML
@@ -18,9 +23,9 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 		public XMLDeclarationWriter(string vendor) : base(null, vendor)
 		{
-			tns = "urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v0.6";
-			rootNamespace = "urn:tugraz:ivt:VectoAPI:DeclarationInput:v0.6";
-			componentNamespace = "urn:tugraz:ivt:VectoAPI:DeclarationComponent:v0.6";
+			tns = "urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v0.8";
+			rootNamespace = "urn:tugraz:ivt:VectoAPI:DeclarationInput:v0.8";
+			componentNamespace = "urn:tugraz:ivt:VectoAPI:DeclarationComponent:v0.8";
 		}
 
 		public XDocument GenerateVectoJob(IDeclarationInputDataProvider data)
@@ -92,17 +97,22 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 			return new XElement(tns + XMLNames.Component_Vehicle,
 				new XAttribute(XMLNames.Component_ID_Attr, "VEH-" + vehicle.Model),
-				GetDefaultComponentElements(vehicle.TechnicalReportId, vehicle.Model),
+				GetDefaultComponentElements(vehicle.TechnicalReportId, vehicle.Model, "N.A."),
+				new XElement(tns + "LegislativeClass", "N3"),
 				new XElement(tns + XMLNames.Vehicle_VehicleCategory, GetVehicleCategoryXML(vehicle.VehicleCategory)),
 				new XElement(tns + XMLNames.Vehicle_AxleConfiguration, vehicle.AxleConfiguration.GetName()),
-				new XElement(tns + XMLNames.Vehicle_CurbWeightChassis, vehicle.CurbMassChassis.Value()),
-				new XElement(tns + XMLNames.Vehicle_GrossVehicleMass, vehicle.GrossVehicleMassRating.Value()),
-				//new XElement(tns + XMLNames.Vehicle_AirDragArea, vehicle.AirDragArea.Value()),
-				new XElement(tns + XMLNames.Vehicle_SteeredAxles, numSteeredaxles),
+				new XElement(tns + XMLNames.Vehicle_CurbMassChassis, vehicle.CurbMassChassis.ToXMLFormat(0)),
+				new XElement(tns + XMLNames.Vehicle_GrossVehicleMass, vehicle.GrossVehicleMassRating.ToXMLFormat(0)),
+				new XElement(tns + "IdlingSpeed", data.EngineInputData.IdleSpeed.ToXMLFormat(0)),
 				new XElement(tns + XMLNames.Vehicle_RetarderType, GetRetarterTypeXML(retarder.Type)),
-				retarder.Type.IsDedicatedComponent() ? new XElement(tns + XMLNames.Vehicle_RetarderRatio, retarder.Ratio) : null,
-				new XElement(tns + XMLNames.Vehicle_AngledriveType, angledrive.Type),
-				new XElement(tns + XMLNames.Vehicle_PTOType, "None"),
+				retarder.Type.IsDedicatedComponent()
+					? new XElement(tns + XMLNames.Vehicle_RetarderRatio, retarder.Ratio.ToXMLFormat(3))
+					: null,
+				new XElement(tns + XMLNames.Vehicle_AngledriveType, angledrive.Type.ToXMLFormat()),
+				new XElement(tns + "PTO",
+					new XElement(tns + "PTOShaftsGearWheels", "none"),
+					new XElement(tns + "PTOOtherElements", "none")),
+				// ToDo: TorqueLimits
 				new XElement(tns + XMLNames.Vehicle_Components,
 					CreateEngine(data.EngineInputData),
 					CreateGearbox(gearbox, gearbox.Type.AutomaticTransmission() ? data.TorqueConverterInputData : null),
@@ -112,36 +122,42 @@ namespace TUGraz.VectoCore.OutputData.XML
 					CreateAxleWheels(data.VehicleInputData),
 					CreateAuxiliaries(data.AuxiliaryInputData()),
 					CreateAirdrag(data.AirdragInputData)
-					),
-				new XElement(tns + XMLNames.Vehicle_AdvancedDriverAssist,
-					new XElement(tns + XMLNames.Vehicle_AdvancedDriverAssist_EngineStartStop,
-						new XElement(tns + XMLNames.Vehicle_AdvancedDriverAssist_EngineStartStop_Enabled,
-							data.DriverInputData.StartStop.Enabled)),
-					new XElement(tns + XMLNames.DriverModel_Overspeed,
-						new XElement(tns + XMLNames.DriverModel_Overspeed_Mode, data.DriverInputData.OverSpeedEcoRoll.Mode))
-					));
+					)
+				);
 		}
 
 		protected XElement CreateEngine(IEngineDeclarationInputData data)
 		{
+			var id = string.Format("ENG-{0}", data.Model.RemoveWhitespace());
+			var fld = EngineFullLoadCurve.Create(data.FullLoadCurve, true);
 			return new XElement(tns + XMLNames.Component_Engine,
+				new XAttribute("certificationNumber", string.Format("ENG-{0}", data.Model)),
 				new XElement(tns + XMLNames.ComponentDataWrapper,
-					new XAttribute(XMLNames.Component_ID_Attr, string.Format("ENG-{0}", data.Model)),
+					new XAttribute(XMLNames.Component_ID_Attr, id),
 					GetDefaultComponentElements(string.Format("ENG-{0}", data.Model), data.Model),
-					new XElement(tns + XMLNames.Engine_Displacement, data.Displacement.Value() * 1000 * 1000),
-					new XElement(tns + XMLNames.Engine_IdlingSpeed, data.IdleSpeed.AsRPM),
-					new XElement(tns + XMLNames.Engine_WHTCUrban, data.WHTCUrban),
-					new XElement(tns + XMLNames.Engine_WHTCRural, data.WHTCRural),
-					new XElement(tns + XMLNames.Engine_WHTCMotorway, data.WHTCMotorway),
-					new XElement(tns + XMLNames.Engine_ColdHotBalancingFactor, data.ColdHotBalancingFactor),
+					new XElement(tns + XMLNames.Engine_Displacement, (data.Displacement.Value() * 1000 * 1000).ToXMLFormat(0)),
+					new XElement(tns + XMLNames.Engine_IdlingSpeed, data.IdleSpeed.AsRPM.ToXMLFormat(0)),
+					new XElement(tns + "RatedSpeed", fld.RatedSpeed.AsRPM.ToXMLFormat(0)),
+					new XElement(tns + "RatedPower", fld.FullLoadStationaryPower(fld.RatedSpeed).ToXMLFormat(0)),
+					new XElement(tns + "MaxEngineTorque", fld.MaxLoadTorque.ToXMLFormat(0)),
+					new XElement(tns + XMLNames.Engine_WHTCUrban, data.WHTCUrban.ToXMLFormat(4)),
+					new XElement(tns + XMLNames.Engine_WHTCRural, data.WHTCRural.ToXMLFormat(4)),
+					new XElement(tns + XMLNames.Engine_WHTCMotorway, data.WHTCMotorway.ToXMLFormat(4)),
+					new XElement(tns + XMLNames.Engine_ColdHotBalancingFactor, data.ColdHotBalancingFactor.ToXMLFormat(4)),
+					new XElement(tns + "CFRegPer", "1.0000"),
+					new XElement(tns + "CFNCV", "1.0000"),
+					new XElement(tns + "FuelType", "Diesel CI"),
 					new XElement(tns + XMLNames.Engine_FuelConsumptionMap,
 						EmbedDataTable(data.FuelConsumptionMap, AttributeMappings.FuelConsumptionMapMapping)),
 					new XElement(tns + XMLNames.Engine_FullLoadAndDragCurve,
-						EmbedDataTable(data.FullLoadCurve, AttributeMappings.EngineFullLoadCurveMapping))
-					)
+						EmbedDataTable(data.FullLoadCurve, AttributeMappings.EngineFullLoadCurveMapping)
+						)
+					),
+				AddSignatureDummy(id)
 				);
 		}
 
+
 		protected XElement CreateGearbox(IGearboxDeclarationInputData gbxData,
 			ITorqueConverterDeclarationInputData torqueConverter)
 		{
@@ -150,7 +166,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 			foreach (var gearData in gbxData.Gears) {
 				var gear = new XElement(tns + XMLNames.Gearbox_Gears_Gear,
 					new XAttribute(XMLNames.Gearbox_Gear_GearNumber_Attr, i++),
-					new XElement(tns + XMLNames.Gearbox_Gear_Ratio, gearData.Ratio),
+					new XElement(tns + XMLNames.Gearbox_Gear_Ratio, gearData.Ratio.ToXMLFormat(3)),
 					gearData.MaxTorque != null
 						? new XElement(tns + XMLNames.Gearbox_Gears_MaxTorque, gearData.MaxTorque.Value())
 						: null,
@@ -159,14 +175,19 @@ namespace TUGraz.VectoCore.OutputData.XML
 					);
 				gears.Add(gear);
 			}
+			var id = string.Format("GBX-{0}", gbxData.Model.RemoveWhitespace());
 			return new XElement(tns + XMLNames.Component_Gearbox,
+				new XAttribute("certificationNumber", string.Format("GBX-{0}", gbxData.Model)),
 				new XElement(tns + XMLNames.ComponentDataWrapper,
-					new XAttribute(XMLNames.Component_ID_Attr, string.Format("GBX-{0}", gbxData.Model)),
+					new XAttribute(XMLNames.Component_ID_Attr, id),
 					GetDefaultComponentElements(string.Format("GBX-{0}", gbxData.Model), gbxData.Model),
-					new XElement(tns + XMLNames.Gearbox_TransmissionType, GearboxtypeToXML(gbxData.Type)),
+					new XElement(tns + XMLNames.Gearbox_TransmissionType, gbxData.Type.ToXMLFormat()),
+					new XElement(tns + "MainCertificationMethod", "Standard values"),
 					gears
 					),
-				gbxData.Type.AutomaticTransmission() ? CreateTorqueConverter(torqueConverter) : null);
+				AddSignatureDummy(id),
+				gbxData.Type.AutomaticTransmission() ? CreateTorqueConverter(torqueConverter) : null
+				);
 		}
 
 
@@ -175,35 +196,52 @@ namespace TUGraz.VectoCore.OutputData.XML
 			if (data == null) {
 				throw new Exception("Torque Converter is required!");
 			}
+			var id = string.Format("TC-{0}", data.Model.RemoveWhitespace());
 			return new XElement(tns + XMLNames.Component_TorqueConverter,
+				new XAttribute("certificationNumber", id),
 				new XElement(tns + XMLNames.ComponentDataWrapper,
+					new XAttribute(XMLNames.Component_ID_Attr, id),
+					GetDefaultComponentElements(data.TechnicalReportId, data.Model),
+					new XElement(tns + "CertificationMethod", "Standard values"),
 					new XElement(tns + XMLNames.TorqueConverter_Characteristics,
-						EmbedDataTable(data.TCData, AttributeMappings.TorqueConverterDataMapping)
+						EmbedDataTable(data.TCData, AttributeMappings.TorqueConverterDataMapping,
+							precision: new Dictionary<string, uint>() {
+								{ TorqueConverterDataReader.Fields.SpeedRatio, 4 }
+							})
 						)
-					));
+					),
+				AddSignatureDummy(id));
 		}
 
 		private XElement CreateAngleDrive(IAngledriveInputData data)
 		{
+			var id = string.Format("ANGL-{0}", data.Model.RemoveWhitespace());
 			return new XElement(tns + XMLNames.Component_Angledrive,
+				new XAttribute("certificationNumber", "ANGL-" + data.Model),
 				new XElement(tns + XMLNames.ComponentDataWrapper,
-					new XAttribute(XMLNames.Component_ID_Attr, "ANGL-" + data.Model),
+					new XAttribute(XMLNames.Component_ID_Attr, id),
 					GetDefaultComponentElements(data.TechnicalReportId, data.Model),
-					new XElement(tns + XMLNames.AngleDrive_Ratio, data.Ratio),
+					new XElement(tns + XMLNames.AngleDrive_Ratio, data.Ratio.ToXMLFormat(3)),
+					new XElement(tns + "CertificationMethod", "Standard values"),
 					new XElement(tns + XMLNames.AngleDrive_TorqueLossMap,
-						EmbedDataTable(data.LossMap, AttributeMappings.TransmissionLossmapMapping))));
+						EmbedDataTable(data.LossMap, AttributeMappings.TransmissionLossmapMapping))),
+				AddSignatureDummy(id));
 		}
 
 		public XElement CreateRetarder(IRetarderInputData data)
 		{
+			var id = string.Format("RET-{0}", data.Model.RemoveWhitespace());
 			return new XElement(tns + XMLNames.Component_Retarder,
+				new XAttribute("certificationNumber", "RET-none"),
 				new XElement(tns + XMLNames.ComponentDataWrapper,
-					new XAttribute(XMLNames.Component_ID_Attr, "RET-none"),
+					new XAttribute(XMLNames.Component_ID_Attr, id),
 					GetDefaultComponentElements(data.TechnicalReportId, data.Model),
+					new XElement(tns + "CertificationMethod", "Standard values"),
 					new XElement(tns + XMLNames.Retarder_RetarderLossMap,
 						EmbedDataTable(data.LossMap, AttributeMappings.RetarderLossmapMapping)
 						)
-					)
+					),
+				AddSignatureDummy(id)
 				);
 		}
 
@@ -211,12 +249,16 @@ namespace TUGraz.VectoCore.OutputData.XML
 		{
 			var typeId = string.Format("AXLGEAR-{0:0.000}", data.Ratio);
 			return new XElement(tns + XMLNames.Component_Axlegear,
+				new XAttribute("certificationNumber", string.Format("AXL-{0}", data.Model)),
 				new XElement(tns + XMLNames.ComponentDataWrapper,
 					new XAttribute(XMLNames.Component_ID_Attr, typeId),
 					GetDefaultComponentElements(typeId, "N.A."),
-					new XElement(tns + XMLNames.Axlegear_Ratio, data.Ratio),
+					new XElement(tns + "LineType", "Single portal axle"),
+					new XElement(tns + XMLNames.Axlegear_Ratio, data.Ratio.ToXMLFormat(3)),
+					new XElement(tns + "CertificationMethod", "Standard values"),
 					new XElement(tns + XMLNames.Axlegear_TorqueLossMap,
-						EmbedDataTable(data.LossMap, AttributeMappings.TransmissionLossmapMapping)))
+						EmbedDataTable(data.LossMap, AttributeMappings.TransmissionLossmapMapping))),
+				AddSignatureDummy(typeId)
 				);
 		}
 
@@ -229,14 +271,11 @@ namespace TUGraz.VectoCore.OutputData.XML
 				var axle = axleData[i];
 				axles.Add(new XElement(tns + XMLNames.AxleWheels_Axles_Axle,
 					new XAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, i + 1),
-					new XAttribute(XMLNames.AxleWheels_Axles_Axle_TwinTyres_Attr, axle.TwinTyres),
-					new XAttribute(XMLNames.AxleWheels_Axles_Axle_AxleType_Attr,
+					new XElement(tns + XMLNames.AxleWheels_Axles_Axle_AxleType_Attr,
 						i == 1 ? AxleType.VehicleDriven.ToString() : AxleType.VehicleNonDriven.ToString()),
-					GetDefaultComponentElements(string.Format("WHEEL-{0}_{1}", i,
-						axle.Wheels), axle.Wheels),
-					new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Dimension, axle.Wheels),
-					new XElement(tns + XMLNames.AxleWheels_Axles_Axle_RRCISO, axle.RollResistanceCoefficient),
-					new XElement(tns + XMLNames.AxleWheels_Axles_Axle_FzISO, axle.TyreTestLoad.Value())
+					new XElement(tns + XMLNames.AxleWheels_Axles_Axle_TwinTyres_Attr, axle.TwinTyres),
+					new XElement(tns + "Steered", i == 0),
+					CreateTyre(axle)
 					));
 			}
 
@@ -248,6 +287,21 @@ namespace TUGraz.VectoCore.OutputData.XML
 				);
 		}
 
+		private XElement CreateTyre(IAxleDeclarationInputData axle)
+		{
+			var id = string.Format("TYRE-{0}", axle.Wheels).RemoveWhitespace().Replace("/", "_");
+			return new XElement(tns + "Tyre",
+				new XAttribute("certificationNumber", id),
+				new XElement(tns + XMLNames.ComponentDataWrapper,
+					new XAttribute(XMLNames.Component_ID_Attr, id),
+					GetDefaultComponentElements(string.Format("TYRE-{0}", axle.Wheels), axle.Wheels),
+					new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Dimension, axle.Wheels),
+					new XElement(tns + XMLNames.AxleWheels_Axles_Axle_RRCDeclared, axle.RollResistanceCoefficient.ToXMLFormat(4)),
+					new XElement(tns + XMLNames.AxleWheels_Axles_Axle_FzISO, axle.TyreTestLoad.Value().ToXMLFormat(0))
+					),
+				AddSignatureDummy(id));
+		}
+
 		public XElement CreateAuxiliaries(IAuxiliariesDeclarationInputData data)
 		{
 			var auxList = new Dictionary<AuxiliaryType, XElement>();
@@ -256,9 +310,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 					auxData.Technology.Select(x => new XElement(tns + XMLNames.Auxiliaries_Auxiliary_Technology, x)).ToArray<object>());
 				auxList[auxData.Type] = entry;
 			}
-			var aux = new XElement(tns + XMLNames.ComponentDataWrapper,
-				new XAttribute(XMLNames.Component_ID_Attr, "AUX-DECL")
-				);
+			var aux = new XElement(tns + XMLNames.ComponentDataWrapper);
 			foreach (
 				var key in
 					new[] {
@@ -272,12 +324,16 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 		private XElement CreateAirdrag(IAirdragDeclarationInputData data)
 		{
+			var id = string.Format("Airdrag-{0}", data.Model);
 			return new XElement(tns + XMLNames.Component_AirDrag,
+				new XAttribute("certificationNumber", string.Format("TYRE-{0}", data.Model)),
 				new XElement(tns + XMLNames.ComponentDataWrapper,
-					new XAttribute(XMLNames.Component_ID_Attr,
-						string.Format("Airdrag-{0}", data.Model)),
+					new XAttribute(XMLNames.Component_ID_Attr, id),
 					GetDefaultComponentElements(data.Model, "N.A."),
-					new XElement(tns + XMLNames.AirDrag_DeclaredCdxA, data.AirDragArea.Value()))
+					new XElement(tns + "CdxA_0", data.AirDragArea.Value().ToXMLFormat(2)), // TODO
+					new XElement(tns + "TransferredCdxA", data.AirDragArea.Value().ToXMLFormat(2)), // TODO
+					new XElement(tns + XMLNames.AirDrag_DeclaredCdxA, data.AirDragArea.Value().ToXMLFormat(2))),
+				AddSignatureDummy(id)
 				);
 		}
 
@@ -285,5 +341,24 @@ namespace TUGraz.VectoCore.OutputData.XML
 		{
 			return type.ToString();
 		}
+
+
+		private XElement AddSignatureDummy(string id)
+		{
+			return new XElement(tns + "Signature",
+				new XElement(di + "Reference",
+					new XAttribute("URI", "#" + id),
+					new XElement(di + "Transforms",
+						new XElement(di + "Transform",
+							new XAttribute("Algorithm", "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments")),
+						new XElement(di + "Transform",
+							new XAttribute("Algorithm", "urn:vecto:xml:2017:canonicalization"))
+						),
+					new XElement(di + "DigestMethod",
+						new XAttribute("Algorithm", "http://www.w3.org/2001/04/xmlenc#sha256")),
+					new XElement(di + "DigestValue", "")
+					)
+				);
+		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs b/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs
index 2676c5b39d4b8838ca5de57c63703760d588e323..1c55475b19f233d5418423b3428aa3a7533c502b 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs
@@ -409,7 +409,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 				new XElement(tns + XMLNames.ComponentDataWrapper,
 					new XAttribute(XMLNames.Component_ID_Attr, string.Format("GBX-{0}", data.Model)),
 					GetDefaultComponentElements(string.Format("GBX-{0}", data.Model), data.Model),
-					new XElement(tns + XMLNames.Gearbox_TransmissionType, GearboxtypeToXML(data.Type)),
+					new XElement(tns + XMLNames.Gearbox_TransmissionType, data.Type.ToXMLFormat()),
 					new XElement(tns + XMLNames.Gearbox_Inertia, data.Inertia.Value()),
 					new XElement(tns + XMLNames.Gearbox_TractionInterruption, data.TractionInterruption.Value()), gears),
 				data.Type.AutomaticTransmission() ? CreateTorqueConverter(tcData) : null);
diff --git a/VectoCore/VectoCore/Resources/XMLNames.Designer.cs b/VectoCore/VectoCore/Resources/XMLNames.Designer.cs
index c972ed40ca4c55e9de53017798332814afd36ee5..2f116224927d28f9cdf3cb43e4c5db77af72162d 100644
--- a/VectoCore/VectoCore/Resources/XMLNames.Designer.cs
+++ b/VectoCore/VectoCore/Resources/XMLNames.Designer.cs
@@ -286,7 +286,7 @@ namespace TUGraz.VectoCore.Resources {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to axleType.
+        ///   Looks up a localized string similar to AxleType.
         /// </summary>
         public static string AxleWheels_Axles_Axle_AxleType_Attr {
             get {
@@ -367,7 +367,7 @@ namespace TUGraz.VectoCore.Resources {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to twinTyres.
+        ///   Looks up a localized string similar to TwinTyres.
         /// </summary>
         public static string AxleWheels_Axles_Axle_TwinTyres_Attr {
             get {
@@ -411,6 +411,15 @@ namespace TUGraz.VectoCore.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to AppVersion.
+        /// </summary>
+        public static string Component_AppVersion {
+            get {
+                return ResourceManager.GetString("Component_AppVersion", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Auxiliaries.
         /// </summary>
@@ -438,6 +447,15 @@ namespace TUGraz.VectoCore.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to CertificationMethod.
+        /// </summary>
+        public static string Component_CertificationMethod {
+            get {
+                return ResourceManager.GetString("Component_CertificationMethod", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to CertificationNumber.
         /// </summary>
@@ -492,6 +510,15 @@ namespace TUGraz.VectoCore.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to MainCertificationMethod.
+        /// </summary>
+        public static string Component_Gearbox_CertificationMethod {
+            get {
+                return ResourceManager.GetString("Component_Gearbox_CertificationMethod", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to id.
         /// </summary>
@@ -510,6 +537,15 @@ namespace TUGraz.VectoCore.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to ManufacturerAddress.
+        /// </summary>
+        public static string Component_ManufacturerAddress {
+            get {
+                return ResourceManager.GetString("Component_ManufacturerAddress", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Model.
         /// </summary>
@@ -564,6 +600,78 @@ namespace TUGraz.VectoCore.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Signature.
+        /// </summary>
+        public static string DI_Signature {
+            get {
+                return ResourceManager.GetString("DI_Signature", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Algorithm.
+        /// </summary>
+        public static string DI_Signature_Algorithm_Attr {
+            get {
+                return ResourceManager.GetString("DI_Signature_Algorithm_Attr", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Reference.
+        /// </summary>
+        public static string DI_Signature_Reference {
+            get {
+                return ResourceManager.GetString("DI_Signature_Reference", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to DigestMethod.
+        /// </summary>
+        public static string DI_Signature_Reference_DigestMethod {
+            get {
+                return ResourceManager.GetString("DI_Signature_Reference_DigestMethod", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to DigestValue.
+        /// </summary>
+        public static string DI_Signature_Reference_DigestValue {
+            get {
+                return ResourceManager.GetString("DI_Signature_Reference_DigestValue", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Transforms.
+        /// </summary>
+        public static string DI_Signature_Reference_Transforms {
+            get {
+                return ResourceManager.GetString("DI_Signature_Reference_Transforms", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Transform.
+        /// </summary>
+        public static string DI_Signature_Reference_Transforms_Transform {
+            get {
+                return ResourceManager.GetString("DI_Signature_Reference_Transforms_Transform", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to URI.
+        /// </summary>
+        public static string DI_Signature_Reference_URI_Attr {
+            get {
+                return ResourceManager.GetString("DI_Signature_Reference_URI_Attr", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to decisionFactorVel.
         /// </summary>
@@ -825,6 +933,24 @@ namespace TUGraz.VectoCore.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to CFNCV.
+        /// </summary>
+        public static string Engine_CorrecionFactor_NCV {
+            get {
+                return ResourceManager.GetString("Engine_CorrecionFactor_NCV", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to CFRegPer.
+        /// </summary>
+        public static string Engine_CorrectionFactor_RegPer {
+            get {
+                return ResourceManager.GetString("Engine_CorrectionFactor_RegPer", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Displacement.
         /// </summary>
@@ -888,6 +1014,15 @@ namespace TUGraz.VectoCore.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to FuelType.
+        /// </summary>
+        public static string Engine_FuelType {
+            get {
+                return ResourceManager.GetString("Engine_FuelType", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to FullLoadAndDragCurve.
         /// </summary>
@@ -942,6 +1077,33 @@ namespace TUGraz.VectoCore.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to MaxEngineTorque.
+        /// </summary>
+        public static string Engine_MaxTorque {
+            get {
+                return ResourceManager.GetString("Engine_MaxTorque", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to RatedPower.
+        /// </summary>
+        public static string Engine_RatedPower {
+            get {
+                return ResourceManager.GetString("Engine_RatedPower", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to RatedSpeed.
+        /// </summary>
+        public static string Engine_RatedSpeed {
+            get {
+                return ResourceManager.GetString("Engine_RatedSpeed", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to WHTCEngineering.
         /// </summary>
@@ -1617,6 +1779,24 @@ namespace TUGraz.VectoCore.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to IdlingSpeed.
+        /// </summary>
+        public static string Vehicle_IdlingSpeed {
+            get {
+                return ResourceManager.GetString("Vehicle_IdlingSpeed", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to LegislativeClass.
+        /// </summary>
+        public static string Vehicle_LegislativeClass {
+            get {
+                return ResourceManager.GetString("Vehicle_LegislativeClass", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Loading.
         /// </summary>
@@ -1626,6 +1806,33 @@ namespace TUGraz.VectoCore.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to PTO.
+        /// </summary>
+        public static string Vehicle_PTO {
+            get {
+                return ResourceManager.GetString("Vehicle_PTO", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to PTOOtherElements.
+        /// </summary>
+        public static string Vehicle_PTO_OtherElements {
+            get {
+                return ResourceManager.GetString("Vehicle_PTO_OtherElements", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to PTOShaftsGearWheels.
+        /// </summary>
+        public static string Vehicle_PTO_ShaftsGearWheels {
+            get {
+                return ResourceManager.GetString("Vehicle_PTO_ShaftsGearWheels", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to PTOCycle.
         /// </summary>
diff --git a/VectoCore/VectoCore/Resources/XMLNames.resx b/VectoCore/VectoCore/Resources/XMLNames.resx
index fb7cbd034acfd0e27d49d6612af34b758578a1ac..8129ff050d131a16458e966f0f00d4a0f233cd9c 100644
--- a/VectoCore/VectoCore/Resources/XMLNames.resx
+++ b/VectoCore/VectoCore/Resources/XMLNames.resx
@@ -433,10 +433,10 @@
 		<value>axleNumber</value>
 	</data>
 	<data name="AxleWheels_Axles_Axle_TwinTyres_Attr" xml:space="preserve">
-		<value>twinTyres</value>
+		<value>TwinTyres</value>
 	</data>
 	<data name="AxleWheels_Axles_Axle_AxleType_Attr" xml:space="preserve">
-		<value>axleType</value>
+		<value>AxleType</value>
 	</data>
 	<data name="Gearbox_Gear_GearNumber_Attr" xml:space="preserve">
 		<value>number</value>
@@ -683,5 +683,8 @@
   </data>
 	<data name="AxleWheels_Axles_Axle_RRCDeclared" xml:space="preserve">
     <value>RRCDeclared</value>
+  </data>
+	<data name="Component_AppVersion" xml:space="preserve">
+    <value>AppVersion</value>
   </data>
 </root>
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs b/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs
index 4d9a67d633d5f74be4c1c28be8c43887d1499c2b..7fae8803faee67e7dc6712b66bad17046a59f330 100644
--- a/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs
@@ -131,7 +131,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var xml = new XMLDeclarationInputDataProvider(reader, true);
 
 			Assert.IsNotNull(xml);
-			Assert.AreEqual("VEH-N/A", xml.JobInputData().JobName);
+			Assert.AreEqual("VEH-N.A.", xml.JobInputData().JobName);
 		}
 
 		[TestMethod]
@@ -153,7 +153,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var xml = new XMLDeclarationInputDataProvider(reader, true);
 
 			Assert.IsNotNull(xml);
-			Assert.AreEqual("VEH-N/A", xml.JobInputData().JobName);
+			Assert.AreEqual("VEH-N.A.", xml.JobInputData().JobName);
 		}
 	}
 }
\ No newline at end of file