From d8fa6a11dc058c54fcb3ec5be4a99584c0db4ab6 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Thu, 8 Aug 2019 17:31:56 +0200
Subject: [PATCH] make engineering xml with dual fuel and whr work, some
 refactoring

---
 VECTO.sln.DotSettings                         |   1 +
 .../Resources/XMLNames.Designer.cs            |  27 +++
 .../VectoCommon/Resources/XMLNames.resx       |   9 +
 .../AbstractXMLResource.cs                    |   3 +-
 .../AbstractXMLType.cs                        |   2 +-
 .../AbstractCommonComponentType.cs            |   1 +
 .../XMLAuxiliaryDeclarationDataProvider.cs    |   1 +
 .../XMLDeclarationAuxiliariesDataProvider.cs  |   1 +
 .../XMLDeclarationAxlesDataProvider.cs        |   1 +
 .../XMLDeclarationEngineDataProvider.cs       |   1 +
 .../XMLDeclarationInputDataProvider.cs        |   1 +
 .../XMLDeclarationJobInputDataProvider.cs     |   1 +
 .../XMLDeclarationPTODataProvider.cs          |   1 +
 .../Declaration/DataProvider/XMLGearData.cs   |   1 +
 .../AbstractCommonComponentType.cs            |  26 +--
 .../DataProvider/AbstractXMLType.cs           |  81 -------
 .../DataProvider/XMLCyclesDataProvider.cs     |   2 +
 .../DataProvider/XMLDriverAcceleration.cs     |   2 +
 .../XMLEngineeringAirdragDataProvider.cs      |   2 +-
 .../XMLEngineeringAngledriveDataProvider.cs   |   2 +-
 .../XMLEngineeringAuxiliariesDataProvider.cs  |   4 +-
 .../XMLEngineeringAxlesDataProvider.cs        |   2 +-
 .../XMLEngineeringDriverLookAhead.cs          |   2 +
 .../XMLEngineeringEngineDataProvider.cs       | 217 +++++++++++++++++-
 .../XMLEngineeringGearboxDataProvider.cs      |   2 +
 .../XMLEngineeringGearshiftData.cs            |   2 +
 .../XMLEngineeringInputDataProvider.cs        |   2 +
 .../XMLEngineeringJobInputDataProvider.cs     |   2 +
 .../DataProvider/XMLEngineeringOverspeed.cs   |   2 +
 .../XMLEngineeringRetarderDataProvider.cs     |   2 +-
 .../XMLEngineeringReaderInjectModule.cs       |   4 +-
 .../XMLEngineeringReaderV10InjectModule.cs    |  13 +-
 .../VectoCore/Models/Declaration/FuelData.cs  |   4 +-
 .../Resources/Declaration/FuelTypes.csv       |   4 +-
 VectoCore/VectoCore/Utils/XMLDefinitions.cs   |   2 +
 VectoCore/VectoCore/Utils/XMLValidator.cs     |   2 +-
 VectoCore/VectoCore/VectoCore.csproj          |   5 +-
 VectoCore/VectoCoreTest/VectoCoreTest.csproj  |  15 ++
 38 files changed, 320 insertions(+), 132 deletions(-)
 rename VectoCore/VectoCore/InputData/FileIO/XML/{Declaration/DataProvider => Common}/AbstractXMLResource.cs (84%)
 rename VectoCore/VectoCore/InputData/FileIO/XML/{Declaration/DataProvider => Common}/AbstractXMLType.cs (97%)
 delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractXMLType.cs

diff --git a/VECTO.sln.DotSettings b/VECTO.sln.DotSettings
index 1f889a17cc..cc03e9861f 100644
--- a/VECTO.sln.DotSettings
+++ b/VECTO.sln.DotSettings
@@ -46,6 +46,7 @@
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=RP/@EntryIndexedValue">RP</s:String>
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SI/@EntryIndexedValue">SI</s:String>
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=VTP/@EntryIndexedValue">VTP</s:String>
+	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=WHR/@EntryIndexedValue">WHR</s:String>
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=WHTC/@EntryIndexedValue">WHTC</s:String>
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=XML/@EntryIndexedValue">XML</s:String>
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=XSD/@EntryIndexedValue">XSD</s:String>
diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs
index 437a42f636..e26ec9f51d 100644
--- a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs
+++ b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs
@@ -1158,6 +1158,15 @@ namespace TUGraz.VectoCommon.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to WHRCorrection.
+        /// </summary>
+        public static string Engine_WHRCorrectionFactor {
+            get {
+                return ResourceManager.GetString("Engine_WHRCorrectionFactor", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to WHRCorrectionFactors.
         /// </summary>
@@ -1212,6 +1221,24 @@ namespace TUGraz.VectoCommon.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to WHRMap.
+        /// </summary>
+        public static string Engine_WHRMap {
+            get {
+                return ResourceManager.GetString("Engine_WHRMap", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Entry.
+        /// </summary>
+        public static string Engine_WHRMap_Entry {
+            get {
+                return ResourceManager.GetString("Engine_WHRMap_Entry", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to WHRType.
         /// </summary>
diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.resx b/VectoCommon/VectoCommon/Resources/XMLNames.resx
index 41fb2b04a8..92ad4c3dd4 100644
--- a/VectoCommon/VectoCommon/Resources/XMLNames.resx
+++ b/VectoCommon/VectoCommon/Resources/XMLNames.resx
@@ -1107,4 +1107,13 @@
   <data name="Vehicle_ADAS_EcoRoll" xml:space="preserve">
     <value>EcoRoll</value>
   </data>
+  <data name="Engine_WHRCorrectionFactor" xml:space="preserve">
+    <value>WHRCorrection</value>
+  </data>
+  <data name="Engine_WHRMap_Entry" xml:space="preserve">
+    <value>Entry</value>
+  </data>
+  <data name="Engine_WHRMap" xml:space="preserve">
+    <value>WHRMap</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/AbstractXMLResource.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLResource.cs
similarity index 84%
rename from VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/AbstractXMLResource.cs
rename to VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLResource.cs
index 3257911a13..2e0056a131 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/AbstractXMLResource.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLResource.cs
@@ -1,9 +1,10 @@
 using System.Xml;
 using System.Xml.Linq;
 using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.Utils;
 
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider {
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Common {
 	public abstract class AbstractXMLResource : AbstractXMLType, IXMLResource
 	{
 		protected string SourceFile;
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/AbstractXMLType.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLType.cs
similarity index 97%
rename from VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/AbstractXMLType.cs
rename to VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLType.cs
index 9349ce2b2b..156f38b33c 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/AbstractXMLType.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLType.cs
@@ -6,7 +6,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Utils;
 
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider {
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Common {
 	public abstract class AbstractXMLType : LoggingObject
 	{
 		protected readonly XmlNode BaseNode;
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/AbstractCommonComponentType.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/AbstractCommonComponentType.cs
index 266faffd7d..cec5b2c3be 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/AbstractCommonComponentType.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/AbstractCommonComponentType.cs
@@ -4,6 +4,7 @@ using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
 using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider {
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLAuxiliaryDeclarationDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLAuxiliaryDeclarationDataProvider.cs
index 9b3b2ee0d2..2f5d63a5fd 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLAuxiliaryDeclarationDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLAuxiliaryDeclarationDataProvider.cs
@@ -4,6 +4,7 @@ using System.Xml.Linq;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
 using TUGraz.VectoCore.Utils;
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAuxiliariesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAuxiliariesDataProvider.cs
index 90015cc54e..b683dcae40 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAuxiliariesDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAuxiliariesDataProvider.cs
@@ -4,6 +4,7 @@ using System.Xml;
 using System.Xml.Linq;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader;
 using TUGraz.VectoCore.Utils;
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlesDataProvider.cs
index e0c96494e8..8037014097 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlesDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlesDataProvider.cs
@@ -5,6 +5,7 @@ using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader;
 using TUGraz.VectoCore.Utils;
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs
index d6037633d9..bf16b86ef3 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs
@@ -9,6 +9,7 @@ using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Utils;
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs
index 9c125841f2..6912efe88f 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs
@@ -37,6 +37,7 @@ using System.Xml.Schema;
 using System.Xml.XPath;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
 using TUGraz.VectoCore.Utils;
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationJobInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationJobInputDataProvider.cs
index 468541b166..86be90c6db 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationJobInputDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationJobInputDataProvider.cs
@@ -1,6 +1,7 @@
 using System.Xml;
 using System.Xml.Linq;
 using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader;
 using TUGraz.VectoCore.Utils;
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPTODataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPTODataProvider.cs
index a61ca11776..59d4291684 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPTODataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPTODataProvider.cs
@@ -5,6 +5,7 @@ using System.Xml.Linq;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Utils;
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs
index be900af24c..637a7314e7 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs
@@ -4,6 +4,7 @@ using TUGraz.IVT.VectoXML;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
 using TUGraz.VectoCore.Utils;
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractCommonComponentType.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractCommonComponentType.cs
index ee749443ef..1ae7fdaade 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractCommonComponentType.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractCommonComponentType.cs
@@ -3,35 +3,15 @@ using System.Xml.Linq;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
 using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
 {
-	public abstract class AbstractXMLResource : AbstractXMLType, IXMLResource
-	{
-		protected string SourceFile;
-
-		public AbstractXMLResource(XmlNode node, string source) : base(node)
-		{
-			SourceFile = source;
-		}
-
-		public virtual DataSource DataSource
-		{
-			get { return new DataSource() { SourceFile = SourceFile, SourceVersion = SourceVersion, SourceType = SourceType }; }
-		}
-
-
-		protected string SourceVersion { get { return XMLHelper.GetVersionFromNamespaceUri(SchemaNamespace); } }
-
-		protected abstract XNamespace SchemaNamespace { get;}
-
-		protected abstract DataSourceType SourceType { get; }
-	}
-
-
+	
 	public abstract class AbstractCommonComponentType : AbstractXMLResource
 	{
 		public AbstractCommonComponentType(XmlNode node, string source) : base(node, source) { }
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractXMLType.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractXMLType.cs
deleted file mode 100644
index 8888b8c67b..0000000000
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractXMLType.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using System.Xml;
-using TUGraz.VectoCommon.Exceptions;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.Utils;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
-{
-	public abstract class AbstractXMLType
-	{
-		protected readonly XmlNode BaseNode;
-
-		protected AbstractXMLType(XmlNode node)
-		{
-			BaseNode = node;
-		}
-
-		protected bool ElementExists(string nodeName)
-		{
-			return GetNode(nodeName, BaseNode, required: false) != null;
-		}
-
-		protected string GetString(string nodeName, XmlNode basenode = null, bool required = true)
-		{
-			return GetNode(nodeName, basenode, required)?.InnerText;
-		}
-
-		protected double GetDouble(string nodeName, double? fallbackValue = null)
-		{
-			var node = GetNode(nodeName, required: fallbackValue != null);
-
-			return node?.InnerText.ToDouble() ?? fallbackValue.Value;
-		}
-
-		protected double GetDouble(string[] nodePath, double? fallbackValue = null)
-		{
-			var node = GetNode(nodePath, required: fallbackValue == null);
-
-			return node?.InnerText.ToDouble() ?? fallbackValue.Value;
-		}
-
-		protected bool GetBool(string nodeName) 
-		{
-			return XmlConvert.ToBoolean(GetNode(nodeName).InnerText);
-		}
-
-		protected XmlNode GetNode(string[] nodeName, XmlNode baseNode = null, bool required = true)
-		{
-			return DoGetNode(XMLHelper.QueryLocalName(nodeName), baseNode, required);
-		}
-
-		protected XmlNode GetNode(string nodeName, XmlNode baseNode = null, bool required = true)
-		{
-			return DoGetNode(XMLHelper.QueryLocalName(nodeName), baseNode, required);
-		}
-
-		private XmlNode DoGetNode(string xpathQuery, XmlNode baseNode, bool required)
-		{
-			var node = (baseNode ?? BaseNode)?.SelectSingleNode(xpathQuery);
-			if (required && node == null) {
-				throw new VectoException("Node {0} not found", xpathQuery);
-			}
-
-			return node;
-		}
-
-		protected XmlNodeList GetNodes(string nodeName, XmlNode baseNode = null)
-		{
-			return (baseNode ?? BaseNode).SelectNodes(XMLHelper.QueryLocalName(nodeName));
-		}
-
-		protected XmlNodeList GetNodes(string[] nodeName, XmlNode baseNode = null)
-		{
-			return (baseNode ?? BaseNode).SelectNodes(XMLHelper.QueryLocalName(nodeName));
-		}
-
-		protected string GetAttribute(XmlNode node, string attribute)
-		{
-			return node?.Attributes?.GetNamedItem(attribute)?.InnerText;
-		}
-	}
-}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLCyclesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLCyclesDataProvider.cs
index ba0e6bb064..8a3840c466 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLCyclesDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLCyclesDataProvider.cs
@@ -5,6 +5,8 @@ using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
 using TUGraz.VectoCore.InputData.Impl;
 using TUGraz.VectoCore.Models.Declaration;
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLDriverAcceleration.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLDriverAcceleration.cs
index f63c14dfd3..01cdd8c4d3 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLDriverAcceleration.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLDriverAcceleration.cs
@@ -2,6 +2,8 @@ using System.Xml;
 using TUGraz.IVT.VectoXML;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
 using TUGraz.VectoCore.InputData.Impl;
 using TUGraz.VectoCore.Utils;
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAirdragDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAirdragDataProvider.cs
index c755a9d74f..c7ae92bac6 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAirdragDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAirdragDataProvider.cs
@@ -101,7 +101,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
 	{
 		public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
 
-		public new const string XSD_TYPE = "AirDragComponentEngineeringType";
+		public new const string XSD_TYPE = "AirDragDataEngineeringType";
 
 		public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI, XSD_TYPE);
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAngledriveDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAngledriveDataProvider.cs
index 2cabe62556..b5ac44f1ba 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAngledriveDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAngledriveDataProvider.cs
@@ -95,7 +95,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
 	{
 		public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
 
-		public new const string XSD_TYPE = "AngledriveComponentEngineeringType";
+		public new const string XSD_TYPE = "AngledriveDataEngineeringType";
 
 		public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI, XSD_TYPE);
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAuxiliariesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAuxiliariesDataProvider.cs
index 536469afde..5187bfdc15 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAuxiliariesDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAuxiliariesDataProvider.cs
@@ -8,6 +8,8 @@ using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
 using TUGraz.VectoCore.InputData.Impl;
 using TUGraz.VectoCore.Utils;
@@ -69,7 +71,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
 	{
 		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
 
-		public new const string XSD_TYPE = "AuxiliariesComponentEngineeringType";
+		public new const string XSD_TYPE = "AuxiliariesDataEngineeringType";
 
 		public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI, XSD_TYPE);
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlesDataProvider.cs
index cd5bd7423d..7524355109 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlesDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlesDataProvider.cs
@@ -72,7 +72,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
 	{
 		public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
 
-		public new const string XSD_TYPE = "AxleWheelsComponentEngineeringType";
+		public new const string XSD_TYPE = "AxleWheelsDataEngineeringType";
 
 		public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI, XSD_TYPE);
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverLookAhead.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverLookAhead.cs
index 4940e4b4a2..21a3803714 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverLookAhead.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverLookAhead.cs
@@ -4,6 +4,8 @@ using TUGraz.IVT.VectoXML;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Utils;
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringEngineDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringEngineDataProvider.cs
index 51ca1f7cfc..107a5f47ca 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringEngineDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringEngineDataProvider.cs
@@ -29,6 +29,7 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Xml;
@@ -39,6 +40,8 @@ using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Utils;
@@ -53,7 +56,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
 		public const string XSD_TYPE = "EngineDataEngineeringType";
 
 		public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE);
-		
+
+		protected IList<IEngineModeEngineeringInputData> _modes;
+
 		public XMLEngineeringEngineDataProviderV07(
 			IXMLEngineeringVehicleData vehicle,
 			XmlNode vehicleNode, string fsBasePath)
@@ -64,7 +69,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
 				: DataSourceType.XMLFile;
 		}
 
-		
+
 		public XMLEngineeringEngineDataProviderV07(XmlNode node, string sourceFile) : base(null, node, sourceFile) { }
 
 		public virtual CubicMeter Displacement
@@ -84,7 +89,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
 
 		IList<IEngineModeEngineeringInputData> IEngineEngineeringInputData.EngineModes
 		{
-			get { return new[] { this }.Cast<IEngineModeEngineeringInputData>().ToList(); }
+			get { return _modes ?? (_modes = ReadEngineModes()); }
 		}
 
 		public virtual Second EngineStartTime
@@ -156,11 +161,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
 			get { return new[] { this }.Cast<IEngineFuelEngineeringInputData>().ToList(); }
 		}
 
-		public virtual  IList<IEngineFuelDelcarationInputData> Fuels {
+		public virtual IList<IEngineFuelDelcarationInputData> Fuels
+		{
 			get { return new[] { this }.Cast<IEngineFuelDelcarationInputData>().ToList(); }
 		}
 
-		public virtual IWHRData WasteHeatRecoveryData { get { return null; } }
+		public virtual IWHRData WasteHeatRecoveryData
+		{
+			get { return null; }
+		}
 
 		public virtual Watt RatedPowerDeclared
 		{
@@ -183,8 +192,20 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
 			}
 		}
 
-		public virtual IList<IEngineModeDeclarationInputData> EngineModes { get { return new[] { this }.Cast<IEngineModeDeclarationInputData>().ToList(); } }
-		public virtual WHRType WHRType { get { return WHRType.None; } }
+		public virtual IList<IEngineModeDeclarationInputData> EngineModes
+		{
+			get { return (_modes ?? (_modes = ReadEngineModes())).Cast<IEngineModeDeclarationInputData>().ToList(); }
+		}
+
+		protected virtual IList<IEngineModeEngineeringInputData> ReadEngineModes()
+		{
+			return new IEngineModeEngineeringInputData[] { this };
+		}
+
+		public virtual WHRType WHRType
+		{
+			get { return WHRType.None; }
+		}
 
 		public virtual KilogramSquareMeter Inertia
 		{
@@ -225,16 +246,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
 
 		#region Overrides of XMLEngineeringEngineDataProviderV07
 
-		#region Overrides of XMLEngineeringEngineDataProviderV07
-
 		protected override XNamespace SchemaNamespace
 		{
 			get { return NAMESPACE_URI; }
 		}
 
 		#endregion
-
-		#endregion
 	}
 
 	// this class is just for testing reading derived XML datatypes
@@ -267,4 +284,182 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
 
 		#endregion
 	}
+
+	internal class XMLEngineeringEngineDataProviderV11 : XMLEngineeringEngineDataProviderV10
+	{
+		public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V11;
+
+		public new const string XSD_TYPE = "EngineDataEngineeringType";
+
+		public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI, XSD_TYPE);
+
+		
+		public XMLEngineeringEngineDataProviderV11(
+			XMLEngineeringVehicleDataProviderV07 vehicle, XmlNode vehicleNode, string fsBasePath) : base(
+			vehicle, vehicleNode, fsBasePath) { }
+
+		public XMLEngineeringEngineDataProviderV11(XmlNode node, string sourceFile) : base(node, sourceFile) { }
+
+		#region Overrides of XMLEngineeringEngineDataProviderV07
+
+		protected override IList<IEngineModeEngineeringInputData> ReadEngineModes()
+		{
+			return GetNodes(XMLNames.Engine_FuelModes)
+							.Cast<XmlNode>().Select(x => new XMLDualFuelEngineMode(x, DataSource)).Cast<IEngineModeEngineeringInputData>().ToList();
+			
+		}
+
+		#endregion
+
+
+		internal class XMLDualFuelEngineMode : AbstractXMLType, IEngineModeEngineeringInputData
+		{
+			protected IList<IEngineFuelEngineeringInputData> _fuels;
+			protected DataSource Source;
+			protected IWHRData WHRData;
+
+			public XMLDualFuelEngineMode(XmlNode xmlNode, DataSource source) : base(xmlNode)
+			{
+				Source = source;
+			}
+
+			#region Implementation of IEngineModeDeclarationInputData
+
+			public PerSecond IdleSpeed {
+				get { return GetDouble(XMLNames.Engine_IdlingSpeed).RPMtoRad(); }
+			}
+			public TableData FullLoadCurve {
+				get {
+					return XMLHelper.ReadEntriesOrResource(
+						BaseNode, Source.SourcePath, XMLNames.Engine_FullLoadAndDragCurve, XMLNames.Engine_FullLoadCurve_Entry,
+						AttributeMappings.EngineFullLoadCurveMapping);
+				}
+			}
+
+			IList<IEngineFuelEngineeringInputData> IEngineModeEngineeringInputData.Fuels
+			{
+				get { return _fuels ?? (_fuels = ReadFuels()); }
+			}
+
+			
+
+			IList<IEngineFuelDelcarationInputData> IEngineModeDeclarationInputData.Fuels
+			{
+				get { return (_fuels ?? (_fuels = ReadFuels())).Cast<IEngineFuelDelcarationInputData>().ToList(); }
+			}
+
+			public virtual IWHRData WasteHeatRecoveryData
+			{
+				get { return WHRData ?? (WHRData = ReadWHRData()); }
+			}
+
+			#endregion
+
+			protected virtual IList<IEngineFuelEngineeringInputData> ReadFuels()
+			{
+				return GetNodes(XMLNames.Engine_FuelModes_Fuel).Cast<XmlNode>().Select(x => new XMLEngineFuel(x, Source)).Cast<IEngineFuelEngineeringInputData>().ToList();
+			}
+
+			protected virtual IWHRData ReadWHRData()
+			{
+				var fuelNode = GetNodes(XMLNames.Engine_FuelModes_Fuel).Cast<XmlNode>().First();
+				var whrNode = GetNode("WasteHeatRecovery", fuelNode);
+				return new XMLWHRData(whrNode, Source);
+			}
+		}
+
+		internal class XMLEngineFuel : AbstractXMLType, IEngineFuelEngineeringInputData
+		{
+			protected DataSource Source;
+
+			public XMLEngineFuel(XmlNode xmlNode, DataSource source) : base(xmlNode)
+			{
+				Source = source;
+			}
+
+			#region Implementation of IEngineFuelDelcarationInputData
+
+			public virtual FuelType FuelType
+			{
+				get {
+					var value = GetString(XMLNames.Engine_FuelType);
+					if ("LPG".Equals(value, StringComparison.InvariantCultureIgnoreCase)) {
+						return FuelType.LPGPI;
+					}
+					if ("NG".Equals(value, StringComparison.InvariantCultureIgnoreCase)) {
+						return FuelType.NGPI;
+					}
+
+					return value.ParseEnum<FuelType>();
+				}
+			}
+
+			public virtual double WHTCMotorway { get { return 1; } }
+
+			public virtual double WHTCRural { get { return 1; } }
+
+			public virtual double WHTCUrban { get { return 1; } }
+
+			public virtual double ColdHotBalancingFactor { get { return 1; } }
+
+			public virtual double CorrectionFactorRegPer { get { return 1; } }
+
+			public virtual TableData FuelConsumptionMap {
+				get {
+					return XMLHelper.ReadEntriesOrResource(
+						BaseNode, Source.SourcePath, XMLNames.Engine_FuelConsumptionMap, XMLNames.Engine_FuelConsumptionMap_Entry,
+						AttributeMappings.FuelConsumptionMapMapping);
+				}
+			}
+
+			#endregion
+
+			#region Implementation of IEngineFuelEngineeringInputData
+
+			public double WHTCEngineering { get { return GetDouble(XMLNames.Engine_FCCorrection); } }
+
+			#endregion
+		}
+
+		internal class XMLWHRData : AbstractXMLType, IWHRData
+		{
+			protected DataSource Source;
+
+			public XMLWHRData(XmlNode baseNode, DataSource source) : base (baseNode)
+			{
+				Source = source;
+			}
+
+			
+			#region Implementation of IWHRData
+
+			public virtual double UrbanCorrectionFactor { get { return 1; } }
+			public virtual double RuralCorrectionFactor { get { return 1; } }
+			public virtual double MotorwayCorrectionFactor { get { return 1; } }
+			public virtual double BFColdHot { get { return 1; } }
+			public virtual double CFRegPer { get { return 1; } }
+			public virtual double EngineeringCorrectionFactor { get { return GetDouble(XMLNames.Engine_WHRCorrectionFactor); } }
+
+			public virtual TableData GeneratedElectricPower
+			{
+				get {
+					return XMLHelper.ReadEntriesOrResource(
+						BaseNode, Source.SourcePath, XMLNames.Engine_WHRMap, XMLNames.Engine_WHRMap_Entry,
+						AttributeMappings.WHRPowerMapMapping);
+				}
+			}
+
+			#endregion
+		}
+
+
+		#region Overrides of XMLEngineeringEngineDataProviderV07
+
+		protected override XNamespace SchemaNamespace
+		{
+			get { return NAMESPACE_URI; }
+		}
+
+		#endregion
+	}
 }
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearboxDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearboxDataProvider.cs
index d80f90636c..e5e77ce40b 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearboxDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearboxDataProvider.cs
@@ -38,6 +38,8 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
 using TUGraz.VectoCore.Utils;
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs
index fd86b99ac0..f306f43cb5 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs
@@ -2,6 +2,8 @@
 using System.Xml.Linq;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Utils;
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringInputDataProvider.cs
index 3eff4a1700..37601906a3 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringInputDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringInputDataProvider.cs
@@ -4,6 +4,8 @@ using System.Xml.Linq;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
 using TUGraz.VectoCore.Utils;
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringJobInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringJobInputDataProvider.cs
index fb6bf6d176..356b55c478 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringJobInputDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringJobInputDataProvider.cs
@@ -4,6 +4,8 @@ using System.Xml;
 using System.Xml.Linq;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
 using TUGraz.VectoCore.Utils;
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringOverspeed.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringOverspeed.cs
index 49e444c047..f1dbcad829 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringOverspeed.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringOverspeed.cs
@@ -3,6 +3,8 @@ using System.Xml.Linq;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Common;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
 using TUGraz.VectoCore.Utils;
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringRetarderDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringRetarderDataProvider.cs
index 93ff4a10d4..e79d742c01 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringRetarderDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringRetarderDataProvider.cs
@@ -88,7 +88,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
 	{
 		public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
 
-		public new const string XSD_TYPE = "RetarderComponentEngineeringType";
+		public new const string XSD_TYPE = "RetarderDataEngineeringType";
 
 		public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI, XSD_TYPE);
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderInjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderInjectModule.cs
index d7bd276f70..3de51b55a6 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderInjectModule.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderInjectModule.cs
@@ -21,7 +21,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
 
 			Kernel?.Load(new INinjectModule[] {
 				new XMLEngineeringReaderV07InjectModule(),
-				new XMLEngineeringReaderV10InjectModule()}
+				new XMLEngineeringReaderV10InjectModule(),
+				new XMLEngineeringReaderV11InjectModule()
+				}
 			);
 
 		}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV10InjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV10InjectModule.cs
index 1e3fb9010b..65c6ec958d 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV10InjectModule.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV10InjectModule.cs
@@ -1,4 +1,5 @@
-using Ninject.Modules;
+using System;
+using Ninject.Modules;
 using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider;
 using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Impl;
 using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
@@ -92,4 +93,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.NinjectModules
 
 		#endregion
 	}
+
+	public class XMLEngineeringReaderV11InjectModule : NinjectModule
+	{
+		public override void Load()
+		{
+			Bind<IXMLEngineData>().To<XMLEngineeringEngineDataProviderV11>()
+								.Named(XMLEngineeringEngineDataProviderV11.QUALIFIED_XSD_TYPE);
+
+		}
+	}
 }
diff --git a/VectoCore/VectoCore/Models/Declaration/FuelData.cs b/VectoCore/VectoCore/Models/Declaration/FuelData.cs
index c84721a1ab..28fdd936fc 100644
--- a/VectoCore/VectoCore/Models/Declaration/FuelData.cs
+++ b/VectoCore/VectoCore/Models/Declaration/FuelData.cs
@@ -69,14 +69,14 @@ namespace TUGraz.VectoCore.Models.Declaration
 		{
 			var entries = _data.FindAll(x => x.FuelType == fuelType);
 			if (entries.Count == 0) {
-				throw new VectoException(ErrorMessage, fuelType.ToString(), tankSystem?.ToString() ?? "");
+				throw new VectoException(ErrorMessage, fuelType.ToString(), tankSystem?.ToString() ?? "<no tank system specified>");
 			}
 
 			if (entries.Count > 1) {
 				entries = entries.FindAll(x => x.TankSystem == tankSystem);
 			}
 			if (entries.Count == 0) {
-				throw new VectoException(ErrorMessage, fuelType.ToString(), tankSystem?.ToString() ?? "");
+				throw new VectoException(ErrorMessage, fuelType.ToString(), tankSystem?.ToString() ?? "<no tank system specified>");
 			}
 
 			return entries.First();
diff --git a/VectoCore/VectoCore/Resources/Declaration/FuelTypes.csv b/VectoCore/VectoCore/Resources/Declaration/FuelTypes.csv
index 55f8e2a2aa..5e728d58aa 100644
--- a/VectoCore/VectoCore/Resources/Declaration/FuelTypes.csv
+++ b/VectoCore/VectoCore/Resources/Declaration/FuelTypes.csv
@@ -6,5 +6,5 @@ Ethanol PI ,            , 786                 , 2.10
 LPG PI     ,            ,                     , 3.02                              , 46000                 , 46000
 NG PI      , compressed ,                     , 2.69                              , 45100                 , 48000
 NG PI      , liquefied  ,                     , 2.77                              , 45100                 , 49100
-##NG CI      , compressed ,                     , 1000                              , 100000                , 100000
-##NG CI      , liquefied  ,                     , 1000                              , 100000                , 100000
\ No newline at end of file
+NG CI      , compressed ,                     , 2.69                              , 45100                 , 48000
+NG CI      , liquefied  ,                     , 2.77                              , 45100                 , 49100
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Utils/XMLDefinitions.cs b/VectoCore/VectoCore/Utils/XMLDefinitions.cs
index 548fd4f5cd..7a5b6b6782 100644
--- a/VectoCore/VectoCore/Utils/XMLDefinitions.cs
+++ b/VectoCore/VectoCore/Utils/XMLDefinitions.cs
@@ -34,6 +34,8 @@ namespace TUGraz.VectoCore.Utils
 		
 		public const string ENGINEERING_DEFINITONS_NAMESPACE_V10 = ENGINEERING_NAMESPACE + ":v1.0";
 
+		public const string ENGINEERING_DEFINITONS_NAMESPACE_V11 = ENGINEERING_NAMESPACE + ":v1.1";
+
 		public const string ENGINEERING_DEFINITONS_NAMESPACE_V10_TEST = ENGINEERING_NAMESPACE + ":v1.0TEST";
 
 
diff --git a/VectoCore/VectoCore/Utils/XMLValidator.cs b/VectoCore/VectoCore/Utils/XMLValidator.cs
index 01c3532c12..cf7f1cb403 100644
--- a/VectoCore/VectoCore/Utils/XMLValidator.cs
+++ b/VectoCore/VectoCore/Utils/XMLValidator.cs
@@ -104,7 +104,7 @@ namespace TUGraz.VectoCore.Utils
 		public static void CallBackExceptionOnError(XmlSeverityType severity, ValidationEvent evt)
 		{
 			if (severity == XmlSeverityType.Error) {
-				throw new VectoException("Validation error: {0}", evt.ValidationEventArgs.Message);
+				throw new VectoException("Validation error: {0}", evt?.ValidationEventArgs?.Message ?? "XML schema not known");
 			}
 		}
 
diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj
index 232ba5646c..b0002dda06 100644
--- a/VectoCore/VectoCore/VectoCore.csproj
+++ b/VectoCore/VectoCore/VectoCore.csproj
@@ -136,8 +136,8 @@
     <Compile Include="InputData\FileIO\JSON\JSONComponentInputData.cs" />
     <Compile Include="InputData\FileIO\JSON\JsonExtensionMethods.cs" />
     <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\AbstractCommonComponentType.cs" />
-    <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\AbstractXMLResource.cs" />
-    <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\AbstractXMLType.cs" />
+    <Compile Include="InputData\FileIO\XML\Common\AbstractXMLResource.cs" />
+    <Compile Include="InputData\FileIO\XML\Common\AbstractXMLType.cs" />
     <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLAuxiliaryDeclarationDataProvider.cs" />
     <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationADASDataProvider.cs" />
     <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationAirdragDataProvider.cs" />
@@ -191,7 +191,6 @@
     <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\AbstractCommonComponentType.cs" />
     <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\AbstractEngineeringXMLComponentDataProvider.cs" />
     <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\AbstractVehicleEngineeringType.cs" />
-    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\AbstractXMLType.cs" />
     <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLCyclesDataProvider.cs" />
     <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLDriverAcceleration.cs" />
     <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringAirdragDataProvider.cs" />
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index f5f61a20ee..8112eed9d5 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -2542,12 +2542,18 @@
     <None Include="TestData\XML\XMLReaderEngineering\dummy.vaux">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="TestData\XML\XMLReaderEngineering\engine_WHR.vmap">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Include="TestData\XML\XMLReaderEngineering\engine.vfld">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
     <None Include="TestData\XML\XMLReaderEngineering\engine.vmap">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="TestData\XML\XMLReaderEngineering\engine_DF.vmap">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Include="TestData\XML\XMLReaderEngineering\GBX_DirectGear.vtlm">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
@@ -2980,6 +2986,9 @@
     <Content Include="TestData\XML\XMLReaderEngineering\engineering_axlegear-sample_ref.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="TestData\XML\XMLReaderEngineering\engineering_engine-sample_ref_DF_WHR.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="TestData\XML\XMLReaderEngineering\engineering_engine-sample_ref.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
@@ -2995,6 +3004,9 @@
     <Content Include="TestData\XML\XMLReaderEngineering\engineering_job-sample_FULL.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="TestData\XML\XMLReaderEngineering\engineering_job-sample_ref_DF_WHR.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="TestData\XML\XMLReaderEngineering\engineering_job-sample_ref.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
@@ -3004,6 +3016,9 @@
     <Content Include="TestData\XML\XMLReaderEngineering\engineering_torqueconverter-sample_ref.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="TestData\XML\XMLReaderEngineering\engineering_vehicle_ref_DF_WHR.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="TestData\XML\XMLReaderEngineering\engineering_vehicle_ref.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-- 
GitLab