diff --git a/VECTO.sln b/VECTO.sln
index f368a7cfa675a942f32fac4d8d2d66d5c04fecb1..229fc267a786be62817c49b1440a9c9eb4cbcc42 100644
--- a/VECTO.sln
+++ b/VECTO.sln
@@ -69,6 +69,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HashingCmd", "HashingCmd\Ha
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Article10Notifications", "..\VECTO-Article10\Article10Notifications\Article10Notifications.csproj", "{EF99431D-4227-44C3-B2BD-DE8AE3E672CA}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VECTO_GIT", "..\STUDENTEN_PROJEKTE\Kober_VectoGIT\VECTO_GIT\VECTO_GIT\VECTO_GIT.csproj", "{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug PerformanceStats|Any CPU = Debug PerformanceStats|Any CPU
@@ -724,6 +726,48 @@ Global
 		{EF99431D-4227-44C3-B2BD-DE8AE3E672CA}.ReleaseTUG|x64.Build.0 = Release|Any CPU
 		{EF99431D-4227-44C3-B2BD-DE8AE3E672CA}.ReleaseTUG|x86.ActiveCfg = Release|Any CPU
 		{EF99431D-4227-44C3-B2BD-DE8AE3E672CA}.ReleaseTUG|x86.Build.0 = Release|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Debug PerformanceStats|Any CPU.ActiveCfg = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Debug PerformanceStats|Any CPU.Build.0 = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Debug PerformanceStats|x64.ActiveCfg = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Debug PerformanceStats|x64.Build.0 = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Debug PerformanceStats|x86.ActiveCfg = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Debug PerformanceStats|x86.Build.0 = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Debug PerformanceTrace|Any CPU.ActiveCfg = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Debug PerformanceTrace|Any CPU.Build.0 = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Debug PerformanceTrace|x64.ActiveCfg = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Debug PerformanceTrace|x64.Build.0 = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Debug PerformanceTrace|x86.ActiveCfg = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Debug PerformanceTrace|x86.Build.0 = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Debug|x64.Build.0 = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Debug|x86.Build.0 = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.DebugTUG|Any CPU.ActiveCfg = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.DebugTUG|Any CPU.Build.0 = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.DebugTUG|x64.Build.0 = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.DebugTUG|x86.Build.0 = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Deploy|Any CPU.Build.0 = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Deploy|x64.ActiveCfg = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Deploy|x64.Build.0 = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Deploy|x86.ActiveCfg = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Deploy|x86.Build.0 = Debug|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Release|x64.ActiveCfg = Release|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Release|x64.Build.0 = Release|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Release|x86.ActiveCfg = Release|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.Release|x86.Build.0 = Release|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.ReleaseTUG|Any CPU.ActiveCfg = Release|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.ReleaseTUG|Any CPU.Build.0 = Release|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.ReleaseTUG|x64.ActiveCfg = Release|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.ReleaseTUG|x64.Build.0 = Release|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.ReleaseTUG|x86.ActiveCfg = Release|Any CPU
+		{A684BC49-C9B3-4C0C-8D2E-A13077853EDA}.ReleaseTUG|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/VectoCommon/VectoCommon/InputData/DigestData.cs b/VectoCommon/VectoCommon/InputData/DigestData.cs
new file mode 100644
index 0000000000000000000000000000000000000000..20f7568d7a66007c1dec334d164d5d48cb9a546d
--- /dev/null
+++ b/VectoCommon/VectoCommon/InputData/DigestData.cs
@@ -0,0 +1,80 @@
+using System.Collections.Generic;
+using System.Xml;
+using System.Xml.Linq;
+using System.Xml.XPath;
+
+namespace TUGraz.VectoCommon.InputData {
+	public class DigestData
+	{
+		private const string ReferenceElementXPath = ".//*[local-name()='Reference']";
+		private const string TransformElementXPath = ".//*[local-name()='Transform']";
+		private const string DigestMethodElementXPath = ".//*[local-name()='DigestMethod']";
+
+		private const string UriAttr = "URI";
+		private const string AlgorithmAttr = "Algorithm";
+
+		private const string ReferenceUriAttrXPath = ReferenceElementXPath + "/@" + UriAttr;
+		private const string TransformAlgorithmAttrXPath = TransformElementXPath + "/@" + AlgorithmAttr;
+		private const string DigestMethodAlgorithmAttrXPath = DigestMethodElementXPath + "/@" + AlgorithmAttr;
+		private const string DigestValueElementXPath = ".//*[local-name()='DigestValue']";
+
+		public DigestData(string reference, string[] c14n, string digestMethod, string digestValue)
+		{
+			Reference = reference;
+			CanonicalizationMethods = c14n;
+			DigestMethod = digestMethod;
+			DigestValue = digestValue;
+		}
+
+		public DigestData(XPathNavigator navigator)
+		{
+			Reference = navigator.SelectSingleNode(ReferenceUriAttrXPath)?.InnerXml;
+			var nodes = navigator.Select(TransformAlgorithmAttrXPath);
+			var c14n = new List<string>();
+			while (nodes.MoveNext()) {
+				c14n.Add(nodes.Current.InnerXml);
+			}
+			CanonicalizationMethods = c14n.ToArray();
+			DigestMethod = navigator.SelectSingleNode(DigestMethodAlgorithmAttrXPath)?.InnerXml;
+			DigestValue = navigator.SelectSingleNode(DigestValueElementXPath)?.InnerXml;
+		}
+
+		public DigestData(XmlNode xmlNode)
+		{
+			Reference = xmlNode.SelectSingleNode(ReferenceUriAttrXPath)?.InnerXml;
+			var nodes = xmlNode.SelectNodes(TransformAlgorithmAttrXPath);
+			var c14n = new List<string>();
+			if (nodes != null) {
+				for (var i = 0; i < nodes.Count; i++) {
+					c14n.Add(nodes[i].InnerXml);
+				}
+			}
+			CanonicalizationMethods = c14n.ToArray();
+			DigestMethod = xmlNode.SelectSingleNode(DigestMethodAlgorithmAttrXPath)?.InnerXml;
+			DigestValue = xmlNode.SelectSingleNode(DigestValueElementXPath)?.InnerXml;
+		}
+
+		public DigestData(XNode xmlNode)
+		{
+			Reference = xmlNode.XPathSelectElement(ReferenceElementXPath)?.Attribute(XName.Get(UriAttr))?.Value;
+			var nodes = xmlNode.XPathSelectElements(TransformElementXPath);
+			var c14n = new List<string>();
+
+			foreach (var node in nodes) {
+				c14n.Add(node.Attribute(XName.Get(AlgorithmAttr))?.Value);
+			}
+
+			CanonicalizationMethods = c14n.ToArray();
+			DigestMethod = xmlNode.XPathSelectElement(DigestMethodElementXPath)?.Attribute(XName.Get(AlgorithmAttr))?.Value;
+			DigestValue = xmlNode.XPathSelectElement(DigestValueElementXPath)?.Value;
+		}
+
+		public string DigestValue { get; }
+
+		public string Reference { get; }
+
+		public string[] CanonicalizationMethods { get; }
+		public string DigestMethod { get; }
+
+	}
+}
\ No newline at end of file
diff --git a/VectoCommon/VectoCommon/InputData/VTPDeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/VTPDeclarationInputData.cs
index 7d068d7d91891989938a7c543dc9ca63d30784de..9fc2ccc636f2173964d2b5a59b590ba792e8f7a3 100644
--- a/VectoCommon/VectoCommon/InputData/VTPDeclarationInputData.cs
+++ b/VectoCommon/VectoCommon/InputData/VTPDeclarationInputData.cs
@@ -30,8 +30,7 @@
 */
 
 using System.Collections.Generic;
-using System.Xml;
-using System.Xml.XPath;
+using System.Linq;
 using TUGraz.VectoCommon.Hashing;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoHashing;
@@ -73,56 +72,4 @@ namespace TUGraz.VectoCommon.InputData
 
 		DigestData JobDigest { get; }
 	}
-
-	public class DigestData
-	{
-		private const string ReferenceQueryXPath = ".//*[local-name()='Reference']/@URI";
-		private const string AlgorithmQueryXPath = ".//*[local-name()='Transform']/@Algorithm";
-		private const string DigestMethodQueryXPath = ".//*[local-name()='DigestMethod']/@Algorithm";
-		private const string DigestValueQuerXPath = ".//*[local-name()='DigestValue']";
-
-		public DigestData(string reference, string[] c14n, string digestMethod, string digestValue)
-		{
-			Reference = reference;
-			CanonicalizationMethods = c14n;
-			DigestMethod = digestMethod;
-			DigestValue = digestValue;
-		}
-
-		public DigestData(XPathNavigator navigator)
-		{
-			Reference = navigator.SelectSingleNode(ReferenceQueryXPath)?.InnerXml;
-			var nodes = navigator.Select(AlgorithmQueryXPath);
-			var c14n = new List<string>();
-			while (nodes.MoveNext()) {
-				c14n.Add(nodes.Current.InnerXml);
-			}
-			CanonicalizationMethods = c14n.ToArray();
-			DigestMethod = navigator.SelectSingleNode(DigestMethodQueryXPath)?.InnerXml;
-			DigestValue = navigator.SelectSingleNode(DigestValueQuerXPath)?.InnerXml;
-		}
-
-		public DigestData(XmlNode xmlNode)
-		{
-			Reference = xmlNode.SelectSingleNode(ReferenceQueryXPath)?.InnerXml;
-			var nodes = xmlNode.SelectNodes(AlgorithmQueryXPath);
-			var c14n = new List<string>();
-			if (nodes != null) {
-				for (var i = 0; i < nodes.Count; i++) {
-					c14n.Add(nodes[i].InnerXml);
-				}
-			}
-			CanonicalizationMethods = c14n.ToArray();
-			DigestMethod = xmlNode.SelectSingleNode(DigestMethodQueryXPath)?.InnerXml;
-			DigestValue = xmlNode.SelectSingleNode(DigestValueQuerXPath)?.InnerXml;
-		}
-
-		public string DigestValue { get; }
-
-		public string Reference { get; }
-
-		public string[] CanonicalizationMethods { get; }
-		public string DigestMethod { get; }
-
-	}
 }
diff --git a/VectoCommon/VectoCommon/VectoCommon.csproj b/VectoCommon/VectoCommon/VectoCommon.csproj
index 17342123e9971a8b6d7baca0e4332c1d4418da65..298bb028ec8c7d1d6834302e47dae3e564b5294e 100644
--- a/VectoCommon/VectoCommon/VectoCommon.csproj
+++ b/VectoCommon/VectoCommon/VectoCommon.csproj
@@ -53,6 +53,7 @@
     <Compile Include="Hashing\IVectoHash.cs" />
     <Compile Include="Hashing\VectoComponents.cs" />
     <Compile Include="InputData\DataSourceType.cs" />
+    <Compile Include="InputData\DigestData.cs" />
     <Compile Include="InputData\TableData.cs">
       <SubType>Component</SubType>
     </Compile>
diff --git a/VectoCore/VectoCore/Configuration/Constants.cs b/VectoCore/VectoCore/Configuration/Constants.cs
index c2ab1fa9bbff6d924021407485c279c608b99010..13c86c1ba175a202c0a6f6f2bafd67cc048ae12e 100644
--- a/VectoCore/VectoCore/Configuration/Constants.cs
+++ b/VectoCore/VectoCore/Configuration/Constants.cs
@@ -175,6 +175,8 @@ namespace TUGraz.VectoCore.Configuration
 			public const string VectoDeclarationDefinitionsNS =
 				"urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v" + XSDDeclarationVersion;
 
+			public const string VectoDeclarationComponentNS = "urn:tugraz:ivt:VectoAPI:DeclarationComponent:v" + XSDDeclarationVersion;
+
 			public const string VectoEngineeringDefinitionsNS =
 				"urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v" + XSDEngineeringVersion;
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAirdragDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAirdragDataProvider.cs
index 3316bad53e7958b95d6721941ae462f815a140d4..5fd01fd3643afd6794dcb02dedd910e9e9a364a4 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAirdragDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAirdragDataProvider.cs
@@ -29,10 +29,16 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
+using System;
+using System.Xml;
+using System.Xml.Linq;
+using System.Xml.XPath;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 {
@@ -48,6 +54,23 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 				XMLNames.ComponentDataWrapper);
 		}
 
+		public XMLDeclarationAirdragDataProvider(XDocument xml)
+		{
+			if (xml.Document == null) {
+				throw new ArgumentException("No Document found");
+			}
+			Navigator = xml.Document.CreateNavigator();
+			Manager = new XmlNamespaceManager(Navigator.NameTable ?? new NameTable());
+			Helper = new XPathHelper(ExecutionMode.Declaration);
+			Manager.AddNamespace(Constants.XML.DeclarationNSPrefix, Constants.XML.VectoDeclarationDefinitionsNS);
+			Manager.AddNamespace(Constants.XML.RootNSPrefix, Constants.XML.VectoDeclarationComponentNS);
+
+			XBasePath = Helper.Query(Helper.NSPrefix(XMLNames.VectoInputDeclaration, Constants.XML.RootNSPrefix),
+									Helper.NSPrefix(XMLNames.Component_AirDrag, Constants.XML.RootNSPrefix),
+									XMLNames.ComponentDataWrapper);
+			SourceType = DataSourceType.Embedded;
+		}
+
 		public new CertificationMethod CertificationMethod
 		{
 			get { return CertificationMethod.Measured; }
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAngledriveDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAngledriveDataProvider.cs
index c7a7a2a43ced783bb0486c2d488de3a1900a807d..7304e62304038e86249ff15a0dbc01d29d5605f3 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAngledriveDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAngledriveDataProvider.cs
@@ -29,11 +29,17 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
+using System;
+using System.Xml;
+using System.Xml.Linq;
+using System.Xml.XPath;
 using TUGraz.IVT.VectoXML;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 {
@@ -47,6 +53,23 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 				XMLNames.ComponentDataWrapper);
 		}
 
+		public XMLDeclarationAngledriveDataProvider(XDocument xml)
+		{
+			if (xml.Document == null) {
+				throw new ArgumentException("No Document found");
+			}
+			Navigator = xml.Document.CreateNavigator();
+			Manager = new XmlNamespaceManager(Navigator.NameTable ?? new NameTable());
+			Helper = new XPathHelper(ExecutionMode.Declaration);
+			Manager.AddNamespace(Constants.XML.DeclarationNSPrefix, Constants.XML.VectoDeclarationDefinitionsNS);
+			Manager.AddNamespace(Constants.XML.RootNSPrefix, Constants.XML.VectoDeclarationComponentNS);
+
+			XBasePath = Helper.Query(Helper.NSPrefix(XMLNames.VectoInputDeclaration, Constants.XML.RootNSPrefix),
+									Helper.NSPrefix(XMLNames.Component_Angledrive, Constants.XML.RootNSPrefix),
+									XMLNames.ComponentDataWrapper);
+			SourceType = DataSourceType.Embedded;
+		}
+
 		public AngledriveType Type
 		{
 			get { return InputData.XMLJob.XMLVehicle.AngulargearType; }
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAxlegearDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAxlegearDataProvider.cs
index 21911f8e28cec6f1d0c14f15ca4af8e8b2dce3a0..e2366ed8d9f6a0f0b6a3da0566264bca0a9eca20 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAxlegearDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAxlegearDataProvider.cs
@@ -29,50 +29,73 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
-using TUGraz.IVT.VectoXML;
-using TUGraz.VectoCommon.Exceptions;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
-{
-	public class XMLDeclarationAxlegearDataProvider : AbstractDeclarationXMLComponentDataProvider, IAxleGearInputData
-	{
-		public XMLDeclarationAxlegearDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider)
-			: base(xmlInputDataProvider)
-		{
-			XBasePath = Helper.Query(VehiclePath,
-				XMLNames.Vehicle_Components,
-				XMLNames.Component_Axlegear,
-				XMLNames.ComponentDataWrapper);
-		}
-
-		public double Ratio
-		{
-			get { return GetDoubleElementValue(XMLNames.Axlegear_Ratio); }
-		}
-
-		public TableData LossMap
-		{
-			get {
-				return ReadTableData(AttributeMappings.TransmissionLossmapMapping,
-					Helper.Query(XMLNames.Axlegear_TorqueLossMap, XMLNames.Axlegear_TorqueLossMap_Entry));
-			}
-		}
-
-		public double Efficiency
-		{
-			get { throw new VectoException("Efficiency not supported in Declaration Mode!"); }
-		}
-
-		public AxleLineType LineType
-		{
-			get {
-				var value = GetElementValue(XMLNames.Axlegear_LineType);
-				return value.ParseEnum<AxleLineType>();
-			}
-		}
-	}
+using System;
+using System.Xml;
+using System.Xml.Linq;
+using System.Xml.XPath;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
+{
+	public class XMLDeclarationAxlegearDataProvider : AbstractDeclarationXMLComponentDataProvider, IAxleGearInputData
+	{
+		public XMLDeclarationAxlegearDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider)
+			: base(xmlInputDataProvider)
+		{
+			XBasePath = Helper.Query(VehiclePath,
+				XMLNames.Vehicle_Components,
+				XMLNames.Component_Axlegear,
+				XMLNames.ComponentDataWrapper);
+		}
+
+		public XMLDeclarationAxlegearDataProvider(XDocument xml)
+		{
+			if (xml.Document == null) {
+				throw new ArgumentException("No Document found");
+			}
+			Navigator = xml.Document.CreateNavigator();
+			Manager = new XmlNamespaceManager(Navigator.NameTable ?? new NameTable());
+			Helper = new XPathHelper(ExecutionMode.Declaration);
+			Manager.AddNamespace(Constants.XML.DeclarationNSPrefix, Constants.XML.VectoDeclarationDefinitionsNS);
+			Manager.AddNamespace(Constants.XML.RootNSPrefix, Constants.XML.VectoDeclarationComponentNS);
+
+			XBasePath = Helper.Query(Helper.NSPrefix(XMLNames.VectoInputDeclaration, Constants.XML.RootNSPrefix),
+									Helper.NSPrefix(XMLNames.Component_Axlegear, Constants.XML.RootNSPrefix),
+									XMLNames.ComponentDataWrapper);
+			SourceType = DataSourceType.Embedded;
+		}
+
+		public double Ratio
+		{
+			get { return GetDoubleElementValue(XMLNames.Axlegear_Ratio); }
+		}
+
+		public TableData LossMap
+		{
+			get {
+				return ReadTableData(AttributeMappings.TransmissionLossmapMapping,
+					Helper.Query(XMLNames.Axlegear_TorqueLossMap, XMLNames.Axlegear_TorqueLossMap_Entry));
+			}
+		}
+
+		public double Efficiency
+		{
+			get { throw new VectoException("Efficiency not supported in Declaration Mode!"); }
+		}
+
+		public AxleLineType LineType
+		{
+			get {
+				var value = GetElementValue(XMLNames.Axlegear_LineType);
+				return value.ParseEnum<AxleLineType>();
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationEngineDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationEngineDataProvider.cs
index 8cbde3273993228b1ddd0e46ff90e0727cd91127..877d6ed9480d455ba3e6ff8db2477fd4c535fcee 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationEngineDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationEngineDataProvider.cs
@@ -30,11 +30,16 @@
 */
 
 using System;
+using System.Xml;
+using System.Xml.Linq;
+using System.Xml.XPath;
 using TUGraz.IVT.VectoXML;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 {
@@ -50,6 +55,23 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 				XMLNames.ComponentDataWrapper);
 		}
 
+		public XMLDeclarationEngineDataProvider(XDocument xml)
+		{
+			if (xml.Document == null) {
+				throw new ArgumentException("No Document found");
+			}
+			Navigator = xml.Document.CreateNavigator();
+			Manager = new XmlNamespaceManager(Navigator.NameTable ?? new NameTable());
+			Helper = new XPathHelper(ExecutionMode.Declaration);
+			Manager.AddNamespace(Constants.XML.DeclarationNSPrefix, Constants.XML.VectoDeclarationDefinitionsNS);
+			Manager.AddNamespace(Constants.XML.RootNSPrefix, Constants.XML.VectoDeclarationComponentNS);
+
+			XBasePath = Helper.Query(Helper.NSPrefix(XMLNames.VectoInputDeclaration, Constants.XML.RootNSPrefix),
+									Helper.NSPrefix(XMLNames.Component_Engine, Constants.XML.RootNSPrefix),
+									XMLNames.ComponentDataWrapper);
+			SourceType = DataSourceType.Embedded;
+		}
+
 		public CubicMeter Displacement
 		{
 		    get { return GetDoubleElementValue(XMLNames.Engine_Displacement).SI(Unit.SI.Cubic.Centi.Meter).Cast<CubicMeter>(); }
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationGearboxDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationGearboxDataProvider.cs
index 12f5484dd9164073e44489c49de511874b0ab76f..c0e9cd2444ee748a9169cd6ec02c70fc278807d9 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationGearboxDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationGearboxDataProvider.cs
@@ -29,95 +29,116 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
-using System;
-using System.Collections.Generic;
-using System.Xml;
-using TUGraz.IVT.VectoXML;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.InputData.Impl;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
-{
-	public class XMLDeclarationGearboxDataProvider : AbstractDeclarationXMLComponentDataProvider,
-		IGearboxDeclarationInputData
-	{
-		public XMLDeclarationGearboxDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider)
-			: base(xmlInputDataProvider)
-		{
-			XBasePath = Helper.Query(VehiclePath,
-				XMLNames.Vehicle_Components,
-				XMLNames.Component_Gearbox,
-				XMLNames.ComponentDataWrapper);
-		}
-
-		public new CertificationMethod CertificationMethod
-		{
-			get { return GetElementValue(XMLNames.Component_Gearbox_CertificationMethod).ParseEnum<CertificationMethod>(); }
-		}
-
-		public GearboxType Type
-		{
-			get {
-				var value = GetElementValue(XMLNames.Gearbox_TransmissionType);
-				switch (value) {
-					case "MT":
-					case "SMT":
-						return GearboxType.MT;
-					case "AMT":
-						return GearboxType.AMT;
-					case "APT-S":
-					case "AT - Serial":
-						return GearboxType.ATSerial;
-					case "APT-P":
-					case "AT - PowerSplit":
-						return GearboxType.ATPowerSplit;
-				}
-				throw new ArgumentOutOfRangeException("GearboxType", value);
-			}
-		}
-
-		public IList<ITransmissionInputData> Gears
-		{
-			get {
-				var retVal = new List<ITransmissionInputData>();
-				var gears = Navigator.Select(
-					Helper.Query(XBasePath, XMLNames.Gearbox_Gears, XMLNames.Gearbox_Gears_Gear),
-					Manager);
-				while (gears.MoveNext()) {
-					var gear = gears.Current.GetAttribute(XMLNames.Gearbox_Gear_GearNumber_Attr, "");
-					retVal.Add(ReadGear(gear));
-				}
-				return retVal;
-			}
-		}
-
-		public ITorqueConverterDeclarationInputData TorqueConverter
-		{
-			get {
-				return new XMLDeclarationTorqueConverterDataProvider(InputData);
-			}
-		}
-
-		protected ITransmissionInputData ReadGear(string gearNr)
-		{
-			var retVal = new TransmissionInputData();
-			var gearPath = Helper.Query(XMLNames.Gearbox_Gears,
-				Helper.QueryConstraint(XMLNames.Gearbox_Gears_Gear, XMLNames.Gearbox_Gear_GearNumber_Attr, gearNr));
-			retVal.Ratio = GetDoubleElementValue(Helper.Query(gearPath, XMLNames.Gearbox_Gear_Ratio));
-			retVal.Gear = XmlConvert.ToUInt16(gearNr);
-			retVal.LossMap = ReadTableData(AttributeMappings.TransmissionLossmapMapping,
-				Helper.Query(gearPath, XMLNames.Gearbox_Gear_TorqueLossMap, XMLNames.Gearbox_Gear_TorqueLossMap_Entry));
-
-			if (ElementExists(Helper.Query(gearPath, XMLNames.Gearbox_Gears_MaxTorque))) {
-				retVal.MaxTorque = GetDoubleElementValue(Helper.Query(gearPath, XMLNames.Gearbox_Gears_MaxTorque)).SI<NewtonMeter>();
-			}
-			if (ElementExists(Helper.Query(gearPath, XMLNames.Gearbox_Gear_MaxSpeed))) {
-				retVal.MaxInputSpeed = GetDoubleElementValue(Helper.Query(gearPath, XMLNames.Gearbox_Gear_MaxSpeed)).RPMtoRad();
-			}
-			return retVal;
-		}
-	}
+using System;
+using System.Collections.Generic;
+using System.Xml;
+using System.Xml.Linq;
+using System.Xml.XPath;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.InputData.Impl;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
+{
+	public class XMLDeclarationGearboxDataProvider : AbstractDeclarationXMLComponentDataProvider,
+		IGearboxDeclarationInputData
+	{
+		public XMLDeclarationGearboxDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider)
+			: base(xmlInputDataProvider)
+		{
+			XBasePath = Helper.Query(VehiclePath,
+				XMLNames.Vehicle_Components,
+				XMLNames.Component_Gearbox,
+				XMLNames.ComponentDataWrapper);
+		}
+
+		public XMLDeclarationGearboxDataProvider(XDocument xml)
+		{
+			if (xml.Document == null) {
+				throw new ArgumentException("No Document found");
+			}
+			Navigator = xml.Document.CreateNavigator();
+			Manager = new XmlNamespaceManager(Navigator.NameTable ?? new NameTable());
+			Helper = new XPathHelper(ExecutionMode.Declaration);
+			Manager.AddNamespace(Constants.XML.DeclarationNSPrefix, Constants.XML.VectoDeclarationDefinitionsNS);
+			Manager.AddNamespace(Constants.XML.RootNSPrefix, Constants.XML.VectoDeclarationComponentNS);
+
+			XBasePath = Helper.Query(Helper.NSPrefix(XMLNames.VectoInputDeclaration, Constants.XML.RootNSPrefix),
+									Helper.NSPrefix(XMLNames.Component_Gearbox, Constants.XML.RootNSPrefix),
+									XMLNames.ComponentDataWrapper);
+			SourceType = DataSourceType.Embedded;
+		}
+
+		public new CertificationMethod CertificationMethod
+		{
+			get { return GetElementValue(XMLNames.Component_Gearbox_CertificationMethod).ParseEnum<CertificationMethod>(); }
+		}
+
+		public GearboxType Type
+		{
+			get {
+				var value = GetElementValue(XMLNames.Gearbox_TransmissionType);
+				switch (value) {
+					case "MT":
+					case "SMT":
+						return GearboxType.MT;
+					case "AMT":
+						return GearboxType.AMT;
+					case "APT-S":
+					case "AT - Serial":
+						return GearboxType.ATSerial;
+					case "APT-P":
+					case "AT - PowerSplit":
+						return GearboxType.ATPowerSplit;
+				}
+				throw new ArgumentOutOfRangeException("GearboxType", value);
+			}
+		}
+
+		public IList<ITransmissionInputData> Gears
+		{
+			get {
+				var retVal = new List<ITransmissionInputData>();
+				var gears = Navigator.Select(
+					Helper.Query(XBasePath, XMLNames.Gearbox_Gears, XMLNames.Gearbox_Gears_Gear),
+					Manager);
+				while (gears.MoveNext()) {
+					var gear = gears.Current.GetAttribute(XMLNames.Gearbox_Gear_GearNumber_Attr, "");
+					retVal.Add(ReadGear(gear));
+				}
+				return retVal;
+			}
+		}
+
+		public ITorqueConverterDeclarationInputData TorqueConverter
+		{
+			get {
+				return new XMLDeclarationTorqueConverterDataProvider(InputData);
+			}
+		}
+
+		protected ITransmissionInputData ReadGear(string gearNr)
+		{
+			var retVal = new TransmissionInputData();
+			var gearPath = Helper.Query(XMLNames.Gearbox_Gears,
+				Helper.QueryConstraint(XMLNames.Gearbox_Gears_Gear, XMLNames.Gearbox_Gear_GearNumber_Attr, gearNr));
+			retVal.Ratio = GetDoubleElementValue(Helper.Query(gearPath, XMLNames.Gearbox_Gear_Ratio));
+			retVal.Gear = XmlConvert.ToUInt16(gearNr);
+			retVal.LossMap = ReadTableData(AttributeMappings.TransmissionLossmapMapping,
+				Helper.Query(gearPath, XMLNames.Gearbox_Gear_TorqueLossMap, XMLNames.Gearbox_Gear_TorqueLossMap_Entry));
+
+			if (ElementExists(Helper.Query(gearPath, XMLNames.Gearbox_Gears_MaxTorque))) {
+				retVal.MaxTorque = GetDoubleElementValue(Helper.Query(gearPath, XMLNames.Gearbox_Gears_MaxTorque)).SI<NewtonMeter>();
+			}
+			if (ElementExists(Helper.Query(gearPath, XMLNames.Gearbox_Gear_MaxSpeed))) {
+				retVal.MaxInputSpeed = GetDoubleElementValue(Helper.Query(gearPath, XMLNames.Gearbox_Gear_MaxSpeed)).RPMtoRad();
+			}
+			return retVal;
+		}
+	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationRetarderDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationRetarderDataProvider.cs
index b26ec24374aa7eccd72b727c6f2ca4c64b1dd187..be89789219d00e33627a2d36138eab0d33aa5f14 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationRetarderDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationRetarderDataProvider.cs
@@ -29,15 +29,24 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
+using System;
+using System.Xml;
+using System.Xml.Linq;
+using System.Xml.XPath;
 using TUGraz.IVT.VectoXML;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 {
 	public class XMLDeclarationRetarderDataProvider : AbstractDeclarationXMLComponentDataProvider, IRetarderInputData
 	{
+		private RetarderType? _type;
+		private double? _ratio;
+
 		public XMLDeclarationRetarderDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider) : base(xmlInputDataProvider)
 		{
 			XBasePath = Helper.Query(VehiclePath,
@@ -46,6 +55,24 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 				XMLNames.ComponentDataWrapper);
 		}
 
+		public XMLDeclarationRetarderDataProvider(XDocument xml, RetarderType type, double ratio)
+		{
+			_type = type;
+			_ratio = ratio;
+			if (xml.Document != null) {
+				Navigator = xml.Document.CreateNavigator();
+				Manager = new XmlNamespaceManager(Navigator.NameTable ?? new NameTable());
+				Helper = new XPathHelper(ExecutionMode.Declaration);
+				Manager.AddNamespace(Constants.XML.DeclarationNSPrefix, Constants.XML.VectoDeclarationDefinitionsNS);
+				Manager.AddNamespace(Constants.XML.RootNSPrefix, Constants.XML.VectoDeclarationComponentNS);
+
+				XBasePath = Helper.Query(Helper.NSPrefix(XMLNames.VectoInputDeclaration, Constants.XML.RootNSPrefix),
+										Helper.NSPrefix(XMLNames.Component_Retarder, Constants.XML.RootNSPrefix),
+										XMLNames.ComponentDataWrapper);
+				SourceType = DataSourceType.Embedded;
+			}	
+		}
+
 
 		public override bool SavedInDeclarationMode
 		{
@@ -54,12 +81,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 
 		public RetarderType Type
 		{
-			get { return InputData.XMLJob.XMLVehicle.RetarderType; }
+			get { return _type ?? InputData.XMLJob.XMLVehicle.RetarderType; }
 		}
 
 		public double Ratio
 		{
-			get { return InputData.XMLJob.XMLVehicle.RetarderRatio; }
+			get { return _ratio ?? InputData.XMLJob.XMLVehicle.RetarderRatio; }
 		}
 
 		public TableData LossMap
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationTorqueConverterDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationTorqueConverterDataProvider.cs
index d58fc85465b5d6133a8f8a3ba4dd6136234d1866..902f4c539fce79a068b8cebe4bc84d20153c1b1c 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationTorqueConverterDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationTorqueConverterDataProvider.cs
@@ -29,9 +29,16 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
+using System;
+using System.Xml;
+using System.Xml.Linq;
+using System.Xml.XPath;
 using TUGraz.IVT.VectoXML;
 using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 {
@@ -48,6 +55,23 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 				XMLNames.ComponentDataWrapper);
 		}
 
+		public XMLDeclarationTorqueConverterDataProvider(XDocument xml)
+		{
+			if (xml.Document == null) {
+				throw new ArgumentException("No Document found");
+			}
+			Navigator = xml.Document.CreateNavigator();
+			Manager = new XmlNamespaceManager(Navigator.NameTable ?? new NameTable());
+			Helper = new XPathHelper(ExecutionMode.Declaration);
+			Manager.AddNamespace(Constants.XML.DeclarationNSPrefix, Constants.XML.VectoDeclarationDefinitionsNS);
+			Manager.AddNamespace(Constants.XML.RootNSPrefix, Constants.XML.VectoDeclarationComponentNS);
+
+			XBasePath = Helper.Query(Helper.NSPrefix(XMLNames.VectoInputDeclaration, Constants.XML.RootNSPrefix),
+									Helper.NSPrefix(XMLNames.Component_TorqueConverter, Constants.XML.RootNSPrefix),
+									XMLNames.ComponentDataWrapper);
+			SourceType = DataSourceType.Embedded;
+		}
+
 		public TableData TCData
 		{
 			get
diff --git a/VectoCore/VectoCore/InputData/Impl/InputData.cs b/VectoCore/VectoCore/InputData/Impl/InputData.cs
index e38d027ea1133dd249642316628aa638ad877d42..5c083991994a2f7bd350743b6f4d5985ff41c938 100644
--- a/VectoCore/VectoCore/InputData/Impl/InputData.cs
+++ b/VectoCore/VectoCore/InputData/Impl/InputData.cs
@@ -148,9 +148,9 @@ namespace TUGraz.VectoCore.InputData.Impl
 
 		public string ID { get; internal set; }
 
-		public AuxiliaryType Type { get; internal set; }
+		public AuxiliaryType Type { get; set; }
 
-		public IList<string> Technology { get; internal set; }
+		public IList<string> Technology { get; set; }
 
 		public double TransmissionRatio { get; internal set; }
 
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs
index fc23ef472f843b2f32945cefc55049047ee65079..502dfae3a8170391f98fe93aa24b2bbb4e47fc29 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs
@@ -232,7 +232,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 		internal AngledriveData DoCreateAngledriveData(IAngledriveInputData data, bool useEfficiencyFallback)
 		{
 			try {
-				var type = data.Type;
+				var type = data?.Type ?? AngledriveType.None;
 
 				switch (type) {
 					case AngledriveType.LossesIncludedInGearbox:
diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
index 110f19c87b1d15376c60b13b869bb64cb0892af7..d6780113b21702921046a34ff32318c4523e2044 100644
--- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
+++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
@@ -188,8 +188,8 @@ namespace TUGraz.VectoCore.Models.Declaration
 			private const double ShiftPolygonEngineFldMargin = 0.98;
 
 			public static readonly Second MinTimeBetweenGearshifts = 1.5.SI<Second>();
-			public static readonly Second DownshiftAfterUpshiftDelay = 10.SI<Second>();
-			public static readonly Second UpshiftAfterDownshiftDelay = 10.SI<Second>();
+			public static readonly Second DownshiftAfterUpshiftDelay = 6.SI<Second>();
+			public static readonly Second UpshiftAfterDownshiftDelay = 6.SI<Second>();
 
 			public static readonly MeterPerSquareSecond UpshiftMinAcceleration = 0.1.SI<MeterPerSquareSecond>();
 
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs
index d3b575effe338fed76a32b1ca040e6f010b80d9d..e88ef84be88c91958a4ccb17dbb0af09fa05dff8 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs
@@ -392,7 +392,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			var lastGear = Gear;
 			Gear = DataBus.VehicleStopped
 				? _strategy.InitGear(absTime, dt, outTorque, outAngularVelocity)
-				: _strategy.Engage(absTime, dt, outTorque, outAngularVelocity);
+				: _strategy.Engage(absTime, dt, outTorque, VectoMath.Min(PreviousState.OutAngularVelocity, outAngularVelocity));
 			if (!DataBus.VehicleStopped) {
 				if (Gear > lastGear) {
 					LastUpshift = absTime;
diff --git a/VectoCore/VectoCore/Properties/AssemblyInfo.cs b/VectoCore/VectoCore/Properties/AssemblyInfo.cs
index 55a5acd245f5a6840c4984f5bc662724c338a162..4ef07debd6733aeeb2c5c088ba64d6be186fdaa3 100644
--- a/VectoCore/VectoCore/Properties/AssemblyInfo.cs
+++ b/VectoCore/VectoCore/Properties/AssemblyInfo.cs
@@ -50,4 +50,5 @@ using System.Runtime.InteropServices;
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("VectoCoreTest")]
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("VectoAPITest")]
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("VectoXML")]
-[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("XMLTest")]
\ No newline at end of file
+[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("XMLTest")]
+[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("VECTO_GIT")]
diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/NaturalGasVehicles.cs b/VectoCore/VectoCoreTest/Integration/Declaration/NaturalGasVehicles.cs
index bfa47d417a099e8b7dd82c4e7a2104eff0cf6062..fa82837c5836ffcd44e84289fc41f2c9d3ae5e86 100644
--- a/VectoCore/VectoCoreTest/Integration/Declaration/NaturalGasVehicles.cs
+++ b/VectoCore/VectoCoreTest/Integration/Declaration/NaturalGasVehicles.cs
@@ -65,8 +65,8 @@ namespace TUGraz.VectoCore.Tests.Integration.Declaration
 		[
 		 TestCase(Class5NG, 2, TankSystem.Liquefied, 253.8, 703.0, TestName = "Class5 LNG 2"),
 		 TestCase(Class5NG, 2, TankSystem.Compressed, 259.6, 698.3, TestName = "Class5 CNG 2"),
-		TestCase(Class5NG, 6, TankSystem.Liquefied, 253.0, 700.7, TestName = "Class5 LNG 6"),
-		TestCase(Class5NG, 6, TankSystem.Compressed, 258.8, 696.1, TestName = "Class5 CNG 6"),
+		TestCase(Class5NG, 6, TankSystem.Liquefied, 253.2, 701.3, TestName = "Class5 LNG 6"),
+		TestCase(Class5NG, 6, TankSystem.Compressed, 259.0, 696.7, TestName = "Class5 CNG 6"),
 			]
 		public void NaturalGasTankSystemTest(string filename, int runIdx, TankSystem tankSystem, double expectedFc, double expectedCo2)
 		{
diff --git a/VectoCore/VectoCoreTest/Integration/TorqueLimitsTest.cs b/VectoCore/VectoCoreTest/Integration/TorqueLimitsTest.cs
index 121263d734dd42519c7f3bdee96ce481188e4dc5..5200c206f6eb15e4b93f543550c91236430d88a5 100644
--- a/VectoCore/VectoCoreTest/Integration/TorqueLimitsTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/TorqueLimitsTest.cs
@@ -256,11 +256,11 @@ namespace TUGraz.VectoCore.Tests.Integration
 			var view = new DataView(sumData.Table, "", SummaryDataContainer.SORT, DataViewRowState.CurrentRows).ToTable();
 			Console.WriteLine(string.Join("; ", view.AsEnumerable().Select(x => x[SummaryDataContainer.FCMAP_KM].ToString().ToDouble())));
 			Assert.AreEqual(201.39195, view.Rows[0][SummaryDataContainer.FCMAP_KM].ToString().ToDouble(), 1e-3);
-			Assert.AreEqual(239.28546, view.Rows[1][SummaryDataContainer.FCMAP_KM].ToString().ToDouble(), 1e-3);
-			Assert.AreEqual(170.16912, view.Rows[2][SummaryDataContainer.FCMAP_KM].ToString().ToDouble(), 1e-3);
-			Assert.AreEqual(183.03651, view.Rows[3][SummaryDataContainer.FCMAP_KM].ToString().ToDouble(), 1e-3);
-			Assert.AreEqual(224.25062, view.Rows[4][SummaryDataContainer.FCMAP_KM].ToString().ToDouble(), 1e-3);
-			Assert.AreEqual(254.50948, view.Rows[5][SummaryDataContainer.FCMAP_KM].ToString().ToDouble(), 1e-3);
+			Assert.AreEqual(239.50432, view.Rows[1][SummaryDataContainer.FCMAP_KM].ToString().ToDouble(), 1e-3);
+			Assert.AreEqual(170.18354, view.Rows[2][SummaryDataContainer.FCMAP_KM].ToString().ToDouble(), 1e-3);
+			Assert.AreEqual(183.06159, view.Rows[3][SummaryDataContainer.FCMAP_KM].ToString().ToDouble(), 1e-3);
+			Assert.AreEqual(224.78226, view.Rows[4][SummaryDataContainer.FCMAP_KM].ToString().ToDouble(), 1e-3);
+			Assert.AreEqual(255.02202, view.Rows[5][SummaryDataContainer.FCMAP_KM].ToString().ToDouble(), 1e-3);
 		}
 
 		[TestCase(EngineSpeedLimitJobATDecl)]
diff --git a/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs
index eaa227191974c9720dfb4dd9e2df69dcdd5c0432..3a472ec349c77e82fe7ebcf9f58fd5ca03bd60f2 100644
--- a/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs
@@ -842,5 +842,61 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
 
 			Assert.AreEqual(result, ShiftPolygon.IsLeftOf(speed.RPMtoRad(), torque.SI<NewtonMeter>(), segment));
 		}
+
+
+		[TestCase(@"E:\QUAM\Workspace\VECTO-Bugreports\BugReportTests\Bugreport Jobs\20190307_VECTO-904_Extrapolation\OM-18173493.xml")]
+		public void ComputeShiftPolygonXML(string xmlJob)
+		{
+			var inputData = new XMLDeclarationInputDataProvider(xmlJob, true);
+			var dao = new DeclarationDataAdapter();
+
+			var gearboxData = inputData.JobInputData.Vehicle.GearboxInputData;
+			var engineData = dao.CreateEngineData(inputData.JobInputData.Vehicle.EngineInputData,0.RPMtoRad(), gearboxData, new List<ITorqueLimitInputData>());
+
+			var fullLoadCurves = engineData.FullLoadCurves;
+
+			var axlegearRatio = inputData.JobInputData.Vehicle.AxleGearInputData.Ratio;
+			var vehicle = inputData.JobInputData.Vehicle;
+			var segment = DeclarationData.Segments.Lookup(
+				vehicle.VehicleCategory, vehicle.AxleConfiguration, vehicle.GrossVehicleMassRating, vehicle.CurbMassChassis,
+				false);
+			var vehicleData = dao.CreateVehicleData(inputData.JobInputData.Vehicle, segment.Missions.First(), 0.SI<Kilogram>());
+			var rdyn = vehicleData.DynamicTyreRadius;
+
+			var shiftPolygons = new List<ShiftPolygon>();
+			var downshiftTransformed = new List<List<Point>>();
+			var upshiftOrig = new List<List<Point>>();
+			for (var i = 0; i < gearboxData.Gears.Count; i++) {
+				shiftPolygons.Add(
+					DeclarationData.Gearbox.ComputeShiftPolygon(gearboxData.Type, i, fullLoadCurves[(uint)(i + 1)], gearboxData.Gears,
+						engineData, axlegearRatio, rdyn)
+					);
+				List<Point> tmp1, tmp2, tmp3;
+				ComputShiftPolygonPoints(i, fullLoadCurves[(uint)(i + 1)], gearboxData.Gears,
+					engineData, axlegearRatio, rdyn, out tmp1, out tmp2, out tmp3);
+				upshiftOrig.Add(tmp1);
+				downshiftTransformed.Add(tmp2);
+			}
+
+			var imageFile = Path.Combine(Path.GetDirectoryName(xmlJob), Path.GetFileNameWithoutExtension(xmlJob) + "_shiftlines.png");
+			ShiftPolygonDrawer.DrawShiftPolygons(Path.GetDirectoryName(xmlJob), fullLoadCurves, shiftPolygons,
+				imageFile,
+				DeclarationData.Gearbox.TruckMaxAllowedSpeed / rdyn * axlegearRatio * gearboxData.Gears.Last().Ratio,
+				upshiftOrig, downshiftTransformed);
+			var str = "";
+			var g = 1;
+			foreach (var shiftPolygon in shiftPolygons) {
+				str += "Gear " + g + "\n";
+				str += "downshift\n";
+				foreach (var entry in shiftPolygon.Downshift) {
+					str += string.Format("{0} {1}\n", entry.AngularSpeed.AsRPM, entry.Torque.Value());
+				}
+				str += "upshift\n";
+				foreach (var entry in shiftPolygon.Upshift) {
+					str += string.Format("{0} {1}\n", entry.AngularSpeed.AsRPM, entry.Torque.Value());
+				}
+				g++;
+			}
+		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs
index 593c548eaf6e475429a0b3199474ddd1b5cc19b1..ed2361653ed526e7c4ab849757500e14d65bdd5b 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs
@@ -500,7 +500,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 		TestCase(5, 4, 1800, 750, typeof(ResponseGearShift)),
 		TestCase(4, 3, 1800, 750, typeof(ResponseGearShift)),
 		TestCase(3, 2, 1800, 750, typeof(ResponseGearShift)),
-		TestCase(2, 1, 1500, 750, typeof(ResponseGearShift)),
+		TestCase(2, 1, 1900, 750, typeof(ResponseGearShift)),
 		TestCase(1, 1, 1200, 700, typeof(ResponseSuccess)),
 		TestCase(8, 4, 15000, 200, typeof(ResponseGearShift)),]
 		public void Gearbox_ShiftDown(int gear, int newGear, double t, double n, Type responseType)
@@ -523,13 +523,15 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			var absTime = 0.SI<Second>();
 			var dt = 2.SI<Second>();
 
-			gearbox.OutPort().Initialize(1.SI<NewtonMeter>(), 1.SI<PerSecond>());
+			var expectedN = n.RPMtoRad();
+			var angularVelocity = expectedN / ratios[gear];
+			gearbox.OutPort().Initialize(1.SI<NewtonMeter>(), angularVelocity);
 
 			var expectedT = t.SI<NewtonMeter>();
-			var expectedN = n.RPMtoRad();
+			
 
 			var torque = expectedT * ratios[gear];
-			var angularVelocity = expectedN / ratios[gear];
+			
 
 			gearbox.Gear = (uint)gear;
 			var gearShiftResponse = gearbox.OutPort().Request(absTime, dt, torque, angularVelocity);
@@ -541,11 +543,11 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 		}
 
 		[TestCase(7, 8, 1000, 1400, typeof(ResponseGearShift)),
-		TestCase(6, 7, 1000, 1400, typeof(ResponseGearShift)),
+		TestCase(6, 8, 1000, 1400, typeof(ResponseGearShift)),
 		TestCase(5, 6, 1000, 1400, typeof(ResponseGearShift)),
 		TestCase(4, 5, 1000, 1400, typeof(ResponseGearShift)),
 		TestCase(3, 4, 1000, 1400, typeof(ResponseGearShift)),
-		TestCase(2, 3, 1000, 1400, typeof(ResponseGearShift)),
+		TestCase(2, 4, 1000, 1400, typeof(ResponseGearShift)),
 		TestCase(1, 2, 1000, 1400, typeof(ResponseGearShift)),
 		TestCase(8, 8, 1000, 1400, typeof(ResponseSuccess)),
 		TestCase(1, 6, 200, 9000, typeof(ResponseGearShift)),]
@@ -575,15 +577,17 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			var absTime = 0.SI<Second>();
 			var dt = 2.SI<Second>();
 
-			gearbox.OutPort().Initialize(1.SI<NewtonMeter>(), 1.SI<PerSecond>());
+			var expectedN = n.RPMtoRad();
+			var angularVelocity = expectedN / ratios[gear];
+			gearbox.OutPort().Initialize(1.SI<NewtonMeter>(), angularVelocity);
 
 			absTime += dt;
 
 			var expectedT = tq.SI<NewtonMeter>();
-			var expectedN = n.RPMtoRad();
+			
 
 			var torque = expectedT * ratios[gear];
-			var angularVelocity = expectedN / ratios[gear];
+			
 
 			gearbox.Gear = (uint)gear;
 			var response = gearbox.OutPort().Request(absTime, dt, torque, angularVelocity);
diff --git a/VectoCore/VectoCoreTest/Reports/ModDataTest.cs b/VectoCore/VectoCoreTest/Reports/ModDataTest.cs
index 7784bad4b907a94ce73ba63547694e3c4e501188..e78e77a314d5faac2abdd2a48c43a42db82c67f3 100644
--- a/VectoCore/VectoCoreTest/Reports/ModDataTest.cs
+++ b/VectoCore/VectoCoreTest/Reports/ModDataTest.cs
@@ -192,8 +192,9 @@ namespace TUGraz.VectoCore.Tests.Reports
 
 			Assert.IsTrue(exceedingHigh.Count < 5);
 			var max2 = tractionInterruptionTimes.Values.OrderBy(x => x.Value()).Reverse().Skip(5).Max();
+			var min2 = tractionInterruptionTimes.Values.OrderBy(x => x.Value()).Skip(5).Min();
 
-			Assert.IsTrue(min.IsEqual(expectedTractionInterruption, 0.1), "minimum traction interruption time: {0}", min);
+			Assert.IsTrue(min2.IsEqual(expectedTractionInterruption, 0.1), "minimum traction interruption time: {0}", min);
 			Assert.IsTrue(max2.IsEqual(expectedTractionInterruption, 0.1), "maximum traction interruption time: {0}", max2);