diff --git a/Directory.Build.props b/Directory.Build.props
index 55c7a8c28fa9c7ac9d18393c1e1eace2a9288533..7863ecbf19f737dbf6e40e47d66b994f331316b9 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -5,10 +5,10 @@
     <!-- <DefineConstants>RELEASE_CANDIDATE</DefineConstants> -->
 
     <!-- For a Release uncomment the following line: -->
-    <!-- <DefineConstants>CERTIFICATION_RELEASE</DefineConstants> -->
+    <DefineConstants>CERTIFICATION_RELEASE</DefineConstants>
 
     <!-- Global VECTO Version -->
-    <MainProductVersion>4.0.2</MainProductVersion>
+    <MainProductVersion>4.0.3</MainProductVersion>
     <!-- <VersionSuffix>RC</VersionSuffix> -->
 
     <!-- The following settings are used as default values for ALL projects -->
diff --git a/Documentation/User Manual/6-changelog/changelog.md b/Documentation/User Manual/6-changelog/changelog.md
index 637a4ac27da38452d0d75ba11b3409f196c8c9b7..1ae3cf8c09ce26304890bf1bd84c12311aa9ddb6 100644
--- a/Documentation/User Manual/6-changelog/changelog.md	
+++ b/Documentation/User Manual/6-changelog/changelog.md	
@@ -1,5 +1,27 @@
 # Changelog
 
+**VECTO-4.0.3**
+
+***Build 3330 (2024-02-13)***
+
+- Bugfixes
+    * CodeEU-293: DistanceRun got an unexpected response
+    * CodeEU-298: Object reference not set to an instance of an object
+    * CodeEU-300: Full drive torque miscalculation
+    * CodeEU-336: Feature: Hashing tool must validate the previous step data for multi-step jobs
+    * CodeEU-337: Electric Citybus - ERROR with "31a-Specific" bus configuration
+    * CodeEU-343: Cannot simulate Primary Vehicle using vectocmd.exe
+    * CodeEU-387: VECTO sometimes fails to properly read Tyre data from primary vehicle xml
+    * CodeEU-427: Vehicle speed resulting to exceeding max gearbox speed
+    * CodeEU-428: Remove speed safety margin for gearbox re-engaging
+    * CodeEU-438: Mismatch XML schema vs Regulation (exempted vehicles)
+    * CodeEU-248: Bus P2 hybrid VECTO error in urban cycle
+    * CodeEU-278: Simulation crash when writing fuel consumption results to reports
+    * CodeEU-284: New error message and failed simulation obtained for P2 hybrid buses
+    * CodeEU-285: PEV vehicle error in routine to write the results with new vecto version  4.0.2.3275
+    * CodeEU-287: PEV_IEPC error message:"can only operate on SI Objects with the same unit"
+    * CodeEU-289: VECTO Simulation Error for bus with validated input data
+
 **VECTO-4.0.2**
 
 ***Build 3275 (2023-12-20)***
diff --git a/Documentation/User Manual/help.html b/Documentation/User Manual/help.html
index df7c636f64a42ee1b1f54aef7b4cba05cd656b09..1edc0dde47dac84bdd1760e5aceebc6aea8294d4 100644
--- a/Documentation/User Manual/help.html	
+++ b/Documentation/User Manual/help.html	
@@ -10623,6 +10623,40 @@ stored as LOG_backup.txt.</p>
 </section>
 <section id="changelog" class="level1">
 <h1>Changelog</h1>
+<p><strong>VECTO-4.0.3</strong></p>
+<p><strong><em>Build 3330 (2024-02-13)</em></strong></p>
+<ul>
+<li>Bugfixes
+<ul>
+<li>CodeEU-293: DistanceRun got an unexpected response</li>
+<li>CodeEU-298: Object reference not set to an instance of an
+object</li>
+<li>CodeEU-300: Full drive torque miscalculation</li>
+<li>CodeEU-336: Feature: Hashing tool must validate the previous step
+data for multi-step jobs</li>
+<li>CodeEU-337: Electric Citybus - ERROR with “31a-Specific” bus
+configuration</li>
+<li>CodeEU-343: Cannot simulate Primary Vehicle using vectocmd.exe</li>
+<li>CodeEU-387: VECTO sometimes fails to properly read Tyre data from
+primary vehicle xml</li>
+<li>CodeEU-427: Vehicle speed resulting to exceeding max gearbox
+speed</li>
+<li>CodeEU-428: Remove speed safety margin for gearbox re-engaging</li>
+<li>CodeEU-438: Mismatch XML schema vs Regulation (exempted
+vehicles)</li>
+<li>CodeEU-248: Bus P2 hybrid VECTO error in urban cycle</li>
+<li>CodeEU-278: Simulation crash when writing fuel consumption results
+to reports</li>
+<li>CodeEU-284: New error message and failed simulation obtained for P2
+hybrid buses</li>
+<li>CodeEU-285: PEV vehicle error in routine to write the results with
+new vecto version 4.0.2.3275</li>
+<li>CodeEU-287: PEV_IEPC error message:“can only operate on SI Objects
+with the same unit”</li>
+<li>CodeEU-289: VECTO Simulation Error for bus with validated input
+data</li>
+</ul></li>
+</ul>
 <p><strong>VECTO-4.0.2</strong></p>
 <p><strong><em>Build 3275 (2023-12-20)</em></strong></p>
 <ul>
diff --git a/HashingTool/Helper/HashingHelper.cs b/HashingTool/Helper/HashingHelper.cs
index 9d1f1db7b722b5d5f72a256230be90b230498291..9a5c494a9d91764befaa103aa9a40c5ca85fc3a3 100644
--- a/HashingTool/Helper/HashingHelper.cs
+++ b/HashingTool/Helper/HashingHelper.cs
@@ -80,11 +80,18 @@ namespace HashingTool.Helper
 			if (x == null || x.DocumentElement == null) {
 				return null;
 			}
-			var valid = x.DocumentElement.LocalName == XMLNames.VectoInputDeclaration &&
-						x.DocumentElement.FirstChild.LocalName == XMLNames.Component_Vehicle;
+			var validSingleStep = (x.DocumentElement.LocalName == XMLNames.VectoInputDeclaration &&
+						x.DocumentElement.FirstChild.LocalName == XMLNames.Component_Vehicle);
+
+			var validMultiStep = (x.DocumentElement.LocalName == XMLNames.VectoOutputMultistep && 
+						x.DocumentElement.FirstChild.LocalName == XMLNames.Bus_PrimaryVehicle);
+
+			var valid = validSingleStep || validMultiStep;
+
 			if (!valid) {
 				errorLog.LogError($"Invalid XML file given ({x.DocumentElement.LocalName}/{x.DocumentElement.FirstChild.LocalName}). " +
-								$"Expected Vehicle XML ({XMLNames.VectoInputDeclaration}/{XMLNames.Component_Vehicle})!");
+								$"Expected Vehicle XML ({XMLNames.VectoInputDeclaration}/{XMLNames.Component_Vehicle}) or " +
+								$"({XMLNames.VectoOutputMultistep}/{XMLNames.Bus_PrimaryVehicle}) !");
 			}
 			return valid;
 		}
diff --git a/HashingTool/ViewModel/UserControl/VectoJobFile.cs b/HashingTool/ViewModel/UserControl/VectoJobFile.cs
index c8f1a7a5ada6fcd8cae74d8bf60a115b5e96d7dc..acb5c4df0bb337441b6b1bb136c368163c8aff9d 100644
--- a/HashingTool/ViewModel/UserControl/VectoJobFile.cs
+++ b/HashingTool/ViewModel/UserControl/VectoJobFile.cs
@@ -37,6 +37,7 @@ using System.Xml;
 using HashingTool.Helper;
 using TUGraz.VectoCommon.Hashing;
 using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoHashing;
 using XmlDocumentType = TUGraz.VectoCore.Utils.XmlDocumentType;
 
@@ -51,7 +52,8 @@ namespace HashingTool.ViewModel.UserControl
 
 
 		public VectoJobFile(string name, Func<XmlDocument, IErrorLogger, bool?> contentCheck,
-			Action<XmlDocument, VectoXMLFile> hashValidation = null) : base(name, true, contentCheck, XmlDocumentType.DeclarationJobData, hashValidation)
+			Action<XmlDocument, VectoXMLFile> hashValidation = null) : 
+			base(name, true, contentCheck, XmlDocumentType.DeclarationJobData | XmlDocumentType.MultistepOutputData, hashValidation)
 		{
 			_xmlFile.PropertyChanged += JobFilechanged;
 			Components = new ObservableCollection<ComponentEntry>();
@@ -176,6 +178,13 @@ namespace HashingTool.ViewModel.UserControl
 						entry.Component = component.Count == 1
 							? component.Entry.XMLElementName()
 							: $"{component.Entry.XMLElementName()} ({i + 1})";
+
+						if (entry.Component.IsOneOf(XMLNames.Bus_PrimaryVehicle, XMLNames.ManufacturingStep)
+							|| !h.ElementIsSigned(component.Entry, i)) {
+						
+							continue;
+						}
+
 						entry.Valid = h.ValidateHash(component.Entry, i);
 						entry.CanonicalizationMethod = h.GetCanonicalizationMethods(component.Entry, i).ToArray();
 						entry.DigestMethod = h.GetDigestMethod(component.Entry, i);
diff --git a/VECTO3GUI2020/Helper/Converter/LabledTextBoxConverter.cs b/VECTO3GUI2020/Helper/Converter/LabledTextBoxConverter.cs
index 5fe323ec869c2b0c5a62a3b074380494d7ae7619..8858cb9b7e4e06f0267135809fddeffcd0accd64 100644
--- a/VECTO3GUI2020/Helper/Converter/LabledTextBoxConverter.cs
+++ b/VECTO3GUI2020/Helper/Converter/LabledTextBoxConverter.cs
@@ -120,7 +120,7 @@ namespace VECTO3GUI2020.Helper.Converter
 
 		private void GetConversionFactor(ref double factor, string convertId)
 		{
-			switch (convertId.ToLower())
+			switch (convertId.ToLowerInvariant())
 			{
 				case "asrpm":
 					factor = ToRpm;
@@ -133,7 +133,7 @@ namespace VECTO3GUI2020.Helper.Converter
 
 		private void GetDecimals(string arg, ref int? decimals)
 		{
-			switch (arg.ToLower())
+			switch (arg.ToLowerInvariant())
 			{
 				case "int":
 					decimals = 0;
diff --git a/VECTO3GUI2020/Helper/DialogHelper.cs b/VECTO3GUI2020/Helper/DialogHelper.cs
index 39162d69b8228623221234bbfc41eefa38232d31..5537e0fd0808771ce49b200fd3aa0e6e48b8a800 100644
--- a/VECTO3GUI2020/Helper/DialogHelper.cs
+++ b/VECTO3GUI2020/Helper/DialogHelper.cs
@@ -2,7 +2,9 @@
 using System.IO;
 using System.Windows;
 using System.Windows.Forms;
+using System.Windows.Threading;
 using VECTO3GUI2020.Properties;
+using Application = System.Windows.Application;
 using MessageBox = System.Windows.MessageBox;
 
 namespace VECTO3GUI2020.Helper
@@ -143,13 +145,23 @@ namespace VECTO3GUI2020.Helper
 			MessageBoxButton button,
 			MessageBoxImage icon)
 		{
-			return MessageBox.Show(messageBoxText, caption, button, icon);
+			var t = Application.Current.Dispatcher
+				.InvokeAsync(() => MessageBox.Show(messageBoxText, caption, button, icon)).Task;
+
+			t.Wait();
+			return t.Result;
+            //return MessageBox.Show(messageBoxText, caption, button, icon);
 		}
 
 		public MessageBoxResult ShowMessageBox(string messageBoxText, string caption)
 		{
-			return MessageBox.Show(messageBoxText, caption);
-		}
+			var t = Application.Current.Dispatcher
+				.InvokeAsync(() => MessageBox.Show(messageBoxText, caption)).Task;
+
+			t.Wait();
+			return t.Result;
+            //return MessageBox.Show(messageBoxText, caption);
+        }
 
 
 
diff --git a/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs b/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs
index fdd52be745a696b4915d60d576e1aad8fc4d5122..1167ff77e0b7bf546cb67838e5b7d15472f51881 100644
--- a/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs
+++ b/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs
@@ -585,6 +585,10 @@ namespace VECTO3GUI2020.ViewModel.Implementation
 							Type = MessageType.ErrorMessage, 
 							Message = ex.Message
 						});
+					DialogHelper.ShowErrorMessage(
+						$"ERROR running job {Path.GetFileName(jobEntry.DataSource.SourceFile)}: {ex.Message}", "Error");
+					status.Report($"Failed to initialize Simulation");
+                    return;
 				}
 			}
 			foreach (var cycle in jobContainer.GetCycleTypes())
diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/FilePathUtilityTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/FilePathUtilityTests.vb
index 466a39eae461196032bb9ae002048616712cb4b8..7466fe2537bc84543f34375285ed72ddcfbb6104 100644
--- a/VECTOAux/VectoAuxiliariesTests/UnitTests/FilePathUtilityTests.vb
+++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/FilePathUtilityTests.vb
@@ -22,7 +22,7 @@ Public Sub GetPathOnly()
 
   Dim actual  As String = FilePathUtils.filePathOnly( GOODFILEPATH_WithExt)
 
-  Assert.AreEqual( expected.ToLower(), actual.ToLower())
+  Assert.AreEqual( expected.ToLowerInvariant(), actual.ToLowerInvariant())
     
 End Sub
 
@@ -33,7 +33,7 @@ Public Sub GetExtOnly()
 
   Dim actual  As String = FilePathUtils.fileExtentionOnly( GOODFILEPATH_WithExt)
 
-  Assert.AreEqual( expected.ToLower(), actual.ToLower())
+  Assert.AreEqual( expected.ToLowerInvariant(), actual.ToLowerInvariant())
 
 End Sub
 
@@ -45,7 +45,7 @@ Public Sub NoFileNameExpectOne()
 
   Dim actual  As String = FilePathUtils.fileNameOnly( noFileFILEPATH, True)
 
-  Assert.AreEqual( expected.ToLower(), actual.ToLower())
+  Assert.AreEqual( expected.ToLowerInvariant(), actual.ToLowerInvariant())
 
 
 End Sub
diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
index 01b0484a6bb0d459f3a4187c7cc999c30e428754..a13a03f2ce6c6ab9885583db876952538cc05a26 100644
--- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
+++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
@@ -1172,10 +1172,16 @@ namespace TUGraz.VectoCommon.InputData
 		IList<IResult> Results { get; }
 	}
 
+	public enum ResultStatus
+	{
+		Success,
+		Error,
+		PrimaryRunIgnored
+	}
 
-	public interface IResult
+    public interface IResult
 	{
-		string ResultStatus { get; }
+		ResultStatus ResultStatus { get; }
 
 		VehicleClass VehicleGroup { get; }
 
diff --git a/VectoCommon/VectoHashing/VectoHash.cs b/VectoCommon/VectoHashing/VectoHash.cs
index 83cd73763e1a45285fe16b9f3ea58d1f5429139b..4a371f543eccc947e73e541d794c47edfd803f01 100644
--- a/VectoCommon/VectoHashing/VectoHash.cs
+++ b/VectoCommon/VectoHashing/VectoHash.cs
@@ -110,11 +110,13 @@ namespace TUGraz.VectoHashing
 		public IList<VectoComponents> GetContainigComponents()
 		{
 			var retVal = new List<VectoComponents>();
+			var rootName = Document.FirstChild.NextSibling.LocalName;
+
 			foreach (var component in EnumHelper.GetValues<VectoComponents>()) {
 				// special treatment for REESS: can be either supercap or multiple batteries where the component node may contain several sub-components
 				var select = component == VectoComponents.ElectricEnergyStorage
-					? $"//*[local-name()='{XMLNames.VectoInputDeclaration}']//*[local-name()='{component.XMLElementName()}'  or local-name()='Capacitor']//*[local-name()='Data']"
-					: $"//*[local-name()='{XMLNames.VectoInputDeclaration}']//*[local-name()='{component.XMLElementName()}']";
+					? $"//*[local-name()='{rootName}']//*[local-name()='{component.XMLElementName()}'  or local-name()='Capacitor']//*[local-name()='Data']"
+					: $"//*[local-name()='{rootName}']//*[local-name()='{component.XMLElementName()}']";
                 var nodes = Document.SelectNodes(select);
 				var count = nodes?.Count ?? 0;
 				for (var i = 0; i < count; i++) {
@@ -137,7 +139,10 @@ namespace TUGraz.VectoHashing
 
 		public string ComputeHash(IEnumerable<string> canonicalization = null, string digestMethod = null)
 		{
-			var nodes = Document.SelectNodes(GetComponentQueryString());
+			var isMultiStep = (Document.ChildNodes.Count > 0) 
+				&& Document.ChildNodes[1].ChildNodes.Cast<XmlNode>().Any(x => x.LocalName == XMLNames.ManufacturingStep);
+			
+			var nodes = Document.SelectNodes(GetComponentQueryString(null, isMultiStep));
 			if (nodes == null || nodes.Count == 0) {
 				throw new Exception("No component found");
 			}
@@ -420,12 +425,32 @@ namespace TUGraz.VectoHashing
 				ComputeHash(component, index));
 		}
 
+		public bool ElementIsSigned(VectoComponents component, int index = 0)
+		{ 
+			var nodes = GetNodes(component, index);
+
+			var parent = nodes[index].ParentNode;
+			if (parent == null) {
+				throw new Exception("Invalid structure of input XML!");
+			}
+
+			if (nodes[index].Attributes[XMLNames.Component_ID_Attr] == null) {
+				return false;
+			}
+
+			var elementToHash = nodes[index].Attributes[XMLNames.Component_ID_Attr].Value;
+			var nodesDV = parent.SelectNodes(".//*[@URI='#" + elementToHash + "']/*[local-name() = 'DigestValue']");
+			
+			return (nodesDV != null && nodesDV.Count > 0);
+		}
 
-		protected static string GetComponentQueryString(VectoComponents? component = null)
+		protected static string GetComponentQueryString(VectoComponents? component = null, bool isMultiStep = false)
 		{
 			switch (component) {
 				case null:
-					return "(//*[@id])[1]";
+					return isMultiStep 
+						? $"//*[local-name()='{XMLNames.ManufacturingStep}']/*[local-name()='Data']" 
+						: "(//*[@id])[1]";
 				case VectoComponents.Vehicle:
 					return $"//*[local-name()='{component.Value.XMLElementName()}']";
 				case VectoComponents.ElectricEnergyStorage:
diff --git a/VectoCore/VectoCore/Configuration/Constants.cs b/VectoCore/VectoCore/Configuration/Constants.cs
index aa44a22fc0ed0fae354a66d867e0c9fc0dee9891..e65493d40983083cf05b2148f1eced60bbb0a3d2 100644
--- a/VectoCore/VectoCore/Configuration/Constants.cs
+++ b/VectoCore/VectoCore/Configuration/Constants.cs
@@ -374,8 +374,6 @@ namespace TUGraz.VectoCore.Configuration
 			/// the combustion engine is set to on.
 			/// </summary>
 			public const double VTPIdleSpeedDetectionFactor = 0.85;
-
-			public const double DownshiftIdlespeedFactor = 1.1;
 		}
 
 		public static class XML
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONIEPCData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONIEPCData.cs
index 06cfacf087591e2e6f95cc6990946824ed91c611..a6f205d64a1817cd15438ba650cbf9eeeef7c2bd 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONIEPCData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONIEPCData.cs
@@ -79,7 +79,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			foreach (var entry in VoltageLevels.OrderBy(x => x.VoltageLevel).AsEnumerable()) {
 				var maxTq = IEPCFullLoadCurveReader.Create(entry.FullLoadCurve, count,
 					gearRatioUsedForMeasurement.Ratio);
-				if (maxTq.MaxSpeed > maxPwr) {
+				if (maxTq.MaxPower > maxPwr) {
 					maxPwr = maxTq.MaxPower;
 				}
 			}
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
index 120a9a7b773e17dfe809ef5586d8beb791568f9b..4c23345405693ada1879da380d16be7ed5da9a5c 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
@@ -836,7 +836,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 			_manufacturerResults = new ManufacturerResults(xmlDoc.SelectSingleNode("//*[local-name() = 'Results']"));
 			_vehicleLenght = xmlDoc.SelectSingleNode("//*[local-name() = 'VehicleLength']")?.InnerText.ToDouble().SI<Meter>();
-			_vehicleClass = VehicleClassHelper.Parse(xmlDoc.SelectSingleNode("//*[local-name() = 'VehicleGroup']").InnerText);
+			_vehicleClass = VehicleClassHelper.Parse(xmlDoc.SelectSingleNode("//*[local-name() = 'VehicleGroup']")?.InnerText);
 			_vehicleCode = xmlDoc.SelectSingleNode("//*[local-name() = 'VehicleCode']")?.InnerText.ParseEnum<VehicleCode>() ?? VehicleCode.NOT_APPLICABLE;
 		}
 	}
@@ -849,7 +849,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			Results = new List<IResult>();
 			foreach (XmlNode node in resultNode.SelectNodes("./*[local-name() = 'Result' and @status='success']")) {
 				var entry = new Result {
-					ResultStatus = node.Attributes.GetNamedItem("status").InnerText,
+					ResultStatus = node.Attributes.GetNamedItem("status").InnerText.ParseEnum<ResultStatus>(),
 					Mission = node.SelectSingleNode("./*[local-name()='Mission']").InnerText.ParseEnum<MissionType>(),
 					SimulationParameter = GetSimulationParameter(node.SelectSingleNode("./*[local-name() = 'SimulationParameters' or local-name() = 'SimulationParametersCompletedVehicle']")),
 					EnergyConsumption = node.SelectSingleNode("./*[local-name()='Fuel' and FuelConsumption/@unit='MJ/km']")?
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01.cs
index b7a1dec0e18faa22425e6960cc6f080d64807cf6..6b2a02a52baa432acda57a651ade60584c2fe7cd 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01.cs
@@ -2,6 +2,7 @@
 using System.Linq;
 using System.Xml;
 using System.Xml.Linq;
+using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
@@ -54,7 +55,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		private IList<IResult> GetResult(XmlNode xmlNode)
 		{
-			var resultStatus = GetAttribute(xmlNode, XMLNames.Result_Status);
+			var resultStatus = GetAttribute(xmlNode, XMLNames.Result_Status).ParseEnum<ResultStatus>();
 			var vehicleGroup = GetString(XMLNames.Report_Results_PrimaryVehicleSubgroup, xmlNode);
 			var mission = GetString(XMLNames.Report_Result_Mission, xmlNode).ParseEnum<MissionType>();
 			var simulationNode = GetNode(XMLNames.Report_ResultEntry_SimulationParameters, xmlNode);
@@ -66,9 +67,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 				var retVal = new List<IResult>();
 				foreach (XmlNode node in ovcModes) {
 					var ovcMode = GetAttribute(node, XMLNames.Results_Report_OVCModeAttr).ParseEnum<OvcHevMode>();
-					GetEnergyConsumption(node, out var ovcEnergyConsumption, out var ovcElectricEnergyConsumption);
+					GetEnergyConsumption(node, out var ovcEnergyConsumption, out var ovcElectricEnergyConsumption, out var ovcIgnoredPrimaryRun);
 					retVal.Add(new Result {
-						ResultStatus = resultStatus,
+						ResultStatus = ovcIgnoredPrimaryRun ? ResultStatus.PrimaryRunIgnored : resultStatus,
 						Mission = mission,
 						VehicleGroup = VehicleClassHelper.Parse(vehicleGroup),
 						SimulationParameter = simulationParams,
@@ -82,10 +83,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 				return retVal;
 			}
 
-			GetEnergyConsumption(xmlNode, out var energyConsumption, out var electricEnergyConsumption);
+			GetEnergyConsumption(xmlNode, out var energyConsumption, out var electricEnergyConsumption, out var ignoredPrimaryRun);
 			return new List<IResult>() {
 				new Result {
-					ResultStatus = resultStatus,
+					ResultStatus = ignoredPrimaryRun ? ResultStatus.PrimaryRunIgnored : resultStatus,
 					Mission = mission,
 					VehicleGroup = VehicleClassHelper.Parse(vehicleGroup),
 					SimulationParameter = simulationParams,
@@ -98,19 +99,37 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 		}
 
 		private void GetEnergyConsumption(XmlNode xmlNode, out Dictionary<FuelType, JoulePerMeter> energyConsumption,
-			out JoulePerMeter electricEnergyConsumption)
+			out JoulePerMeter electricEnergyConsumption, out bool ignoredPrimaryRun)
 		{
+			var ignoredPrimaryRunTmp = false;
 			energyConsumption = GetNodes(XMLNames.Report_Results_Fuel, xmlNode)
-				.Cast<XmlNode>().Select(x => new KeyValuePair<FuelType, JoulePerMeter>(
-					GetAttribute(x, XMLNames.Report_Results_Fuel_Type_Attr).ParseEnum<FuelType>(),
-					x.SelectSingleNode(
-							$".//*[local-name()='{XMLNames.Report_Result_EnergyConsumption}' and @unit='MJ/km']")?.InnerText
-						.ToDouble().SI(Unit.SI.Mega.Joule.Per.Kilo.Meter).Cast<JoulePerMeter>())).ToDictionary(x => x.Key, x => x.Value);
-			electricEnergyConsumption = GetNode(XMLNames.Report_ResultEntry_VIF_ElectricEnergyConsumption, xmlNode, required:false)?
+				.Cast<XmlNode>().Select(x => {
+					var fuelType = GetAttribute(x, XMLNames.Report_Results_Fuel_Type_Attr).ParseEnum<FuelType>();
+					var consumption = x.SelectSingleNode(
+							$".//*[local-name()='{XMLNames.Report_Result_EnergyConsumption}' and @unit='MJ/km']")
+						?.InnerText.ToDouble();
+					if (consumption.HasValue && double.IsNaN(consumption.Value)) {
+						ignoredPrimaryRunTmp = true;
+						return new KeyValuePair<FuelType, JoulePerMeter>(fuelType,
+							null);
+                    }
+                    return new KeyValuePair<FuelType, JoulePerMeter>(fuelType,
+						consumption?.SI(Unit.SI.Mega.Joule.Per.Kilo.Meter).Cast<JoulePerMeter>());
+				}).ToDictionary(x => x.Key, x => x.Value);
+			
+			var electricEnergyConsumptionValue = GetNode(XMLNames.Report_ResultEntry_VIF_ElectricEnergyConsumption, xmlNode, required:false)?
 				.SelectSingleNode(
 					$".//*[local-name()='{XMLNames.Report_Result_EnergyConsumption}' and @unit='MJ/km']")?.InnerText?
-				.ToDouble().SI(Unit.SI.Mega.Joule.Per.Kilo.Meter).Cast<JoulePerMeter>();
+				.ToDouble();
+			if (electricEnergyConsumptionValue.HasValue && double.IsNaN(electricEnergyConsumptionValue.Value)) {
+				ignoredPrimaryRunTmp = true;
+				electricEnergyConsumption = null;
+            } else {
+				electricEnergyConsumption = electricEnergyConsumptionValue?.SI(Unit.SI.Mega.Joule.Per.Kilo.Meter)
+					.Cast<JoulePerMeter>();
+			}
 
+			ignoredPrimaryRun = ignoredPrimaryRunTmp;
 		}
 
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricStorageSystemDeclarationInputData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricStorageSystemDeclarationInputData.cs
index d2b2cf5c3ae29bfaf620603b11cfb7e75fe39722..b837673929ee14f78b9b0e580aea1154e6422e4c 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricStorageSystemDeclarationInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricStorageSystemDeclarationInputData.cs
@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.Data;
+using System.Globalization;
 using System.IO;
 using System.Linq;
 using System.Xml;
@@ -243,7 +244,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			foreach (DataRow row in corrected.Rows) {
 				for (var i = 1; i < nrCols; i++) {
 					var uncorr = row.ParseDouble(i);
-					row[i] = uncorr * dcir_corr.Value();
+					row[i] = (uncorr * dcir_corr.Value()).ToXMLFormat(2);
 				}
 			}
 
@@ -272,10 +273,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			var maxDischargeCurrent = maxDischargeCurrentRow.Field<string>(BatteryMaxCurrentReader.Fields.MaxDischargeCurrent).ToDouble() * 5;
 			var newMap = new string[] {
 				$"{BatteryMaxCurrentReader.Fields.StateOfCharge}, {BatteryMaxCurrentReader.Fields.MaxChargeCurrent}, {BatteryMaxCurrentReader.Fields.MaxDischargeCurrent}",
-				$"  0, {maxChargeCurrent}, 0",
-				$" 30, {maxChargeCurrent}, {maxDischargeCurrent}",
-				$" 80, {maxChargeCurrent}, {maxDischargeCurrent}",
-				$"100, 0, {maxDischargeCurrent}"
+				$"  0, {maxChargeCurrent.ToXMLFormat(2)}, 0",
+				$" 30, {maxChargeCurrent.ToXMLFormat(2)}, {maxDischargeCurrent.ToXMLFormat(2)}",
+				$" 80, {maxChargeCurrent.ToXMLFormat(2)}, {maxDischargeCurrent.ToXMLFormat(2)}",
+				$"100, 0, {maxDischargeCurrent.ToXMLFormat(2)}"
 			};
 			return VectoCSVFile.ReadStream(newMap.Join(Environment.NewLine).ToStream());
 		}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs
index 25bfe50aa36dcf31cd9cbbcfc0d4c3911eefce79..9a45e004a8d751e9af0bb04cd45a38f6551c8823 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs
@@ -1175,12 +1175,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 				return InputComplete(_consolidateElectricConsumerData, nameof(_consolidateElectricConsumerData))
 					& _consolidateElectricConsumerData.IsInputDataCompleteFullCheck(jobType)
 					& InputComplete(_consolidatedHVACBusAuxiliariesData, nameof(_consolidatedHVACBusAuxiliariesData))
-					& _consolidatedHVACBusAuxiliariesData.IsInputDataCompleteFullCheck(jobType);
+					& ((_consolidatedHVACBusAuxiliariesData != null)
+						&& _consolidatedHVACBusAuxiliariesData.IsInputDataCompleteFullCheck(jobType));
 
 			}
 			return InputComplete(_consolidateElectricConsumerData, nameof(_consolidateElectricConsumerData)) 
 					&& _consolidateElectricConsumerData.IsInputDataComplete(jobType)
 					&& InputComplete(_consolidatedHVACBusAuxiliariesData, nameof(_consolidatedHVACBusAuxiliariesData))
+					&& (_consolidatedHVACBusAuxiliariesData != null)
 					&& _consolidatedHVACBusAuxiliariesData.IsInputDataComplete(jobType);
 		}
 
@@ -1200,7 +1202,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		protected override IList<string> GetInvalidEntriesTemplate(VectoSimulationJobType jobType)
 		{
 			return _invalidEntries.Concat(_consolidateElectricConsumerData.GetInvalidEntries(jobType))
-				.Concat(_consolidatedHVACBusAuxiliariesData.GetInvalidEntries(jobType)).ToList();
+				.Concat(_consolidatedHVACBusAuxiliariesData?.GetInvalidEntries(jobType) ?? new List<string>()).ToList();
 		}
 
 
@@ -1366,7 +1368,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 						& InputComplete(DoubleGlazing, nameof(DoubleGlazing))
 						& InputComplete(AdjustableAuxiliaryHeater, nameof(AdjustableAuxiliaryHeater))
 						& InputComplete(SeparateAirDistributionDucts, nameof(SeparateAirDistributionDucts))
-						& MethodComplete(RequiredParametersForJobType(jobType), nameof(RequiredParametersForJobType));
+						& MethodComplete(RequiredParametersForJobType(jobType), "Electric Heater");
 			}
 			return MethodComplete(IsCorrectSystemConfiguration(), nameof(IsCorrectSystemConfiguration))
 					&& InputComplete(HeatPumpTypeCoolingDriverCompartment, nameof(HeatPumpTypeCoolingDriverCompartment))
@@ -1377,7 +1379,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 					&& InputComplete(DoubleGlazing, nameof(DoubleGlazing))
 					&& InputComplete(AdjustableAuxiliaryHeater, nameof(AdjustableAuxiliaryHeater))
 					&& InputComplete(SeparateAirDistributionDucts, nameof(SeparateAirDistributionDucts))
-					&& MethodComplete(RequiredParametersForJobType(jobType), nameof(RequiredParametersForJobType));
+					&& MethodComplete(RequiredParametersForJobType(jobType), "Electric Heater");
 		}
 
 		public override string GetInvalidEntry()
diff --git a/VectoCore/VectoCore/InputData/Impl/InputData.cs b/VectoCore/VectoCore/InputData/Impl/InputData.cs
index 6c96f28215b978360b5723b28fff1850ef39e423..0d4bd00fb5ceb451b94b11ca7f5abc42428ce8bc 100644
--- a/VectoCore/VectoCore/InputData/Impl/InputData.cs
+++ b/VectoCore/VectoCore/InputData/Impl/InputData.cs
@@ -265,11 +265,12 @@ namespace TUGraz.VectoCore.InputData.Impl
 
 		public IList<IResult> Results { get; internal set; }
 	}
+
 	
 	[DebuggerDisplay("{ResultStatus} | {VehicleGroup} {Mission} {OvcMode}")]
 	public class Result : IResult
 	{
-		public string ResultStatus { get; internal set; }
+		public ResultStatus ResultStatus { get; internal set; }
 		public VehicleClass VehicleGroup { get; internal set; }
 		public MissionType Mission { get; internal set; }
 		public ISimulationParameter SimulationParameter { get; internal set; }
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/HybridStrategyParameterDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/HybridStrategyParameterDataAdapter.cs
index a39b1f745917d0a9670332624a3069b694f9048b..f3ed1383a76bdfc045c350c0071802c5c64f08d6 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/HybridStrategyParameterDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/HybridStrategyParameterDataAdapter.cs
@@ -64,21 +64,32 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 					gbxLimit.Add(new VehicleMaxPropulsionTorque.FullLoadEntry() {
 						MotorSpeed = 0.RPMtoRad(),
 						FullDriveTorque = VectoMath.Min(gearboxData.Gears[key].MaxTorque,
-							(em?.EfficiencyData.VoltageLevels.Last().FullLoadDriveTorque(0.RPMtoRad()) ?? 0.SI<NewtonMeter>() * ratioAdc))
+							(em?.EfficiencyData.VoltageLevels.Last().FullLoadDriveTorque(0.RPMtoRad())?.Abs() ?? 0.SI<NewtonMeter>() * ratioAdc))
 					});
                     foreach (var iceEntry in engineData.FullLoadCurves[0].FullLoadEntries) {
 						gbxLimit.Add(new VehicleMaxPropulsionTorque.FullLoadEntry() {
 							MotorSpeed = iceEntry.EngineSpeed,
 							FullDriveTorque = VectoMath.Min(gearboxData.Gears[key].MaxTorque, 
 								iceEntry.TorqueFullLoad + (em?.EfficiencyData.VoltageLevels.Last().FullLoadDriveTorque(
-									iceEntry.EngineSpeed * ratioAdc) * ratioAdc ?? 0.SI<NewtonMeter>()))
+									iceEntry.EngineSpeed * ratioAdc).Abs() * ratioAdc ?? 0.SI<NewtonMeter>()))
 						});
 					}
 					var bKey = isAtGearbox
 						? new GearshiftPosition(key, true)
 						: new GearshiftPosition(key);
 					if (isAtGearbox && gearboxData.Gears[key].HasTorqueConverter) {
-						retVal[new GearshiftPosition(key, false)] = new VehicleMaxPropulsionTorque(gbxLimit);
+						var limit1C = new List<VehicleMaxPropulsionTorque.FullLoadEntry>() {
+                            new VehicleMaxPropulsionTorque.FullLoadEntry() {
+                                MotorSpeed = 0.RPMtoRad(),
+                                FullDriveTorque = gearboxData.Gears[key].MaxTorque
+                            },
+                            new VehicleMaxPropulsionTorque.FullLoadEntry() {
+                                MotorSpeed = engineData.FullLoadCurves[0].N95hSpeed,
+                                FullDriveTorque = gearboxData.Gears[key].MaxTorque
+                            }
+                        };
+
+                        retVal[new GearshiftPosition(key, false)] = new VehicleMaxPropulsionTorque(limit1C);
 					}
                     retVal[bKey] = new VehicleMaxPropulsionTorque(gbxLimit);
                     continue;
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/VehicleDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/VehicleDataAdapter.cs
index 58f34697d2c75fc5293a390efee4d47b178836c9..d0894022eb9038e76ed96fad58b47d22cd33da13 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/VehicleDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/VehicleDataAdapter.cs
@@ -14,7 +14,7 @@ using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents
 {
-    internal abstract class VehicleDataAdapter : ComponentDataAdapterBase, IVehicleDataAdapter
+	internal abstract class VehicleDataAdapter : ComponentDataAdapterBase, IVehicleDataAdapter
 	{
 		public static NewtonMeter VehMaxTorque(
 			ITransmissionInputData gear, int numGears,
@@ -205,8 +205,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			exempted.DualFuelVehicle = data.DualFuelVehicle;
 			exempted.MaxNetPower1 = data.MaxNetPower1;
 			return exempted;
-        }
-    }
+		}
+	}
 
 	internal class PrimaryBusVehicleDataAdapter : LorryVehicleDataAdapter
 	{
@@ -216,13 +216,17 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			double? passengerCount, bool allowVocational)
 		{
 			var retVal = base.DoCreateVehicleData(data, segment, mission, loading, passengerCount, allowVocational);
-			
+
 			retVal.CurbMass = mission.CurbMass;
+			if (mission.BusParameter.BusGroup.IsPrimaryBus() && !mission.BusParameter.CurbMassTPMLMFactor.IsNaN() &&
+				data.GrossVehicleMassRating * mission.BusParameter.CurbMassTPMLMFactor < mission.CurbMass) {
+				retVal.CurbMass = data.GrossVehicleMassRating * mission.BusParameter.CurbMassTPMLMFactor;
+			}
 			retVal.GrossVehicleMass = 40000.SI<Kilogram>();
 			return retVal;
 		}
 
-        #endregion
+		#endregion
 
 		protected virtual SIBase<Kilogram> CalculateElectricComponentMass(IVehicleDeclarationInputData data)
 		{
@@ -247,7 +251,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 							DeclarationData.EM_MassInverter;
 				additionalMass.Add(Tuple.Create("IEPC",
 					VectoMath.Round(massEM, MidpointRounding.AwayFromZero)));
-            }
+			}
 
 			var count = 0;
 			foreach (var reess in data.Components.ElectricStorage.ElectricStorageElements) {
@@ -262,7 +266,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 
 			return additionalMass.Sum(x => x.Item2);
 		}
-    }
+	}
 
 	internal class ExemptedPrimaryBusVehicleDataAdapter : PrimaryBusVehicleDataAdapter
 	{
@@ -303,14 +307,19 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 		{
 			var retVal =  base.DoCreateVehicleData(data, segment, mission, loading, passengerCount, allowVocational);
 
-			retVal.CurbMass = mission.CurbMass + CalculateElectricComponentMass(data);
+			if (!mission.BusParameter.CurbMassTPMLMFactor.IsNaN() &&
+				data.GrossVehicleMassRating * mission.BusParameter.CurbMassTPMLMFactor < mission.CurbMass) {
+				retVal.CurbMass = data.GrossVehicleMassRating * mission.BusParameter.CurbMassTPMLMFactor;
+			} else {
+				retVal.CurbMass = mission.CurbMass + CalculateElectricComponentMass(data);
+			}
 
 			return retVal;
 		}
 
-        #endregion
+		#endregion
 
-    }
+	}
 
 	internal class PrimaryBusVehicleDataAdapter_PEV : PrimaryBusVehicleDataAdapter
 	{
@@ -321,16 +330,21 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 		{
 			var retVal = base.DoCreateVehicleData(data, segment, mission, loading, passengerCount, allowVocational);
 
-			retVal.CurbMass = mission.CurbMass - mission.GenericMassICE + CalculateElectricComponentMass(data);
+			if (!mission.BusParameter.CurbMassTPMLMFactor.IsNaN() &&
+				data.GrossVehicleMassRating * mission.BusParameter.CurbMassTPMLMFactor < mission.CurbMass) {
+				retVal.CurbMass = data.GrossVehicleMassRating * mission.BusParameter.CurbMassTPMLMFactor;
+			} else {
+				retVal.CurbMass = mission.CurbMass - mission.GenericMassICE + CalculateElectricComponentMass(data);
 
+			}
 			return retVal;
 		}
 
 		#endregion
-    }
+	}
 
 
-    internal class CompletedBusGenericVehicleDataAdapter : PrimaryBusVehicleDataAdapter
+	internal class CompletedBusGenericVehicleDataAdapter : PrimaryBusVehicleDataAdapter
 	{
 		#region Overrides of PrimaryBusVehicleDataAdapter
 
@@ -339,10 +353,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 		{
 			var retVal = base.DoCreateVehicleData(data, segment, mission, loading, passengerCount, allowVocational);
 			retVal.GrossVehicleMass = data.GrossVehicleMassRating;
-			if (retVal.TotalVehicleMass.IsGreater(retVal.GrossVehicleMass))
-			{
-				throw new VectoException("Total Vehicle Mass exceeds Gross Vehicle Mass for completed bus generic ({0}/{1})", retVal.TotalVehicleMass, retVal.GrossVehicleMass);
-			}
+			
 			return retVal;
 		}
 
@@ -360,7 +371,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 	}
 
 
-    internal class CompletedBusSpecificVehicleDataAdapter : IVehicleDataAdapter
+	internal class CompletedBusSpecificVehicleDataAdapter : IVehicleDataAdapter
 	{
 		protected IVehicleDataAdapter completedBusGenericDataAdapter = new CompletedBusGenericVehicleDataAdapter();
 
@@ -373,54 +384,54 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 		}
 
 		public virtual VehicleData CreateVehicleData(IVehicleDeclarationInputData primaryVehicle,
-            IVehicleDeclarationInputData completedVehicle, Segment segment, Mission mission,
-            KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading)
-        {
-            if (completedVehicle.NumberPassengerSeatsLowerDeck == null) {
-                throw new VectoException("NumberOfPassengerSeatsLowerDeck input parameter is required");
-            }
-            if (completedVehicle.NumberPassengerSeatsUpperDeck == null) {
-                throw new VectoException("NumberOfPassengerSeatsUpperDeck input parameter is required");
-            }
-            if (completedVehicle.NumberPassengersStandingLowerDeck == null) {
-                throw new VectoException("NumberOfPassengersStandingLowerDeck input parameter is required");
-            }
-            if (completedVehicle.NumberPassengersStandingUpperDeck == null) {
-                throw new VectoException("NumberOfPassengersStandingUpperDeck input parameter is required");
-            }
-            var passengers = DeclarationData.GetNumberOfPassengers(
-                mission, completedVehicle.Length, completedVehicle.Width,
-                completedVehicle.NumberPassengerSeatsLowerDeck.Value + completedVehicle.NumberPassengerSeatsUpperDeck.Value,
-                completedVehicle.NumberPassengersStandingLowerDeck.Value + completedVehicle.NumberPassengersStandingUpperDeck.Value,
-                loading.Key);
-
-            var vehicleData = completedBusGenericDataAdapter.CreateVehicleData(primaryVehicle, segment, mission, loading.Value.Item1, loading.Value.Item2, false);
-            vehicleData.InputData = completedVehicle;
-            vehicleData.VIN = completedVehicle.VIN;
-            vehicleData.LegislativeClass = completedVehicle.LegislativeClass;
-            vehicleData.VehicleCategory = VehicleCategory.HeavyBusCompletedVehicle;
-            vehicleData.Manufacturer = completedVehicle.Manufacturer;
-            vehicleData.ModelName = completedVehicle.Model;
-            vehicleData.ManufacturerAddress = completedVehicle.ManufacturerAddress;
-            vehicleData.CurbMass = completedVehicle.CurbMassChassis;
-
-            vehicleData.Loading = passengers * mission.MissionType.GetAveragePassengerMass();
-            vehicleData.PassengerCount = passengers;
-            vehicleData.GrossVehicleMass = completedVehicle.GrossVehicleMassRating;
-            vehicleData.DigestValueInput = completedVehicle.DigestValue?.DigestValue ?? "";
-
-            vehicleData.RegisteredClass = completedVehicle.RegisteredClass;
-
-            vehicleData.VehicleCode = completedVehicle.VehicleCode;
-            if (vehicleData.TotalVehicleMass.IsGreater(vehicleData.GrossVehicleMass)) {
-                throw new VectoException("Total Vehicle Mass exceeds Gross Vehicle Mass for completed bus specific ({0}/{1})",
-                    vehicleData.TotalVehicleMass, vehicleData.GrossVehicleMass);
-            }
-            return vehicleData;
-        }
-
-        #endregion
-    }
+			IVehicleDeclarationInputData completedVehicle, Segment segment, Mission mission,
+			KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading)
+		{
+			if (completedVehicle.NumberPassengerSeatsLowerDeck == null) {
+				throw new VectoException("NumberOfPassengerSeatsLowerDeck input parameter is required");
+			}
+			if (completedVehicle.NumberPassengerSeatsUpperDeck == null) {
+				throw new VectoException("NumberOfPassengerSeatsUpperDeck input parameter is required");
+			}
+			if (completedVehicle.NumberPassengersStandingLowerDeck == null) {
+				throw new VectoException("NumberOfPassengersStandingLowerDeck input parameter is required");
+			}
+			if (completedVehicle.NumberPassengersStandingUpperDeck == null) {
+				throw new VectoException("NumberOfPassengersStandingUpperDeck input parameter is required");
+			}
+			var passengers = DeclarationData.GetNumberOfPassengers(
+				mission, completedVehicle.Length, completedVehicle.Width,
+				completedVehicle.NumberPassengerSeatsLowerDeck.Value + completedVehicle.NumberPassengerSeatsUpperDeck.Value,
+				completedVehicle.NumberPassengersStandingLowerDeck.Value + completedVehicle.NumberPassengersStandingUpperDeck.Value,
+				loading.Key);
+
+			var vehicleData = completedBusGenericDataAdapter.CreateVehicleData(primaryVehicle, segment, mission, loading.Value.Item1, loading.Value.Item2, false);
+			vehicleData.InputData = completedVehicle;
+			vehicleData.VIN = completedVehicle.VIN;
+			vehicleData.LegislativeClass = completedVehicle.LegislativeClass;
+			vehicleData.VehicleCategory = VehicleCategory.HeavyBusCompletedVehicle;
+			vehicleData.Manufacturer = completedVehicle.Manufacturer;
+			vehicleData.ModelName = completedVehicle.Model;
+			vehicleData.ManufacturerAddress = completedVehicle.ManufacturerAddress;
+			vehicleData.CurbMass = completedVehicle.CurbMassChassis;
+
+			vehicleData.Loading = passengers * mission.MissionType.GetAveragePassengerMass();
+			vehicleData.PassengerCount = passengers;
+			vehicleData.GrossVehicleMass = completedVehicle.GrossVehicleMassRating;
+			vehicleData.DigestValueInput = completedVehicle.DigestValue?.DigestValue ?? "";
+
+			vehicleData.RegisteredClass = completedVehicle.RegisteredClass;
+
+			vehicleData.VehicleCode = completedVehicle.VehicleCode;
+			if (vehicleData.TotalVehicleMass.IsGreater(vehicleData.GrossVehicleMass)) {
+				throw new VectoException("Total Vehicle Mass exceeds Gross Vehicle Mass for completed bus specific ({0}/{1})",
+					vehicleData.TotalVehicleMass, vehicleData.GrossVehicleMass);
+			}
+			return vehicleData;
+		}
+
+		#endregion
+	}
 
 	internal class ExemptedCompletedBusSpecificVehicleDataAdapter : CompletedBusSpecificVehicleDataAdapter
 	{
@@ -443,11 +454,11 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 				MaxNetPower1 = primaryVehicle.MaxNetPower1,
 				InputData = completedVehicle
 			};
-        }
+		}
 	}
 
 
-    internal class SingleBusVehicleDataAdapter : VehicleDataAdapter
+	internal class SingleBusVehicleDataAdapter : VehicleDataAdapter
 	{
 		#region Overrides of VehicleDataAdapter
 
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs
index 27d8b59a5bf9f050133bfe578c9e64b06bd9d4d9..0554ca45c685cf4eacf2788161bb9ff350b899af 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs
@@ -171,14 +171,20 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
 				var primaryResult = DataProvider.MultistageJobInputData.JobInputData.PrimaryVehicle.GetResult(
 					simulationRunData.Mission.BusParameter.BusGroup, simulationRunData.Mission.MissionType, fuelMode,
 					simulationRunData.VehicleData.Loading, ovcHevMode);
-				if (primaryResult == null || !primaryResult.ResultStatus.Equals("success")) {
+				
+				if (primaryResult == null) {
 					throw new VectoException(
 						"Failed to find results in PrimaryVehicleReport for vehicle group: {0},  mission: {1}, fuel mode: '{2}', payload: {3}. Make sure PIF and completed vehicle data match!",
 						simulationRunData.Mission.BusParameter.BusGroup, simulationRunData.Mission.MissionType, fuelMode,
 						simulationRunData.VehicleData.Loading);
 				}
-
-				if (primaryResult.ResultStatus != "success") {
+				if (primaryResult.ResultStatus == ResultStatus.PrimaryRunIgnored) {
+					throw new VectoException(
+                        "The vehicle group of the complete(d) vehicle falls into a primary vehicle sub-group for which no result could be calculated due to the criterion of insufficient powertrain power.   mission: {1}, fuel mode: '{2}', payload: {3}.",
+						simulationRunData.Mission.BusParameter.BusGroup, simulationRunData.Mission.MissionType, fuelMode,
+						simulationRunData.VehicleData.Loading);
+				}
+                if (primaryResult.ResultStatus != ResultStatus.Success) {
 					throw new VectoException(
 						"Simulation results in PrimaryVehicleReport for vehicle group: {0},  mission: {1}, fuel mode: '{2}', payload: {3} not finished successfully.",
 						simulationRunData.Mission.BusParameter.BusGroup, simulationRunData.Mission.MissionType, fuelMode,
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs
index e20e1cad0108c9a3a55ba3460435e6ed4abd9ce7..8f3548c6d3c0d540053e8d5106e3467ba14e8ab7 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs
@@ -10,6 +10,7 @@ using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Declaration.IterativeRunStrategies;
+using TUGraz.VectoCore.Models.Declaration.PostMortemAnalysisStrategy;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.Impl;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
@@ -115,8 +116,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
 					Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()),
 					ExecutionMode = ExecutionMode.Declaration,
 				};
-
-				return simulationRunData;
+				simulationRunData.PostMortemStrategy = new PrimaryBusPostMortemStrategy();
+                return simulationRunData;
 			}
 
 			protected abstract void CreateGearboxAndGearshiftData(VectoRunData runData);
@@ -539,6 +540,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
 					runData.ModFileSuffix += ovcMode == OvcHevMode.ChargeSustaining ? "CS" : "CD";
 				}
 				runData.OVCMode = ovcMode;
+				
 				return runData;
 			}
 
diff --git a/VectoCore/VectoCore/Mockup/Simulation/RundataFactories/CompletedBusRunDataFactory.cs b/VectoCore/VectoCore/Mockup/Simulation/RundataFactories/CompletedBusRunDataFactory.cs
index 5ae545a4c4e34850f1c59ada12add144f46c1f3f..ff3c24c9e811b3c5a2befece7ea7834b0b02009a 100644
--- a/VectoCore/VectoCore/Mockup/Simulation/RundataFactories/CompletedBusRunDataFactory.cs
+++ b/VectoCore/VectoCore/Mockup/Simulation/RundataFactories/CompletedBusRunDataFactory.cs
@@ -185,19 +185,24 @@ namespace TUGraz.VectoMockup.Simulation.RundataFactories
                     var primaryResult = InputDataProvider.JobInputData.PrimaryVehicle.GetResult(
                         simulationRunData.Mission.BusParameter.BusGroup, simulationRunData.Mission.MissionType, fuelMode,
                         simulationRunData.VehicleData.Loading, OvcHevMode.NotApplicable);
-                    if (primaryResult == null || !primaryResult.ResultStatus.Equals("success")) {
-                        throw new VectoException(
-                            "Failed to find results in PrimaryVehicleReport for vehicle group: {0},  mission: {1}, fuel mode: '{2}', payload: {3}. Make sure PIF and completed vehicle data match!",
-                            simulationRunData.Mission.BusParameter.BusGroup, simulationRunData.Mission.MissionType, fuelMode,
-                            simulationRunData.VehicleData.Loading);
-                    }
-
-                    if (primaryResult.ResultStatus != "success") {
-                        throw new VectoException(
-                            "Simulation results in PrimaryVehicleReport for vehicle group: {0},  mission: {1}, fuel mode: '{2}', payload: {3} not finished successfully.",
-                            simulationRunData.Mission.BusParameter.BusGroup, simulationRunData.Mission.MissionType, fuelMode,
-                            simulationRunData.VehicleData.Loading);
-                    }
+					if (primaryResult == null) {
+						throw new VectoException(
+							"Failed to find results in PrimaryVehicleReport for vehicle group: {0},  mission: {1}, fuel mode: '{2}', payload: {3}. Make sure PIF and completed vehicle data match!",
+							simulationRunData.Mission.BusParameter.BusGroup, simulationRunData.Mission.MissionType, fuelMode,
+							simulationRunData.VehicleData.Loading);
+					}
+					if (primaryResult.ResultStatus == ResultStatus.PrimaryRunIgnored) {
+						throw new VectoException(
+                            "The vehicle group of the complete(d) vehicle falls into a primary vehicle sub-group for which no result could be calculated due to the criterion of insufficient powertrain power.   mission: {1}, fuel mode: '{2}', payload: {3}.",
+							simulationRunData.Mission.BusParameter.BusGroup, simulationRunData.Mission.MissionType, fuelMode,
+							simulationRunData.VehicleData.Loading);
+					}
+					if (primaryResult.ResultStatus != ResultStatus.Success) {
+						throw new VectoException(
+							"Simulation results in PrimaryVehicleReport for vehicle group: {0},  mission: {1}, fuel mode: '{2}', payload: {3} not finished successfully.",
+							simulationRunData.Mission.BusParameter.BusGroup, simulationRunData.Mission.MissionType, fuelMode,
+							simulationRunData.VehicleData.Loading);
+					}
 
                     simulationRunData.PrimaryResult = primaryResult;
 
diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
index 3ad7187ead1af3f575eb9ead0c768ecc0fe665d7..04e76a91ef8a43dceb0e6cdee1b4b5deb08d0373 100644
--- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
+++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
@@ -153,11 +153,11 @@ namespace TUGraz.VectoCore.Models.Declaration
 		/// </summary>
 		public static Kilogram GetPayloadForGrossVehicleWeight(Kilogram grossVehicleWeight, string equationName)
 		{
-			if (equationName.ToLower().StartsWith("pc10")) {
+			if (equationName.ToLowerInvariant().StartsWith("pc10")) {
 				return Payloads.Lookup10Percent(grossVehicleWeight);
 			}
 
-			if (equationName.ToLower().StartsWith("pc75")) {
+			if (equationName.ToLowerInvariant().StartsWith("pc75")) {
 				return Payloads.Lookup75Percent(grossVehicleWeight);
 			}
 
@@ -279,8 +279,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 				case VectoSimulationJobType.BatteryElectricVehicle:
 				case VectoSimulationJobType.IEPC_E:
 				case VectoSimulationJobType.IEPC_S:
-					return (vehicleData.Components?.EngineInputData?.RatedPowerDeclared ?? 0.SI<Watt>()) +
-							(vehicleData.Components?.ElectricMachines?.Entries
+					return (vehicleData.Components?.ElectricMachines?.Entries
 								.Where(x => x.Position != PowertrainPosition.GEN)
 								.Sum(x => x.ElectricMachine.R85RatedPower * x.Count) ?? 0.SI<Watt>()) +
 							(vehicleData.Components?.IEPC?.R85RatedPower ?? 0.SI<Watt>()) +
@@ -1734,7 +1733,8 @@ namespace TUGraz.VectoCore.Models.Declaration
 																VehicleOperationLookup.VehicleOperationData vehicleOperation,
 																(double etaChgBatDepot, double etaChgBatInMission, double etaChtBatWeighted) chargingEfficiency)
 		{
-			if (cdResult.Status != VectoRun.Status.Success || csResult.Status != VectoRun.Status.Success) {
+			if (!cdResult.Status.IsOneOf(VectoRun.Status.Success, VectoRun.Status.PrimaryBusSimulationIgnore) || 
+				!csResult.Status.IsOneOf(VectoRun.Status.Success, VectoRun.Status.PrimaryBusSimulationIgnore)) {
 				return null;
 			}
 			var batteryData = cdResult.BatteryData;
@@ -1787,6 +1787,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 				.ToDictionary(x => x.Item1, x => x.Item2);
 
 			var retVal = new WeightedResult() {
+				Status = cdResult.Status == VectoRun.Status.PrimaryBusSimulationIgnore || csResult.Status == VectoRun.Status.PrimaryBusSimulationIgnore ? VectoRun.Status.PrimaryBusSimulationIgnore : VectoRun.Status.Success,
 				Distance = cdResult.Distance,
 				Payload = cdResult.Payload,
 				CargoVolume = cdResult.CargoVolume,
@@ -1889,6 +1890,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 
 			var fuels = entries.First().FuelData;
 			return new WeightedResult() {
+				Status = VectoRun.Status.Success,
 				AverageSpeed = null,
 				AverageDrivingSpeed = null,
 				Distance = entries.Sum(e => e.Distance * e.WeightingFactor),
@@ -1924,6 +1926,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 
 			var fuels = entries.First().ChargeDepletingResult.FuelData;
 			return new WeightedResult() {
+				Status = VectoRun.Status.Success,
 				AverageSpeed = null,
 				AverageDrivingSpeed = null,
 				Distance = entries.Sum(e => e.ChargeDepletingResult.Distance * e.ChargeDepletingResult.WeightingFactor),
diff --git a/VectoCore/VectoCore/Models/Declaration/IterativeRunStrategies/IIterativeRunStrategy.cs b/VectoCore/VectoCore/Models/Declaration/IterativeRunStrategies/IIterativeRunStrategy.cs
index 7a73c7aef5bcae95c55b7137c6b0f45f3cafafa6..24af0b7cf74b38f98bc82ab90d4119b2ea8fadb6 100644
--- a/VectoCore/VectoCore/Models/Declaration/IterativeRunStrategies/IIterativeRunStrategy.cs
+++ b/VectoCore/VectoCore/Models/Declaration/IterativeRunStrategies/IIterativeRunStrategy.cs
@@ -35,7 +35,4 @@ namespace TUGraz.VectoCore.Models.Declaration.IterativeRunStrategies
 	{
 		//IIterativeRunResult CreateIterativeResult(IModalDataContainer modData);
 	}
-
-
-
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/Declaration/LookupData.cs b/VectoCore/VectoCore/Models/Declaration/LookupData.cs
index 0c2f1b7580c960ee13b5a9724dac13345424d642..75cd0f1eae59b471727126746b71dc1c2732c0a5 100644
--- a/VectoCore/VectoCore/Models/Declaration/LookupData.cs
+++ b/VectoCore/VectoCore/Models/Declaration/LookupData.cs
@@ -93,7 +93,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 		protected static void NormalizeTable(DataTable table)
 		{
 			foreach (DataColumn col in table.Columns) {
-				table.Columns[col.ColumnName].ColumnName = col.ColumnName.ToLower().RemoveWhitespace();
+				table.Columns[col.ColumnName].ColumnName = col.ColumnName.ToLowerInvariant().RemoveWhitespace();
 			}
 		}
 	}
diff --git a/VectoCore/VectoCore/Models/Declaration/Mission.cs b/VectoCore/VectoCore/Models/Declaration/Mission.cs
index e5b34736612fca4ee8fbae90dd48e2a95ae46f1a..01efa89b4b18070bebd0e8829260b15b755ac272 100644
--- a/VectoCore/VectoCore/Models/Declaration/Mission.cs
+++ b/VectoCore/VectoCore/Models/Declaration/Mission.cs
@@ -163,6 +163,8 @@ namespace TUGraz.VectoCore.Models.Declaration
 		public VehicleCode? VehicleCode { get; set; }
 		public FloorType FloorType { get; set; }
 		public IList<BusHVACSystemConfiguration> SeparateAirDistributionDuctsHVACCfg { get; set; }
+		
+		public double CurbMassTPMLMFactor { get; set; }
 	}
 
 	public class HVACParameters
diff --git a/VectoCore/VectoCore/Models/Declaration/PostMortemAnalysisStrategy/IPostMortemAnalyzeStrategy.cs b/VectoCore/VectoCore/Models/Declaration/PostMortemAnalysisStrategy/IPostMortemAnalyzeStrategy.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8a935a9d4948aa88c3ae8f839224e3dd7242fe8b
--- /dev/null
+++ b/VectoCore/VectoCore/Models/Declaration/PostMortemAnalysisStrategy/IPostMortemAnalyzeStrategy.cs
@@ -0,0 +1,23 @@
+using System;
+using TUGraz.VectoCore.Models.Simulation;
+
+namespace TUGraz.VectoCore.Models.Declaration.PostMortemAnalysisStrategy
+{
+
+	public interface IPostMortemAnalyzeStrategy
+	{
+		bool AbortSimulation(IVehicleContainer container, Exception exception);
+	}
+
+	public class DefaultPostMortemAnalyzeStrategy : IPostMortemAnalyzeStrategy
+	{
+		#region Implementation of IPostMortemAnalyzeStrategy
+
+		public bool AbortSimulation(IVehicleContainer container, Exception exception)
+		{
+			return true;
+		}
+
+		#endregion
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/Declaration/PostMortemAnalysisStrategy/PrimaryBusPostMortemStrategy.cs b/VectoCore/VectoCore/Models/Declaration/PostMortemAnalysisStrategy/PrimaryBusPostMortemStrategy.cs
new file mode 100644
index 0000000000000000000000000000000000000000..0411b38b7cd67c55c11d97c802b7aa64c1912edc
--- /dev/null
+++ b/VectoCore/VectoCore/Models/Declaration/PostMortemAnalysisStrategy/PrimaryBusPostMortemStrategy.cs
@@ -0,0 +1,148 @@
+using System;
+using System.Linq;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.Models.Connector.Ports.Impl;
+using TUGraz.VectoCore.Models.Simulation;
+using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.SimulationComponent.Impl;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.Models.Declaration.PostMortemAnalysisStrategy
+{
+
+	public class PrimaryBusPostMortemStrategy : IPostMortemAnalyzeStrategy
+	{
+		protected static readonly MeterPerSecond MinSpeed = 5.KMPHtoMeterPerSecond();
+
+		#region Implementation of IPostMortemAnalyzeStrategy
+
+		public bool AbortSimulation(IVehicleContainer container, Exception exception)
+		{
+			if (container.RunData.Mission.MissionType != MissionType.Interurban) {
+				// for now only consider interurban cycle
+				return true;
+			}
+
+			if (container.RunData.Loading != LoadingType.ReferenceLoad) {
+				// for now only consider reference load
+				return true;
+			}
+
+			if (!container.RunData.Mission.BusParameter.DoubleDecker) {
+				// for now only consider double decker buses
+				return true;
+			}
+			if (!container.DrivingCycleInfo.RoadGradient.IsGreater(0)) {
+				// road gradient must be greater than 0
+				return true;
+			}
+
+			if (container.VehicleInfo.VehicleSpeed.IsGreater(MinSpeed)) {
+				// vehicle has to be almost stopped
+				return true;
+			}
+			
+			var maxGradability = GetMaxGradability(container);
+			if (maxGradability.IsSmaller(container.DrivingCycleInfo.RoadGradient)) {
+				// the vehicle cannot go this steep uphill passage...
+				return false;
+			}
+			return true;
+		}
+
+		protected virtual Radian GetMaxGradability(IVehicleContainer container)
+		{
+			var testContainer = new SimplePowertrainContainer(container.RunData);
+			switch (container.PowertrainInfo.VehicleArchitecutre) {
+				//case VectoSimulationJobType.ConventionalVehicle:
+				//	PowertrainBuilder.BuildSimplePowertrain(container.RunData, testContainer);
+				//	break;
+				//case VectoSimulationJobType.ParallelHybridVehicle:
+				//case VectoSimulationJobType.IHPC:
+				//	PowertrainBuilder.BuildSimpleHybridPowertrain(container.RunData, testContainer);
+				//	break;
+				//case VectoSimulationJobType.SerialHybridVehicle:
+				//	PowertrainBuilder.BuildSimpleSerialHybridPowertrain(container.RunData, testContainer);
+				//	break;
+				//case VectoSimulationJobType.IEPC_S:
+				//	PowertrainBuilder.BuildSimpleIEPCHybridPowertrain(container.RunData, testContainer);
+				//	break;
+                case VectoSimulationJobType.BatteryElectricVehicle:
+				case VectoSimulationJobType.IEPC_E:
+					PowertrainBuilder.BuildSimplePowertrainElectric(container.RunData, testContainer);
+					break;
+				default:
+					throw new VectoException($"unhandled powertrain architecture {container.PowertrainInfo.VehicleArchitecutre} to calculate gradability");
+			}
+
+			testContainer.UpdateComponents(container);
+
+			var maxSlope = SearchSlope(testContainer);
+
+			return maxSlope;
+		}
+
+		protected virtual Radian SearchSlope(SimplePowertrainContainer container)
+		{
+			var simulationInterval = Constants.SimulationSettings.TargetTimeInterval;
+			var absTime = 0.SI<Second>();
+			var gradient = 0.SI<Radian>();
+
+			var vehicle = container.VehiclePort;
+			var acceleration = DeclarationData.GearboxTCU.StartAcceleration * 0.5;
+
+            foreach (var motor in container.ElectricMotors.Values) {
+				if ((motor as ElectricMotor).Control is SimpleElectricMotorControl emCtl) {
+					emCtl.EmOff = false;
+				}
+			}
+
+			if (container.HasGearbox) {
+				var gbx = container.GearboxCtl as Gearbox;
+				gbx.Gear = gbx.ModelData.GearList.First();
+			}
+			vehicle.Initialize(0.KMPHtoMeterPerSecond(), gradient);
+
+            var initialResponse = vehicle.Request(absTime, simulationInterval, acceleration, gradient, true);
+			var delta = GetDelta(initialResponse as ResponseDryRun, container.VehicleArchitecutre);
+			
+			try {
+				gradient = SearchAlgorithm.Search(
+					gradient, delta, 0.1.SI<Radian>(),
+					getYValue: response => GetDelta(response as ResponseDryRun, container.VehicleArchitecutre),
+					evaluateFunction: grad => vehicle.Request(absTime, simulationInterval, acceleration, grad, true),
+					criterion: response => GetDelta(response as ResponseDryRun, container.VehicleArchitecutre).Value(),
+					searcher: this);
+			} catch (VectoSearchAbortedException) {
+				return double.MaxValue.SI<Radian>();
+			}
+
+			return gradient;
+		}
+
+		private Watt GetDelta(ResponseDryRun response, VectoSimulationJobType vehicleArchitecutre)
+		{
+			//return response.DeltaFullLoad;
+
+			switch (vehicleArchitecutre) {
+				case VectoSimulationJobType.ConventionalVehicle:
+				case VectoSimulationJobType.ParallelHybridVehicle:
+				case VectoSimulationJobType.IHPC:
+					return response.DeltaFullLoad;
+				case VectoSimulationJobType.SerialHybridVehicle:
+				case VectoSimulationJobType.IEPC_S:
+				case VectoSimulationJobType.BatteryElectricVehicle:
+				case VectoSimulationJobType.IEPC_E:
+					return (response.ElectricMotor.TorqueRequest + response.ElectricMotor.MaxDriveTorque) * response.ElectricMotor.AvgDrivetrainSpeed;
+				default:
+					throw new VectoException($"unhandled powertrain architecture {vehicleArchitecutre} to calculate gradability");
+			}
+        }
+
+		#endregion
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/Declaration/PrimaryBusSegments.cs b/VectoCore/VectoCore/Models/Declaration/PrimaryBusSegments.cs
index 896a9207e2dd03dcaf6c3505e12322bcb4a5da1a..8c664a35bf4eac84bae8cd0d334496235fb341d7 100644
--- a/VectoCore/VectoCore/Models/Declaration/PrimaryBusSegments.cs
+++ b/VectoCore/VectoCore/Models/Declaration/PrimaryBusSegments.cs
@@ -153,6 +153,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 							BusGroup = VehicleClassHelper.Parse(row.Field<string>("hdvgroup")),
 							VehicleLength = row.ParseDouble("length").SI<Meter>(),
 							VehicleWidth = row.ParseDouble("width").SI<Meter>(),
+							CurbMassTPMLMFactor = row.Field<string>("curbmasstpmlmfactor").ToDouble(double.NaN),
 							BodyHeight = row.ParseDouble("bodyheight").SI<Meter>(),
 							NumberPassengersLowerDeck = row.ParseDouble("passengerslowerdeck"),
 							NumberPassengersUpperDeck = row.ParseDouble("passengersupperdeck"),
diff --git a/VectoCore/VectoCore/Models/Declaration/SteeringPumpBus.cs b/VectoCore/VectoCore/Models/Declaration/SteeringPumpBus.cs
index c65823f5d97482a4b22dfa4d01f0c2c3624b2a31..ac2f1af73f978c28d20fbbb3c818aea2a2f19fa1 100644
--- a/VectoCore/VectoCore/Models/Declaration/SteeringPumpBus.cs
+++ b/VectoCore/VectoCore/Models/Declaration/SteeringPumpBus.cs
@@ -101,8 +101,8 @@ namespace TUGraz.VectoCore.Models.Declaration {
 						Data[Tuple.Create(axleNumber, mission)] =
 							 new SteeringPumpTechnologyEntry() {
 									FullyElectric = !row.Field<string>("fullyelectric").Equals("0"),
-									TubingFactor = row.ParseDouble("tubing-"+mission.ToString().ToLower()),
-									AxleFactor = row.ParseDouble("axle-"+mission.ToString().ToLower())
+									TubingFactor = row.ParseDouble("tubing-"+mission.ToString().ToLowerInvariant()),
+									AxleFactor = row.ParseDouble("axle-"+mission.ToString().ToLowerInvariant())
 							};
 					}
 				}
diff --git a/VectoCore/VectoCore/Models/Declaration/WHTCCorrection.cs b/VectoCore/VectoCore/Models/Declaration/WHTCCorrection.cs
index 2123c256e8d19fbd1c3f05e0eeab53d7f6b1f9ed..941537a75c99b3269f2860575a08378f6b10b7d0 100644
--- a/VectoCore/VectoCore/Models/Declaration/WHTCCorrection.cs
+++ b/VectoCore/VectoCore/Models/Declaration/WHTCCorrection.cs
@@ -60,7 +60,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 					if (mission.IsEMS() || !mission.IsDeclarationMission() || mission == MissionType.ExemptedMission) {
 						continue;
 					}
-					var values = table.Columns[mission.ToString().ToLower()].Values<string>().ToDouble().ToArray();
+					var values = table.Columns[mission.ToString().ToLowerInvariant()].Values<string>().ToDouble().ToArray();
 					Data[mission] = new Entry { Urban = values[0], Rural = values[1], Motorway = values[2] };
 				}
 			}
diff --git a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs
index 2d4fcb2da4a4e547e82e1118b46e51c0b3c3b61e..cee749b4e4359ac098d73730cbdb6f7aafde0e0a 100644
--- a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs
@@ -48,6 +48,7 @@ using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
 using TUGraz.VectoCore.InputData.Reader.Impl;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Declaration.IterativeRunStrategies;
+using TUGraz.VectoCore.Models.Declaration.PostMortemAnalysisStrategy;
 using TUGraz.VectoCore.Models.Simulation.DataBus;
 using TUGraz.VectoCore.Models.Simulation.Impl;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
@@ -188,6 +189,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 
 		[JsonIgnore]
 		public IIterativeRunStrategy IterativeRunStrategy { get; internal set; } = new DefaultIterativeStrategy();
+
+		[JsonIgnore]
+		public IPostMortemAnalyzeStrategy PostMortemStrategy { get; internal set; } = new DefaultPostMortemAnalyzeStrategy();
 		
 		public NewtonMeter TorqueDriftLeftWheel { get; internal set; }
 
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/DistanceRun.cs b/VectoCore/VectoCore/Models/Simulation/Impl/DistanceRun.cs
index c128a3002df7b1992f48f540adcfe427a294e17b..229b0c07b7a717656aa63e49d0baf2339da7e8a6 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/DistanceRun.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/DistanceRun.cs
@@ -41,7 +41,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 {
 	public class DistanceRun : VectoRun
 	{
-		public DistanceRun(IVehicleContainer container, IFollowUpRunCreator followUpCreator) : base(container, followUpCreator) {}
+		public DistanceRun(IVehicleContainer container, IFollowUpRunCreator followUpCreator, IPostMortemAnalyzer postMortem) : base(container, followUpCreator, postMortem) {}
 		public DistanceRun(IVehicleContainer container) : base(container) {}
 		protected override IResponse DoSimulationStep()
 		{
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PostMortemAnalyzer.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PostMortemAnalyzer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..27a1e4038b66f777d90f427a6ba6879bca7ec1e6
--- /dev/null
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/PostMortemAnalyzer.cs
@@ -0,0 +1,54 @@
+using System;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCore.Models.Declaration.PostMortemAnalysisStrategy;
+
+namespace TUGraz.VectoCore.Models.Simulation.Impl
+{
+	public interface IPostMortemAnalyzer
+	{
+		/**
+		 * @returns true if the original exception shall be thrown
+		 */
+		bool AbortSimulation(IVehicleContainer container, Exception ex);
+
+	}
+
+	public class NoPostMortemAnalysis : IPostMortemAnalyzer
+	{
+		#region Implementation of IPostMortemAnalyzer
+
+		public bool AbortSimulation(IVehicleContainer container, Exception ex)
+		{
+			return true;
+		}
+
+		#endregion
+	}
+
+    public class DefaultPostMortemAnalyzer : IPostMortemAnalyzer
+	{
+		protected readonly IPostMortemAnalyzeStrategy _strategy;
+
+		public DefaultPostMortemAnalyzer(IPostMortemAnalyzeStrategy postMortemStrategy)
+		{
+			_strategy = postMortemStrategy;
+		}
+
+		#region Implementation of IPostMortemAnalyzer
+
+		public bool AbortSimulation(IVehicleContainer container, Exception ex)
+		{
+			if (!_strategy.AbortSimulation(container, ex)) {
+				//_strategy.M
+				container.RunStatus = VectoRun.Status.PrimaryBusSimulationIgnore;
+				return false;
+			}
+			return true;
+		}
+
+		#endregion
+	}
+
+
+
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
index 0c42fe5844f49e995f1f9b8192ce481aedbc9998..50c153eacaa4fa81e474e6fa9327d31092810801 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
@@ -423,7 +423,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			var dcdc = new DCDCConverter(container, data.DCDCData.DCDCEfficiency);
 
             AddHighVoltageAuxiliaries(data, container, es, dcdc);
-			AddHybridBusAuxiliaries(data, container, es);
+			AddHybridBusAuxiliaries(data, container, es, dcdc);
 
 			return container;
 		}
@@ -722,7 +722,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 				}
 			}
 						
-			AddHighVoltageAuxiliaries(data, container, es, new DCDCConverter(container, data.DCDCData.DCDCEfficiency));
+			AddHighVoltageAuxiliaries(data, container, es, dcdc);
 
 			///TODO: remove
 			data.ElectricAuxDemand = 0.SI<Watt>();
@@ -778,8 +778,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 
 			SetIdleControllerForHybridP1(data, gearbox, idleController, clutch);
 
-			AddHighVoltageAuxiliaries(data, container, es, new DCDCConverter(container, data.DCDCData.DCDCEfficiency));
-			AddHybridBusAuxiliaries(data, container, es);
+			var dcdc = new DCDCConverter(container, data.DCDCData.DCDCEfficiency);
+			AddHighVoltageAuxiliaries(data, container, es, dcdc);
+			AddHybridBusAuxiliaries(data, container, es, dcdc);
 
 			return container;
 		}
@@ -798,7 +799,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			return clutch;
         }
 
-        private static void AddHybridBusAuxiliaries(VectoRunData data, VehicleContainer container, ElectricSystem es)
+        private static void AddHybridBusAuxiliaries(VectoRunData data, VehicleContainer container, ElectricSystem es, 
+			DCDCConverter dcdc)
         {
 			if (data.BusAuxiliaries == null) {
 				return;
@@ -817,7 +819,6 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			busAux.ElectricStorage = electricStorage;
 
 			if (data.BusAuxiliaries.ElectricalUserInputsConfig.ConnectESToREESS) {
-				var dcdc = new DCDCConverter(container, data.BusAuxiliaries.ElectricalUserInputsConfig.DCDCEfficiency);
 				busAux.DCDCConverter = dcdc;
 				es.Connect(dcdc);
 			}
@@ -1896,8 +1897,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 
 			_timerunGearHybridBuilders[position].Invoke(data, container, components);
 			
-			AddHighVoltageAuxiliaries(data, container, es, new DCDCConverter(container, data.DCDCData.DCDCEfficiency));
-			AddHybridBusAuxiliaries(data, container, es);
+			var dcdc = new DCDCConverter(container, data.DCDCData.DCDCEfficiency);
+			AddHighVoltageAuxiliaries(data, container, es, dcdc);
+			AddHybridBusAuxiliaries(data, container, es, dcdc);
 		}
 		
 		/// <summary>
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs
index 336687e7cc373e19d3e2bd8ec8affdf51bf8f469..d49ef125a574ef273acff72261510d0bb773ada2 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs
@@ -268,7 +268,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory
 
 					var container = PowertrainBuilder.Build(data, modData, sumWriter);
 					
-					run = new DistanceRun(container, new FollowUpRunCreator(data.IterativeRunStrategy)); 
+					run = new DistanceRun(container, new FollowUpRunCreator(data.IterativeRunStrategy), new DefaultPostMortemAnalyzer(data.PostMortemStrategy)); 
 					break;
 				case CycleType.EngineOnly:
 					if ((data.SimulationType & SimulationType.EngineOnly) == 0) {
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/VectoRun.cs b/VectoCore/VectoCore/Models/Simulation/Impl/VectoRun.cs
index 97d87afe0a8ff1687f1a402ee6aa2fa4dec2884f..b9580ca27fbdf19f06e19a38d9c5907c04482594 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/VectoRun.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/VectoRun.cs
@@ -38,6 +38,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Models.Connector.Ports;
 using TUGraz.VectoCore.Models.Connector.Ports.Impl;
+using TUGraz.VectoCore.Models.Declaration.PostMortemAnalysisStrategy;
 using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.Models.Simulation.Impl
@@ -52,6 +53,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 		protected Second dt = 1.SI<Second>();
 		private bool _cancelled;
 		private readonly IFollowUpRunCreator _followUpCreator;
+		private readonly IPostMortemAnalyzer _postMortemAnalyzer;
 		protected ISimulationOutPort CyclePort { get; set; }
 
 		[Required, ValidateObject]
@@ -72,7 +74,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 
 		public virtual double Progress => CyclePort.Progress * (PostProcessingDone ? 1.0 : 0.99) * (WritingResultsDone ? 1.0 : 0.99);
 
-		protected VectoRun(IVehicleContainer container, IFollowUpRunCreator followUpCreator = null)
+		protected VectoRun(IVehicleContainer container, IFollowUpRunCreator followUpCreator = null, IPostMortemAnalyzer postMortem = null)
 		{
 			Container = container;
 			RunIdentifier = Interlocked.Increment(ref _runIdCounter);
@@ -81,6 +83,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			PostProcessingDone = false;
 			WritingResultsDone = false;
 			_followUpCreator = followUpCreator ?? new NoFollowUpRunCreator();
+			_postMortemAnalyzer = postMortem ?? new NoPostMortemAnalysis();
+
 		}
 		[DebuggerStepThrough]
 		public IVehicleContainer GetContainer() => Container;
@@ -108,7 +112,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			Container.AbsTime = AbsTime;
 
 			Initialize();
-			IResponse response;
+			IResponse response = null;
 			var iterationCount = 0;
 
 			try {
@@ -138,39 +142,62 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 
 				PostProcessingDone = true;
 			} catch (VectoSimulationException vse) {
-				Log.Error("SIMULATION RUN ABORTED! ========================");
-				Log.Error(vse);
-				Container.RunStatus = Status.Aborted;
-				var ex = new VectoSimulationException("{6} ({7} {8}) - absTime: {0}, distance: {1}, dt: {2}, v: {3}, Gear: {4} | {5}, f_equiv:{9}",
-					vse, AbsTime, Container.MileageCounter.Distance, dt, Container.VehicleInfo.VehicleSpeed, 
-					TryCatch(() => Container.GearboxInfo.Gear), vse.Message, RunIdentifier, CycleName, RunSuffix, TryCatch(() => Container.RunData.HybridStrategyParameters?.EquivalenceFactor));
-				Container.FinishSimulationRun(ex);
-				throw ex;
-			} catch (VectoException ve) {
-				Log.Error("SIMULATION RUN ABORTED! ========================");
-				Log.Error(ve);
-				Container.RunStatus = Status.Aborted;
-				var ex = new VectoSimulationException("{6} ({7} {8}) - absTime: {0}, distance: {1}, dt: {2}, v: {3}, Gear: {4} | {5}, f_equiv:{9}",
-					ve, AbsTime, Container.MileageCounter.Distance, dt, Container.VehicleInfo.VehicleSpeed, 
-					TryCatch(() => Container.GearboxInfo.Gear), ve.Message, RunIdentifier, CycleName, RunSuffix, TryCatch(() => Container.RunData.HybridStrategyParameters?.EquivalenceFactor));
-				try {
+				if (_postMortemAnalyzer?.AbortSimulation(Container, vse) ?? true) {
+					Log.Error("SIMULATION RUN ABORTED! ========================");
+					Log.Error(vse);
+					Container.RunStatus = Status.Aborted;
+					var ex = new VectoSimulationException(
+						"{6} ({7} {8}) - absTime: {0}, distance: {1}, dt: {2}, v: {3}, Gear: {4} | {5}, f_equiv:{9}",
+						vse, AbsTime, Container.MileageCounter.Distance, dt, Container.VehicleInfo.VehicleSpeed,
+						TryCatch(() => Container.GearboxInfo.Gear), vse.Message, RunIdentifier, CycleName, RunSuffix,
+						TryCatch(() => Container.RunData.HybridStrategyParameters?.EquivalenceFactor));
 					Container.FinishSimulationRun(ex);
-				} catch (Exception ve2) {
-					ve = new VectoException("Multiple Exceptions occured.",
-						new AggregateException(ve, new VectoException("Exception during finishing Simulation.", ve2)));
-					throw ve;
+					throw ex;
+				}
+			} catch (VectoException ve) {
+				if (_postMortemAnalyzer?.AbortSimulation(Container, ve) ?? true) {
+					Log.Error("SIMULATION RUN ABORTED! ========================");
+					Log.Error(ve);
+					Container.RunStatus = Status.Aborted;
+					var ex = new VectoSimulationException(
+						"{6} ({7} {8}) - absTime: {0}, distance: {1}, dt: {2}, v: {3}, Gear: {4} | {5}, f_equiv:{9}",
+						ve, AbsTime, Container.MileageCounter.Distance, dt, Container.VehicleInfo.VehicleSpeed,
+						TryCatch(() => Container.GearboxInfo.Gear), ve.Message, RunIdentifier, CycleName, RunSuffix,
+						TryCatch(() => Container.RunData.HybridStrategyParameters?.EquivalenceFactor));
+					try {
+						Container.FinishSimulationRun(ex);
+					} catch (Exception ve2) {
+						ve = new VectoException("Multiple Exceptions occured.",
+							new AggregateException(ve,
+								new VectoException("Exception during finishing Simulation.", ve2)));
+						throw ve;
+					}
+
+					throw ex;
 				}
-				throw ex;
 			} catch (Exception e) {
-				Log.Error("SIMULATION RUN ABORTED! ========================");
-				Log.Error(e);
-				Container.RunStatus = Status.Aborted;
-
-				var ex = new VectoSimulationException("{6} ({7} {8}) - absTime: {0}, distance: {1}, dt: {2}, v: {3}, Gear: {4} | {5}, f_equiv:{9}",
-					e, AbsTime, Container.MileageCounter.Distance, dt, Container.VehicleInfo.VehicleSpeed, 
-					TryCatch(() => Container.GearboxInfo.Gear), e.Message, RunIdentifier, CycleName, RunSuffix, TryCatch(() => Container.RunData.HybridStrategyParameters?.EquivalenceFactor) ?? "-");
-				Container.FinishSimulationRun(ex);
-				throw ex;
+				if (_postMortemAnalyzer?.AbortSimulation(Container, e) ?? true) {
+					Log.Error("SIMULATION RUN ABORTED! ========================");
+					Log.Error(e);
+					Container.RunStatus = Status.Aborted;
+
+					var ex = new VectoSimulationException(
+						"{6} ({7} {8}) - absTime: {0}, distance: {1}, dt: {2}, v: {3}, Gear: {4} | {5}, f_equiv:{9}",
+						e, AbsTime, Container.MileageCounter.Distance, dt, Container.VehicleInfo.VehicleSpeed,
+						TryCatch(() => Container.GearboxInfo.Gear), e.Message, RunIdentifier, CycleName, RunSuffix,
+						TryCatch(() => Container.RunData.HybridStrategyParameters?.EquivalenceFactor) ?? "-");
+					Container.FinishSimulationRun(ex);
+					throw ex;
+				}
+			}
+
+			if (Container.RunStatus == Status.PrimaryBusSimulationIgnore) {
+				Container.FinishSimulationRun();
+				WritingResultsDone = true;
+				FinishedWithoutErrors = true;
+                IterationStatistics.FinishSimulation(RunName + CycleName + RunSuffix + RunIdentifier);
+				Log.Info("VectoJob finished.");
+				return;
 			}
 
 			if (CheckCyclePortProgress()) {
@@ -189,14 +216,14 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 					Container = PowertrainBuilder.Build(data, Container.ModalData, Container.SumData);
 					AbsTime = 0.SI<Second>();
 					Container.AbsTime = AbsTime;
-                CyclePort = Container.GetCycleOutPort();
+					CyclePort = Container.GetCycleOutPort();
 					Initialize();
 					Run();
 				},
 				this,
 				() => {
 					Container.RunData.Report?.PrepareResult(null); //<- increase number of expected results;
-                    Container.FinishSingleSimulationRun();
+					Container.FinishSingleSimulationRun();
 				}) ?? false;
 			if (!runAgain) {
 				Container.FinishSimulationRun();
@@ -250,7 +277,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			Success,
 			Canceled,
 			Aborted,
-			REESSEmpty
+			REESSEmpty,
+			PrimaryBusSimulationIgnore
 		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricComponents/ElectricMotor/EfficiencyMap.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricComponents/ElectricMotor/EfficiencyMap.cs
index a24a28bd079e0bc016cb49f06e253d4f302cead9..1382602db9435bcede67a7f0adc985e69babf54b 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricComponents/ElectricMotor/EfficiencyMap.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricComponents/ElectricMotor/EfficiencyMap.cs
@@ -187,9 +187,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricMotor
 		private NewtonMeter SearchTorqueForElectricPower(Watt batPower, PerSecond avgSpeed, NewtonMeter maxEmTorque,
 			EfficiencyResult elPowerMaxEM, double factor = 1.0, bool forceLinesearch = false)
 		{
-			var retVal = SearchAlgorithm.Search(
+			var delta = -maxEmTorque * 0.1 * (maxEmTorque > 0 ? -1 : 1);
+			if (delta.IsEqual(0)) {
+				delta = 0.1.SI<NewtonMeter>();
+			}
+            var retVal = SearchAlgorithm.Search(
 				maxEmTorque, elPowerMaxEM.ElectricalPower - batPower,
-				-maxEmTorque * 0.1 * (maxEmTorque > 0 ? -1 : 1),
+				delta,
 				getYValue: x => {
 					var myX = (EfficiencyResult)x;
 					return (myX.ElectricalPower - batPower) * factor;
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/BatteryElectricMotorController.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/BatteryElectricMotorController.cs
index 9997ccf82684af4b7578404903c8b9efb8b35df5..56c67a01b4cbc1c1e20aa86d82aac46dc91a00cd 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/BatteryElectricMotorController.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/BatteryElectricMotorController.cs
@@ -2,6 +2,7 @@
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.Models.Simulation.DataBus;
 using TUGraz.VectoCore.Models.Simulation.Impl;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Utils;
@@ -58,8 +59,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl {
         #endregion
 
         protected virtual bool CannotProvideRecuperationAtLowSpeed(NewtonMeter outTorque)
-        { 
-			return (DataBus.VehicleInfo.VehicleSpeed ?? 0.SI<MeterPerSecond>()).IsSmallerOrEqual(
+		{
+			var driverIsBraking = DataBus.DriverInfo.DriverBehavior == DrivingBehavior.Braking &&
+								DataBus.DriverInfo.DrivingAction == DrivingAction.Brake;
+
+            return driverIsBraking && (DataBus.VehicleInfo.VehicleSpeed ?? 0.SI<MeterPerSecond>()).IsSmallerOrEqual(
 				GearboxModelData?.DisengageWhenHaltingSpeed ?? Constants.SimulationSettings.ATGearboxDisengageWhenHaltingSpeed)
 					&& outTorque.IsSmaller(0);
 		}
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
index 535c20ab846f75013d8e7b6109bbb8d671159073..56d8f678afb3f41e0b532c3a3cc148c6f56434a3 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
@@ -77,12 +77,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 		public readonly MeterPerSecond PTODriveMinSpeed;
 
-		protected EcoRoll EcoRollState;
+		protected internal EcoRoll EcoRollState;
 		protected PCCSegments PCCSegments;
 
 		public PCCStates PCCState => pccState;
 		protected internal PCCStates pccState = PCCStates.OutsideSegment;
-		protected bool ATEcoRollReleaseLockupClutch;
+		protected internal bool ATEcoRollReleaseLockupClutch;
 
 		public DefaultDriverStrategy(IVehicleContainer container)
 		{
@@ -998,6 +998,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					second = Driver.DrivingActionBrake(absTime, ds, targetVelocity, gradient, first);
 					break;
 				case ResponseSpeedLimitExceeded _:
+					if (DriverStrategy.EcoRollState.State == EcoRollStates.EcoRollOn &&
+						DataBus.GearboxInfo.GearboxType.AutomaticTransmission() && DriverStrategy.ATEcoRollReleaseLockupClutch) {
+						DriverStrategy.EcoRollState.State = EcoRollStates.EcoRollOff;
+						DataBus.GearboxCtl.DisengageGearbox = false;
+					}
 					second = Driver.DrivingActionBrake(absTime, ds, velocityWithOverspeed, gradient);
 					debug.Add("[DMD.HRE-3] SpeedLimitExceeded->Brake", second);
 					break;
@@ -1349,11 +1354,19 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 									debug.Add("[DMB-DB-12] Roll", response);
 									break;
 								case ResponseUnderload _:
-									if (gear.Gear != DataBus.GearboxInfo.Gear.Gear) {
+									if (gear.Gear != DataBus.GearboxInfo.Gear.Gear)
+									{
 										// AT Gearbox switched gears, shift losses are no longer applied, try once more...
 										response = Driver.DrivingActionAccelerate(absTime, ds,
 											DriverStrategy.BrakeTrigger.NextTargetSpeed, gradient);
 										debug.Add("[DMB-DB-13] Accelerate", response);
+										if (response is ResponseUnderload)
+										{
+											Log.Info("Brake -> Overload --> Accelerate -> Gearshift -> Accelerate --> Underload --> Accelerate --> Underload --> trying brake action");
+											response = Driver.DrivingActionBrake(absTime, ds, DriverStrategy.BrakeTrigger.NextTargetSpeed,
+												gradient, targetDistance: targetDistance);
+											debug.Add("[DMB-DB-14] Brake", response);
+										}
 									}
 									break;
 							}
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/HybridController.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/HybridController.cs
index 312775c7d9987f67d346b88da9bf62e624eb7770..cd8ef7a898661ff95adc0af1375a45a4967c9cca 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/HybridController.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/HybridController.cs
@@ -548,8 +548,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 
 			protected virtual bool SpeedTooLowForEngine(GearshiftPosition gear, PerSecond outAngularSpeed) => 
-				(outAngularSpeed * GearboxModelData.Gears[gear.Gear].Ratio).IsSmaller(
-					Constants.SimulationSettings.DownshiftIdlespeedFactor * DataBus.EngineInfo.EngineIdleSpeed);
+				(outAngularSpeed * GearboxModelData.Gears[gear.Gear].Ratio).IsSmaller(DataBus.EngineInfo.EngineIdleSpeed);
 
 			protected virtual bool SpeedTooHighForEngine(GearshiftPosition gear, PerSecond outAngularSpeed) =>
 				(outAngularSpeed * GearboxModelData.Gears[gear.Gear].Ratio).IsGreaterOrEqual(
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/ATShiftStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/ATShiftStrategy.cs
index e825fcab839bea6c55ce2506ef41174c6fa6e01f..94dc120c21a8c6bdee90fafee8ffaac091eb9cec 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/ATShiftStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/ATShiftStrategy.cs
@@ -178,9 +178,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies
 			var disengageTCEngineSpeedLowerIdle = braking && torqueNegative && gear1C &&
 												inAngularVelocity.IsSmallerOrEqual(DataBus.EngineInfo.EngineIdleSpeed);
 
-			if (disengageBeforeHalting || disengageTCEngineSpeedLowerIdle || disengageAngularVelocityZero ||
-				disengageTOutNegativeAndTInPositive) {
-				_nextGear.SetState(absTime, disengaged: true, gear: Gears.First());
+			if (disengageBeforeHalting
+				|| disengageTCEngineSpeedLowerIdle
+				|| disengageAngularVelocityZero
+				|| disengageTOutNegativeAndTInPositive)
+			{
+				// In order to make it to the halting distance do not allow disengaging if propulsion from engine is needed.
+				bool allowDisengageGear = braking && !torqueNegative && slowerThanDisengageSpeed;
+
+				_nextGear.SetState(absTime, disengaged: !allowDisengageGear, gear: Gears.First());
 				return true;
 			}
 
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs
index 0ef811c08bf8dcac342edc1d1e15a26a7625e703..9562feaf2e355615211b1aa60872fcd425382f07 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs
@@ -91,7 +91,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					throw new VectoException("Powertrain with combustion engine requires gearbox and axlegear!");
 					//return;
 				}
-				MaxVehicleSpeed = DataBus.EngineInfo.EngineN95hSpeed /
+
+				var maxDrivetrainSpeed = VectoMath.Min(
+					DataBus.EngineInfo.EngineN95hSpeed, 
+					DataBus.GearboxInfo.GetGearData(DataBus.GearboxInfo.NumGears).MaxSpeed);
+
+				MaxVehicleSpeed = maxDrivetrainSpeed /
 					DataBus.GearboxInfo.GetGearData(DataBus.GearboxInfo.NumGears).Ratio /
 					DataBus.AxlegearInfo.Ratio /
 					(DataBus.AngledriveInfo?.Ratio ?? 1.0) * 
@@ -119,6 +124,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 						ratio = DataBus.GearboxInfo.GetGearData(DataBus.GearboxInfo.NumGears).Ratio *
 								(DataBus.AxlegearInfo?.Ratio ?? 1.0) *
 								(DataBus.AngledriveInfo?.Ratio ?? 1.0);
+
+						maxEMSpeed = VectoMath.Min(
+							DataBus.ElectricMotorInfo(pos).MaxSpeed,
+							DataBus.GearboxInfo.GetGearData(DataBus.GearboxInfo.NumGears).MaxSpeed);
 					}
 					MaxVehicleSpeed = maxEMSpeed / ratio * DataBus.WheelsInfo.DynamicTyreRadius * 0.995;
 				}
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
index 79d7da9d2505641752547aabbb3dcc4de5c095fe..b38f3efa60699abd1a39658c9a6d9348f79df29b 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
@@ -1477,7 +1477,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 					if (newEval.Count > 0) {
 						var newBest = DoSelectBestOption(newEval, absTime, dt, outTorque, outAngularVelocity, dryRun,
 							currentGear);
-						if (!newBest.IgnoreReason.EngineSpeedTooHigh()) {
+						if ((newBest != null) && !newBest.IgnoreReason.EngineSpeedTooHigh()) {
 							best = newBest;
 						}
 					}
@@ -1520,8 +1520,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 				}
 			}
 
-			best.SimulationInterval = dt;
-			best.ProhibitGearshift = prohibitGearshift;
+			if (best != null) {
+				best.SimulationInterval = dt;
+				best.ProhibitGearshift = prohibitGearshift;
+			}
+
 			return best;
 		}
 
@@ -2244,7 +2247,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 
 			SetBatteryCosts(resp, dt, tmp);
 			var absTime = DataBus.AbsTime; // todo!
-			if (DataBus.GearboxInfo.GearEngaged(absTime)) {
+			if (resp.Gearbox.Gear.Engaged) {
 
 				if (iceOff) {
 					// no torque from ICE requested, ICE could be turned off
diff --git a/VectoCore/VectoCore/OutputData/DeclarationReport.cs b/VectoCore/VectoCore/OutputData/DeclarationReport.cs
index 96196f038d61f1ee1bc076a18dcd94d16fd5aae7..54bf1b1372635b4dbd1b5c43bae54a47b68d2581 100644
--- a/VectoCore/VectoCore/OutputData/DeclarationReport.cs
+++ b/VectoCore/VectoCore/OutputData/DeclarationReport.cs
@@ -143,7 +143,9 @@ namespace TUGraz.VectoCore.OutputData
 
 	public interface IWeightedResult
 	{
-		MeterPerSecond AverageSpeed { get; }
+		VectoRun.Status Status { get; }
+
+        MeterPerSecond AverageSpeed { get; }
 
 		MeterPerSecond AverageDrivingSpeed { get; }
 
diff --git a/VectoCore/VectoCore/OutputData/OvcResultEntry.cs b/VectoCore/VectoCore/OutputData/OvcResultEntry.cs
index 463dbdfe1c6284e6bc6550215d9f1153b4bb96e9..75c64424a79120750b001246d2af871c89b04604 100644
--- a/VectoCore/VectoCore/OutputData/OvcResultEntry.cs
+++ b/VectoCore/VectoCore/OutputData/OvcResultEntry.cs
@@ -1,6 +1,7 @@
 using System.Collections.Generic;
 using TUGraz.VectoCommon.BusAuxiliaries;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.Simulation.Impl;
 
 namespace TUGraz.VectoCore.OutputData
 {
@@ -38,6 +39,7 @@ namespace TUGraz.VectoCore.OutputData
 		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/SumDataFields.cs b/VectoCore/VectoCore/OutputData/SumDataFields.cs
index 2d6e1d1a00effd59f89911a5282935746061e332..9711283be4adaec22ec0792968fcde858fd6d15b 100644
--- a/VectoCore/VectoCore/OutputData/SumDataFields.cs
+++ b/VectoCore/VectoCore/OutputData/SumDataFields.cs
@@ -746,11 +746,11 @@ namespace TUGraz.VectoCore.OutputData
 			{ E_IEPC_OFF_Loss_Format, (r, m, em) => m.ElectricMotorOffLosses(em).ConvertToKiloWattHour() },
 			{ E_IEPC_LOSS_FORMAT, (r, m, em) => m.ElectricMotorLosses(em).ConvertToKiloWattHour() },
 			{ E_IEPC_OFF_TIME_SHARE, (r, m, em) => (ConvertedSI)m.ElectricMotorOffTimeShare(em) },
-			{ EM_RATED_POWER, (r, m, em) => r.VehicleData.InputData.Components.IEPC.TotalRatedPowerCalculated.ConvertToKiloWatt() },
-			{ EM_RATED_SPEED_HI, (r, m, em) => r.VehicleData.InputData.Components.IEPC.VoltageLevels.MaxBy(v  => v.VoltageLevel)?.ContinuousTorqueSpeed.AsRPM ?? 0 },
-			{ EM_RATED_SPEED_LO, (r, m, em) => r.VehicleData.InputData.Components.IEPC.VoltageLevels.MinBy(v  => v.VoltageLevel)?.ContinuousTorqueSpeed.AsRPM ?? 0 },
-			{ EM_RATED_TORQUE_HI, (r, m, em) => (ConvertedSI)(r.VehicleData.InputData.Components.IEPC.VoltageLevels.MaxBy(v  => v.VoltageLevel)?.ContinuousTorque ?? 0.SI<NewtonMeter>()) },
-			{ EM_RATED_TORQUE_LO, (r, m, em) => (ConvertedSI)(r.VehicleData.InputData.Components.IEPC.VoltageLevels.MinBy(v  => v.VoltageLevel)?.ContinuousTorque ?? 0.SI<NewtonMeter>()) },
+			{ EM_RATED_POWER, (r, m, em) => r.VehicleData.InputData.Components.IEPC?.TotalRatedPowerCalculated.ConvertToKiloWatt() ?? 0.SI<Watt>().ConvertToKiloWatt() },
+			{ EM_RATED_SPEED_HI, (r, m, em) => r.VehicleData.InputData.Components.IEPC?.VoltageLevels.MaxBy(v  => v.VoltageLevel)?.ContinuousTorqueSpeed.AsRPM ?? 0 },
+			{ EM_RATED_SPEED_LO, (r, m, em) => r.VehicleData.InputData.Components.IEPC?.VoltageLevels.MinBy(v  => v.VoltageLevel)?.ContinuousTorqueSpeed.AsRPM ?? 0 },
+			{ EM_RATED_TORQUE_HI, (r, m, em) => (ConvertedSI)(r.VehicleData.InputData.Components.IEPC?.VoltageLevels.MaxBy(v  => v.VoltageLevel)?.ContinuousTorque ?? 0.SI<NewtonMeter>()) },
+			{ EM_RATED_TORQUE_LO, (r, m, em) => (ConvertedSI)(r.VehicleData.InputData.Components.IEPC?.VoltageLevels.MinBy(v  => v.VoltageLevel)?.ContinuousTorque ?? 0.SI<NewtonMeter>()) },
         };
 
 		public static readonly WriteAuxEntry AuxDataValue = (r, m, a) => m.AuxiliaryWork(a).ConvertToKiloWattHour();
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/AbstractResultsWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/AbstractResultsWriter.cs
index 8836194dbafb5b9210967bb4d7bb6f02e7ef3f96..fc5c2bd548f1207361a19af5c6b3d8ac107d8fab 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/AbstractResultsWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/AbstractResultsWriter.cs
@@ -1,4 +1,5 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
 using System.Linq;
 using System.Xml.Linq;
 using TUGraz.VectoCommon.Exceptions;
@@ -19,26 +20,44 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
         public virtual XElement GenerateResults(List<IResultEntry> results)
         {
             var ordered = GetOrderedResults(results);
-            var allSuccess = results.All(x => x.Status == VectoRun.Status.Success);
+            var allSuccess = results.All(x => x.Status.IsOneOf(VectoRun.Status.Success, VectoRun.Status.PrimaryBusSimulationIgnore));
 			return new XElement(TNS + XMLNames.Report_Results,
 				new XElement(TNS + XMLNames.Report_Result_Status,
 					allSuccess ? XMLNames.Report_Results_Status_Success_Val : XMLNames.Report_Results_Status_Error_Val),
-				ordered.Select(x =>
-					x.Status == VectoRun.Status.Success
-						? ResultSuccessWriter.GetElement(x)
-						: ResultErrorWriter.GetElement(x)),
+				ordered.Select(x => GetResultWriter(x.Status).GetElement(x)),
 				allSuccess ? SummaryWriter.GetElement(ordered) : null
 			);
 		}
 
         #endregion
 
+		protected virtual IResultGroupWriter GetResultWriter(VectoRun.Status status)
+		{
+			switch (status) {
+				case VectoRun.Status.Pending:
+				case VectoRun.Status.Running:
+				case VectoRun.Status.REESSEmpty:
+					throw new VectoException($"No result Writer available for run status ${status}");
+				case VectoRun.Status.Success:
+					return ResultSuccessWriter;
+				case VectoRun.Status.Canceled:
+				case VectoRun.Status.Aborted:
+					return ResultErrorWriter;
+				case VectoRun.Status.PrimaryBusSimulationIgnore:
+					return ResultSuccessWriter;
+				default:
+					throw new ArgumentOutOfRangeException(nameof(status), status, null);
+			}
+		}
+
         protected abstract XNamespace TNS { get; }
 
         protected abstract IResultGroupWriter ResultSuccessWriter { get; }
 
         protected abstract IResultGroupWriter ResultErrorWriter { get; }
 
+		//protected abstract IResultGroupWriter ResultIgnoreWriter { get; }
+
         public abstract IReportResultsSummaryWriter SummaryWriter { get; }
 
 
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/CO2Writer.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/CO2Writer.cs
index f43ffc60a0f59c5222a9f35e22b3162eeece3da1..73fa2b5efb998027b33dd06533ca6005714aa6ca 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/CO2Writer.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/CO2Writer.cs
@@ -4,6 +4,7 @@ using System.Xml.Linq;
 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;
 
@@ -15,6 +16,13 @@ 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)
+					.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()))
@@ -23,9 +31,17 @@ 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()))
+					.ToArray();
+            }
+
 			return GetCO2ResultEntries(entry.CO2Total, entry.Distance, entry.Payload, entry.CargoVolume,
 					entry.PassengerCount)
-				.Select(x => new XElement(TNS + XMLNames.Report_Results_CO2, x.GetElement()))
+				.Select(x => new XElement(TNS + XMLNames.Report_Results_CO2,
+					x.GetElement()))
 				.ToArray();
 		}
 
@@ -123,6 +139,14 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
                 return null;
             }
 
+			if (entry.Status == VectoRun.Status.PrimaryBusSimulationIgnore) {
+				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();
+			}
+
             var tmp = _factory.GetFuelConsumptionBus(_factory, TNS);
 			return new[] {
 				new XElement(TNS + XMLNames.Report_ResultEntry_FCZEVAuxHeater,
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ElectricEnergyWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ElectricEnergyWriter.cs
index 0d067d86a943040231943578b2c462af3aa5cb93..c78ab35eece1f41ea6063c9e21760f31cb4e95d7 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ElectricEnergyWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ElectricEnergyWriter.cs
@@ -3,6 +3,7 @@ using System.Linq;
 using System.Xml.Linq;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.Simulation.Impl;
 using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
@@ -16,7 +17,17 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
 
         public virtual XElement GetElement(IResultEntry entry)
         {
-            return new XElement(TNS + ElectricEnergyConsumptionXMLElementName,
+			if (entry.Status == VectoRun.Status.PrimaryBusSimulationIgnore) {
+				return new XElement(TNS + ElectricEnergyConsumptionXMLElementName,
+					GetEnergyConsumption(entry.ElectricEnergyConsumption, entry.Distance, entry.Payload,
+						entry.CargoVolume,
+						entry.PassengerCount).Select(x =>
+						new XElement(TNS + XMLNames.Report_Result_EnergyConsumption,
+							new FormattedReportValue(new ConvertedSI(double.NaN, x.Units)).GetElement()))
+				);
+			}
+
+			return new XElement(TNS + ElectricEnergyConsumptionXMLElementName,
                 GetEnergyConsumption(entry.ElectricEnergyConsumption, entry.Distance, entry.Payload, entry.CargoVolume,
                     entry.PassengerCount).Select(x =>
                     new XElement(TNS + XMLNames.Report_Result_EnergyConsumption, new FormattedReportValue(x).GetElement()))
@@ -25,6 +36,15 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
 
         public virtual XElement GetElement(IWeightedResult weighted)
         {
+			if (weighted.Status == VectoRun.Status.PrimaryBusSimulationIgnore) {
+				return new XElement(TNS + ElectricEnergyConsumptionXMLElementName,
+					GetEnergyConsumption(weighted.ElectricEnergyConsumption, weighted.Distance, weighted.Payload,
+						weighted.CargoVolume,
+						weighted.PassengerCount).Select(x =>
+						new XElement(TNS + XMLNames.Report_Result_EnergyConsumption,
+							new FormattedReportValue(new ConvertedSI(double.NaN, x.Units)).GetElement()))
+				);
+			}
             return new XElement(TNS + ElectricEnergyConsumptionXMLElementName,
                 GetEnergyConsumption(weighted.ElectricEnergyConsumption, weighted.Distance, weighted.Payload, weighted.CargoVolume,
                     weighted.PassengerCount).Select(x =>
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/FuelConsumptionWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/FuelConsumptionWriter.cs
index 84df92e8ce8b27c74359fdd4d22cd18420be0dff..078531c9766b09ce69b12083f3eb8e03682ce4d9 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/FuelConsumptionWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/FuelConsumptionWriter.cs
@@ -6,6 +6,7 @@ using TUGraz.VectoCommon.BusAuxiliaries;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.Simulation.Impl;
 using TUGraz.VectoCore.OutputData.ModDataPostprocessing;
 using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9.ResultWriter;
 using TUGraz.VectoCore.Utils;
@@ -16,16 +17,26 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
     {
         protected FuelConsumptionWriterBase(ICommonResultsWriterFactory factory, XNamespace ns) : base(factory, ns) { }
 
+		protected virtual string FCElementName { get; } = XMLNames.Report_Results_FuelConsumption;
+
         #region Implementation of IFuelConsumptionWriter
 
         public XElement GetElement(IResultEntry entry, IFuelConsumptionCorrection fc)
         {
+			if (entry.Status == VectoRun.Status.PrimaryBusSimulationIgnore) {
+				return GetElementIgnore(fc.TotalFuelConsumptionCorrected, fc.Fuel, entry.Distance, entry.Payload,
+					entry.CargoVolume, entry.PassengerCount);
+			}
 			return GetElement(fc.TotalFuelConsumptionCorrected, fc.Fuel, entry.Distance, entry.Payload, entry.CargoVolume, entry.PassengerCount);
         }
 
         public XElement GetElement(IWeightedResult entry, IFuelProperties fuel, Kilogram consumption)
 		{
-			return GetElement(consumption, fuel, entry.Distance, entry.Payload, entry.CargoVolume, entry.PassengerCount);
+			if (entry.Status == VectoRun.Status.PrimaryBusSimulationIgnore) {
+				return GetElementIgnore(consumption, fuel, entry.Distance, entry.Payload,
+					entry.CargoVolume, entry.PassengerCount);
+			}
+            return GetElement(consumption, fuel, entry.Distance, entry.Payload, entry.CargoVolume, entry.PassengerCount);
 		}
 
 		protected virtual XElement GetElement(Kilogram consumption, IFuelProperties fuel, Meter distance, Kilogram payLoad, CubicMeter cargoVolume, double? passengerCount)
@@ -33,13 +44,22 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
 			return new XElement(TNS + XMLNames.Report_Results_Fuel,
 				new XAttribute(XMLNames.Report_Results_Fuel_Type_Attr, fuel.FuelType.ToXMLFormat()),
 				GetFuelConsumptionEntries(consumption, fuel, distance, payLoad, cargoVolume, passengerCount).Select(x =>
-					new XElement(TNS + XMLNames.Report_Results_FuelConsumption, new FormattedReportValue(x).GetElement()))
+					new XElement(TNS + FCElementName, new FormattedReportValue(x).GetElement()))
 			);
 		}
 
+		protected virtual XElement GetElementIgnore(Kilogram consumption, IFuelProperties fuel, Meter distance, 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, distance, 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,
+        public abstract IList<ConvertedSI> GetFuelConsumptionEntries(Kilogram fc,
 			IFuelProperties fuel, Meter distance, Kilogram payload, CubicMeter volume,
 			double? passenger);
 
@@ -58,6 +78,11 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
                 // 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<ConvertedSI>() { (fc / 1.SI<Meter>()).ConvertToGrammPerKiloMeter(),};
 			}
+
+            if (fc == null) {
+                return new List<ConvertedSI>();
+            }
+
             var retVal = new List<ConvertedSI> {
                 (fc / distance).ConvertToGrammPerKiloMeter(),
                 (fc / distance /payload).ConvertToGrammPerTonKilometer()};
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultGroupWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultGroupWriter.cs
index cab35597bef17e8a5a2f6057078ed595344f253e..fee1a52dc737834422e412d32c32aa2f930107ef 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultGroupWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultGroupWriter.cs
@@ -93,6 +93,16 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
 
 		public XElement[] GetElements(IResultEntry result)
 		{
+			if (result.Status == VectoRun.Status.PrimaryBusSimulationIgnore) {
+				return new[] {
+					new XElement(TNS + XMLNames.Report_ResultEntry_ActualChargeDepletingRange,
+						new ConvertedSI(double.NaN, XMLNames.Unit_km).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_ResultEntry_EquivalentAllElectricRange,
+						new ConvertedSI(double.NaN, XMLNames.Unit_km).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_ResultEntry_ZeroCO2EmissionsRange,
+						new ConvertedSI(double.NaN, XMLNames.Unit_km).ValueAsUnit()),
+				};
+            }
 			return new[] {
 				new XElement(TNS + XMLNames.Report_ResultEntry_ActualChargeDepletingRange,
 					result.ActualChargeDepletingRange.ConvertToKiloMeter().ValueAsUnit()),
@@ -105,7 +115,17 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
 
 		public XElement[] GetElements(IWeightedResult weightedResult)
 		{
-			return new[] {
+			if (weightedResult.Status == VectoRun.Status.PrimaryBusSimulationIgnore) {
+				return new[] {
+					new XElement(TNS + XMLNames.Report_ResultEntry_ActualChargeDepletingRange,
+						new ConvertedSI(double.NaN, XMLNames.Unit_km).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_ResultEntry_EquivalentAllElectricRange,
+						new ConvertedSI(double.NaN, XMLNames.Unit_km).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_ResultEntry_ZeroCO2EmissionsRange,
+						new ConvertedSI(double.NaN, XMLNames.Unit_km).ValueAsUnit()),
+				};
+			}
+            return new[] {
 				new XElement(TNS + XMLNames.Report_ResultEntry_ActualChargeDepletingRange,
 					weightedResult.ActualChargeDepletingRange.ConvertToKiloMeter().ValueAsUnit()),
 				new XElement(TNS + XMLNames.Report_ResultEntry_EquivalentAllElectricRange,
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultTotalWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultTotalWriter.cs
index caef6f1b763a04f8b9aba643aba85116ab515b04..bbdb7028f570593bb9067ee8dd72db7baa8d5e91 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultTotalWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultTotalWriter.cs
@@ -3,6 +3,7 @@ using System.Linq;
 using System.Xml.Linq;
 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;
 
@@ -124,7 +125,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
                 GetElectricConsumption(entry),
                 GetCO2(entry),
                 _factory.GetElectricRangeWriter(_factory, TNS).GetElements(total),
-                new XElement(TNS + "UtilityFactor", total.UtilityFactor.ToXMLFormat(3))
+                new XElement(TNS + "UtilityFactor", entry.Weighted.Status == VectoRun.Status.PrimaryBusSimulationIgnore ? double.NaN.ToString() : total.UtilityFactor.ToXMLFormat(3))
             );
         }
 
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultWriter.cs
index 117a0414124adb5b689dd376cf46be607bc2c556..e92d932ae9220c0b104e6aa448e9cc1096b4a0bd 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultWriter.cs
@@ -54,10 +54,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
 
 		public override XElement GetElement(IResultEntry entry)
 		{
-			
-			
-
-            return new XElement(TNS + XMLNames.Report_Result_Result,
+			return new XElement(TNS + XMLNames.Report_Result_Result,
 				new XAttribute(XMLNames.Report_Result_Status_Attr, XMLNames.Report_Results_Status_Success_Val),
 				new XAttribute(xsi + XMLNames.XSIType, ResultXMLType),
 				_factory.GetSuccessMissionWriter(_factory, TNS).GetElement(entry),
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFResultsNinjectModule.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFResultsNinjectModule.cs
index 0db9dff451e457c36a3da0e3b607ce30ef3add2b..31403ea977faa8ff3009ec08654c9105f3663bcc 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFResultsNinjectModule.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFResultsNinjectModule.cs
@@ -124,8 +124,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 				.NamedLikeFactoryMethod((ICIFResultsWriterFactory c) => c.GetBusPEVSuccessResultWriter(null, XNamespace.None));
 			Bind<IResultGroupWriter>().To<ErrorResultWriter>().When(AccessedViaCIFResultsWriterFactory)
 				.NamedLikeFactoryMethod((ICIFResultsWriterFactory c) => c.GetBusErrorResultWriter(null, XNamespace.None));
-
-			Bind<IResultGroupWriter>().To<ResultSimulationParameterCIFBusWriter>().When(AccessedViaCIFResultsWriterFactory)
+			
+            Bind<IResultGroupWriter>().To<ResultSimulationParameterCIFBusWriter>().When(AccessedViaCIFResultsWriterFactory)
 				.NamedLikeFactoryMethod((ICIFResultsWriterFactory c) => c.GetBusSimulationParameterWriter(null, XNamespace.None));
 
 			Bind<IResultGroupWriter>().To<BusConvTotalWriter>().When(AccessedViaCIFResultsWriterFactory)
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/CIFResultWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/CIFResultWriter.cs
index ef734e12be800eb9fe6ac5308287f7ef78c6e44a..eaa8787471cd02d451ec9267e95ef363d6c9cdc1 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/CIFResultWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/CIFResultWriter.cs
@@ -2,6 +2,7 @@
 using System.Linq;
 using System.Xml.Linq;
 using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Models.Simulation.Impl;
 using TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common;
 
@@ -34,10 +35,9 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 			#region Overrides of AbstractResultsWriter
 
 			protected override IResultGroupWriter ResultSuccessWriter => _cifFactory.GetLorryConvSuccessResultWriter(_cifFactory, TNS);
-
 			protected override IResultGroupWriter ResultErrorWriter => _cifFactory.GetLorryErrorResultWriter(_cifFactory, TNS);
-
-			public override Common.IReportResultsSummaryWriter SummaryWriter => _cifFactory.GetLorryConvSummaryWriter(_cifFactory, TNS);
+			
+            public override Common.IReportResultsSummaryWriter SummaryWriter => _cifFactory.GetLorryConvSummaryWriter(_cifFactory, TNS);
 
 			#endregion
 		}
@@ -48,8 +48,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 			protected override IResultGroupWriter ResultSuccessWriter => _cifFactory.GetLorryHEVNonOVCSuccessResultWriter(_cifFactory, TNS);
 			protected override IResultGroupWriter ResultErrorWriter => _cifFactory.GetLorryErrorResultWriter(_cifFactory, TNS);
-
-			public override Common.IReportResultsSummaryWriter SummaryWriter => _cifFactory.GetLorryHEVNonOVCSummaryWriter(_cifFactory, TNS);
+			
+            public override Common.IReportResultsSummaryWriter SummaryWriter => _cifFactory.GetLorryHEVNonOVCSummaryWriter(_cifFactory, TNS);
 
 		}
 
@@ -62,7 +62,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 			public override XElement GenerateResults(List<IResultEntry> results)
 			{
 				var ordered = GetOrderedResultsOVC(results);
-				var allSuccess = results.All(x => x.Status == VectoRun.Status.Success);
+				var allSuccess = results.All(x => x.Status.IsOneOf(VectoRun.Status.Success, VectoRun.Status.PrimaryBusSimulationIgnore) );
 				return new XElement(TNS + XMLNames.Report_Results,
 					new XElement(TNS + XMLNames.Report_Result_Status,
 						allSuccess ? XMLNames.Report_Results_Status_Success_Val : XMLNames.Report_Results_Status_Error_Val),
@@ -79,7 +79,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 			protected override IResultGroupWriter ResultSuccessWriter => _cifFactory.GetLorryHEVOVCSuccessResultWriter(_cifFactory, TNS);
 			protected override IResultGroupWriter ResultErrorWriter => _cifFactory.GetLorryErrorResultWriter(_cifFactory, TNS);
-			public override Common.IReportResultsSummaryWriter SummaryWriter => _cifFactory.GetLorryHEVOVCSummaryWriter(_cifFactory, TNS);
+			
+            public override Common.IReportResultsSummaryWriter SummaryWriter => _cifFactory.GetLorryHEVOVCSummaryWriter(_cifFactory, TNS);
 
 		}
 
@@ -89,8 +90,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 			protected override IResultGroupWriter ResultSuccessWriter => _cifFactory.GetLorryPEVSuccessResultWriter(_cifFactory, TNS);
 			protected override IResultGroupWriter ResultErrorWriter => _cifFactory.GetLorryErrorResultWriter(_cifFactory, TNS);
-
-			public override Common.IReportResultsSummaryWriter SummaryWriter => _cifFactory.GetLorryPEVSummaryWriter(_cifFactory, TNS);
+			
+            public override Common.IReportResultsSummaryWriter SummaryWriter => _cifFactory.GetLorryPEVSummaryWriter(_cifFactory, TNS);
 
 		}
 
@@ -100,6 +101,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 			protected override IResultGroupWriter ResultSuccessWriter => _cifFactory.GetBusConvSuccessResultWriter(_cifFactory, TNS);
 			protected override IResultGroupWriter ResultErrorWriter => _cifFactory.GetBusErrorResultWriter(_cifFactory, TNS);
+			
 			public override Common.IReportResultsSummaryWriter SummaryWriter => _cifFactory.GetBusConvSummaryWriter(_cifFactory, TNS);
 
 		}
@@ -110,6 +112,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 			protected override IResultGroupWriter ResultSuccessWriter => _cifFactory.GetBusHEVNonOVCSuccessResultWriter(_cifFactory, TNS);
 			protected override IResultGroupWriter ResultErrorWriter => _cifFactory.GetLorryErrorResultWriter(_cifFactory, TNS);
+			
 			public override Common.IReportResultsSummaryWriter SummaryWriter => _cifFactory.GetBusHEVNonOVCSummaryWriter(_cifFactory, TNS);
 
 		}
@@ -121,7 +124,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 			public override XElement GenerateResults(List<IResultEntry> results)
 			{
 				var ordered = GetOrderedResultsOVC(results);
-				var allSuccess = results.All(x => x.Status == VectoRun.Status.Success);
+				var allSuccess = results.All(x => x.Status.IsOneOf(VectoRun.Status.Success, VectoRun.Status.PrimaryBusSimulationIgnore));
 				return new XElement(TNS + XMLNames.Report_Results,
 					new XElement(TNS + XMLNames.Report_Result_Status,
 						allSuccess
@@ -138,6 +141,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 			protected override IResultGroupWriter ResultSuccessWriter => _cifFactory.GetBusHEVOVCSuccessResultWriter(_cifFactory, TNS);
 			protected override IResultGroupWriter ResultErrorWriter => _cifFactory.GetBusErrorResultWriter(_cifFactory, TNS);
+			
 			public override Common.IReportResultsSummaryWriter SummaryWriter => _cifFactory.GetBusHEVOVCSummaryWriter(_cifFactory, TNS);
 
 		}
@@ -148,6 +152,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 			protected override IResultGroupWriter ResultSuccessWriter => _cifFactory.GetBusPEVSuccessResultWriter(_cifFactory, TNS);
 			protected override IResultGroupWriter ResultErrorWriter => _cifFactory.GetBusErrorResultWriter(_cifFactory, TNS);
+			
 			public override Common.IReportResultsSummaryWriter SummaryWriter => _cifFactory.GetBusPEVSummaryWriter(_cifFactory, TNS);
 
 		}
@@ -167,6 +172,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 			protected override IResultGroupWriter ResultSuccessWriter => null;
 			protected override IResultGroupWriter ResultErrorWriter => null;
+			
 			public override Common.IReportResultsSummaryWriter SummaryWriter => null;
 
 
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/MRFResultsNinjectModule.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/MRFResultsNinjectModule.cs
index 9528fd23fbc51ded34cab9d9f2d292ecc00e6b75..57cb9b37ee3c57ac59b3a16ca9052e100393ec40 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/MRFResultsNinjectModule.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/MRFResultsNinjectModule.cs
@@ -132,7 +132,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
                 .NamedLikeFactoryMethod((IMRFResultsWriterFactory c) => c.GetBusHEVOVCSuccessResultWriter(null, XNamespace.None));
             Bind<IResultGroupWriter>().To<BusPEVMRFResultWriter>().When(AccessedViaMRFResultsWriterFactory)
                 .NamedLikeFactoryMethod((IMRFResultsWriterFactory c) => c.GetBusPEVSuccessResultWriter(null, XNamespace.None));
-            Bind<IResultGroupWriter>().To<ErrorResultWriter>().When(AccessedViaMRFResultsWriterFactory)
+
+			Bind<IResultGroupWriter>().To<ErrorResultWriter>().When(AccessedViaMRFResultsWriterFactory)
                 .NamedLikeFactoryMethod((IMRFResultsWriterFactory c) => c.GetBusErrorResultWriter(null, XNamespace.None));
 
             Bind<IResultGroupWriter>().To<ResultSimulationParameterMRFBusWriter>().When(AccessedViaMRFResultsWriterFactory)
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/ManufacturerReportXMLTypeWriter/Components/MRFComponentsType.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/ManufacturerReportXMLTypeWriter/Components/MRFComponentsType.cs
index 9058ed4aa5ff88dc098cf50a0c048052adb44375..98cc105016903c26d9e04d125a8c84f7376bf912 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/ManufacturerReportXMLTypeWriter/Components/MRFComponentsType.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/ManufacturerReportXMLTypeWriter/Components/MRFComponentsType.cs
@@ -7,6 +7,7 @@ using System.Xml.Linq;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 
 namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter
 {
@@ -269,11 +270,13 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.
 		public XElement GetElement(IDeclarationInputDataProvider inputData)
 		{
 			var components = inputData.JobInputData.Vehicle.Components;
+
 			return new XElement(_mrf + XMLNames.Vehicle_Components,
 				_mrfFactory.GetEngineType().GetElement(inputData),
 				_mrfFactory.GetTransmissionType().GetElement(inputData),
 				components.TorqueConverterInputData != null ? _mrfFactory.GetTorqueConverterType().GetElement(inputData) : null,
-				components.AngledriveInputData != null ? _mrfFactory.GetAngleDriveType().GetElement(inputData) : null,
+				(components.AngledriveInputData != null) && (components.AngledriveInputData.Type == AngledriveType.SeparateAngledrive)
+					? _mrfFactory.GetAngleDriveType().GetElement(inputData) : null,
 				components.RetarderInputData != null ? _mrfFactory.GetRetarderType().GetElement(inputData) : null,
 				components.AxleGearInputData != null ? _mrfFactory.GetAxleGearType().GetElement(inputData) : null,
 
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/ResultWriter/MRFResultsWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/ResultWriter/MRFResultsWriter.cs
index bb062af0533869d4eb8a5f9d23dd55c95f2a2f35..fbd756f1091fed544193f45a166864d87ea1b6fd 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/ResultWriter/MRFResultsWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/ResultWriter/MRFResultsWriter.cs
@@ -2,6 +2,7 @@
 using System.Linq;
 using System.Xml.Linq;
 using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Models.Simulation.Impl;
 using TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common;
 
@@ -29,10 +30,9 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 			#region Overrides of AbstractResultsWriter
 
 			protected override IResultGroupWriter ResultSuccessWriter => _mrfFactory.GetLorryConvSuccessResultWriter(_mrfFactory, TNS);
-
 			protected override IResultGroupWriter ResultErrorWriter => _mrfFactory.GetLorryErrorResultWriter(_mrfFactory, TNS);
 
-			public override IReportResultsSummaryWriter SummaryWriter => _mrfFactory.GetLorryConvSummaryWriter(_mrfFactory, TNS);
+            public override IReportResultsSummaryWriter SummaryWriter => _mrfFactory.GetLorryConvSummaryWriter(_mrfFactory, TNS);
 
 			#endregion
 		}
@@ -44,7 +44,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 			protected override IResultGroupWriter ResultSuccessWriter => _mrfFactory.GetLorryHEVNonOVCSuccessResultWriter(_mrfFactory, TNS);
 			protected override IResultGroupWriter ResultErrorWriter => _mrfFactory.GetLorryErrorResultWriter(_mrfFactory, TNS);
 
-			public override IReportResultsSummaryWriter SummaryWriter => _mrfFactory.GetLorryHEVNonOVCSummaryWriter(_mrfFactory, TNS);
+            public override IReportResultsSummaryWriter SummaryWriter => _mrfFactory.GetLorryHEVNonOVCSummaryWriter(_mrfFactory, TNS);
 
 		}
 
@@ -57,7 +57,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 			public override XElement GenerateResults(List<IResultEntry> results)
 			{
 				var ordered = GetOrderedResultsOVC(results);
-				var allSuccess = results.All(x => x.Status == VectoRun.Status.Success);
+				var allSuccess = results.All(x => x.Status.IsOneOf(VectoRun.Status.Success, VectoRun.Status.PrimaryBusSimulationIgnore));
 				return new XElement(TNS + XMLNames.Report_Results,
 					new XElement(TNS + XMLNames.Report_Result_Status,
 						allSuccess
@@ -76,6 +76,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 			protected override IResultGroupWriter ResultSuccessWriter => _mrfFactory.GetLorryHEVOVCSuccessResultWriter(_mrfFactory, TNS);
 			protected override IResultGroupWriter ResultErrorWriter => _mrfFactory.GetLorryErrorResultWriter(_mrfFactory, TNS);
+			
 			public override IReportResultsSummaryWriter SummaryWriter => _mrfFactory.GetLorryHEVOVCSummaryWriter(_mrfFactory, TNS);
 
 		}
@@ -86,7 +87,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 			protected override IResultGroupWriter ResultSuccessWriter => _mrfFactory.GetLorryPEVSuccessResultWriter(_mrfFactory, TNS);
 			protected override IResultGroupWriter ResultErrorWriter => _mrfFactory.GetLorryErrorResultWriter(_mrfFactory, TNS);
-
+			
 			public override IReportResultsSummaryWriter SummaryWriter => _mrfFactory.GetLorryPEVSummaryWriter(_mrfFactory, TNS);
 
 		}
@@ -97,6 +98,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 			protected override IResultGroupWriter ResultSuccessWriter => _mrfFactory.GetBusConvSuccessResultWriter(_mrfFactory, TNS);
 			protected override IResultGroupWriter ResultErrorWriter => _mrfFactory.GetBusErrorResultWriter(_mrfFactory, TNS);
+			
 			public override IReportResultsSummaryWriter SummaryWriter => _mrfFactory.GetBusConvSummaryWriter(_mrfFactory, TNS);
 
 		}
@@ -107,6 +109,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 			protected override IResultGroupWriter ResultSuccessWriter => _mrfFactory.GetBusHEVNonOVCSuccessResultWriter(_mrfFactory, TNS);
 			protected override IResultGroupWriter ResultErrorWriter => _mrfFactory.GetLorryErrorResultWriter(_mrfFactory, TNS);
+			
 			public override IReportResultsSummaryWriter SummaryWriter => _mrfFactory.GetBusHEVNonOVCSummaryWriter(_mrfFactory, TNS);
 
 		}
@@ -118,15 +121,15 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 			public override XElement GenerateResults(List<IResultEntry> results)
 			{
 				var ordered = GetOrderedResultsOVC(results);
-				var allSuccess = results.All(x => x.Status == VectoRun.Status.Success);
+				var allSuccess = results.All(x => x.Status.IsOneOf(VectoRun.Status.Success, VectoRun.Status.PrimaryBusSimulationIgnore));
 				return new XElement(TNS + XMLNames.Report_Results,
 					new XElement(TNS + XMLNames.Report_Result_Status,
 						allSuccess
 							? XMLNames.Report_Results_Status_Success_Val
 							: XMLNames.Report_Results_Status_Error_Val),
 					ordered.Select(x =>
-						x.ChargeDepletingResult.Status == VectoRun.Status.Success &&
-						x.ChargeSustainingResult.Status == VectoRun.Status.Success
+						x.ChargeDepletingResult.Status.IsOneOf(VectoRun.Status.Success, VectoRun.Status.PrimaryBusSimulationIgnore) &&
+						x.ChargeSustainingResult.Status.IsOneOf(VectoRun.Status.Success, VectoRun.Status.PrimaryBusSimulationIgnore)
 							? ResultSuccessWriter.GetElement(x)
 							: ResultErrorWriter.GetElement(x)),
 					SummaryWriter.GetElement(ordered)
@@ -135,6 +138,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 			protected override IResultGroupWriter ResultSuccessWriter => _mrfFactory.GetBusHEVOVCSuccessResultWriter(_mrfFactory, TNS);
 			protected override IResultGroupWriter ResultErrorWriter => _mrfFactory.GetBusErrorResultWriter(_mrfFactory, TNS);
+			
 			public override IReportResultsSummaryWriter SummaryWriter => _mrfFactory.GetBusHEVOVCSummaryWriter(_mrfFactory, TNS);
 
 		}
@@ -145,6 +149,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 			protected override IResultGroupWriter ResultSuccessWriter => _mrfFactory.GetBusPEVSuccessResultWriter(_mrfFactory, TNS);
 			protected override IResultGroupWriter ResultErrorWriter => _mrfFactory.GetBusErrorResultWriter(_mrfFactory, TNS);
+			
 			public override IReportResultsSummaryWriter SummaryWriter => _mrfFactory.GetBusPEVSummaryWriter(_mrfFactory, TNS);
 
 		}
@@ -164,6 +169,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
 
 			protected override IResultGroupWriter ResultSuccessWriter => null;
 			protected override IResultGroupWriter ResultErrorWriter => null;
+			
 			public override IReportResultsSummaryWriter SummaryWriter => null;
 
 
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/ResultWriter/ResultGroupWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/ResultWriter/ResultGroupWriter.cs
index fc5c1821fba6addb217174d98ce72522800540e5..c21e18d186a72764d05fde9ced10cd2831b785a4 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/ResultWriter/ResultGroupWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/ResultWriter/ResultGroupWriter.cs
@@ -4,6 +4,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Impl;
 using TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common;
 using TUGraz.VectoCore.Utils;
 
@@ -62,9 +63,28 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.
 
 		public override XElement GetElement(IResultEntry entry)
 		{
+			if (entry.Status == VectoRun.Status.PrimaryBusSimulationIgnore) {
+				return new XElement(TNS + XMLNames.Report_ResultEntry_VehiclePerformance,
+					new XElement(TNS + XMLNames.Report_ResultEntry_AverageSpeed, new ConvertedSI(double.NaN, XMLNames.Unit_kmph).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_ResultEntry_AvgDrivingSpeed, new ConvertedSI(double.NaN, XMLNames.Unit_kmph).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_ResultEntry_MinSpeed, new ConvertedSI(double.NaN, XMLNames.Unit_kmph).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_ResultEntry_MaxSpeed, new ConvertedSI(double.NaN, XMLNames.Unit_kmph).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_ResultEntry_MaxDeceleration, new ConvertedSI(double.NaN, XMLNames.Unit_mps2).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_ResultEntry_MaxAcceleration, new ConvertedSI(double.NaN, XMLNames.Unit_mps2).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_ResultEntry_FullLoadDrivingtimePercentage, 0),
+					new XElement(TNS + XMLNames.Report_ResultEntry_GearshiftCount, 0),
+					new XElement(TNS + XMLNames.Report_ResultEntry_EngineSpeedDriving,
+						new XElement(TNS + XMLNames.Report_ResultEntry_EngineSpeedDriving_Min, new ConvertedSI(double.NaN, XMLNames.Unit_RPM).ValueAsUnit()),
+						new XElement(TNS + XMLNames.Report_ResultEntry_EngineSpeedDriving_Avg, new ConvertedSI(double.NaN, XMLNames.Unit_RPM).ValueAsUnit()),
+						new XElement(TNS + XMLNames.Report_ResultEntry_EngineSpeedDriving_Max, new ConvertedSI(double.NaN, XMLNames.Unit_RPM).ValueAsUnit())
+					),
+					new XElement(TNS + XMLNames.Report_Results_AverageGearboxEfficiency, new ConvertedSI(double.NaN, XMLNames.UnitPercent).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_Results_AverageAxlegearEfficiency, new ConvertedSI(double.NaN, XMLNames.UnitPercent).ValueAsUnit())
+				);
+            }
 			return new XElement(TNS + XMLNames.Report_ResultEntry_VehiclePerformance,
-				new XElement(TNS + XMLNames.Report_ResultEntry_AverageSpeed, entry.AverageSpeed.ValueAsUnit("km/h", 1)),
-				new XElement(TNS + XMLNames.Report_ResultEntry_AvgDrivingSpeed, entry.AverageDrivingSpeed.ValueAsUnit("km/h", 1)),
+				new XElement(TNS + XMLNames.Report_ResultEntry_AverageSpeed, entry.AverageSpeed.ValueAsUnit(XMLNames.Unit_kmph, 1)),
+				new XElement(TNS + XMLNames.Report_ResultEntry_AvgDrivingSpeed, entry.AverageDrivingSpeed.ValueAsUnit(XMLNames.Unit_kmph, 1)),
 				new XElement(TNS + XMLNames.Report_ResultEntry_MinSpeed, entry.MinSpeed.ValueAsUnit(XMLNames.Unit_kmph, 1)),
 				new XElement(TNS + XMLNames.Report_ResultEntry_MaxSpeed, entry.MaxSpeed.ValueAsUnit(XMLNames.Unit_kmph, 1)),
 				new XElement(TNS + XMLNames.Report_ResultEntry_MaxDeceleration, entry.MaxDeceleration.ValueAsUnit(XMLNames.Unit_mps2, 2)),
@@ -84,6 +104,12 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.
 		public override XElement GetElement(IOVCResultEntry entry)
 		{
 			var weighted = entry.Weighted;
+			if (weighted.Status == VectoRun.Status.PrimaryBusSimulationIgnore) {
+				return new XElement(TNS + XMLNames.Report_ResultEntry_VehiclePerformance,
+					new XElement(TNS + XMLNames.Report_ResultEntry_AverageSpeed, new ConvertedSI(double.NaN, XMLNames.Unit_kmph).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_ResultEntry_AvgDrivingSpeed, new ConvertedSI(double.NaN, XMLNames.Unit_kmph).ValueAsUnit())
+				);
+            }
 			return new XElement(TNS + XMLNames.Report_ResultEntry_VehiclePerformance,
 				new XElement(TNS + XMLNames.Report_ResultEntry_AverageSpeed, weighted.AverageSpeed.ValueAsUnit("km/h", 1)),
 				new XElement(TNS + XMLNames.Report_ResultEntry_AvgDrivingSpeed, weighted.AverageDrivingSpeed.ValueAsUnit("km/h", 1))
@@ -101,9 +127,23 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.
 
 		public override XElement GetElement(IResultEntry entry)
 		{
-			return new XElement(TNS + XMLNames.Report_ResultEntry_VehiclePerformance,
-				new XElement(TNS + XMLNames.Report_ResultEntry_AverageSpeed, entry.AverageSpeed.ValueAsUnit("km/h", 1)),
-				new XElement(TNS + XMLNames.Report_ResultEntry_AvgDrivingSpeed, entry.AverageDrivingSpeed.ValueAsUnit("km/h", 1)),
+			if (entry.Status == VectoRun.Status.PrimaryBusSimulationIgnore) {
+				return new XElement(TNS + XMLNames.Report_ResultEntry_VehiclePerformance,
+					new XElement(TNS + XMLNames.Report_ResultEntry_AverageSpeed, new ConvertedSI(double.NaN, XMLNames.Unit_kmph).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_ResultEntry_AvgDrivingSpeed, new ConvertedSI(double.NaN, XMLNames.Unit_kmph).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_ResultEntry_MinSpeed, new ConvertedSI(double.NaN, XMLNames.Unit_kmph).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_ResultEntry_MaxSpeed, new ConvertedSI(double.NaN, XMLNames.Unit_kmph).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_ResultEntry_MaxDeceleration, new ConvertedSI(double.NaN, XMLNames.Unit_mps2).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_ResultEntry_MaxAcceleration, new ConvertedSI(double.NaN, XMLNames.Unit_mps2).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_ResultEntry_FullLoadDrivingtimePercentage, 0),
+					new XElement(TNS + XMLNames.Report_ResultEntry_GearshiftCount, 0),
+					new XElement(TNS + XMLNames.Report_Results_AverageGearboxEfficiency, new ConvertedSI(double.NaN, XMLNames.UnitPercent).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_Results_AverageAxlegearEfficiency, new ConvertedSI(double.NaN, XMLNames.UnitPercent).ValueAsUnit())
+				);
+			}
+            return new XElement(TNS + XMLNames.Report_ResultEntry_VehiclePerformance,
+				new XElement(TNS + XMLNames.Report_ResultEntry_AverageSpeed, entry.AverageSpeed.ValueAsUnit(XMLNames.Unit_kmph, 1)),
+				new XElement(TNS + XMLNames.Report_ResultEntry_AvgDrivingSpeed, entry.AverageDrivingSpeed.ValueAsUnit(XMLNames.Unit_kmph, 1)),
 				new XElement(TNS + XMLNames.Report_ResultEntry_MinSpeed, entry.MinSpeed.ValueAsUnit(XMLNames.Unit_kmph, 1)),
 				new XElement(TNS + XMLNames.Report_ResultEntry_MaxSpeed, entry.MaxSpeed.ValueAsUnit(XMLNames.Unit_kmph, 1)),
 				new XElement(TNS + XMLNames.Report_ResultEntry_MaxDeceleration, entry.MaxDeceleration.ValueAsUnit(XMLNames.Unit_mps2, 2)),
@@ -118,9 +158,15 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.
 		public override XElement GetElement(IOVCResultEntry entry)
 		{
 			var weighted = entry.Weighted;
-			return new XElement(TNS + XMLNames.Report_ResultEntry_VehiclePerformance,
-				new XElement(TNS + XMLNames.Report_ResultEntry_AverageSpeed, weighted.AverageSpeed.ValueAsUnit("km/h", 1)),
-				new XElement(TNS + XMLNames.Report_ResultEntry_AvgDrivingSpeed, weighted.AverageDrivingSpeed.ValueAsUnit("km/h", 1))
+			if (weighted.Status == VectoRun.Status.PrimaryBusSimulationIgnore) {
+				return new XElement(TNS + XMLNames.Report_ResultEntry_VehiclePerformance,
+					new XElement(TNS + XMLNames.Report_ResultEntry_AverageSpeed, new ConvertedSI(double.NaN, XMLNames.Unit_kmph).ValueAsUnit()),
+					new XElement(TNS + XMLNames.Report_ResultEntry_AvgDrivingSpeed, new ConvertedSI(double.NaN, XMLNames.Unit_kmph).ValueAsUnit())
+				);
+			}
+            return new XElement(TNS + XMLNames.Report_ResultEntry_VehiclePerformance,
+				new XElement(TNS + XMLNames.Report_ResultEntry_AverageSpeed, weighted.AverageSpeed.ValueAsUnit(XMLNames.Unit_kmph, 1)),
+				new XElement(TNS + XMLNames.Report_ResultEntry_AvgDrivingSpeed, weighted.AverageDrivingSpeed.ValueAsUnit(XMLNames.Unit_kmph, 1))
 			);
 		}
 
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/InterimComponents/InterimAirdragType.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/InterimComponents/InterimAirdragType.cs
index 8c46e113dc45dac8b77b46cbbfe491f049cb3f66..2bbe6fbd6fad3046abf393664a51bb188815bb0f 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/InterimComponents/InterimAirdragType.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/InterimComponents/InterimAirdragType.cs
@@ -71,18 +71,22 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF
 		{
 			var retVal = new XElement(v24 + XMLNames.Component_AirDrag);
 			
-
-
 			var tmp = XElement.Load(inputData.XMLSource.CreateNavigator().ReadSubtree());
 			var dataElement = tmp.Descendants().Where(e => e.Name.LocalName == XMLNames.ComponentDataWrapper).First();
 			dataElement.Name =
 				v20 + XMLNames.ComponentDataWrapper;
 			dataElement.SetAttributeValue("xmlns", inputData.DataSource.TypeVersion);
-			//dataElement.Add(new XAttribute("xmlns", inputData.DataSource.TypeVersion));
+			
+			//Remove prefix from value of type attribute.
+			for (var ptr = dataElement.FirstAttribute; ptr != null; ptr = ptr.NextAttribute) {
+				if (!ptr.IsNamespaceDeclaration && (ptr.Name.LocalName == "type") && ptr.Value.Contains(':')) {
+					ptr.Value = ptr.Value.Split(':').Last();
+					break;
+				}
+			}
 
 			var signatureElement = tmp.Descendants().Where(e => e.Name.LocalName == XMLNames.DI_Signature).First();
             signatureElement.Name = v20 + XMLNames.DI_Signature;
-
 			
             retVal.Add(dataElement, signatureElement);
 			return retVal;
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/PrimaryComponents/VIFAxleWheelsType.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/PrimaryComponents/VIFAxleWheelsType.cs
index 6c77e57080c9ddbc55ca5899479499d5e96b709c..d37eb3888645a654ae97783ae2cb5a4b700b1799 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/PrimaryComponents/VIFAxleWheelsType.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/PrimaryComponents/VIFAxleWheelsType.cs
@@ -72,7 +72,10 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF
 					if (defaultNsAttr != null) {
 						defaultNsAttr.Value = xmlTyre.GetXmlNode.GetNamespaceOfPrefix(parts.First());
 					} else {
-						ptr.Parent.Add(new XAttribute("xmlns", ptr.Parent.GetNamespaceOfPrefix(parts.First())));
+						var ns = ptr.Parent.GetNamespaceOfPrefix(parts.First()) 
+							?? xmlTyre.GetXmlNode.GetNamespaceOfPrefix(parts.First());
+						
+						ptr.Parent.Add(new XAttribute("xmlns", ns));
 					}
 				}
 				ptr = ptr.NextAttribute;
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 3cc200f5d7e7945cfbc9938d0718f8bce0d3f17f..b9042b46730d91252ad2ead095e1ebf70bc1a78f 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
@@ -108,36 +108,13 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF
 		#endregion
 	}
 
-	public class VIFFuelConsumptionWriter : AbstractResultWriter, IFuelConsumptionWriter
-	{
+	public class VIFFuelConsumptionWriter : FuelConsumptionWriterBase
+    {
 		public VIFFuelConsumptionWriter(ICommonResultsWriterFactory factory, XNamespace ns) : base(factory, ns) { }
 
+		protected override string FCElementName { get; } = XMLNames.Report_Result_EnergyConsumption;
 
-		#region Implementation of IFuelConsumptionWriter
-
-		public XElement GetElement(IResultEntry entry, IFuelConsumptionCorrection fc)
-		{
-			return new XElement(TNS + XMLNames.Report_Results_Fuel,
-				new XAttribute(XMLNames.Report_Results_Fuel_Type_Attr, fc.Fuel.FuelType.ToXMLFormat()),
-				GetFuelConsumptionEntries(fc.TotalFuelConsumptionCorrected, fc.Fuel, entry.Distance, entry.Payload,
-					entry.CargoVolume, entry.PassengerCount).Select(x =>
-					new XElement(TNS + XMLNames.Report_Result_EnergyConsumption, new FormattedReportValue(x).GetElement()))
-			);
-		}
-
-		public XElement GetElement(IWeightedResult entry, IFuelProperties fuel, Kilogram consumption)
-		{
-			return new XElement(TNS + XMLNames.Report_Results_Fuel,
-				new XAttribute(XMLNames.Report_Results_Fuel_Type_Attr, fuel.FuelType.ToXMLFormat()),
-				GetFuelConsumptionEntries(consumption, fuel, entry.Distance, entry.Payload, entry.CargoVolume,
-					entry.PassengerCount).Select(x =>
-					new XElement(TNS + XMLNames.Report_Result_EnergyConsumption, new FormattedReportValue(x).GetElement()))
-			);
-		}
-
-		#endregion
-
-		public virtual IList<ConvertedSI> GetFuelConsumptionEntries(Kilogram fc, IFuelProperties fuel,
+		public override IList<ConvertedSI> GetFuelConsumptionEntries(Kilogram fc, IFuelProperties fuel,
 			Meter distance, Kilogram payload, CubicMeter volume, double? passenger)
 		{
 			return new List<ConvertedSI> {
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/ResultWriter/VIFResultsWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/ResultWriter/VIFResultsWriter.cs
index 8333e19b16ede084fe38ac96e113cad365b0d0ae..d7b983320f796478a1d9ee4039e45343b463f489 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/ResultWriter/VIFResultsWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/ResultWriter/VIFResultsWriter.cs
@@ -1,7 +1,9 @@
 using System.Collections.Generic;
 using System.Linq;
+using System.Runtime.Serialization;
 using System.Xml.Linq;
 using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Models.Simulation.Impl;
 using TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common;
 using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9.ResultWriter;
@@ -28,7 +30,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF
 
 			protected override IResultGroupWriter ResultSuccessWriter => _vifFactory.GetBusConvSuccessResultWriter(_vifFactory, TNS);
 			protected override IResultGroupWriter ResultErrorWriter => _vifFactory.GetBusErrorResultWriter(_vifFactory, TNS);
-			public override IReportResultsSummaryWriter SummaryWriter => _vifFactory.GetBusConvSummaryWriter(_vifFactory, TNS);
+			
+            public override IReportResultsSummaryWriter SummaryWriter => _vifFactory.GetBusConvSummaryWriter(_vifFactory, TNS);
 
 		}
 
@@ -38,6 +41,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF
 
 			protected override IResultGroupWriter ResultSuccessWriter => _vifFactory.GetBusHEVNonOVCSuccessResultWriter(_vifFactory, TNS);
 			protected override IResultGroupWriter ResultErrorWriter => _vifFactory.GetBusErrorResultWriter(_vifFactory, TNS);
+			
 			public override IReportResultsSummaryWriter SummaryWriter => _vifFactory.GetBusHEVNonOVCSummaryWriter(_vifFactory, TNS);
 
 		}
@@ -49,15 +53,15 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF
 			public override XElement GenerateResults(List<IResultEntry> results)
 			{
 				var ordered = GetOrderedResultsOVC(results);
-				var allSuccess = results.All(x => x.Status == VectoRun.Status.Success);
+				var allSuccess = results.All(x => x.Status.IsOneOf(VectoRun.Status.Success, VectoRun.Status.PrimaryBusSimulationIgnore));
 				return new XElement(TNS + XMLNames.Report_Results,
 					new XElement(TNS + XMLNames.Report_Result_Status,
 						allSuccess
 							? XMLNames.Report_Results_Status_Success_Val
 							: XMLNames.Report_Results_Status_Error_Val),
 					ordered.Select(x =>
-						x.ChargeDepletingResult.Status == VectoRun.Status.Success &&
-						x.ChargeSustainingResult.Status == VectoRun.Status.Success
+						x.ChargeDepletingResult.Status.IsOneOf(VectoRun.Status.Success, VectoRun.Status.PrimaryBusSimulationIgnore) &&
+						x.ChargeSustainingResult.Status.IsOneOf(VectoRun.Status.Success, VectoRun.Status.PrimaryBusSimulationIgnore)
 							? ResultSuccessWriter.GetElement(x)
 							: ResultErrorWriter.GetElement(x)),
 					SummaryWriter.GetElement(ordered)
@@ -66,6 +70,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF
 
 			protected override IResultGroupWriter ResultSuccessWriter => _vifFactory.GetBusHEVOVCSuccessResultWriter(_vifFactory, TNS);
 			protected override IResultGroupWriter ResultErrorWriter => _vifFactory.GetBusErrorResultWriter(_vifFactory, TNS);
+			
 			public override IReportResultsSummaryWriter SummaryWriter => _vifFactory.GetBusHEVOVCSummaryWriter(_vifFactory, TNS);
 
 		}
@@ -76,6 +81,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF
 
 			protected override IResultGroupWriter ResultSuccessWriter => _vifFactory.GetBusPEVSuccessResultWriter(_vifFactory, TNS);
 			protected override IResultGroupWriter ResultErrorWriter => _vifFactory.GetBusErrorResultWriter(_vifFactory, TNS);
+			
 			public override IReportResultsSummaryWriter SummaryWriter => _vifFactory.GetBusPEVSummaryWriter(_vifFactory, TNS);
 
 		}
@@ -95,6 +101,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF
 
 			protected override IResultGroupWriter ResultSuccessWriter => null;
 			protected override IResultGroupWriter ResultErrorWriter => null;
+			
 			public override IReportResultsSummaryWriter SummaryWriter => null;
 
 
diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/VIFResultsNinjectModule.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/VIFResultsNinjectModule.cs
index 9ff32e359008eeb1fd9262132dca6fbf4cc87159..465c269d2f4bca83fc234f828b3464758d059690 100644
--- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/VIFResultsNinjectModule.cs
+++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/VehicleInformationFile_0_1/VIFResultsNinjectModule.cs
@@ -70,7 +70,6 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF
 			Bind<ICO2Writer>().To<VIFCO2Writer>().When(AccessedViaVIFResultsWriterFactory)
 				.NamedLikeFactoryMethod((IMRFResultsWriterFactory c) => c.GetCO2ResultPEVBus(null, XNamespace.None));
 
-
 			Bind<IResultGroupWriter>().To<VIFErrorResultWriter>().When(AccessedViaVIFResultsWriterFactory)
 				.NamedLikeFactoryMethod((IVIFResultsWriterFactory c) => c.GetBusErrorResultWriter(null, XNamespace.None));
 			Bind<IResultSequenceWriter>().To<VIFResultErrorMissionWriter>().When(AccessedViaVIFResultsWriterFactory)
diff --git a/VectoCore/VectoCore/Resources/Declaration/PrimaryBusSegmentationTable.csv b/VectoCore/VectoCore/Resources/Declaration/PrimaryBusSegmentationTable.csv
index 5b6ad006c92d7d590538b2c778c9b775cbc640f5..db7aba2560755e4fb0d14d521d9efdfc88cabe10 100644
--- a/VectoCore/VectoCore/Resources/Declaration/PrimaryBusSegmentationTable.csv
+++ b/VectoCore/VectoCore/Resources/Declaration/PrimaryBusSegmentationTable.csv
@@ -1,26 +1,26 @@
-HDV group , Production Stage , Vehicle Category , HDV SuperGroup , Articulated , Num Axles , TPMLM_Min , TPMLM_Max , doubledecker , vehicle code , low entry , floor type , DesignSpeed , Body  , .vacc file , Cross Wind Correction , CdxA Standard , AxlesWeights        , Width , Length , Body Height , entrance height , CurbMass , PassengersLowerDeck , PassengersUpperDeck , Heavy Urban , Urban , Suburban , Interurban , Coach , ES_External displays , ES_Internal displays , ES_Fridge , ES_Kitchen Standard , HVAC System Configuration , HeatPump Cooling Passenger conventional , HeatPump Cooling Passenger HEV , HeatPump Cooling Passenger PEV , HeatPump Heating Passenger conventional , HeatPump Heating Passenger HEV , HeatPump Heating Passenger PEV , HVAC Aux Heater conventional , HVAC Aux Heater HEV , HVAC Aux Heater PEV , WaterElectricHeater conventional , WaterElectricHeater HEV , WaterElectricHeater PEV , HVAC Double Glasing , HVAC Adjustable AuxiliaryHeater , HVAC SeparateAirDistributionDucts , ICE Displacement , Fuel Capacity
+HDV group , Production Stage , Vehicle Category , HDV SuperGroup , Articulated , Num Axles , TPMLM_Min , TPMLM_Max , doubledecker , vehicle code , low entry , floor type , DesignSpeed , Body  , .vacc file , Cross Wind Correction , CdxA Standard , AxlesWeights        , Width , Length , Body Height , entrance height , CurbMass , CurbMass TPMLM Factor , PassengersLowerDeck , PassengersUpperDeck , Heavy Urban , Urban , Suburban , Interurban , Coach , ES_External displays , ES_Internal displays , ES_Fridge , ES_Kitchen Standard , HVAC System Configuration , HeatPump Cooling Passenger conventional , HeatPump Cooling Passenger HEV , HeatPump Cooling Passenger PEV , HeatPump Heating Passenger conventional , HeatPump Heating Passenger HEV , HeatPump Heating Passenger PEV , HVAC Aux Heater conventional , HVAC Aux Heater HEV , HVAC Aux Heater PEV , WaterElectricHeater conventional , WaterElectricHeater HEV , WaterElectricHeater PEV , HVAC Double Glasing , HVAC Adjustable AuxiliaryHeater , HVAC SeparateAirDistributionDucts , ICE Displacement , Fuel Capacity
 ## Heavy Bus Primary Vehicles
-P31SD     , 1                , HeavyBus         , P31_32         , -           , 2         , 7.4       , 999       , 0            , CE           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 4.9           , 37.5/62.5           , 2.55  , 12     , 2.8         , 340             , 11975    , 80                  , 0                   , 3           , 3     , 3        , 2.2/1.8    ,       , 3                    , 2                    , 0         , 0                   , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 7.7              , 250
-P31DD     , 1                , HeavyBus         , P31_32         , -           , 2         , 7.4       , 999       , 1            , CF           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 6.2           , 37.5/62.5           , 2.55  , 10.5   , 3.8         , 340             , 12350    , 60                  , 40                  , 3.7         , 3.7   , 3.7      ,            ,       , 3                    , 3                    , 0         , 0                   , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 7.7              , 250
-P32SD     , 1                , HeavyBus         , P31_32         , -           , 2         , 7.4       , 999       , 0            , CA           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 3.45          , 37.5/62.5           , 2.55  , 12     , 3.15        , 340             , 13150    , 45                  , 0                   ,             ,       ,          , 2.2/1.8    , 1.4   , 2                    , 2                    , 0.5       , 0.5                 , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 10.7             , 400
-P32DD     , 1                , HeavyBus         , P31_32         , -           , 2         , 7.4       , 999       , 1            , CB           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 3.9           , 37.5/62.5           , 2.55  , 10.5   , 3.7         , 340             , 13400    , 25                  , 35                  ,             ,       ,          , 3/2.5      , 2     , 1                    , 2                    , 1         , 1                   , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 10.7             , 400
+P31SD     , 1                , HeavyBus         , P31_32         , -           , 2         , 7.4       , 999       , 0            , CE           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 4.9           , 37.5/62.5           , 2.55  , 12     , 2.8         , 340             , 11975    , 0.7                   , 80                  , 0                   , 3           , 3     , 3        , 2.2/1.8    ,       , 3                    , 2                    , 0         , 0                   , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 7.7              , 250
+P31DD     , 1                , HeavyBus         , P31_32         , -           , 2         , 7.4       , 999       , 1            , CF           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 6.2           , 37.5/62.5           , 2.55  , 10.5   , 3.8         , 340             , 12350    , 0.7                   , 60                  , 40                  , 3.7         , 3.7   , 3.7      ,            ,       , 3                    , 3                    , 0         , 0                   , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 7.7              , 250
+P32SD     , 1                , HeavyBus         , P31_32         , -           , 2         , 7.4       , 999       , 0            , CA           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 3.45          , 37.5/62.5           , 2.55  , 12     , 3.15        , 340             , 13150    , 0.75                  , 45                  , 0                   ,             ,       ,          , 2.2/1.8    , 1.4   , 2                    , 2                    , 0.5       , 0.5                 , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 10.7             , 400
+P32DD     , 1                , HeavyBus         , P31_32         , -           , 2         , 7.4       , 999       , 1            , CB           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 3.9           , 37.5/62.5           , 2.55  , 10.5   , 3.7         , 340             , 13400    , 0.75                  , 25                  , 35                  ,             ,       ,          , 3/2.5      , 2     , 1                    , 2                    , 1         , 1                   , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 10.7             , 400
 ##        , -----            , -----            , -----          , -----       , -----     , -----     , -----     , -----        , -----        , -----     , -----      , -----       , ----- , -----      , -----                 , -----         , -----               , -     , -
-P33SD     , 1                , HeavyBus         , P33_34         , 0           , 3         , 7.4       , 999       , 0            , CE           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 5.0           , 27.3/45.4/27.3      , 2.55  , 14.2   , 2.8         , 340             , 14175    , 104                 , 0                   , 3           , 3     , 3        , 2.2/1.8    ,       , 3                    , 2                    , 0         , 0                   , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 7.7              , 250
-P33DD     , 1                , HeavyBus         , P33_34         , 0           , 3         , 7.4       , 999       , 1            , CF           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 6.3           , 27.3/45.4/27.3      , 2.55  , 13.5   , 3.8         , 340             , 14725    , 78                  , 52                  , 3.7         , 3.7   , 3.7      ,            ,       , 3                    , 3                    , 0         , 0                   , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 7.7              , 250
-P34SD     , 1                , HeavyBus         , P33_34         , 0           , 3         , 7.4       , 999       , 0            , CA           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 3.53          , 27.3/45.4/27.3      , 2.55  , 13.8   , 3.15        , 340             , 15213    , 59                  , 0                   ,             ,       ,          , 2.2/1.8    , 1.4   , 2                    , 2                    , 0.5       , 0.5                 , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 10.7             , 400
-P34DD     , 1                , HeavyBus         , P33_34         , 0           , 3         , 7.4       , 999       , 1            , CB           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 3.98          , 27.3/45.4/27.3      , 2.55  , 14     , 3.7         , 340             , 17850    , 33                  , 46                  ,             ,       ,          , 3/2.5      , 2     , 1                    , 4                    , 1         , 1.5                 , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 10.7             , 400
+P33SD     , 1                , HeavyBus         , P33_34         , 0           , 3         , 7.4       , 999       , 0            , CE           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 5.0           , 27.3/45.4/27.3      , 2.55  , 14.2   , 2.8         , 340             , 14175    ,                       , 104                 , 0                   , 3           , 3     , 3        , 2.2/1.8    ,       , 3                    , 2                    , 0         , 0                   , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 7.7              , 250
+P33DD     , 1                , HeavyBus         , P33_34         , 0           , 3         , 7.4       , 999       , 1            , CF           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 6.3           , 27.3/45.4/27.3      , 2.55  , 13.5   , 3.8         , 340             , 14725    ,                       , 78                  , 52                  , 3.7         , 3.7   , 3.7      ,            ,       , 3                    , 3                    , 0         , 0                   , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 7.7              , 250
+P34SD     , 1                , HeavyBus         , P33_34         , 0           , 3         , 7.4       , 999       , 0            , CA           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 3.53          , 27.3/45.4/27.3      , 2.55  , 13.8   , 3.15        , 340             , 15213    ,                       , 59                  , 0                   ,             ,       ,          , 2.2/1.8    , 1.4   , 2                    , 2                    , 0.5       , 0.5                 , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 10.7             , 400
+P34DD     , 1                , HeavyBus         , P33_34         , 0           , 3         , 7.4       , 999       , 1            , CB           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 3.98          , 27.3/45.4/27.3      , 2.55  , 14     , 3.7         , 340             , 17850    ,                       , 33                  , 46                  ,             ,       ,          , 3/2.5      , 2     , 1                    , 4                    , 1         , 1.5                 , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 10.7             , 400
 ##        , -----            , -----            , -----          , -----       , -----     , -----     , -----     , -----        , -----        , -----     , -----      , -----       , ----- , -----      , -----                 , -----         , -----               , -     , -
-P35SD     , 1                , HeavyBus         , P35_36         , 1           , 3         , 7.4       , 999       , 0            , CG           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 5.1           , 24.3/35.2/40.5      , 2.55  , 18.2   , 2.8         , 340             , 17800    , 104                 , 0                   , 3           , 3     , 3        , 2.2/1.8    ,       , 3                    , 3                    , 0         , 0                   , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 7.7              , 250
-P35DD     , 1                , HeavyBus         , P35_36         , 1           , 3         , 7.4       , 999       , 1            , CH           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 6.4           , 24.3/35.2/40.5      , 2.55  , 18.2   , 3.8         , 340             , 20250    , 78                  , 52                  , 3.7         , 3.7   , 3.7      ,            ,       ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 7.7              , 250
-P36SD     , 1                , HeavyBus         , P35_36         , 1           , 3         , 7.4       , 999       , 0            , CC           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 3.60          , 24.3/35.2/40.5      , 2.55  , 18.2   , 3.15        , 340             , 19267    , 59                  , 0                   ,             ,       ,          , 2.2/1.8    , 1.4   ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 10.7             , 400
-P36DD     , 1                , HeavyBus         , P35_36         , 1           , 3         , 7.4       , 999       , 1            , CD           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 4.05          , 24.3/35.2/40.5      , 2.55  , 18.2   , 3.7         , 340             , 21375    , 33                  , 46                  ,             ,       ,          , 3/2.5      , 2     ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 10.7             , 400
+P35SD     , 1                , HeavyBus         , P35_36         , 1           , 3         , 7.4       , 999       , 0            , CG           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 5.1           , 24.3/35.2/40.5      , 2.55  , 18.2   , 2.8         , 340             , 17800    ,                       , 104                 , 0                   , 3           , 3     , 3        , 2.2/1.8    ,       , 3                    , 3                    , 0         , 0                   , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 7.7              , 250
+P35DD     , 1                , HeavyBus         , P35_36         , 1           , 3         , 7.4       , 999       , 1            , CH           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 6.4           , 24.3/35.2/40.5      , 2.55  , 18.2   , 3.8         , 340             , 20250    ,                       , 78                  , 52                  , 3.7         , 3.7   , 3.7      ,            ,       ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 7.7              , 250
+P36SD     , 1                , HeavyBus         , P35_36         , 1           , 3         , 7.4       , 999       , 0            , CC           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 3.60          , 24.3/35.2/40.5      , 2.55  , 18.2   , 3.15        , 340             , 19267    ,                       , 59                  , 0                   ,             ,       ,          , 2.2/1.8    , 1.4   ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 10.7             , 400
+P36DD     , 1                , HeavyBus         , P35_36         , 1           , 3         , 7.4       , 999       , 1            , CD           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 4.05          , 24.3/35.2/40.5      , 2.55  , 18.2   , 3.7         , 340             , 21375    ,                       , 33                  , 46                  ,             ,       ,          , 3/2.5      , 2     ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 10.7             , 400
 ##        , -----            , -----            , -----          , -----       , -----     , -----     , -----     , -----        , -----        , -----     , -----      , -----       , ----- , -----      , -----                 , -----         , -----               ,       , -      , -
-P37SD     , 1                , HeavyBus         , P37_38         , 0           , 4         , 7.4       , 999       , 0            , CE           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 5.1           , 21.4/21.4/35.8/21.4 , 2.55  , 15     , 2.8         , 340             , 15000    , 125                 , 0                   , 3           , 3     , 3        , 2.2/1.8    ,       ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 10.7             , 300
-P37DD     , 1                , HeavyBus         , P37_38         , 0           , 4         , 7.4       , 999       , 1            , CF           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 6.4           , 21.4/21.4/35.8/21.4 , 2.55  , 15     , 3.8         , 340             , 18700    , 94                  , 62                  , 3.7         , 3.7   , 3.7      ,            ,       ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 10.7             , 300
-P38SD     , 1                , HeavyBus         , P37_38         , 0           , 4         , 7.4       , 999       , 0            , CA           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 3.60          , 21.4/21.4/35.8/21.4 , 2.55  , 15     , 3.15        , 340             , 17500    , 70                  , 0                   ,             ,       ,          , 2.2/1.8    , 1.4   ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 12.8             , 500
-P38DD     , 1                , HeavyBus         , P37_38         , 0           , 4         , 7.4       , 999       , 1            , CB           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 4.05          , 21.4/21.4/35.8/21.4 , 2.55  , 15     , 3.7         , 340             , 21200    , 39                  , 55                  ,             ,       ,          , 3/2.5      , 2     ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 12.8             , 500
+P37SD     , 1                , HeavyBus         , P37_38         , 0           , 4         , 7.4       , 999       , 0            , CE           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 5.1           , 21.4/21.4/35.8/21.4 , 2.55  , 15     , 2.8         , 340             , 15000    ,                       , 125                 , 0                   , 3           , 3     , 3        , 2.2/1.8    ,       ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 10.7             , 300
+P37DD     , 1                , HeavyBus         , P37_38         , 0           , 4         , 7.4       , 999       , 1            , CF           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 6.4           , 21.4/21.4/35.8/21.4 , 2.55  , 15     , 3.8         , 340             , 18700    ,                       , 94                  , 62                  , 3.7         , 3.7   , 3.7      ,            ,       ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 10.7             , 300
+P38SD     , 1                , HeavyBus         , P37_38         , 0           , 4         , 7.4       , 999       , 0            , CA           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 3.60          , 21.4/21.4/35.8/21.4 , 2.55  , 15     , 3.15        , 340             , 17500    ,                       , 70                  , 0                   ,             ,       ,          , 2.2/1.8    , 1.4   ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 12.8             , 500
+P38DD     , 1                , HeavyBus         , P37_38         , 0           , 4         , 7.4       , 999       , 1            , CB           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 4.05          , 21.4/21.4/35.8/21.4 , 2.55  , 15     , 3.7         , 340             , 21200    ,                       , 39                  , 55                  ,             ,       ,          , 3/2.5      , 2     ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 12.8             , 500
 ##        , -----            , -----            , -----          , -----       , -----     , -----     , -----     , -----        , -----        , -----     , -----      , -----       , ----- , -----      , -----                 , -----         , -----               , -     , -
-P39SD     , 1                , HeavyBus         , P39_40         , 1           , 4         , 7.4       , 999       , 0            , CG           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 5.2           , 20.0/28.2/32.4/19.4 , 2.55  , 21     , 2.6         , 340             , 19600    , 125                 , 0                   , 3           , 3     , 3        , 2.2/1.8    ,       , 3                    , 3                    , 0         , 0                   , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 10.7             , 300
-P39DD     , 1                , HeavyBus         , P39_40         , 1           , 4         , 7.4       , 999       , 1            , CH           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 6.5           , 20.0/28.2/32.4/19.4 , 2.55  , 21     , 3.8         , 340             , 24800    , 94                  , 62                  , 3.7         , 3.7   , 3.7      ,            ,       ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 10.7             , 300
-P40SD     , 1                , HeavyBus         , P39_40         , 1           , 4         , 7.4       , 999       , 0            , CC           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 3.68          , 20.0/28.2/32.4/19.4 , 2.55  , 21     , 3.15        , 340             , 20950    , 70                  , 0                   ,             ,       ,          , 2.2/1.8    , 1.4   ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 12.8             , 500
-P40DD     , 1                , HeavyBus         , P39_40         , 1           , 4         , 7.4       , 999       , 1            , CD           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 4.13          , 20.0/28.2/32.4/19.4 , 2.55  , 21     , 3.7         , 340             , 24600    , 39                  , 55                  ,             ,       ,          , 3/2.5      , 2     ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 12.8             , 500
+P39SD     , 1                , HeavyBus         , P39_40         , 1           , 4         , 7.4       , 999       , 0            , CG           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 5.2           , 20.0/28.2/32.4/19.4 , 2.55  , 21     , 2.6         , 340             , 19600    ,                       , 125                 , 0                   , 3           , 3     , 3        , 2.2/1.8    ,       , 3                    , 3                    , 0         , 0                   , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 10.7             , 300
+P39DD     , 1                , HeavyBus         , P39_40         , 1           , 4         , 7.4       , 999       , 1            , CH           , 0         , low floor  , 100         ,       , Bus.vacc   , CoachBus              , 6.5           , 20.0/28.2/32.4/19.4 , 2.55  , 21     , 3.8         , 340             , 24800    ,                       , 94                  , 62                  , 3.7         , 3.7   , 3.7      ,            ,       ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 15                           , 15                  , 0                   , 0                                , 0                       , 1                       , 0                   , 0                               , 0                                 , 10.7             , 300
+P40SD     , 1                , HeavyBus         , P39_40         , 1           , 4         , 7.4       , 999       , 0            , CC           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 3.68          , 20.0/28.2/32.4/19.4 , 2.55  , 21     , 3.15        , 340             , 20950    ,                       , 70                  , 0                   ,             ,       ,          , 2.2/1.8    , 1.4   ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 12.8             , 500
+P40DD     , 1                , HeavyBus         , P39_40         , 1           , 4         , 7.4       , 999       , 1            , CD           , -         , high floor , 100         ,       , Bus.vacc   , CoachBus              , 4.13          , 20.0/28.2/32.4/19.4 , 2.55  , 21     , 3.7         , 340             , 24600    ,                       , 39                  , 55                  ,             ,       ,          , 3/2.5      , 2     ,                      ,                      ,           ,                     , 6                         , non R-744 2-stage                       , non R-744 2-stage              , non R-744 continuous           , none                                    , none                           , non R-744 continuous           , 30                           , 30                  , 0                   , 0                                , 0                       , 1                       , 1                   , 0                               , 1                                 , 12.8             , 500
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.4.xsd b/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.4.xsd
index 5f78f2d9ce631ff35afef317058e4995668383e0..da12d05410c6616a3561ef9c4c24ff9996685a6c 100644
--- a/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.4.xsd
+++ b/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.4.xsd
@@ -20,6 +20,7 @@ Changelog:
 				- changed Small + elec. driven + ESS to Small + AMS + elec. driven
     13.06.2023: Changed rated current, rated voltage, rated capacity (bus aux smart electrics) from datatype xs:integer to xs:int 	
 	19.10.2023: remove erroneous lorry PS technology entry
+	09.02.2024: added missing technology for exempted vehicles 'Multiple power­trains Article 9 exempted'
 	-->
 	<xs:complexType name="Abstract_ADAS_ConventionalType" abstract="true">
 		<xs:complexContent>
@@ -1798,6 +1799,7 @@ Changelog:
 								<xs:enumeration value="H2 ICE"/>
 								<xs:enumeration value="Dual fuel vehicle Article 9 exempted"/>
 								<xs:enumeration value="In-motion charging Article 9 exempted"/>
+								<xs:enumeration value="Multiple power­trains Article 9 exempted"/>
 								<xs:enumeration value="Other technology Article 9 exempted"/>
 							</xs:restriction>
 						</xs:simpleType>
@@ -1859,6 +1861,7 @@ Changelog:
 								<xs:enumeration value="H2 ICE"/>
 								<xs:enumeration value="Dual fuel vehicle Article 9 exempted"/>
 								<xs:enumeration value="In-motion charging Article 9 exempted"/>
+								<xs:enumeration value="Multiple power­trains Article 9 exempted"/>
 								<xs:enumeration value="Other technology Article 9 exempted"/>
 							</xs:restriction>
 						</xs:simpleType>
@@ -1895,6 +1898,7 @@ Changelog:
 								<xs:enumeration value="H2 ICE"/>
 								<xs:enumeration value="Dual fuel vehicle Article 9 exempted"/>
 								<xs:enumeration value="In-motion charging Article 9 exempted"/>
+								<xs:enumeration value="Multiple power­trains Article 9 exempted"/>
 								<xs:enumeration value="Other technology Article 9 exempted"/>
 							</xs:restriction>
 						</xs:simpleType>
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.9.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.9.xsd
index 9601c06c07cda446ed45ebc1cb8099cbcab3e212..fc7cc59f917a0170563438d4bcf8bd6ad604c7bd 100644
--- a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.9.xsd
+++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.9.xsd
@@ -3194,7 +3194,7 @@ Changelog
 					<xs:documentation>I.1.1.28.</xs:documentation>
 				</xs:annotation>
 			</xs:element>
-			<xs:element name="NgTankSystem" type="v1.0:NgTankSystemType">
+			<xs:element name="NgTankSystem" type="v1.0:NgTankSystemType" minOccurs="0">
 				<xs:annotation>
 					<xs:documentation>I.1.1.29.</xs:documentation>
 				</xs:annotation>
@@ -3210,7 +3210,7 @@ Changelog
 					<xs:documentation>I.1.1.28.</xs:documentation>
 				</xs:annotation>
 			</xs:element>
-			<xs:element name="NgTankSystem" type="v1.0:NgTankSystemType">
+			<xs:element name="NgTankSystem" type="v1.0:NgTankSystemType" minOccurs="0">
 				<xs:annotation>
 					<xs:documentation>I.1.1.29</xs:documentation>
 				</xs:annotation>
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputMultistep.0.1.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputMultistep.0.1.xsd
index 984d62320ac7a080442fd5f935fd207e40cac832..91e108741ef196f891d2bd6be8a7645d4f5a8e11 100644
--- a/VectoCore/VectoCore/Resources/XSD/VectoOutputMultistep.0.1.xsd
+++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputMultistep.0.1.xsd
@@ -8,7 +8,11 @@
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" schemaLocation="VectoDeclarationDefinitions.2.1.xsd"/>
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.3" schemaLocation="VectoDeclarationDefinitions.2.3.xsd"/>
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.4" schemaLocation="VectoDeclarationDefinitions.2.4.xsd"/>
-	<xs:complexType name="ElectricMachineSystemMaxTorqueEntryType">
+  <!--
+	Changelog:
+	18.01.2024: change restrictions of EM continuous torque - allow 0.00
+	-->
+  <xs:complexType name="ElectricMachineSystemMaxTorqueEntryType">
 		<xs:attribute name="outShaftSpeed" type="v2.3:OutShaftSpeedType" use="required">
 			<xs:annotation>
 				<xs:documentation>P468 - [rpm]</xs:documentation>
@@ -1617,10 +1621,15 @@
 							<xs:documentation>P467 - [V]</xs:documentation>
 						</xs:annotation>
 					</xs:element>
-					<xs:element name="ContinuousTorque" type="v2.3:MaxTorqueType">
+					<xs:element name="ContinuousTorque">
 						<xs:annotation>
 							<xs:documentation>P459 - [Nm]</xs:documentation>
 						</xs:annotation>
+            <xs:simpleType>
+              <xs:restriction base="v1.0:Double2">
+                <xs:minInclusive value="0.00"/>
+              </xs:restriction>
+            </xs:simpleType>
 					</xs:element>
 					<xs:element name="TestSpeedContinuousTorque" type="v2.3:TestSpeedType">
 						<xs:annotation>
diff --git a/VectoCore/VectoCoreTest/InputData/DeclarationDataAdapterTest/DeclarationDataAdapterTest.cs b/VectoCore/VectoCoreTest/InputData/DeclarationDataAdapterTest/DeclarationDataAdapterTest.cs
index d2a79ea3f110d80989ef8f0373b6d23ee198cd38..e26de51bc109e64f6c22429cb7ff7662b31f5171 100644
--- a/VectoCore/VectoCoreTest/InputData/DeclarationDataAdapterTest/DeclarationDataAdapterTest.cs
+++ b/VectoCore/VectoCoreTest/InputData/DeclarationDataAdapterTest/DeclarationDataAdapterTest.cs
@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Data;
 using System.Linq;
 using System.Linq.Expressions;
 using Moq;
@@ -8,10 +9,18 @@ using NUnit.Framework;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.AuxiliaryDataAdapter;
+using TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRunDataFactory;
+using TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDataFactory;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
+using TUGraz.VectoCore.Tests.InputData.RunDataFactory;
 using TUGraz.VectoCore.Utils.Ninject;
 
 namespace TUGraz.VectoCore.Tests.InputData.DeclarationDataAdapterTest
@@ -19,27 +28,30 @@ namespace TUGraz.VectoCore.Tests.InputData.DeclarationDataAdapterTest
 	[TestFixture]
 	public class DeclarationDataAdapterTest
 	{
-		private IDeclarationDataAdapterFactory _declarationDataAdapterFactory;
+		protected IKernel _kernel;
+		private IVectoRunDataFactoryFactory _runDataFactoryFactory;
 
+		[OneTimeSetUp]
 		public void OneTimeSetup()
 		{
-			var kernel = new StandardKernel(new VectoNinjectModule());
-			_declarationDataAdapterFactory = kernel.Get<IDeclarationDataAdapterFactory>();
-		}
+			_kernel = new StandardKernel(new VectoNinjectModule());
+			_runDataFactoryFactory = _kernel.Get<IVectoRunDataFactoryFactory>();
+        }
+
 		#region LorriesSerialHybridVehicle
 
-		
+
 
 
 
 		#endregion
 
 		[TestCase(VectoSimulationJobType.BatteryElectricVehicle,
-			new []{ "Full electric steering gear" },
+			new[] { "Full electric steering gear" },
 			"Vacuum pump + elec. driven",
 			true,
 			2,
-			TestName="PEVAuxFailSteeredAxle")]
+			TestName = "PEVAuxFailSteeredAxle")]
 		[TestCase(VectoSimulationJobType.BatteryElectricVehicle,
 			new[] { "Full electric steering gear" },
 			"Vacuum pump + elec. driven",
@@ -60,19 +72,19 @@ namespace TUGraz.VectoCore.Tests.InputData.DeclarationDataAdapterTest
 			"Vacuum pump + elec. driven",
 			false,
 			TestName = "PHEVAuxPass")]
-		public void HeavyLorryPEVAuxiliaryDataAdapterFailTest(VectoSimulationJobType jobType, string[] spTechnologies, string psTechnology, bool fail, int? steeredAxles = null)
+		public void HeavyLorryPEVAuxiliaryDataAdapterFailTest(VectoSimulationJobType jobType, string[] spTechnologies,
+			string psTechnology, bool fail, int? steeredAxles = null)
 		{
 			var dataAdapter = new HeavyLorryPEVAuxiliaryDataAdapter();
-			
+
 			var auxData = new Mock<IAuxiliariesDeclarationInputData>();
 
 			Mock<IAuxiliaryDeclarationInputData> steeringSystem = new Mock<IAuxiliaryDeclarationInputData>();
-			foreach(var spTechnoly in spTechnologies)
-			{
+			foreach (var spTechnoly in spTechnologies) {
 				steeringSystem.SetType(AuxiliaryType.SteeringPump)
 					.AddTechnology(spTechnoly);
 			}
-			
+
 			var hvac = new Mock<IAuxiliaryDeclarationInputData>()
 				.SetType(AuxiliaryType.HVAC)
 				.AddTechnology("Default");
@@ -83,7 +95,7 @@ namespace TUGraz.VectoCore.Tests.InputData.DeclarationDataAdapterTest
 				.SetType(AuxiliaryType.ElectricSystem)
 				.AddTechnology("Standard technology");
 
-			
+
 
 
 			auxData.AddAuxiliaries(steeringSystem.Object, hvac.Object, pneumatic.Object, elSystem.Object);
@@ -98,8 +110,490 @@ namespace TUGraz.VectoCore.Tests.InputData.DeclarationDataAdapterTest
 				}
 			}
 		}
-	}
 
+		private const AxleConfiguration Axl2 = AxleConfiguration.AxleConfig_4x2;
+		private const AxleConfiguration Axl3 = AxleConfiguration.AxleConfig_6x2;
+
+		[
+			// testcases for vehicle mass with a high tpmlm
+			TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl2, false, 25000, 0,
+				VehicleClass.ClassP31SD, 11975),
+			TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl2, false, 25000, 0,
+				VehicleClass.ClassP31SD, 12291),
+			TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl2, false, 25000, 0,
+				VehicleClass.ClassP31SD, 12291),
+			TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl2, false, 25000, 0,
+				VehicleClass.ClassP31SD, 11416),
+
+			TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl2, false, 25000, 4,
+				VehicleClass.ClassP31DD, 12350),
+			TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl2, false, 25000, 4,
+				VehicleClass.ClassP31DD, 12666),
+			TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl2, false, 25000, 4,
+				VehicleClass.ClassP31DD, 12666),
+			TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl2, false, 25000, 4,
+				VehicleClass.ClassP31DD, 11791),
+
+			TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl2, false, 25000, 7,
+				VehicleClass.ClassP32SD, 13150),
+			TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl2, false, 25000, 7,
+				VehicleClass.ClassP32SD, 13466),
+			TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl2, false, 25000, 7,
+				VehicleClass.ClassP32SD, 13466),
+			TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl2, false, 25000, 7,
+				VehicleClass.ClassP32SD, 12229),
+
+			TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl2, false, 25000, 9,
+				VehicleClass.ClassP32DD, 13400),
+			TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl2, false, 25000, 9,
+				VehicleClass.ClassP32DD, 13716),
+			TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl2, false, 25000, 9,
+				VehicleClass.ClassP32DD, 13716),
+			TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl2, false, 25000, 9,
+				VehicleClass.ClassP32DD, 12479),
+
+			TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl3, false, 25000, 0,
+				VehicleClass.ClassP33SD, 14175),
+			TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl3, false, 25000, 0,
+				VehicleClass.ClassP33SD, 14491),
+			TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl3, false, 25000, 0,
+				VehicleClass.ClassP33SD, 14491),
+			TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl3, false, 25000, 0,
+				VehicleClass.ClassP33SD, 13616),
+
+			TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl3, false, 25000, 4,
+				VehicleClass.ClassP33DD, 14725),
+			TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl3, false, 25000, 4,
+				VehicleClass.ClassP33DD, 15041),
+			TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl3, false, 25000, 4,
+				VehicleClass.ClassP33DD, 15041),
+			TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl3, false, 25000, 4,
+				VehicleClass.ClassP33DD, 14166),
+		]
+		public void PrimaryBusCurbMassTest_HighTPMLM(VectoSimulationJobType jobType, ArchitectureID archId,
+			AxleConfiguration axleConfiguration, bool articulated, double TPMLM, int runIdx,
+			VehicleClass expectedVehicleClass, double expectedCurbMass)
+		{
+			PrimaryBusCurbMassTest(jobType, archId, axleConfiguration, articulated, TPMLM, runIdx, expectedVehicleClass, expectedCurbMass);
+		}
+
+        [
+			// testcases for vehicle mass with a low tpmlm
+			TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl2, false, 13000, 0,
+				VehicleClass.ClassP31SD, 13000 * 0.7),
+			TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl2, false, 13000, 0,
+				VehicleClass.ClassP31SD, 13000 * 0.7),
+			TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl2, false, 13000, 0,
+				VehicleClass.ClassP31SD, 13000 * 0.7),
+			TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl2, false, 13000, 0,
+				VehicleClass.ClassP31SD, 13000 * 0.7),
+
+			TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl2, false, 13000, 4,
+				VehicleClass.ClassP31DD, 13000 * 0.7),
+			TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl2, false, 13000, 4,
+				VehicleClass.ClassP31DD, 13000 * 0.7),
+			TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl2, false, 13000, 4,
+				VehicleClass.ClassP31DD, 13000 * 0.7),
+			TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl2, false, 13000, 4,
+				VehicleClass.ClassP31DD, 13000 * 0.7),
+
+			TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl2, false, 13000, 7,
+				VehicleClass.ClassP32SD, 13000 * 0.75),
+			TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl2, false, 13000, 7,
+				VehicleClass.ClassP32SD, 13000 * 0.75),
+			TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl2, false, 13000, 7,
+				VehicleClass.ClassP32SD, 13000 * 0.75),
+			TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl2, false, 13000, 7,
+				VehicleClass.ClassP32SD, 13000 * 0.75),
+
+			TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl2, false, 13000, 9,
+				VehicleClass.ClassP32DD, 13000 * 0.75),
+			TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl2, false, 13000, 9,
+				VehicleClass.ClassP32DD, 13000 * 0.75),
+			TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl2, false, 13000, 9,
+				VehicleClass.ClassP32DD, 13000 * 0.75),
+			TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl2, false, 13000, 9,
+				VehicleClass.ClassP32DD, 13000 * 0.75),
+
+			TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl3, false, 13000, 0,
+				VehicleClass.ClassP33SD, 14175),
+			TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl3, false, 13000, 0,
+				VehicleClass.ClassP33SD, 14491),
+			TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl3, false, 13000, 0,
+				VehicleClass.ClassP33SD, 14491),
+			TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl3, false, 13000, 0,
+				VehicleClass.ClassP33SD, 13616),
+
+			TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl3, false, 13000, 4,
+				VehicleClass.ClassP33DD, 14725),
+			TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl3, false, 13000, 4,
+				VehicleClass.ClassP33DD, 15041),
+			TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl3, false, 13000, 4,
+				VehicleClass.ClassP33DD, 15041),
+			TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl3, false, 13000, 4,
+				VehicleClass.ClassP33DD, 14166),
+		]
+		public void PrimaryBusCurbMassTest_LowTPMLM(VectoSimulationJobType jobType, ArchitectureID archId,
+			AxleConfiguration axleConfiguration, bool articulated, double TPMLM, int runIdx,
+			VehicleClass expectedVehicleClass, double expectedCurbMass)
+		{
+			PrimaryBusCurbMassTest(jobType, archId, axleConfiguration, articulated, TPMLM, runIdx, expectedVehicleClass, expectedCurbMass);
+		}
+
+		private const VehicleCode VC_CA = VehicleCode.CA;
+		private const VehicleCode VC_CB = VehicleCode.CB;
+		private const VehicleCode VC_CE = VehicleCode.CE;
+		private const VehicleCode VC_CF = VehicleCode.CF;
+		private const RegistrationClass RC_II = RegistrationClass.II;
+
+		[
+			// testcases for vehicle mass with a high tpmlm
+			TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl2, false, 25000, 0, VC_CE, RC_II, false,
+				VehicleClass.ClassP31SD, 11975),
+			TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl2, false, 25000, 0, VC_CE, RC_II, false,
+                VehicleClass.ClassP31SD, 12291),
+			TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl2, false, 25000, 0, VC_CE, RC_II, false,
+                VehicleClass.ClassP31SD, 12291),
+			TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl2, false, 25000, 0, VC_CE, RC_II, false,
+                VehicleClass.ClassP31SD, 11416),
+
+            TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl2, false, 25000, 4, VC_CF, RC_II, false,
+                VehicleClass.ClassP31DD, 12350),
+            TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl2, false, 25000, 4, VC_CF, RC_II, false,
+                VehicleClass.ClassP31DD, 12666),
+            TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl2, false, 25000, 4, VC_CF, RC_II, false,
+                VehicleClass.ClassP31DD, 12666),
+            TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl2, false, 25000, 4, VC_CF, RC_II, false,
+                VehicleClass.ClassP31DD, 11791),
+
+            TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl2, false, 25000, 7, VC_CA, RC_II, false,
+                VehicleClass.ClassP32SD, 13150),
+            TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl2, false, 25000, 7, VC_CA, RC_II, false,
+                VehicleClass.ClassP32SD, 13466),
+            TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl2, false, 25000, 7, VC_CA, RC_II, false,
+                VehicleClass.ClassP32SD, 13466),
+            TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl2, false, 25000, 7, VC_CA, RC_II, false,
+                VehicleClass.ClassP32SD, 12229),
+
+            TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl2, false, 25000, 9, VC_CB, RC_II, false,
+                VehicleClass.ClassP32DD, 13400),
+            TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl2, false, 25000, 9, VC_CB, RC_II, false,
+                VehicleClass.ClassP32DD, 13716),
+            TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl2, false, 25000, 9, VC_CB, RC_II, false,
+                VehicleClass.ClassP32DD, 13716),
+            TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl2, false, 25000, 9, VC_CB, RC_II, false,
+                VehicleClass.ClassP32DD, 12479),
+
+            TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl3, false, 25000, 0, VC_CE, RC_II, false,
+                VehicleClass.ClassP33SD, 14175),
+            TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl3, false, 25000, 0, VC_CE, RC_II, false,
+                VehicleClass.ClassP33SD, 14491),
+            TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl3, false, 25000, 0, VC_CE, RC_II, false,
+                VehicleClass.ClassP33SD, 14491),
+            TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl3, false, 25000, 0, VC_CE, RC_II, false,
+                VehicleClass.ClassP33SD, 13616),
+
+            TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl3, false, 25000, 4, VC_CF, RC_II, false,
+                VehicleClass.ClassP33DD, 14725),
+            TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl3, false, 25000, 4, VC_CF, RC_II, false,
+                VehicleClass.ClassP33DD, 15041),
+            TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl3, false, 25000, 4, VC_CF, RC_II, false,
+                VehicleClass.ClassP33DD, 15041),
+            TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl3, false, 25000, 4, VC_CF, RC_II, false,
+                VehicleClass.ClassP33DD, 14166),
+        ]
+		public void CompletedGenericBusCurbMassTest_HighTPMLM(VectoSimulationJobType jobType, ArchitectureID archId,
+			AxleConfiguration axleConfiguration, bool articulated, double TPMLM, int runIdx,
+			VehicleCode vehicleCode, RegistrationClass registrationClass, bool lowEntry, VehicleClass expectedVehicleClass, double expectedCurbMass)
+		{
+			CompletedGenericBusCurbMassTest(jobType, archId, axleConfiguration, articulated, TPMLM, runIdx, vehicleCode, registrationClass, lowEntry, expectedVehicleClass, expectedCurbMass);
+		}
+
+		[
+			// testcases for vehicle mass with a low tpmlm
+			TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl2, false, 13000, 0, VC_CE, RC_II, false,
+                VehicleClass.ClassP31SD, 13000 * 0.7),
+			TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl2, false, 13000, 0, VC_CE, RC_II, false,
+                VehicleClass.ClassP31SD, 13000 * 0.7),
+			TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl2, false, 13000, 0, VC_CE, RC_II, false,
+                VehicleClass.ClassP31SD, 13000 * 0.7),
+			TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl2, false, 13000, 0, VC_CE, RC_II, false,
+                VehicleClass.ClassP31SD, 13000 * 0.7),
+
+            TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl2, false, 13000, 4, VC_CF, RC_II, false,
+                VehicleClass.ClassP31DD, 13000 * 0.7),
+            TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl2, false, 13000, 4, VC_CF, RC_II, false,
+                VehicleClass.ClassP31DD, 13000 * 0.7),
+            TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl2, false, 13000, 4, VC_CF, RC_II, false,
+                VehicleClass.ClassP31DD, 13000 * 0.7),
+            TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl2, false, 13000, 4, VC_CF, RC_II, false,
+                VehicleClass.ClassP31DD, 13000 * 0.7),
+
+            TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl2, false, 13000, 7, VC_CA, RC_II, false,
+                VehicleClass.ClassP32SD, 13000 * 0.75),
+            TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl2, false, 13000, 7, VC_CA, RC_II, false,
+                VehicleClass.ClassP32SD, 13000 * 0.75),
+            TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl2, false, 13000, 7, VC_CA, RC_II, false,
+                VehicleClass.ClassP32SD, 13000 * 0.75),
+            TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl2, false, 13000, 7, VC_CA, RC_II, false,
+                VehicleClass.ClassP32SD, 13000 * 0.75),
+
+            TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl2, false, 13000, 9, VC_CB, RC_II, false,
+                VehicleClass.ClassP32DD, 13000 * 0.75),
+            TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl2, false, 13000, 9, VC_CB, RC_II, false,
+                VehicleClass.ClassP32DD, 13000 * 0.75),
+            TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl2, false, 13000, 9, VC_CB, RC_II, false,
+                VehicleClass.ClassP32DD, 13000 * 0.75),
+            TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl2, false, 13000, 9, VC_CB, RC_II, false,
+                VehicleClass.ClassP32DD, 13000 * 0.75),
+
+            TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl3, false, 13000, 0, VC_CE, RC_II, false,
+                VehicleClass.ClassP33SD, 14175),
+            TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl3, false, 13000, 0, VC_CE, RC_II, false,
+                VehicleClass.ClassP33SD, 14491),
+            TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl3, false, 13000, 0, VC_CE, RC_II, false,
+                VehicleClass.ClassP33SD, 14491),
+            TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl3, false, 13000, 0, VC_CE, RC_II, false,
+                VehicleClass.ClassP33SD, 13616),
+
+            TestCase(VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, Axl3, false, 13000, 4, VC_CF, RC_II, false,
+                VehicleClass.ClassP33DD, 14725),
+            TestCase(VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, Axl3, false, 13000, 4, VC_CF, RC_II, false,
+                VehicleClass.ClassP33DD, 15041),
+            TestCase(VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, Axl3, false, 13000, 4, VC_CF, RC_II, false,
+                VehicleClass.ClassP33DD, 15041),
+            TestCase(VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, Axl3, false, 13000, 4, VC_CF, RC_II, false,
+                VehicleClass.ClassP33DD, 14166),
+        ]
+		public void CompletedGenericBusCurbMassTest_LowTPMLM(VectoSimulationJobType jobType, ArchitectureID archId,
+			AxleConfiguration axleConfiguration, bool articulated, double TPMLM, int runIdx,
+			VehicleCode vehicleCode, RegistrationClass registrationClass, bool lowEntry, VehicleClass expectedVehicleClass, double expectedCurbMass)
+		{
+			CompletedGenericBusCurbMassTest(jobType, archId, axleConfiguration, articulated, TPMLM, runIdx, vehicleCode, registrationClass, lowEntry, expectedVehicleClass, expectedCurbMass);
+		}
+
+        public void PrimaryBusCurbMassTest(VectoSimulationJobType jobType, ArchitectureID archId, AxleConfiguration axleConfiguration, bool articulated, double TPMLM, int runIdx, VehicleClass expectedVehicleClass, double expectedCurbMass)
+		{
+			var addElectricComponents = false;
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.PrimaryBus();
+			switch (jobType) {
+				case VectoSimulationJobType.ConventionalVehicle:
+					input = input.Conventional();
+					break;
+				case VectoSimulationJobType.ParallelHybridVehicle:
+				case VectoSimulationJobType.SerialHybridVehicle:
+					input = input.HEV(archId);
+					addElectricComponents = true;
+					break;
+				case VectoSimulationJobType.BatteryElectricVehicle:
+					input = input.PEV(archId);
+					addElectricComponents = true;
+					break;
+				default:
+					throw new Exception();
+			}
+
+            var result = _runDataFactoryFactory.CreateDeclarationRunDataFactory(input.Object, null,
+				null);
+
+			var dataAdapter = (result as DeclarationModePrimaryBusRunDataFactory.PrimaryBusBase)?.DataAdapter;
+			Assert.NotNull(dataAdapter);
+
+            var vehicleType = VehicleCategory.HeavyBusPrimaryVehicle;
+
+			var segment = DeclarationData.PrimaryBusSegments.Lookup(
+				vehicleType, axleConfiguration, articulated);
+
+			var mission = segment.Missions[runIdx];
+			var vehicleInputData = GetMockVehicleData(TPMLM, axleConfiguration, addElectricComponents);
+			var vehicleData =
+				dataAdapter.CreateVehicleData(vehicleInputData, segment, mission, mission.Loadings.First(), false);
+
+			Assert.AreEqual(expectedVehicleClass, mission.BusParameter.BusGroup);
+			Assert.AreEqual(expectedCurbMass, vehicleData.CurbMass.Value());
+		}
+
+		public void CompletedGenericBusCurbMassTest(VectoSimulationJobType jobType, ArchitectureID archId,
+			AxleConfiguration axleConfiguration, bool articulated, double TPMLM, int runIdx,
+			VehicleCode vehicleCode,
+			RegistrationClass registrationClass, bool lowEntry,
+			VehicleClass expectedVehicleClass, double expectedCurbMassGeneric)
+		{
+			var addElectricComponents = false;
+			var input = new Mock<IMultistageVIFInputData>()
+				.CompletedBus();
+			switch (jobType) {
+				case VectoSimulationJobType.ConventionalVehicle:
+					input = input.Conventional();
+					break;
+				case VectoSimulationJobType.ParallelHybridVehicle:
+				case VectoSimulationJobType.SerialHybridVehicle:
+					input = input.HEV(archId);
+					addElectricComponents = true;
+					break;
+				case VectoSimulationJobType.BatteryElectricVehicle:
+					input = input.PEV(archId);
+					addElectricComponents = true;
+					break;
+				default:
+					throw new Exception();
+			}
+
+			var result = _runDataFactoryFactory.CreateDeclarationRunDataFactory(input.Object, null,
+				null);
+
+			var dataAdapterSpecific = (result as DeclarationModeCompletedBusRunDataFactory.CompletedBusBase)?.DataAdapterSpecific;
+			Assert.NotNull(dataAdapterSpecific);
+
+            var dataAdapterGeneric = (result as DeclarationModeCompletedBusRunDataFactory.CompletedBusBase)?.DataAdapterGeneric;
+			Assert.NotNull(dataAdapterGeneric);
+
+			var vehicleType = VehicleCategory.HeavyBusPrimaryVehicle;
+
+			var primarySegment = DeclarationData.PrimaryBusSegments.Lookup(
+				vehicleType, axleConfiguration, articulated);
+			var completedSegment = DeclarationData.CompletedBusSegments.Lookup(axleConfiguration.NumAxles(),
+				vehicleCode, registrationClass, 10, 3.1.SI<Meter>(), lowEntry);
+
+			var curbMassCompleted = 12345;
+
+			var mission = primarySegment.Missions[runIdx];
+			var completedMission = completedSegment.Missions.FirstOrDefault(m => m.MissionType == mission.MissionType);
+			var loading = mission.Loadings.First();
+            var vehicleInputData = GetMockVehicleData(TPMLM, axleConfiguration, addElectricComponents);
+			var completedInput = GetMockCompletedInputData(curbMassCompleted);
+
+
+			var vehicleDataGeneric =
+				dataAdapterGeneric.CreateVehicleData(vehicleInputData, primarySegment, mission, loading, false);
+			var vehicleDataSpecific =
+				dataAdapterSpecific.CreateVehicleData(vehicleInputData, completedInput, completedSegment, completedMission, loading);
+
+            Assert.AreEqual(expectedVehicleClass, mission.BusParameter.BusGroup);
+			Assert.AreEqual(expectedCurbMassGeneric, vehicleDataGeneric.CurbMass.Value());
+			Assert.AreEqual(curbMassCompleted, vehicleDataSpecific.CurbMass.Value());
+        }
+
+		private IVehicleDeclarationInputData GetMockCompletedInputData(double curbMass)
+		{
+			var mock = new Mock<IVehicleDeclarationInputData>();
+			mock.Setup(v => v.NumberPassengerSeatsLowerDeck).Returns(10);
+			mock.Setup(v => v.NumberPassengerSeatsUpperDeck).Returns(0);
+			mock.Setup(v => v.NumberPassengersStandingLowerDeck).Returns(0);
+			mock.Setup(v => v.NumberPassengersStandingUpperDeck).Returns(0);
+			mock.Setup(v => v.Length).Returns(8.SI<Meter>());
+			mock.Setup(v => v.Width).Returns(2.55.SI<Meter>());
+			mock.Setup(v => v.Height).Returns(3.5.SI<Meter>());
+			mock.Setup(v => v.GrossVehicleMassRating).Returns(30000.SI<Kilogram>());
+			mock.Setup(v => v.CurbMassChassis).Returns(curbMass.SI<Kilogram>());
+            return mock.Object;
+		}
+
+
+		private IVehicleDeclarationInputData GetMockVehicleData(double tpmlm, AxleConfiguration axleConfiguration, bool addElectricComponents)
+		{
+			var mock = new Mock<IVehicleDeclarationInputData>();
+
+			var components = new Mock<IVehicleComponentsDeclaration>();
+			mock.Setup(v => v.GrossVehicleMassRating).Returns(tpmlm.SI<Kilogram>());
+			mock.Setup(v => v.Components).Returns(components.Object);
+			var axleWheels = new Mock<IAxlesDeclarationInputData>();
+			components.Setup(c => c.AxleWheels).Returns(axleWheels.Object);
+			var axle1 = new Mock<IAxleDeclarationInputData>();
+			
+			axle1.Setup(a => a.AxleType).Returns(AxleType.VehicleDriven);
+			var tyre = new Mock<ITyreDeclarationInputData>();
+			axle1.Setup(a => a.Tyre).Returns(tyre.Object);
+			tyre.Setup(t => t.Dimension).Returns("275/70 R22.5");
+
+			var axles = new List<IAxleDeclarationInputData>() {axle1.Object};
+			for (var i = 0; i < axleConfiguration.NumAxles(); i++) {
+				var axle = new Mock<IAxleDeclarationInputData>();
+				axle.Setup(a => a.AxleType).Returns(AxleType.VehicleNonDriven);
+				axle.Setup(a => a.Tyre).Returns(tyre.Object);
+				axles.Add(axle.Object);
+			}
+			axleWheels.Setup(a => a.AxlesDeclaration).Returns(axles);
+
+            var adas = new Mock<IAdvancedDriverAssistantSystemDeclarationInputData>();
+			mock.Setup(v => v.ADAS).Returns(adas.Object);
+			adas.Setup(a => a.EcoRoll).Returns(EcoRollType.None);
+			adas.Setup(a => a.PredictiveCruiseControl).Returns(PredictiveCruiseControlType.None);
+			adas.Setup(a => a.EngineStopStart).Returns(false);
+
+			if (!addElectricComponents) {
+				return mock.Object;
+			}
+
+			var bat = new Mock<IBatteryPackDeclarationInputData>();
+			var reess = new Mock<IElectricStorageSystemDeclarationInputData>();
+			components.Setup(c => c.ElectricStorage).Returns(reess.Object);
+			reess.Setup(r => r.ElectricStorageElements).Returns(new[] { new ElectricStorageWrapper() { REESSPack = bat.Object} }.Cast<IElectricStorageDeclarationInputData>().ToList());
+
+			bat.Setup(m => m.MaxCurrentMap).Returns(
+				GetMockTableData(new[] {
+					new[]{"0.0", "100.0", "100.0"},
+					new[]{"0.5", "100.0", "100.0"},
+					new[]{"1.0", "100.0", "100.0"}
+				}));
+
+			bat.Setup(m => m.InternalResistanceCurve).Returns(
+				GetMockTableData(new[] {
+					new[]{"0.0", "0.001"},
+					new[]{"0.5", "0.001"},
+					new[]{"1.0", "0.001"}
+				}));
+			bat.Setup(m => m.VoltageCurve).Returns(
+				GetMockTableData(new[] {
+					new[]{"0.0", "3000.0"},
+					new[]{"0.5", "310.0"},
+					new[]{"1.0", "320.0"}
+				}));
+			bat.Setup(b => b.Capacity).Returns(50.SI(Unit.SI.Ampere.Hour).Cast<AmpereSecond>());
+
+			var em = new Mock<IElectricMotorDeclarationInputData>();
+			var ems = new Mock<IElectricMachinesDeclarationInputData>();
+			ems.Setup(x => x.Entries)
+				.Returns(new[] {
+					new ElectricMachineEntry<IElectricMotorDeclarationInputData>()
+						{ ElectricMachine = em.Object, Count = 1 }
+				}.ToList());
+			var voltageLevel = new Mock<IElectricMotorVoltageLevel>();
+			voltageLevel.SetupGet(x => x.ContinuousTorque).Returns(400.SI<NewtonMeter>());
+			voltageLevel.SetupGet(x => x.ContinuousTorqueSpeed).Returns(2000.RPMtoRad());
+			em.Setup(x => x.VoltageLevels).Returns(new[] { voltageLevel.Object }.ToList());
+			components.Setup(c => c.ElectricMachines).Returns(ems.Object);
+            return mock.Object;
+		}
+
+		public static TableData GetMockTableData(string[][] values)
+		{
+			var result = new TableData();
+
+
+			foreach (var col in values.First()) {
+				result.Columns.Add(new DataColumn());
+			}
+
+			foreach (var row in values) {
+				result.Rows.Add(result.NewRow().ItemArray = row);
+			}
+			return result;
+
+		}
+    }
+
+	public class ElectricStorageWrapper : IElectricStorageDeclarationInputData
+	{
+		#region Implementation of IElectricStorageDeclarationInputData
+
+		public IREESSPackInputData REESSPack { get; set; }
+		public int Count { get; set; }
+		public int StringId { get; set; }
+
+		#endregion
+	}
 
 
 	public static class AuxiliariesInputMockHelper
diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusIgnoreResult.cs b/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusIgnoreResult.cs
new file mode 100644
index 0000000000000000000000000000000000000000..69afd0390dfbb97cc49f4f3b0de297a22d0ab8c7
--- /dev/null
+++ b/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusIgnoreResult.cs
@@ -0,0 +1,281 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading;
+using System.Xml.Linq;
+using System.Xml.XPath;
+using Ninject;
+using NUnit.Framework;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.InputData.FileIO.XML;
+using TUGraz.VectoCore.Models.Connector.Ports.Impl;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Declaration.IterativeRunStrategies;
+using TUGraz.VectoCore.Models.Simulation;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.OutputData;
+using TUGraz.VectoCore.OutputData.FileIO;
+using TUGraz.VectoCore.Tests.Utils;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.Tests.Integration.Declaration.PrimaryBus;
+
+public class PrimaryBusIgnoreResult
+{
+	private const string BASE_DIR = @"TestData/Integration/DeclarationMode/2nd_AmendmDeclMode/";
+
+	private ThreadLocal<StandardKernel> _kernel;
+
+	private StandardKernel Kernel => _kernel.Value;
+
+	private IXMLInputDataReader _xmlReader;
+
+    [OneTimeSetUp]
+	public void OneTimeSetup()
+	{
+		_kernel = new ThreadLocal<StandardKernel>(() => new StandardKernel(new VectoNinjectModule()));
+		_xmlReader = Kernel.Get<IXMLInputDataReader>();
+	}
+
+    [SetUp]
+	public void Setup()
+	{
+		Kernel.Rebind<IDeclarationCycleFactory>().To<TestDeclarationCycleFactoryVariant>().InSingletonScope();
+		var cycleFactory = Kernel.Get<IDeclarationCycleFactory>() as TestDeclarationCycleFactoryVariant;
+		cycleFactory.Variant = "Short_1";
+
+	}
+
+	private TestMissionFilter TestMissionFilter()
+	{
+		Kernel.Rebind<IMissionFilter>().To<TestMissionFilter>().InSingletonScope();
+		var missionFilter = Kernel.Get<IMissionFilter>() as TestMissionFilter;
+		Assert.NotNull(missionFilter);
+		return missionFilter;
+	}
+
+    [
+		TestCase(@"PrimaryBus/Conventional/primary_heavyBus group41_nonSmart.xml", 0, TestName = "2nd Amendment PrimaryBus IgnoreCycleAbort Conventional"),
+		TestCase(@"PrimaryBus/P-HEV/PrimaryCoach_P2_HEV_Base_AMT.xml", 0, TestName = "2nd Amendment PrimaryBus IgnoreCycleAbort Coach P-HEV P2 Base AMT"),
+		TestCase(@"PrimaryBus/P-HEV/PrimaryCoach_P2_HEV_AMT_OVC.xml", 0, TestName = "2nd Amendment PrimaryBus IgnoreCycleAbort Coach P-HEV P2 AMT OVC"),
+		TestCase(@"FactorMethod/IEPC/P31_32_IEPC_EDP.xml", 0, TestName = "2nd Amendment PrimaryBus IgnoreCycleAbort FM IEPC EDP"),
+		TestCase(@"FactorMethod/IHPC/P31_32_IHPC_nonSmartES_mechAux.xml", 0, TestName = "2nd Amendment PrimaryBus IgnoreCycleAbort FM IHPC nonSmartES_mechAux"),
+		TestCase(@"PrimaryBus/PEV/PEV_primaryBus_AMT_E2.xml", 0, TestName = "2nd Amendment PrimaryBus IgnoreCycleAbort PEV E2"),
+		TestCase(@"PrimaryBus/PEV/PrimaryCityBus_IEPC_Base.xml", 0, TestName = "2nd Amendment PrimaryBus IgnoreCycleAbort CityBus PEV IEPC Base"),
+		TestCase(@"PrimaryBus/S-HEV/PrimaryCoach_S2_Base_AMT.xml", 0, TestName = "2nd Amendment PrimaryBus IgnoreCycleAbort Coach S-HEV S2 Base"),
+		TestCase(@"PrimaryBus/S-HEV/PrimaryCityBus_IEPC-S_Base.xml", 0, TestName = "2nd Amendment PrimaryBus IgnoreCycleAbort CityBus S-HEV IEPC Base"),
+	]
+    public void PrimaryBusIgnoreCycleAbortTest(string jobFile, int runIdx)
+	{
+		TestMissionFilter().SetMissions((MissionType.Interurban, LoadingType.ReferenceLoad));
+		RunSimulationPrimary(jobFile, runIdx);
+	}
+
+	public void RunSimulationPrimary(string jobFile, int runIdx, params Action<VectoRunData>[] runDataModifier)
+	{
+		RunSimulationPrimary(jobFile, r => r.IterativeRunStrategy.Enabled = false);
+	}
+
+    public void RunSimulationPrimary(string jobFile, params Action<VectoRunData>[] runDataModifier)
+    {
+		var filePath = Path.Combine(BASE_DIR, jobFile);
+		var outDir = Path.Combine(Path.GetDirectoryName(filePath), "IgnoreCycleAbort");
+		if (!Directory.Exists(outDir)) {
+			Directory.CreateDirectory(outDir);
+		}
+		
+        var dataProvider = _xmlReader.CreateDeclaration(filePath);
+        var fileWriter = new FileOutputWriter(Path.Combine(outDir, Path.GetFileName(jobFile)));
+        var sumData = new SummaryDataContainer(fileWriter);
+        var simFactory = Kernel.Get<ISimulatorFactoryFactory>();
+        var runsFactory = simFactory.Factory(ExecutionMode.Declaration, dataProvider, fileWriter, null, null);
+        runsFactory.WriteModalResults = false;
+        runsFactory.SerializeVectoRunData = false;
+		runsFactory.Validate = false;
+        runsFactory.SumData = sumData;
+        var jobContainer = new JobContainer(sumData) { };
+        //var jobContainer = new JobContainer(new MockSumWriter()) { };
+        var runs = runsFactory.SimulationRuns().ToList();
+        foreach (var vectoRun in runs) {
+            foreach (var action in runDataModifier) {
+                action(vectoRun.GetContainer().RunData);
+            }
+        }
+
+		var abortedRunIdx = runs.FindIndex(x =>
+			x.GetContainer().RunData.Mission.BusParameter.DoubleDecker &&
+			x.GetContainer().RunData.Loading == LoadingType.ReferenceLoad &&
+			x.GetContainer().RunData.Mission.MissionType == MissionType.Interurban);
+		if (abortedRunIdx < 0) {
+			throw new Exception("No such simulation run found!");
+		}
+		runs[abortedRunIdx] = new AbortingSimulationRun(runs[abortedRunIdx]);
+
+        foreach (var run in runs) {
+            jobContainer.AddRun(run);
+        }
+
+        jobContainer.Execute();
+        jobContainer.WaitFinished();
+        Assert.IsTrue(jobContainer.AllCompleted);
+        Assert.IsTrue(jobContainer.Runs.TrueForAll(runEntry => runEntry.Success));
+		PrintFiles(fileWriter);
+
+		AssertResultsAreNaN(fileWriter);
+		
+	}
+
+	private void AssertResultsAreNaN(FileOutputWriter xmlFile)
+	{
+		var vifFileName = xmlFile.XMLPrimaryVehicleReportName;
+		var vifXML = XDocument.Load(vifFileName);
+
+		var vifResults = vifXML.XPathSelectElements(".//*[local-name() = 'Result']");
+		var ignoredVifResult = vifResults.FirstOrDefault(x => {
+			var subGroup = x.XPathSelectElement("./*[local-name()='PrimaryVehicleSubgroup']");
+			var cycle = x.XPathSelectElement("./*[local-name()='Mission']");
+
+            return subGroup.Value.EndsWith("DD") && cycle.Value.Equals("Interurban");
+		});
+
+		Assert.NotNull(ignoredVifResult);
+		Assert.AreEqual("success", ignoredVifResult.Attributes().First(a => a.Name.LocalName.Equals("status")).Value);
+
+		var mrfFileName = xmlFile.XMLFullReportName;
+		var mrfXML = XDocument.Load(mrfFileName);
+		var mrfResults = mrfXML.XPathSelectElements(".//*[local-name() = 'Result']");
+		var cycleVif = ignoredVifResult.XPathSelectElement("./*[local-name()='Mission']");
+		var massVif = ignoredVifResult.XPathSelectElement(".//*[local-name()='TotalVehicleMass']");
+		var ignoredMrfResult = mrfResults.FirstOrDefault(x => {
+			var cycle = x.XPathSelectElement("./*[local-name()='Mission']");
+			var mass = x.XPathSelectElement(".//*[local-name()='TotalVehicleMass']");
+			return cycle.Value.Equals(cycleVif.Value) && mass.Value.Equals(massVif.Value);
+		});
+
+		Assert.NotNull(ignoredMrfResult);
+		Assert.AreEqual("success", ignoredMrfResult.Attributes().First(a => a.Name.LocalName.Equals("status")).Value);
+
+        var notANumberElements = new[] {
+			"FuelConsumption", "CO2", "EnergyConsumption", "UtilityFactor", "ActualChargeDepletingRange", "EquivalentAllElectricRange",
+			"ZeroCO2EmissionsRange",
+			"AverageSpeed", "AverageDrivingSpeed", "MinSpeed", "MaxSpeed", "MaxDeceleration", "MaxAcceleration"
+		};
+		foreach (var node in new[] {ignoredVifResult, ignoredMrfResult}) {
+			var values = new List<Tuple<string, string, string>>();
+			var hasOVCModes = node.XPathSelectElements(".//*[local-name() = 'OVCMode']").Any();
+			foreach (var elementName in notANumberElements) {
+				var detailedSelector = hasOVCModes
+					? " and ((ancestor-or-self::*[local-name() = 'OVCMode' and @type = 'charge depleting']) or ancestor-or-self::*[local-name()='Total'])"
+                    : "";
+				var queryString = $".//*[local-name() = '{elementName}'{detailedSelector}]";
+				var result = node.XPathSelectElements(queryString);
+				foreach (var entry in result) {
+					//Assert.AreEqual(entry.Value, "NaN", $"elment ${elementName} expected to be NaN");
+					var unit = entry.Attributes().FirstOrDefault(a => a.Name == "unit")?.Value;
+					values.Add(Tuple.Create(elementName, unit ?? "", entry.Value));
+				}
+			}
+
+			Assert.IsNotEmpty(values);
+			foreach (var entry in values) {
+				Assert.AreEqual("NaN", entry.Item3, $"element {entry.Item1} {entry.Item2} exptected to be NaN, {entry.Item3} found");
+			}
+		}
+		
+	}
+
+	public class AbortingSimulationRun : DistanceRun
+	{
+		private readonly IVectoRun _run;
+
+		public AbortingSimulationRun(IVectoRun run) : base(run.GetContainer(), null, new IgnoreSimulationRun())
+		{
+			_run = run;
+		}
+
+        protected override IResponse DoSimulationStep()
+        {
+            IterationStatistics.StartIteration();
+
+            // estimate distance to be traveled within the next TargetTimeInterval
+            var ds = Container.VehicleInfo.VehicleSpeed.IsEqual(0.KMPHtoMeterPerSecond(), 0.01.SI<MeterPerSecond>())
+                ? Constants.SimulationSettings.DriveOffDistance
+                : VectoMath.Max(
+                Constants.SimulationSettings.TargetTimeInterval * Container.VehicleInfo.VehicleSpeed,
+                    Constants.SimulationSettings.DriveOffDistance);
+
+            var loopCount = 0;
+            IResponse response;
+            var debug = new DebugData();
+            do {
+                IterationStatistics.Increment(this, "Iterations");
+
+                Container.Brakes.BrakePower = 0.SI<Watt>();
+                response = CyclePort.Request(AbsTime, ds);
+                switch (response) {
+                    case ResponseSuccess r:
+                        dt = r.SimulationInterval;
+                        break;
+                    case ResponseDrivingCycleDistanceExceeded r:
+                        if (r.MaxDistance.IsSmallerOrEqual(0)) {
+                            throw new VectoSimulationException("DistanceExceeded, MaxDistance is invalid: {0}", r.MaxDistance);
+                        }
+                        ds = r.MaxDistance;
+                        break;
+                    case ResponseCycleFinished _:
+                        FinishedWithoutErrors = true;
+                        Log.Info("========= Driving Cycle Finished");
+                        break;
+                    case ResponseBatteryEmpty _:
+                        FinishedWithoutErrors = true;
+                        Log.Info("========= REESS empty");
+                        break;
+                    default:
+                        throw new VectoException("DistanceRun got an unexpected response: {0}", response);
+                }
+                if (loopCount++ > Constants.SimulationSettings.MaximumIterationCountForSimulationStep) {
+                    throw new VectoSimulationException("Maximum iteration count for a single simulation interval reached! Aborting!");
+                }
+
+				if (AbsTime > 100.SI<Second>()) {
+					throw new VectoException("Intentionally aborting the simulation run...");
+				}
+                debug.Add($"[DR.DST-{loopCount}]", response);
+            } while (!(response is ResponseSuccess || response is ResponseCycleFinished || response is ResponseBatteryEmpty));
+
+            IterationStatistics.Increment(this, "Distance", Container.MileageCounter.Distance.Value());
+            IterationStatistics.Increment(this, "Time", AbsTime.Value());
+            IterationStatistics.FinishIteration(AbsTime);
+            response.AbsTime = AbsTime;
+            return response;
+        }
+    }
+
+	public class IgnoreSimulationRun : IPostMortemAnalyzer
+	{
+		#region Implementation of IPostMortemAnalyzer
+
+		public bool AbortSimulation(IVehicleContainer container, Exception ex)
+		{
+            // do not abort the simulation but ignore the result
+			container.RunStatus = VectoRun.Status.PrimaryBusSimulationIgnore;
+            return false;
+		}
+
+		#endregion
+	}
+
+	private void PrintFiles(FileOutputWriter fileWriter)
+	{
+		foreach (var keyValuePair in fileWriter.GetWrittenFiles()) {
+			TestContext.WriteLine($"{keyValuePair.Key} written to {keyValuePair.Value}");
+			TestContext.AddTestAttachment(keyValuePair.Value, keyValuePair.Key.ToString());
+		}
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/Models/Declaration/DataAdapter/DeclarationAdapterCreateVocationalVehicleTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/DataAdapter/DeclarationAdapterCreateVocationalVehicleTest.cs
index 169f6f2b96419dfb4a013bd52e5884dfefcb81bf..aff8f3b3c60afb3ae1fe149ef2d400e6cc8db1a4 100644
--- a/VectoCore/VectoCoreTest/Models/Declaration/DataAdapter/DeclarationAdapterCreateVocationalVehicleTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Declaration/DataAdapter/DeclarationAdapterCreateVocationalVehicleTest.cs
@@ -53,7 +53,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration.DataAdapter
 			helper.AddNamespaces(manager);
 
 			var vocational = nav.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.Component_Vehicle, XMLNames.Vehicle_VocationalVehicle));
-			vocational.SetValue(true.ToString().ToLower());
+			vocational.SetValue(true.ToString().ToLowerInvariant());
 			var modified = XmlReader.Create(new StringReader(nav.OuterXml));
 			
 			var dataProvider = xmlInputReader.CreateDeclaration(modified);