diff --git a/VECTO/GUI/EngineForm.vb b/VECTO/GUI/EngineForm.vb
index 5360a41ee5361cbb0d35ec4d3b584635b7fcd857..15f98cfe1b90db447af4a11a4163ff81c3ab39bf 100644
--- a/VECTO/GUI/EngineForm.vb
+++ b/VECTO/GUI/EngineForm.vb
@@ -166,7 +166,7 @@ Public Class EngineForm
 		Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(file),
 																IEngineeringInputDataProvider)
 
-		engine = inputData.EngineInputData
+		engine = inputData.JobInputData.Vehicle.EngineInputData
 
 
 		If Cfg.DeclMode <> engine.SavedInDeclarationMode Then
@@ -555,4 +555,4 @@ Public Class EngineForm
 			MsgBox("Failed to load file! " & ex.Message, MsgBoxStyle.Critical)
 		End Try
 	End Sub
-End Class
\ No newline at end of file
+End Class
diff --git a/VECTO/GUI/GearboxForm.vb b/VECTO/GUI/GearboxForm.vb
index 35a3a71fe59787ce31f0dc481c7d08c68c6192a6..2594175e17b3011f43071aee38bd9d3b2f8d5aa4 100644
--- a/VECTO/GUI/GearboxForm.vb
+++ b/VECTO/GUI/GearboxForm.vb
@@ -1,1071 +1,1072 @@
-' Copyright 2017 European Union.
-' Licensed under the EUPL (the 'Licence');
-'
-' * You may not use this work except in compliance with the Licence.
-' * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl
-' * Unless required by applicable law or agreed to in writing,
-'   software distributed under the Licence is distributed on an "AS IS" basis,
-'   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-'
-' See the LICENSE.txt for the specific language governing permissions and limitations.
-Imports System.Collections.Generic
-Imports System.Drawing.Imaging
-Imports System.Globalization
-Imports System.IO
-Imports System.Linq
-Imports System.Windows.Forms.DataVisualization.Charting
-Imports System.Xml.Linq
-Imports TUGraz.VECTO.Input_Files
-Imports TUGraz.VectoCommon.InputData
-Imports TUGraz.VectoCommon.Models
-Imports TUGraz.VectoCommon.Utils
-Imports TUGraz.VectoCore.InputData.FileIO.JSON
-Imports TUGraz.VectoCore.InputData.Impl
-Imports TUGraz.VectoCore.InputData.Reader
-Imports TUGraz.VectoCore.Models.Declaration
-Imports TUGraz.VectoCore.Models.SimulationComponent.Data
-Imports TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
-Imports TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
-Imports TUGraz.VectoCore.OutputData.FileIO
-Imports TUGraz.VectoCore.OutputData.XML
-Imports TUGraz.VectoCore.Utils
-
-''' <summary>
-''' Gearbox Editor
-''' </summary>
-''' <remarks></remarks>
-Public Class GearboxForm
-	Private Enum GearboxTbl
-		GearNr = 0
-		'TorqueConverter = 1
-		Ratio = 1
-		LossMapEfficiency = 2
-		ShiftPolygons = 3
-		MaxTorque = 4
-		MaxSpeed = 5
-	End Enum
-
-	Private _gbxFile As String = ""
-	Public AutoSendTo As Boolean = False
-	Public JobDir As String = ""
-	Private _gearDialog As GearboxGearDialog
-
-	Private _changed As Boolean = False
-
-	'Before closing Editor: Check if file was changed and ask to save.
-	Private Sub F_GBX_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
-		If e.CloseReason <> CloseReason.ApplicationExitCall And e.CloseReason <> CloseReason.WindowsShutDown Then
-			e.Cancel = ChangeCheckCancel()
-		End If
-	End Sub
-
-	'Initialise.
-	Private Sub F_GBX_Load(sender As Object, e As EventArgs) Handles Me.Load
-
-		_gearDialog = New GearboxGearDialog
-
-		PnInertiaTI.Enabled = Not Cfg.DeclMode
-		GrGearShift.Enabled = Not Cfg.DeclMode
-		'ChTCon.Enabled = Not Cfg.DeclMode
-
-		CbGStype.Items.Clear()
-		CbGStype.ValueMember = "Value"
-		CbGStype.DisplayMember = "Label"
-
-		If (Cfg.DeclMode) Then
-			CbGStype.DataSource = [Enum].GetValues(GetType(GearboxType)) _
-				.Cast (Of GearboxType)() _
-				.Where(Function(type) type.ManualTransmission() OrElse type = GearboxType.ATSerial) _
-				.Select(Function(type) New With {Key .Value = type, .Label = type.GetLabel()}).ToList()
-		Else
-			CbGStype.DataSource = [Enum].GetValues(GetType(GearboxType)) _
-				.Cast (Of GearboxType)() _
-				.Where(Function(type) type.ManualTransmission() OrElse type.AutomaticTransmission()) _
-				.Select(Function(type) New With {Key .Value = type, .Label = type.GetLabel()}).ToList()
-		End If
-		DeclInit()
-
-		_changed = False
-		NewGbx()
-	End Sub
-
-	'Set generic values for Declaration mode.
-	Private Sub DeclInit()
-		Dim gbxType As GearboxType
-		Dim lv0 As ListViewItem
-
-		If Not Cfg.DeclMode Then Exit Sub
-
-		TBI_getr.Text = DeclarationData.Gearbox.Inertia.ToGUIFormat()	'cDeclaration.GbInertia
-
-		gbxType = CType(CbGStype.SelectedValue, GearboxType)	'CType(Me.CbGStype.SelectedIndex, tGearbox)
-
-		TbTracInt.Text = gbxType.TractionInterruption().ToGUIFormat()
-		TbMinTimeBetweenShifts.Text = DeclarationData.Gearbox.MinTimeBetweenGearshifts.ToGUIFormat()
-		'cDeclaration.MinTimeBetweenGearshift(GStype)
-
-		TbTqResv.Text = (DeclarationData.Gearbox.TorqueReserve*100).ToGUIFormat()										  ' cDeclaration.TqResv
-		TbTqResvStart.Text = (DeclarationData.Gearbox.TorqueReserveStart*100).ToGUIFormat() 'cDeclaration.TqResvStart
-		TbStartSpeed.Text = DeclarationData.Gearbox.StartSpeed.ToGUIFormat()	'cDeclaration.StartSpeed
-		TbStartAcc.Text = DeclarationData.Gearbox.StartAcceleration.ToGUIFormat()	' cDeclaration.StartAcc
-
-		tbUpshiftMinAcceleration.Text = DeclarationData.Gearbox.UpshiftMinAcceleration.ToGUIFormat()
-		tbTCCUpshiftMinAcceleration.Text = ""
-		tbTCLUpshiftMinAcceleration.Text = ""
-
-		tbDownshiftAfterUpshift.Text = DeclarationData.Gearbox.DownshiftAfterUpshiftDelay.ToGUIFormat()
-		tbUpshiftAfterDownshift.Text = DeclarationData.Gearbox.UpshiftAfterDownshiftDelay.ToGUIFormat()
-
-		'ChTCon.Checked = GStype.AutomaticTransmission()
-		For Each lv0 In LvGears.Items
-			lv0.SubItems(GearboxTbl.ShiftPolygons).Text = ""
-		Next
-	End Sub
-
-#Region "Toolbar"
-
-	Private Sub ToolStripBtNew_Click(sender As Object, e As EventArgs) Handles ToolStripBtNew.Click
-		NewGbx()
-	End Sub
-
-	Private Sub ToolStripBtOpen_Click(sender As Object, e As EventArgs) Handles ToolStripBtOpen.Click
-		If GearboxFileBrowser.OpenDialog(_gbxFile) Then
-			Try
-				OpenGbx(GearboxFileBrowser.Files(0), VehicleCategory.RigidTruck)
-			Catch ex As Exception
-				MsgBox("Failed to open Gearbox File: " + ex.Message)
-			End Try
-		End If
-	End Sub
-
-	Private Sub ToolStripBtSave_Click(sender As Object, e As EventArgs) Handles ToolStripBtSave.Click
-		SaveOrSaveAs(False)
-	End Sub
-
-	Private Sub ToolStripBtSaveAs_Click(sender As Object, e As EventArgs) Handles ToolStripBtSaveAs.Click
-		SaveOrSaveAs(True)
-	End Sub
-
-	Private Sub ToolStripBtSendTo_Click(sender As Object, e As EventArgs) Handles ToolStripBtSendTo.Click
-
-		If ChangeCheckCancel() Then Exit Sub
-
-		If _gbxFile = "" Then
-			If MsgBox("Save file now?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
-				If Not SaveOrSaveAs(True) Then Exit Sub
-			Else
-				Exit Sub
-			End If
-		End If
-
-		If Not VectoJobForm.Visible Then
-			JobDir = ""
-			VectoJobForm.Show()
-			VectoJobForm.VectoNew()
-		Else
-			VectoJobForm.WindowState = FormWindowState.Normal
-		End If
-
-		VectoJobForm.TbGBX.Text = GetFilenameWithoutDirectory(_gbxFile, JobDir)
-	End Sub
-
-	'Help
-	Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click
-		If File.Exists(MyAppPath & "User Manual\help.html") Then
-			Dim defaultBrowserPath As String = BrowserUtils.GetDefaultBrowserPath()
-			Process.Start(defaultBrowserPath,
-						String.Format("""file://{0}{1}""", MyAppPath, "User Manual\help.html#gearbox-editor"))
-		Else
-			MsgBox("User Manual not found!", MsgBoxStyle.Critical)
-		End If
-	End Sub
-
-#End Region
-
-	'New file
-	Private Sub NewGbx()
-		'Dim lvi As ListViewItem
-
-		If ChangeCheckCancel() Then Exit Sub
-
-		'CbGStype.SelectedIndex = 0
-
-		TbName.Text = ""
-		TbTracInt.Text = ""
-		TBI_getr.Text = ""
-
-		LvGears.Items.Clear()
-
-		LvGears.Items.Add(CreateListviewItem("Axle", 1, "1", "", "", ""))
-
-		'Me.ChSkipGears.Checked = False         'set by CbGStype.SelectedIndexChanged
-		'Me.ChShiftInside.Checked = False       'set by CbGStype.SelectedIndexChanged
-		TbTqResv.Text = (DeclarationData.Gearbox.TorqueReserve*100).ToGUIFormat()
-		TbMinTimeBetweenShifts.Text = DeclarationData.Gearbox.MinTimeBetweenGearshifts.ToGUIFormat()
-		TbTqResvStart.Text = (DeclarationData.Gearbox.TorqueReserveStart*100).ToGUIFormat()
-		TbStartSpeed.Text = DeclarationData.Gearbox.StartSpeed.ToGUIFormat() ' in m/s!
-		TbStartAcc.Text = DeclarationData.Gearbox.StartAcceleration.ToGUIFormat()
-
-		tbUpshiftMinAcceleration.Text = DeclarationData.Gearbox.UpshiftMinAcceleration.ToGUIFormat()
-		tbTCLUpshiftMinAcceleration.Text = ""
-		tbTCCUpshiftMinAcceleration.Text = ""
-
-		tbDownshiftAfterUpshift.Text = DeclarationData.Gearbox.DownshiftAfterUpshiftDelay.ToGUIFormat()
-		tbUpshiftAfterDownshift.Text = DeclarationData.Gearbox.UpshiftAfterDownshiftDelay.ToGUIFormat()
-
-		'ChTCon.Checked = False				'set by CbGStype.SelectedIndexChanged
-		TbTCfile.Text = ""
-		TbTCrefrpm.Text = ""
-		TbTCinertia.Text = ""
-
-		DeclInit()
-
-		_gbxFile = ""
-		Text = "GBX Editor"
-		LbStatus.Text = ""
-
-
-		_changed = False
-		Try
-			UpdatePic()
-		Catch
-		End Try
-	End Sub
-
-	'Open file
-	Public Sub OpenGbx(file As String, vehicleCategory As VehicleCategory)
-
-		If ChangeCheckCancel() Then Exit Sub
-
-		Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(file),
-																IEngineeringInputDataProvider)
-		Dim gearbox As IGearboxEngineeringInputData = inputData.GearboxInputData
-		Dim axlegear As IAxleGearInputData = inputData.AxleGearInputData
-
-		_vehicleCategory = vehicleCategory
-
-		If Cfg.DeclMode <> gearbox.SavedInDeclarationMode Then
-			Select Case WrongMode()
-				Case 1
-					Close()
-					MainForm.RbDecl.Checked = Not MainForm.RbDecl.Checked
-					MainForm.OpenVectoFile(file)
-				Case - 1
-					Exit Sub
-			End Select
-		End If
-
-		Dim basePath As String = Path.GetDirectoryName(file)
-		TbName.Text = gearbox.Model
-		TbTracInt.Text = gearbox.TractionInterruption.ToGUIFormat()
-		TBI_getr.Text = gearbox.Inertia.ToGUIFormat()
-
-		LvGears.Items.Clear()
-
-		Dim lossmap As String = ""
-		Try
-			lossmap = If(axlegear.LossMap Is Nothing, axlegear.Efficiency.ToGUIFormat(),
-						GetRelativePath(axlegear.LossMap.Source, basePath))
-		Catch ex As Exception
-		End Try
-
-		LvGears.Items.Add(CreateListviewItem("Axle", axlegear.Ratio, lossmap, "", "", ""))
-
-		For Each gear As ITransmissionInputData In gearbox.Gears
-			lossmap = ""
-			Try
-				lossmap = If(gear.LossMap Is Nothing, gear.Efficiency.ToGUIFormat(), GetRelativePath(gear.LossMap.Source, basePath))
-			Catch ex As Exception
-
-			End Try
-			LvGears.Items.Add(CreateListviewItem(gear.Gear.ToString("00"), gear.Ratio,
-												lossmap,
-												If(gear.ShiftPolygon Is Nothing, "", GetRelativePath(gear.ShiftPolygon.Source, basePath)),
-												If(gear.MaxTorque Is Nothing, "", gear.MaxTorque.ToGUIFormat()),
-												If(gear.MaxInputSpeed Is Nothing, "", gear.MaxInputSpeed.AsRPM.ToGUIFormat())))
-		Next
-
-		TbTqResv.Text = (gearbox.TorqueReserve*100).ToGUIFormat()
-		TbMinTimeBetweenShifts.Text = gearbox.MinTimeBetweenGearshift.ToGUIFormat()
-		TbTqResvStart.Text = (gearbox.StartTorqueReserve*100).ToGUIFormat()
-		TbStartSpeed.Text = gearbox.StartSpeed.ToGUIFormat()
-		TbStartAcc.Text = gearbox.StartAcceleration.ToGUIFormat()
-
-		Dim torqueConverter As ITorqueConverterEngineeringInputData = gearbox.TorqueConverter
-		If torqueConverter Is Nothing OrElse gearbox.Type.ManualTransmission() Then
-			TbTCfile.Text = ""
-			TbTCrefrpm.Text = ""
-			TbTCinertia.Text = ""
-			TBTCShiftPolygon.Text = ""
-			tbTCmaxSpeed.Text = ""
-			tbTCLUpshiftMinAcceleration.Text = ""
-			tbTCCUpshiftMinAcceleration.Text = ""
-
-		Else
-			TbTCfile.Text = If(torqueConverter.TCData Is Nothing, "", GetRelativePath(torqueConverter.TCData.Source, basePath))
-			TbTCrefrpm.Text = If(torqueConverter.ReferenceRPM Is Nothing, "", torqueConverter.ReferenceRPM.AsRPM.ToGUIFormat())
-			TbTCinertia.Text = If(torqueConverter.Inertia Is Nothing, "", torqueConverter.Inertia.ToGUIFormat())
-			TBTCShiftPolygon.Text =
-				If(torqueConverter.ShiftPolygon Is Nothing, "", GetRelativePath(torqueConverter.ShiftPolygon.Source, basePath))
-			tbTCmaxSpeed.Text =
-				If(torqueConverter.MaxInputSpeed Is Nothing, "", torqueConverter.MaxInputSpeed.AsRPM.ToGUIFormat())
-			tbTCLUpshiftMinAcceleration.Text = torqueConverter.CLUpshiftMinAcceleration.ToGUIFormat()
-			tbTCCUpshiftMinAcceleration.Text = torqueConverter.CCUpshiftMinAcceleration.ToGUIFormat()
-		End If
-
-		tbUpshiftMinAcceleration.Text = gearbox.UpshiftMinAcceleration.ToGUIFormat()
-		tbDownshiftAfterUpshift.Text = gearbox.DownshiftAfterUpshiftDelay.ToGUIFormat()
-		tbUpshiftAfterDownshift.Text = gearbox.UpshiftAfterDownshiftDelay.ToGUIFormat()
-
-		tbATShiftTime.Text = gearbox.PowershiftShiftTime.ToGUIFormat()
-
-		CbGStype.SelectedValue = gearbox.Type
-
-
-		DeclInit()
-
-
-		GearboxFileBrowser.UpdateHistory(file)
-		Text = GetFilenameWithoutPath(file, True)
-		LbStatus.Text = ""
-		UpdateGearboxInfoText()
-		_gbxFile = file
-		Activate()
-
-		_changed = False
-		Try
-			UpdatePic()
-		Catch
-		End Try
-	End Sub
-
-	Private Function CreateListviewItem(gear As String, ratio As Double, getrMap As String,
-										shiftPolygon As String, maxTorque As String, maxSpeed As String) As ListViewItem
-		Dim retVal As ListViewItem = New ListViewItem(gear)
-		'retVal.SubItems.Add(tc)
-		retVal.SubItems.Add(ratio.ToGUIFormat())
-		retVal.SubItems.Add(getrMap)
-		retVal.SubItems.Add(shiftPolygon)
-		retVal.SubItems.Add(maxTorque)
-		retVal.SubItems.Add(maxSpeed)
-		Return retVal
-	End Function
-
-	'Save or Save As function = true if file is saved
-	Private Function SaveOrSaveAs(saveAs As Boolean) As Boolean
-		If _gbxFile = "" Or saveAs Then
-			If GearboxFileBrowser.SaveDialog(_gbxFile) Then
-				_gbxFile = GearboxFileBrowser.Files(0)
-			Else
-				Return False
-			End If
-		End If
-		Return SaveGbx(_gbxFile)
-	End Function
-
-	'Save file
-	Private Function SaveGbx(file As String) As Boolean
-
-		Dim gearbox As Gearbox = FillGearboxData(file)
-
-
-		If Not gearbox.SaveFile Then
-			MsgBox("Cannot safe to " & file, MsgBoxStyle.Critical)
-			Return False
-		End If
-
-		If AutoSendTo Then
-			If VectoJobForm.Visible Then
-				If UCase(FileRepl(VectoJobForm.TbGBX.Text, JobDir)) <> UCase(file) Then _
-					VectoJobForm.TbGBX.Text = GetFilenameWithoutDirectory(file, JobDir)
-				VectoJobForm.UpdatePic()
-			End If
-		End If
-
-		GearboxFileBrowser.UpdateHistory(file)
-		Text = GetFilenameWithoutPath(file, True)
-		LbStatus.Text = ""
-
-		_changed = False
-
-		Return True
-	End Function
-
-	Private Function FillGearboxData(file As String) As Gearbox
-		Dim gearbox As Gearbox
-		Dim i As Integer
-
-		gearbox = New Gearbox
-		gearbox.FilePath = file
-
-		gearbox.ModelName = TbName.Text
-		If Trim(gearbox.ModelName) = "" Then gearbox.ModelName = "Undefined"
-
-		gearbox.TracIntrSi = TbTracInt.Text.ToDouble(0)
-		gearbox.GbxInertia = TBI_getr.Text.ToDouble(0)
-
-		For i = 0 To LvGears.Items.Count - 1
-			'GBX0.IsTCgear.Add(Me.LvGears.Items(i).SubItems(GearboxTbl.TorqueConverter).Text = "on" And i > 0)
-			gearbox.GearRatios.Add(LvGears.Items(i).SubItems(GearboxTbl.Ratio).Text.ToDouble(0))
-			gearbox.GearLossmaps.Add(New SubPath)
-			gearbox.GearLossMap(i) = LvGears.Items(i).SubItems(GearboxTbl.LossMapEfficiency).Text
-			gearbox.GearshiftFiles.Add(New SubPath)
-			gearbox.ShiftPolygonFile(i) = LvGears.Items(i).SubItems(GearboxTbl.ShiftPolygons).Text
-			'GBX0.FldFiles.Add(New cSubPath)
-			'GBX0.FldFile(i) = Me.LvGears.Items(i).SubItems(GearboxTbl.MaxTorque).Text
-			gearbox.MaxTorque.Add(LvGears.Items(i).SubItems(GearboxTbl.MaxTorque).Text)
-			gearbox.MaxSpeed.Add(LvGears.Items(i).SubItems(GearboxTbl.MaxSpeed).Text)
-		Next
-
-		gearbox.TorqueResv = TbTqResv.Text.ToDouble(0)
-		gearbox.ShiftTime = TbMinTimeBetweenShifts.Text.ToDouble(0)
-		gearbox.TorqueResvStart = TbTqResvStart.Text.ToDouble(0)
-		gearbox.StartSpeed = TbStartSpeed.Text.ToDouble(0)
-		gearbox.StartAcc = TbStartAcc.Text.ToDouble(0)
-
-		gearbox.Type = CType(CbGStype.SelectedValue, GearboxType)
-
-		gearbox.Type.AutomaticTransmission()
-		gearbox.TorqueConverterFile = TbTCfile.Text
-		gearbox.TorqueConverterReferenceRpm = TbTCrefrpm.Text.ToDouble(0)
-		gearbox.TorqueConverterInertia = TbTCinertia.Text.ToDouble(0)
-		gearbox.TorqueConverterShiftPolygonFile = TBTCShiftPolygon.Text
-		gearbox.TorqueConverterMaxSpeed = tbTCmaxSpeed.Text.ToDouble(0)
-
-		gearbox.DownshiftAfterUpshift = tbDownshiftAfterUpshift.Text.ToDouble(0)
-		gearbox.UpshiftAfterDownshift = tbUpshiftAfterDownshift.Text.ToDouble(0)
-
-		gearbox.UpshiftMinAcceleration = tbUpshiftMinAcceleration.Text.ToDouble(0)
-		gearbox.TCLUpshiftMinAcceleration = tbTCLUpshiftMinAcceleration.Text.ToDouble(0)
-		gearbox.TCCUpshiftMinAcceleration = tbTCCUpshiftMinAcceleration.Text.ToDouble(0)
-
-		gearbox.PSShiftTime = tbATShiftTime.Text.ToDouble(0)
-		Return gearbox
-	End Function
-
-#Region "Change Events"
-
-	'Change Status ändern |@@| Change Status change
-	Private Sub Change()
-		If Not _changed Then
-			LbStatus.Text = "Unsaved changes in current file"
-			_changed = True
-		End If
-	End Sub
-
-	' "Save changes ?" ...liefert True wenn User Vorgang abbricht |@@| Save changes? "... Returns True if user aborts
-	Private Function ChangeCheckCancel() As Boolean
-
-		If _changed Then
-			Select Case MsgBox("Save changes ?", MsgBoxStyle.YesNoCancel)
-				Case MsgBoxResult.Yes
-					Return Not SaveOrSaveAs(False)
-				Case MsgBoxResult.Cancel
-					Return True
-				Case Else 'MsgBoxResult.No
-					_changed = False
-					Return False
-			End Select
-
-		Else
-
-			Return False
-
-		End If
-	End Function
-
-	Private Sub TbName_TextChanged(sender As Object, e As EventArgs) _
-		Handles TbName.TextChanged, TBI_getr.TextChanged, TbTracInt.TextChanged, TbTqResv.TextChanged,
-				TbMinTimeBetweenShifts.TextChanged, TbTqResvStart.TextChanged, TbStartSpeed.TextChanged, TbStartAcc.TextChanged,
-				TbTCfile.TextChanged,
-				tbTCCUpshiftMinAcceleration.TextChanged, tbTCLUpshiftMinAcceleration.TextChanged
-		Change()
-	End Sub
-
-#End Region
-
-	'Save and close
-	Private Sub ButOK_Click(sender As Object, e As EventArgs) Handles ButOK.Click
-		If SaveOrSaveAs(False) Then Close()
-	End Sub
-
-	'Cancel
-	Private Sub ButCancel_Click(sender As Object, e As EventArgs) Handles ButCancel.Click
-		Close()
-	End Sub
-
-	'Enable/Disable settings for specific transmission types
-	Private Sub CbGStype_SelectedIndexChanged(sender As Object, e As EventArgs) _
-		Handles CbGStype.SelectedIndexChanged
-		Dim gStype As GearboxType = CType(CbGStype.SelectedValue, GearboxType)
-
-		Change()
-
-		'ChTCon.Enabled = (GStype.AutomaticTransmission())
-		gbTC.Enabled = gStype.AutomaticTransmission()
-		pnTcEngineering.Enabled = Not Cfg.DeclMode AndAlso gStype.AutomaticTransmission()
-		gbTCAccMin.Enabled = Not Cfg.DeclMode AndAlso gStype.AutomaticTransmission()
-		gbPowershiftLosses.Enabled = Not Cfg.DeclMode AndAlso gStype.AutomaticTransmission()
-		TbStartAcc.Enabled = Not gStype.AutomaticTransmission()
-		TbStartSpeed.Enabled = Not gStype.AutomaticTransmission()
-		TbTqResv.Enabled = Not gStype.AutomaticTransmission()
-		GroupBox2.Enabled = Not gStype.AutomaticTransmission()
-		TBI_getr.Enabled = Not gStype.AutomaticTransmission()
-		TbTracInt.Enabled = Not gStype.AutomaticTransmission()
-		tbDownshiftAfterUpshift.Enabled = Not gStype.AutomaticTransmission()
-		tbUpshiftAfterDownshift.Enabled = Not gStype.AutomaticTransmission()
-		UpdateGearboxInfoText()
-	End Sub
-
-	Private Sub UpdateGearboxInfoText()
-		Dim gStype As GearboxType = CType(CbGStype.SelectedValue, GearboxType)
-
-		Dim text As String = ""
-		If (gStype = GearboxType.ATSerial) Then
-			If LvGears.Items.Count > 2 Then
-				Dim ratio1 As Double = LvGears.Items.Item(1).SubItems(GearboxTbl.Ratio).Text.ToDouble(0)
-				Dim ratio2 As Double = LvGears.Items.Item(2).SubItems(GearboxTbl.Ratio).Text.ToDouble(0)
-
-				If ratio1/ratio2 >= DeclarationData.Gearbox.TorqueConverterSecondGearThreshold(_vehicleCategory) Then
-					text = "Torque converter is used in 1st and 2nd gear"
-				Else
-					text = "Torque converter is used in 1st gear only"
-				End If
-			End If
-		End If
-		lblGbxInfo.Text = text
-	End Sub
-
-
-	Private Sub LvGears_SelectedIndexChanged(sender As Object, e As EventArgs) _
-		Handles LvGears.SelectedIndexChanged
-		Try
-			UpdatePic()
-			btExportVGBS.Enabled = True
-		Catch
-			btExportVGBS.Enabled = False
-		End Try
-	End Sub
-
-#Region "Gears"
-
-	'Gear-DoubleClick
-	Private Sub LvGears_MouseDoubleClick(ByVal sender As Object, ByVal e As MouseEventArgs) _
-		Handles LvGears.MouseDoubleClick
-		EditGear()
-	End Sub
-
-	'Gear-KeyDown
-	Private Sub LvGears_KeyDown(sender As Object, e As KeyEventArgs) Handles LvGears.KeyDown
-		Select Case e.KeyCode
-			Case Keys.Delete, Keys.Back
-				RemoveGear(False)
-			Case Keys.Enter
-				EditGear()
-		End Select
-	End Sub
-
-	'Remove Gear Button
-	Private Sub BtClearGear_Click(sender As Object, e As EventArgs) Handles BtRemGear.Click
-		RemoveGear(False)
-	End Sub
-
-	'Add Gear button
-	Private Sub BtAddGear_Click(sender As Object, e As EventArgs) Handles BtAddGear.Click
-		AddGear()
-		LvGears.Items(LvGears.Items.Count - 1).Selected = True
-		EditGear()
-	End Sub
-
-	'Edit Gear
-	Private Sub EditGear()
-
-		Do
-
-			'GearDia.ChIsTCgear.Enabled = (Me.ChTCon.Checked And Me.LvGears.SelectedIndices(0) > 0)
-			_gearDialog.GearboxType = CType(CbGStype.SelectedValue, GearboxType)
-			_gearDialog.PnShiftPoly.Enabled = (Not Cfg.DeclMode And LvGears.SelectedIndices(0) > 0)
-			_gearDialog.PnFld.Enabled = (LvGears.SelectedIndices(0) > 0)
-			_gearDialog.GbxPath = GetPath(_gbxFile)
-			_gearDialog.TbGear.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.GearNr).Text
-			_gearDialog.TbRatio.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.Ratio).Text
-			_gearDialog.TbMapPath.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.LossMapEfficiency).Text
-			If LvGears.SelectedIndices(0) > 0 Then
-				_gearDialog.TbShiftPolyFile.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.ShiftPolygons).Text
-				_gearDialog.TbMaxTorque.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.MaxTorque).Text
-				_gearDialog.tbMaxSpeed.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.MaxSpeed).Text
-			Else
-				_gearDialog.TbShiftPolyFile.Text = ""
-				_gearDialog.TbMaxTorque.Text = ""
-				_gearDialog.tbMaxSpeed.Text = ""
-			End If
-
-			If LvGears.SelectedItems(0).Index = 0 Then
-				_gearDialog.BtPrevious.Enabled = False
-			Else
-				_gearDialog.BtPrevious.Enabled = True
-			End If
-
-			If _gearDialog.ShowDialog = DialogResult.OK Then
-				'Me.LvGears.SelectedItems(0).SubItems(GearboxTbl.TorqueConverter).Text = "-"
-				LvGears.SelectedItems(0).SubItems(GearboxTbl.Ratio).Text = _gearDialog.TbRatio.Text
-				LvGears.SelectedItems(0).SubItems(GearboxTbl.LossMapEfficiency).Text = _gearDialog.TbMapPath.Text
-				LvGears.SelectedItems(0).SubItems(GearboxTbl.ShiftPolygons).Text = _gearDialog.TbShiftPolyFile.Text
-				LvGears.SelectedItems(0).SubItems(GearboxTbl.MaxTorque).Text = _gearDialog.TbMaxTorque.Text
-				LvGears.SelectedItems(0).SubItems(GearboxTbl.MaxSpeed).Text = _gearDialog.tbMaxSpeed.Text
-
-				UpdateGearboxInfoText()
-				Try
-					UpdatePic()
-				Catch
-				End Try
-
-				Change()
-
-			Else
-
-				If LvGears.SelectedItems(0).SubItems(GearboxTbl.Ratio).Text = "" Then RemoveGear(True)
-
-			End If
-
-			If _gearDialog.NextGear Then
-				If LvGears.Items.Count - 1 = LvGears.SelectedIndices(0) Then AddGear()
-
-				LvGears.Items(LvGears.SelectedIndices(0) + 1).Selected = True
-			End If
-
-			If _gearDialog.PreviousGear AndAlso LvGears.SelectedIndices(0) > 0 Then
-				LvGears.Items(LvGears.SelectedIndices(0) - 1).Selected = True
-			End If
-
-		Loop Until Not (_gearDialog.NextGear OrElse _gearDialog.PreviousGear)
-	End Sub
-
-	'Add Gear
-	Private Sub AddGear()
-		Dim lvi As ListViewItem
-
-		lvi = CreateListviewItem(LvGears.Items.Count.ToString("00"), 1, "", "", "", "")
-
-		LvGears.Items.Add(lvi)
-
-		lvi.EnsureVisible()
-		UpdateGearboxInfoText()
-		LvGears.Focus()
-
-		'Change() => NO! Change() is already handled by EditGear
-	End Sub
-
-	'Remove Gear
-	Private Sub RemoveGear(noChange As Boolean)
-		Dim i0 As Integer
-		Dim i As Integer
-		Dim lv0 As ListViewItem
-
-		If LvGears.Items.Count < 2 Then Exit Sub
-
-		If LvGears.SelectedItems.Count = 0 Then LvGears.Items(LvGears.Items.Count - 1).Selected = True
-
-		i0 = LvGears.SelectedItems(0).Index
-
-		If i0 = 0 Then Exit Sub 'Must not remove axle
-
-		LvGears.SelectedItems(0).Remove()
-
-		i = 0
-		For Each lv0 In LvGears.Items
-			If lv0.SubItems(GearboxTbl.GearNr).Text = "Axle" Then Continue For
-			i += 1
-			lv0.SubItems(GearboxTbl.GearNr).Text = i.ToString("00")
-		Next
-
-		If i0 < LvGears.Items.Count Then
-			LvGears.Items(i0).Selected = True
-			LvGears.Items(i0).EnsureVisible()
-		End If
-		UpdateGearboxInfoText()
-		LvGears.Focus()
-		Try
-			UpdatePic()
-		Catch
-		End Try
-
-		If Not noChange Then Change()
-	End Sub
-
-
-#End Region
-
-
-#Region "Open File Context Menu"
-
-	Private _contextMenuFiles As String()
-	Private _vehicleCategory As VehicleCategory
-
-	Private Sub OpenFiles(ParamArray files() As String)
-
-		If files.Length = 0 Then Exit Sub
-
-		_contextMenuFiles = files
-
-		OpenWithToolStripMenuItem.Text = "Open with " & Cfg.OpenCmdName
-
-		CmOpenFile.Show(Windows.Forms.Cursor.Position)
-	End Sub
-
-	Private Sub OpenWithToolStripMenuItem_Click(sender As Object, e As EventArgs) _
-		Handles OpenWithToolStripMenuItem.Click
-		If Not FileOpenAlt(_contextMenuFiles(0)) Then MsgBox("Failed to open file!")
-	End Sub
-
-	Private Sub ShowInFolderToolStripMenuItem_Click(sender As Object, e As EventArgs) _
-		Handles ShowInFolderToolStripMenuItem.Click
-		If File.Exists(_contextMenuFiles(0)) Then
-			Try
-				Process.Start("explorer", "/select,""" & _contextMenuFiles(0) & "")
-			Catch ex As Exception
-				MsgBox("Failed to open file!")
-			End Try
-		Else
-			MsgBox("File not found!")
-		End If
-	End Sub
-
-#End Region
-
-
-	Private Sub UpdatePic()
-
-		Dim path As String
-
-		Dim chart As Chart
-		Dim s As Series
-		Dim a As ChartArea
-		Dim img As Bitmap
-		Dim gear As Integer
-		'Dim fullLoadCurve As EngineFullLoadCurve = Nothing
-		'Dim shiftOk As Boolean
-
-
-		PicBox.Image = Nothing
-
-		Dim shiftPolygon As ShiftPolygon = Nothing
-		'Dim engineFld As FullLoadCurve
-
-		If LvGears.Items.Count <= 1 Then Exit Sub
-
-		Try
-			If LvGears.SelectedItems.Count > 0 AndAlso LvGears.SelectedIndices(0) > 0 Then
-				path = FileRepl(LvGears.SelectedItems(0).SubItems(GearboxTbl.ShiftPolygons).Text, GetPath(_gbxFile))
-				gear = LvGears.SelectedIndices(0)
-			Else
-				path = FileRepl(LvGears.Items(1).SubItems(GearboxTbl.ShiftPolygons).Text, GetPath(_gbxFile))
-				gear = 1
-			End If
-
-			If File.Exists(path) Then shiftPolygon = ShiftPolygonReader.ReadFromFile(path)
-
-		Catch ex As Exception
-
-		End Try
-
-		chart = New Chart
-		chart.Width = PicBox.Width
-		chart.Height = PicBox.Height
-
-		a = New ChartArea
-
-		'Shiftpolygons from file
-
-		If Not shiftPolygon Is Nothing Then
-			s = New Series
-			s.Points.DataBindXY(shiftPolygon.Upshift.Select(Function(x) x.AngularSpeed.AsRPM).ToArray(),
-								shiftPolygon.Upshift.Select(Function(x) x.Torque.Value()).ToArray())
-			s.ChartType = SeriesChartType.FastLine
-			s.BorderWidth = 2
-			s.Color = Color.DarkRed
-			s.Name = "Upshift curve"
-			chart.Series.Add(s)
-
-			s = New Series
-			s.Points.DataBindXY(shiftPolygon.Downshift.Select(Function(x) x.AngularSpeed.AsRPM).ToArray(),
-								shiftPolygon.Downshift.Select(Function(x) x.Torque.Value()).ToArray())
-			s.ChartType = SeriesChartType.FastLine
-			s.BorderWidth = 2
-			s.Color = Color.DarkRed
-			s.Name = "Downshift curve"
-			chart.Series.Add(s)
-		End If
-
-		'Dim vectoJob As VectoJob = New VectoJob() With {.FilePath = VectoJobForm.VECTOfile}
-		'Dim vectoOk As Boolean = vectoJob.ReadFile()
-		Dim jobFile As String = VectoJobForm.VectoFile
-		If Not jobFile Is Nothing AndAlso File.Exists(jobFile) Then
-
-			Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadJsonJob(jobFile),
-																	IEngineeringInputDataProvider)
-			If (inputData Is Nothing) Then
-				Exit Sub
-			End If
-			Dim vehicle As IVehicleEngineeringInputData = inputData.VehicleInputData
-			'inputData = TryCast(JSONInputDataFactory.ReadComponentData(vectoJob.PathEng(False)), IEngineeringInputDataProvider)
-			Dim engine As IEngineEngineeringInputData = inputData.EngineInputData
-			Dim engineFld As EngineFullLoadCurve = FullLoadCurveReader.Create(engine.FullLoadCurve)
-
-
-			s = New Series
-			s.Points.DataBindXY(engineFld.FullLoadEntries.Select(Function(x) x.EngineSpeed.AsRPM).ToArray(),
-								engineFld.FullLoadEntries.Select(Function(x) x.TorqueFullLoad.Value()).ToArray())
-			s.ChartType = SeriesChartType.FastLine
-			s.BorderWidth = 2
-			s.Color = Color.DarkBlue
-			s.Name = "Full load"
-			chart.Series.Add(s)
-
-			If VectoJobForm.Visible AndAlso engine.IdleSpeed > 0 Then
-				'If FLD0.Init(VectoJobForm.n_idle) Then
-
-				'Dim fullLoadCurve As FullLoadCurve = ConvertToFullLoadCurve(FLD0.LnU, FLD0.LTq)
-				Dim gears As IList(Of ITransmissionInputData) = ConvertToGears(LvGears.Items)
-				Dim shiftLines As ShiftPolygon = GetShiftLines(engine.IdleSpeed, engineFld, vehicle, gears, gear)
-				If (Not IsNothing(shiftLines)) Then
-
-
-					s = New Series
-
-					's.Points.DataBindXY(Shiftpoly.gs_nUup, Shiftpoly.gs_TqUp)
-					s.Points.DataBindXY(
-						shiftLines.Upshift.Select(Function(pt) pt.AngularSpeed.AsRPM).
-											ToArray(),
-						shiftLines.Upshift.Select(Function(pt) pt.Torque.Value()).ToArray())
-					s.ChartType = SeriesChartType.FastLine
-					s.BorderWidth = 2
-					s.Color = Color.DarkRed
-					s.BorderDashStyle = ChartDashStyle.Dash
-					s.Name = "Upshift curve (generic)"
-					chart.Series.Add(s)
-
-					s = New Series
-					's.Points.DataBindXY(Shiftpoly.gs_nUdown, Shiftpoly.gs_TqDown)
-					s.Points.DataBindXY(
-						shiftLines.Downshift.Select(Function(pt) pt.AngularSpeed.AsRPM) _
-											.ToArray(),
-						shiftLines.Downshift.Select(Function(pt) pt.Torque.Value()).ToArray())
-					s.ChartType = SeriesChartType.FastLine
-					s.BorderWidth = 2
-					s.Color = Color.DarkRed
-					s.BorderDashStyle = ChartDashStyle.Dash
-					s.Name = "Downshift curve (generic)"
-					chart.Series.Add(s)
-				End If
-				'End If
-			End If
-		End If
-
-		a.Name = "main"
-
-		a.AxisX.Title = "engine speed [1/min]"
-		a.AxisX.TitleFont = New Font("Helvetica", 10)
-		a.AxisX.LabelStyle.Font = New Font("Helvetica", 8)
-		a.AxisX.LabelAutoFitStyle = LabelAutoFitStyles.None
-		a.AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dot
-
-		a.AxisY.Title = "engine torque [Nm]"
-		a.AxisY.TitleFont = New Font("Helvetica", 10)
-		a.AxisY.LabelStyle.Font = New Font("Helvetica", 8)
-		a.AxisY.LabelAutoFitStyle = LabelAutoFitStyles.None
-		a.AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dot
-
-		a.AxisX.Minimum = 300
-		a.BorderDashStyle = ChartDashStyle.Solid
-		a.BorderWidth = 1
-
-		a.BackColor = Color.GhostWhite
-
-		chart.ChartAreas.Add(a)
-
-		chart.Titles.Add("Gear " & gear & " shift polygons")
-		chart.Titles(0).Font = New Font("Helvetica", 12)
-
-		chart.Update()
-
-		img = New Bitmap(chart.Width, chart.Height, PixelFormat.Format32bppArgb)
-		chart.DrawToBitmap(img, New Rectangle(0, 0, PicBox.Width, PicBox.Height))
-
-		PicBox.Image = img
-	End Sub
-
-
-	Private Function GetShiftLines(ByVal idleSpeed As PerSecond, engineFullLoadCurve As EngineFullLoadCurve,
-									vehicle As IVehicleEngineeringInputData, gears As IList(Of ITransmissionInputData), ByVal gear As Integer) _
-		As ShiftPolygon
-		Dim maxTqStr As String = LvGears.Items(gear).SubItems(GearboxTbl.MaxTorque).Text
-		Dim engine As CombustionEngineData = ConvertToEngineData(engineFullLoadCurve, idleSpeed, gear,
-																If(String.IsNullOrWhiteSpace(maxTqStr), Nothing, maxTqStr.ToDouble(0).SI (Of NewtonMeter)))
-		If gears.Count <= 1 Then
-			Return Nothing
-		End If
-		Dim rDyn As Meter = vehicle.DynamicTyreRadius
-		If rDyn.IsEqual(0) Then
-			If (vehicle.Axles.Count < 2) Then
-				Return Nothing
-			End If
-			rDyn = DeclarationData.Wheels.Lookup(vehicle.Axles(1).Wheels).DynamicTyreRadius
-		End If
-		If (rDyn.IsEqual(0)) Then
-			Return Nothing
-		End If
-		Dim shiftLines As ShiftPolygon = DeclarationData.Gearbox.ComputeShiftPolygon(
-			CType(CbGStype.SelectedValue, GearboxType), gear - 1,
-			engine.FullLoadCurves(CType(gear, UInteger)), gears, engine,
-			Double.Parse(LvGears.Items(0).SubItems(GearboxTbl.Ratio).Text, CultureInfo.InvariantCulture),
-			(rDyn))
-		Return shiftLines
-	End Function
-
-	Private Function ConvertToGears(gbx As ListView.ListViewItemCollection) As IList(Of ITransmissionInputData)
-		Dim retVal As List(Of ITransmissionInputData) = New List(Of ITransmissionInputData)
-		Dim value As Double
-
-		For i As Integer = 1 To gbx.Count - 1
-			If _
-				gbx(i).SubItems(GearboxTbl.Ratio).Text <> "" AndAlso Double.TryParse(gbx(i).SubItems(GearboxTbl.Ratio).Text, value) _
-				Then
-				Dim maxSpeed As PerSecond =
-						If _
-						(String.IsNullOrWhiteSpace(gbx(i).SubItems(GearboxTbl.MaxSpeed).Text), Nothing,
-						gbx(i).SubItems(GearboxTbl.MaxSpeed).Text.ToDouble().RPMtoRad())
-				retVal.Add(
-					New TransmissionInputData() _
-							With {.Ratio = value, .MaxInputSpeed = maxSpeed})
-
-			End If
-		Next
-		Return retVal
-	End Function
-
-
-#Region "Torque Converter"
-
-
-	'Browse TC file
-	Private Sub BtTCfileBrowse_Click(sender As Object, e As EventArgs) Handles BtTCfileBrowse.Click
-		If TorqueConverterFileBrowser.OpenDialog(FileRepl(TbTCfile.Text, GetPath(_gbxFile))) Then
-			TbTCfile.Text = GetFilenameWithoutDirectory(TorqueConverterFileBrowser.Files(0), GetPath(_gbxFile))
-		End If
-	End Sub
-
-	'Open TC file
-	Private Sub BtTCfileOpen_Click(sender As Object, e As EventArgs) Handles BtTCfileOpen.Click
-		OpenFiles(FileRepl(TbTCfile.Text, GetPath(_gbxFile)))
-	End Sub
-
-
-#End Region
-
-	Private Sub GroupBox1_Enter(sender As Object, e As EventArgs) Handles GroupBox1.Enter
-	End Sub
-
-	Public Sub New()
-
-		' Dieser Aufruf ist für den Designer erforderlich.
-		InitializeComponent()
-
-		' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
-	End Sub
-
-	Private Sub BtTCShiftFileBrowse_Click(sender As Object, e As EventArgs) Handles BtTCShiftFileBrowse.Click
-		If TorqueConverterShiftPolygonFileBrowser.OpenDialog(FileRepl(TBTCShiftPolygon.Text, GetPath(_gbxFile))) Then
-			TBTCShiftPolygon.Text = GetFilenameWithoutDirectory(TorqueConverterShiftPolygonFileBrowser.Files(0),
-																GetPath(_gbxFile))
-		End If
-	End Sub
-
-	Private Sub btnExportXML_Click(sender As Object, e As EventArgs) Handles btnExportXML.Click
-		If Not Cfg.DeclMode Then
-			MsgBox("XML Export is only supported in Declaration Mode")
-			Exit Sub
-		End If
-		If Not FolderFileBrowser.OpenDialog("") Then
-			Exit Sub
-		End If
-		Dim filePath As String = FolderFileBrowser.Files(0)
-
-		Dim data As Gearbox = FillGearboxData(_gbxFile)
-		If (Cfg.DeclMode) Then
-			Dim export As XDocument = New XMLDeclarationWriter(data.Manufacturer).GenerateVectoComponent(data, data)
-			export.Save(Path.Combine(filePath, data.ModelName + ".xml"))
-		Else
-			Dim export As XDocument = New XMLEngineeringWriter(_gbxFile, True, data.Manufacturer).GenerateVectoComponent(data,
-																														data)
-			export.Save(Path.Combine(filePath, data.ModelName + ".xml"))
-		End If
-	End Sub
-
-	Private Sub btnExportAxlGearXML_Click(sender As Object, e As EventArgs) Handles btnExportAxlGearXML.Click
-		If Not Cfg.DeclMode Then
-			MsgBox("XML Export is only supported in Declaration Mode")
-			Exit Sub
-		End If
-		If Not FolderFileBrowser.OpenDialog("") Then
-			Exit Sub
-		End If
-		Dim filePath As String = FolderFileBrowser.Files(0)
-
-		Dim data As Gearbox = FillGearboxData(_gbxFile)
-		If (Cfg.DeclMode) Then
-			Dim export As XDocument = New XMLDeclarationWriter(data.Manufacturer).GenerateVectoComponent(data)
-			export.Save(Path.Combine(filePath, data.ModelName + ".xml"))
-		Else
-			Dim export As XDocument = New XMLEngineeringWriter(_gbxFile, True, data.Manufacturer).GenerateVectoComponent(data)
-			export.Save(Path.Combine(filePath, data.ModelName + ".xml"))
-		End If
-	End Sub
+' Copyright 2017 European Union.
+' Licensed under the EUPL (the 'Licence');
+'
+' * You may not use this work except in compliance with the Licence.
+' * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl
+' * Unless required by applicable law or agreed to in writing,
+'   software distributed under the Licence is distributed on an "AS IS" basis,
+'   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+'
+' See the LICENSE.txt for the specific language governing permissions and limitations.
+Imports System.Collections.Generic
+Imports System.Drawing.Imaging
+Imports System.Globalization
+Imports System.IO
+Imports System.Linq
+Imports System.Windows.Forms.DataVisualization.Charting
+Imports System.Xml.Linq
+Imports TUGraz.VECTO.Input_Files
+Imports TUGraz.VectoCommon.InputData
+Imports TUGraz.VectoCommon.Models
+Imports TUGraz.VectoCommon.Utils
+Imports TUGraz.VectoCore.InputData.FileIO.JSON
+Imports TUGraz.VectoCore.InputData.Impl
+Imports TUGraz.VectoCore.InputData.Reader
+Imports TUGraz.VectoCore.Models.Declaration
+Imports TUGraz.VectoCore.Models.SimulationComponent.Data
+Imports TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
+Imports TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
+Imports TUGraz.VectoCore.OutputData.FileIO
+Imports TUGraz.VectoCore.OutputData.XML
+Imports TUGraz.VectoCore.Utils
+
+''' <summary>
+''' Gearbox Editor
+''' </summary>
+''' <remarks></remarks>
+Public Class GearboxForm
+	Private Enum GearboxTbl
+		GearNr = 0
+		'TorqueConverter = 1
+		Ratio = 1
+		LossMapEfficiency = 2
+		ShiftPolygons = 3
+		MaxTorque = 4
+		MaxSpeed = 5
+	End Enum
+
+	Private _gbxFile As String = ""
+	Public AutoSendTo As Boolean = False
+	Public JobDir As String = ""
+	Private _gearDialog As GearboxGearDialog
+
+	Private _changed As Boolean = False
+
+	'Before closing Editor: Check if file was changed and ask to save.
+	Private Sub F_GBX_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
+		If e.CloseReason <> CloseReason.ApplicationExitCall And e.CloseReason <> CloseReason.WindowsShutDown Then
+			e.Cancel = ChangeCheckCancel()
+		End If
+	End Sub
+
+	'Initialise.
+	Private Sub F_GBX_Load(sender As Object, e As EventArgs) Handles Me.Load
+
+		_gearDialog = New GearboxGearDialog
+
+		PnInertiaTI.Enabled = Not Cfg.DeclMode
+		GrGearShift.Enabled = Not Cfg.DeclMode
+		'ChTCon.Enabled = Not Cfg.DeclMode
+
+		CbGStype.Items.Clear()
+		CbGStype.ValueMember = "Value"
+		CbGStype.DisplayMember = "Label"
+
+		If (Cfg.DeclMode) Then
+			CbGStype.DataSource = [Enum].GetValues(GetType(GearboxType)) _
+				.Cast(Of GearboxType)() _
+				.Where(Function(type) type.ManualTransmission() OrElse type = GearboxType.ATSerial) _
+				.Select(Function(type) New With {Key .Value = type, .Label = type.GetLabel()}).ToList()
+		Else
+			CbGStype.DataSource = [Enum].GetValues(GetType(GearboxType)) _
+				.Cast(Of GearboxType)() _
+				.Where(Function(type) type.ManualTransmission() OrElse type.AutomaticTransmission()) _
+				.Select(Function(type) New With {Key .Value = type, .Label = type.GetLabel()}).ToList()
+		End If
+		DeclInit()
+
+		_changed = False
+		NewGbx()
+	End Sub
+
+	'Set generic values for Declaration mode.
+	Private Sub DeclInit()
+		Dim gbxType As GearboxType
+		Dim lv0 As ListViewItem
+
+		If Not Cfg.DeclMode Then Exit Sub
+
+		TBI_getr.Text = DeclarationData.Gearbox.Inertia.ToGUIFormat()	'cDeclaration.GbInertia
+
+		gbxType = CType(CbGStype.SelectedValue, GearboxType)	'CType(Me.CbGStype.SelectedIndex, tGearbox)
+
+		TbTracInt.Text = gbxType.TractionInterruption().ToGUIFormat()
+		TbMinTimeBetweenShifts.Text = DeclarationData.Gearbox.MinTimeBetweenGearshifts.ToGUIFormat()
+		'cDeclaration.MinTimeBetweenGearshift(GStype)
+
+		TbTqResv.Text = (DeclarationData.Gearbox.TorqueReserve * 100).ToGUIFormat()											  ' cDeclaration.TqResv
+		TbTqResvStart.Text = (DeclarationData.Gearbox.TorqueReserveStart * 100).ToGUIFormat() 'cDeclaration.TqResvStart
+		TbStartSpeed.Text = DeclarationData.Gearbox.StartSpeed.ToGUIFormat()	'cDeclaration.StartSpeed
+		TbStartAcc.Text = DeclarationData.Gearbox.StartAcceleration.ToGUIFormat()	' cDeclaration.StartAcc
+
+		tbUpshiftMinAcceleration.Text = DeclarationData.Gearbox.UpshiftMinAcceleration.ToGUIFormat()
+		tbTCCUpshiftMinAcceleration.Text = ""
+		tbTCLUpshiftMinAcceleration.Text = ""
+
+		tbDownshiftAfterUpshift.Text = DeclarationData.Gearbox.DownshiftAfterUpshiftDelay.ToGUIFormat()
+		tbUpshiftAfterDownshift.Text = DeclarationData.Gearbox.UpshiftAfterDownshiftDelay.ToGUIFormat()
+
+		'ChTCon.Checked = GStype.AutomaticTransmission()
+		For Each lv0 In LvGears.Items
+			lv0.SubItems(GearboxTbl.ShiftPolygons).Text = ""
+		Next
+	End Sub
+
+#Region "Toolbar"
+
+	Private Sub ToolStripBtNew_Click(sender As Object, e As EventArgs) Handles ToolStripBtNew.Click
+		NewGbx()
+	End Sub
+
+	Private Sub ToolStripBtOpen_Click(sender As Object, e As EventArgs) Handles ToolStripBtOpen.Click
+		If GearboxFileBrowser.OpenDialog(_gbxFile) Then
+			Try
+				OpenGbx(GearboxFileBrowser.Files(0), VehicleCategory.RigidTruck)
+			Catch ex As Exception
+				MsgBox("Failed to open Gearbox File: " + ex.Message)
+			End Try
+		End If
+	End Sub
+
+	Private Sub ToolStripBtSave_Click(sender As Object, e As EventArgs) Handles ToolStripBtSave.Click
+		SaveOrSaveAs(False)
+	End Sub
+
+	Private Sub ToolStripBtSaveAs_Click(sender As Object, e As EventArgs) Handles ToolStripBtSaveAs.Click
+		SaveOrSaveAs(True)
+	End Sub
+
+	Private Sub ToolStripBtSendTo_Click(sender As Object, e As EventArgs) Handles ToolStripBtSendTo.Click
+
+		If ChangeCheckCancel() Then Exit Sub
+
+		If _gbxFile = "" Then
+			If MsgBox("Save file now?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
+				If Not SaveOrSaveAs(True) Then Exit Sub
+			Else
+				Exit Sub
+			End If
+		End If
+
+		If Not VectoJobForm.Visible Then
+			JobDir = ""
+			VectoJobForm.Show()
+			VectoJobForm.VectoNew()
+		Else
+			VectoJobForm.WindowState = FormWindowState.Normal
+		End If
+
+		VectoJobForm.TbGBX.Text = GetFilenameWithoutDirectory(_gbxFile, JobDir)
+	End Sub
+
+	'Help
+	Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click
+		If File.Exists(MyAppPath & "User Manual\help.html") Then
+			Dim defaultBrowserPath As String = BrowserUtils.GetDefaultBrowserPath()
+			Process.Start(defaultBrowserPath,
+						String.Format("""file://{0}{1}""", MyAppPath, "User Manual\help.html#gearbox-editor"))
+		Else
+			MsgBox("User Manual not found!", MsgBoxStyle.Critical)
+		End If
+	End Sub
+
+#End Region
+
+	'New file
+	Private Sub NewGbx()
+		'Dim lvi As ListViewItem
+
+		If ChangeCheckCancel() Then Exit Sub
+
+		'CbGStype.SelectedIndex = 0
+
+		TbName.Text = ""
+		TbTracInt.Text = ""
+		TBI_getr.Text = ""
+
+		LvGears.Items.Clear()
+
+		LvGears.Items.Add(CreateListviewItem("Axle", 1, "1", "", "", ""))
+
+		'Me.ChSkipGears.Checked = False         'set by CbGStype.SelectedIndexChanged
+		'Me.ChShiftInside.Checked = False       'set by CbGStype.SelectedIndexChanged
+		TbTqResv.Text = (DeclarationData.Gearbox.TorqueReserve * 100).ToGUIFormat()
+		TbMinTimeBetweenShifts.Text = DeclarationData.Gearbox.MinTimeBetweenGearshifts.ToGUIFormat()
+		TbTqResvStart.Text = (DeclarationData.Gearbox.TorqueReserveStart * 100).ToGUIFormat()
+		TbStartSpeed.Text = DeclarationData.Gearbox.StartSpeed.ToGUIFormat() ' in m/s!
+		TbStartAcc.Text = DeclarationData.Gearbox.StartAcceleration.ToGUIFormat()
+
+		tbUpshiftMinAcceleration.Text = DeclarationData.Gearbox.UpshiftMinAcceleration.ToGUIFormat()
+		tbTCLUpshiftMinAcceleration.Text = ""
+		tbTCCUpshiftMinAcceleration.Text = ""
+
+		tbDownshiftAfterUpshift.Text = DeclarationData.Gearbox.DownshiftAfterUpshiftDelay.ToGUIFormat()
+		tbUpshiftAfterDownshift.Text = DeclarationData.Gearbox.UpshiftAfterDownshiftDelay.ToGUIFormat()
+
+		'ChTCon.Checked = False				'set by CbGStype.SelectedIndexChanged
+		TbTCfile.Text = ""
+		TbTCrefrpm.Text = ""
+		TbTCinertia.Text = ""
+
+		DeclInit()
+
+		_gbxFile = ""
+		Text = "GBX Editor"
+		LbStatus.Text = ""
+
+
+		_changed = False
+		Try
+			UpdatePic()
+		Catch
+		End Try
+	End Sub
+
+	'Open file
+	Public Sub OpenGbx(file As String, vehicleCategory As VehicleCategory)
+
+		If ChangeCheckCancel() Then Exit Sub
+
+		Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(file), 
+																IEngineeringInputDataProvider)
+		Dim vehicle As IVehicleEngineeringInputData = inputData.JobInputData.Vehicle
+		Dim gearbox As IGearboxEngineeringInputData = vehicle.GearboxInputData
+		Dim axlegear As IAxleGearInputData = vehicle.AxleGearInputData
+
+		_vehicleCategory = vehicleCategory
+
+		If Cfg.DeclMode <> gearbox.SavedInDeclarationMode Then
+			Select Case WrongMode()
+				Case 1
+					Close()
+					MainForm.RbDecl.Checked = Not MainForm.RbDecl.Checked
+					MainForm.OpenVectoFile(file)
+				Case -1
+					Exit Sub
+			End Select
+		End If
+
+		Dim basePath As String = Path.GetDirectoryName(file)
+		TbName.Text = gearbox.Model
+		TbTracInt.Text = gearbox.TractionInterruption.ToGUIFormat()
+		TBI_getr.Text = gearbox.Inertia.ToGUIFormat()
+
+		LvGears.Items.Clear()
+
+		Dim lossmap As String = ""
+		Try
+			lossmap = If(axlegear.LossMap Is Nothing, axlegear.Efficiency.ToGUIFormat(),
+						GetRelativePath(axlegear.LossMap.Source, basePath))
+		Catch ex As Exception
+		End Try
+
+		LvGears.Items.Add(CreateListviewItem("Axle", axlegear.Ratio, lossmap, "", "", ""))
+
+		For Each gear As ITransmissionInputData In gearbox.Gears
+			lossmap = ""
+			Try
+				lossmap = If(gear.LossMap Is Nothing, gear.Efficiency.ToGUIFormat(), GetRelativePath(gear.LossMap.Source, basePath))
+			Catch ex As Exception
+
+			End Try
+			LvGears.Items.Add(CreateListviewItem(gear.Gear.ToString("00"), gear.Ratio,
+												lossmap,
+												If(gear.ShiftPolygon Is Nothing, "", GetRelativePath(gear.ShiftPolygon.Source, basePath)),
+												If(gear.MaxTorque Is Nothing, "", gear.MaxTorque.ToGUIFormat()),
+												If(gear.MaxInputSpeed Is Nothing, "", gear.MaxInputSpeed.AsRPM.ToGUIFormat())))
+		Next
+
+		TbTqResv.Text = (gearbox.TorqueReserve * 100).ToGUIFormat()
+		TbMinTimeBetweenShifts.Text = gearbox.MinTimeBetweenGearshift.ToGUIFormat()
+		TbTqResvStart.Text = (gearbox.StartTorqueReserve * 100).ToGUIFormat()
+		TbStartSpeed.Text = gearbox.StartSpeed.ToGUIFormat()
+		TbStartAcc.Text = gearbox.StartAcceleration.ToGUIFormat()
+
+		Dim torqueConverter As ITorqueConverterEngineeringInputData = gearbox.TorqueConverter
+		If torqueConverter Is Nothing OrElse gearbox.Type.ManualTransmission() Then
+			TbTCfile.Text = ""
+			TbTCrefrpm.Text = ""
+			TbTCinertia.Text = ""
+			TBTCShiftPolygon.Text = ""
+			tbTCmaxSpeed.Text = ""
+			tbTCLUpshiftMinAcceleration.Text = ""
+			tbTCCUpshiftMinAcceleration.Text = ""
+
+		Else
+			TbTCfile.Text = If(torqueConverter.TCData Is Nothing, "", GetRelativePath(torqueConverter.TCData.Source, basePath))
+			TbTCrefrpm.Text = If(torqueConverter.ReferenceRPM Is Nothing, "", torqueConverter.ReferenceRPM.AsRPM.ToGUIFormat())
+			TbTCinertia.Text = If(torqueConverter.Inertia Is Nothing, "", torqueConverter.Inertia.ToGUIFormat())
+			TBTCShiftPolygon.Text =
+				If(torqueConverter.ShiftPolygon Is Nothing, "", GetRelativePath(torqueConverter.ShiftPolygon.Source, basePath))
+			tbTCmaxSpeed.Text =
+				If(torqueConverter.MaxInputSpeed Is Nothing, "", torqueConverter.MaxInputSpeed.AsRPM.ToGUIFormat())
+			tbTCLUpshiftMinAcceleration.Text = torqueConverter.CLUpshiftMinAcceleration.ToGUIFormat()
+			tbTCCUpshiftMinAcceleration.Text = torqueConverter.CCUpshiftMinAcceleration.ToGUIFormat()
+		End If
+
+		tbUpshiftMinAcceleration.Text = gearbox.UpshiftMinAcceleration.ToGUIFormat()
+		tbDownshiftAfterUpshift.Text = gearbox.DownshiftAfterUpshiftDelay.ToGUIFormat()
+		tbUpshiftAfterDownshift.Text = gearbox.UpshiftAfterDownshiftDelay.ToGUIFormat()
+
+		tbATShiftTime.Text = gearbox.PowershiftShiftTime.ToGUIFormat()
+
+		CbGStype.SelectedValue = gearbox.Type
+
+
+		DeclInit()
+
+
+		GearboxFileBrowser.UpdateHistory(file)
+		Text = GetFilenameWithoutPath(file, True)
+		LbStatus.Text = ""
+		UpdateGearboxInfoText()
+		_gbxFile = file
+		Activate()
+
+		_changed = False
+		Try
+			UpdatePic()
+		Catch
+		End Try
+	End Sub
+
+	Private Function CreateListviewItem(gear As String, ratio As Double, getrMap As String,
+										shiftPolygon As String, maxTorque As String, maxSpeed As String) As ListViewItem
+		Dim retVal As ListViewItem = New ListViewItem(gear)
+		'retVal.SubItems.Add(tc)
+		retVal.SubItems.Add(ratio.ToGUIFormat())
+		retVal.SubItems.Add(getrMap)
+		retVal.SubItems.Add(shiftPolygon)
+		retVal.SubItems.Add(maxTorque)
+		retVal.SubItems.Add(maxSpeed)
+		Return retVal
+	End Function
+
+	'Save or Save As function = true if file is saved
+	Private Function SaveOrSaveAs(saveAs As Boolean) As Boolean
+		If _gbxFile = "" Or saveAs Then
+			If GearboxFileBrowser.SaveDialog(_gbxFile) Then
+				_gbxFile = GearboxFileBrowser.Files(0)
+			Else
+				Return False
+			End If
+		End If
+		Return SaveGbx(_gbxFile)
+	End Function
+
+	'Save file
+	Private Function SaveGbx(file As String) As Boolean
+
+		Dim gearbox As Gearbox = FillGearboxData(file)
+
+
+		If Not gearbox.SaveFile Then
+			MsgBox("Cannot safe to " & file, MsgBoxStyle.Critical)
+			Return False
+		End If
+
+		If AutoSendTo Then
+			If VectoJobForm.Visible Then
+				If UCase(FileRepl(VectoJobForm.TbGBX.Text, JobDir)) <> UCase(file) Then _
+					VectoJobForm.TbGBX.Text = GetFilenameWithoutDirectory(file, JobDir)
+				VectoJobForm.UpdatePic()
+			End If
+		End If
+
+		GearboxFileBrowser.UpdateHistory(file)
+		Text = GetFilenameWithoutPath(file, True)
+		LbStatus.Text = ""
+
+		_changed = False
+
+		Return True
+	End Function
+
+	Private Function FillGearboxData(file As String) As Gearbox
+		Dim gearbox As Gearbox
+		Dim i As Integer
+
+		gearbox = New Gearbox
+		gearbox.FilePath = file
+
+		gearbox.ModelName = TbName.Text
+		If Trim(gearbox.ModelName) = "" Then gearbox.ModelName = "Undefined"
+
+		gearbox.TracIntrSi = TbTracInt.Text.ToDouble(0)
+		gearbox.GbxInertia = TBI_getr.Text.ToDouble(0)
+
+		For i = 0 To LvGears.Items.Count - 1
+			'GBX0.IsTCgear.Add(Me.LvGears.Items(i).SubItems(GearboxTbl.TorqueConverter).Text = "on" And i > 0)
+			gearbox.GearRatios.Add(LvGears.Items(i).SubItems(GearboxTbl.Ratio).Text.ToDouble(0))
+			gearbox.GearLossmaps.Add(New SubPath)
+			gearbox.GearLossMap(i) = LvGears.Items(i).SubItems(GearboxTbl.LossMapEfficiency).Text
+			gearbox.GearshiftFiles.Add(New SubPath)
+			gearbox.ShiftPolygonFile(i) = LvGears.Items(i).SubItems(GearboxTbl.ShiftPolygons).Text
+			'GBX0.FldFiles.Add(New cSubPath)
+			'GBX0.FldFile(i) = Me.LvGears.Items(i).SubItems(GearboxTbl.MaxTorque).Text
+			gearbox.MaxTorque.Add(LvGears.Items(i).SubItems(GearboxTbl.MaxTorque).Text)
+			gearbox.MaxSpeed.Add(LvGears.Items(i).SubItems(GearboxTbl.MaxSpeed).Text)
+		Next
+
+		gearbox.TorqueResv = TbTqResv.Text.ToDouble(0)
+		gearbox.ShiftTime = TbMinTimeBetweenShifts.Text.ToDouble(0)
+		gearbox.TorqueResvStart = TbTqResvStart.Text.ToDouble(0)
+		gearbox.StartSpeed = TbStartSpeed.Text.ToDouble(0)
+		gearbox.StartAcc = TbStartAcc.Text.ToDouble(0)
+
+		gearbox.Type = CType(CbGStype.SelectedValue, GearboxType)
+
+		gearbox.Type.AutomaticTransmission()
+		gearbox.TorqueConverterFile = TbTCfile.Text
+		gearbox.TorqueConverterReferenceRpm = TbTCrefrpm.Text.ToDouble(0)
+		gearbox.TorqueConverterInertia = TbTCinertia.Text.ToDouble(0)
+		gearbox.TorqueConverterShiftPolygonFile = TBTCShiftPolygon.Text
+		gearbox.TorqueConverterMaxSpeed = tbTCmaxSpeed.Text.ToDouble(0)
+
+		gearbox.DownshiftAfterUpshift = tbDownshiftAfterUpshift.Text.ToDouble(0)
+		gearbox.UpshiftAfterDownshift = tbUpshiftAfterDownshift.Text.ToDouble(0)
+
+		gearbox.UpshiftMinAcceleration = tbUpshiftMinAcceleration.Text.ToDouble(0)
+		gearbox.TCLUpshiftMinAcceleration = tbTCLUpshiftMinAcceleration.Text.ToDouble(0)
+		gearbox.TCCUpshiftMinAcceleration = tbTCCUpshiftMinAcceleration.Text.ToDouble(0)
+
+		gearbox.PSShiftTime = tbATShiftTime.Text.ToDouble(0)
+		Return gearbox
+	End Function
+
+#Region "Change Events"
+
+	'Change Status ändern |@@| Change Status change
+	Private Sub Change()
+		If Not _changed Then
+			LbStatus.Text = "Unsaved changes in current file"
+			_changed = True
+		End If
+	End Sub
+
+	' "Save changes ?" ...liefert True wenn User Vorgang abbricht |@@| Save changes? "... Returns True if user aborts
+	Private Function ChangeCheckCancel() As Boolean
+
+		If _changed Then
+			Select Case MsgBox("Save changes ?", MsgBoxStyle.YesNoCancel)
+				Case MsgBoxResult.Yes
+					Return Not SaveOrSaveAs(False)
+				Case MsgBoxResult.Cancel
+					Return True
+				Case Else 'MsgBoxResult.No
+					_changed = False
+					Return False
+			End Select
+
+		Else
+
+			Return False
+
+		End If
+	End Function
+
+	Private Sub TbName_TextChanged(sender As Object, e As EventArgs) _
+		Handles TbName.TextChanged, TBI_getr.TextChanged, TbTracInt.TextChanged, TbTqResv.TextChanged,
+				TbMinTimeBetweenShifts.TextChanged, TbTqResvStart.TextChanged, TbStartSpeed.TextChanged, TbStartAcc.TextChanged,
+				TbTCfile.TextChanged,
+				tbTCCUpshiftMinAcceleration.TextChanged, tbTCLUpshiftMinAcceleration.TextChanged
+		Change()
+	End Sub
+
+#End Region
+
+	'Save and close
+	Private Sub ButOK_Click(sender As Object, e As EventArgs) Handles ButOK.Click
+		If SaveOrSaveAs(False) Then Close()
+	End Sub
+
+	'Cancel
+	Private Sub ButCancel_Click(sender As Object, e As EventArgs) Handles ButCancel.Click
+		Close()
+	End Sub
+
+	'Enable/Disable settings for specific transmission types
+	Private Sub CbGStype_SelectedIndexChanged(sender As Object, e As EventArgs) _
+		Handles CbGStype.SelectedIndexChanged
+		Dim gStype As GearboxType = CType(CbGStype.SelectedValue, GearboxType)
+
+		Change()
+
+		'ChTCon.Enabled = (GStype.AutomaticTransmission())
+		gbTC.Enabled = gStype.AutomaticTransmission()
+		pnTcEngineering.Enabled = Not Cfg.DeclMode AndAlso gStype.AutomaticTransmission()
+		gbTCAccMin.Enabled = Not Cfg.DeclMode AndAlso gStype.AutomaticTransmission()
+		gbPowershiftLosses.Enabled = Not Cfg.DeclMode AndAlso gStype.AutomaticTransmission()
+		TbStartAcc.Enabled = Not gStype.AutomaticTransmission()
+		TbStartSpeed.Enabled = Not gStype.AutomaticTransmission()
+		TbTqResv.Enabled = Not gStype.AutomaticTransmission()
+		GroupBox2.Enabled = Not gStype.AutomaticTransmission()
+		TBI_getr.Enabled = Not gStype.AutomaticTransmission()
+		TbTracInt.Enabled = Not gStype.AutomaticTransmission()
+		tbDownshiftAfterUpshift.Enabled = Not gStype.AutomaticTransmission()
+		tbUpshiftAfterDownshift.Enabled = Not gStype.AutomaticTransmission()
+		UpdateGearboxInfoText()
+	End Sub
+
+	Private Sub UpdateGearboxInfoText()
+		Dim gStype As GearboxType = CType(CbGStype.SelectedValue, GearboxType)
+
+		Dim text As String = ""
+		If (gStype = GearboxType.ATSerial) Then
+			If LvGears.Items.Count > 2 Then
+				Dim ratio1 As Double = LvGears.Items.Item(1).SubItems(GearboxTbl.Ratio).Text.ToDouble(0)
+				Dim ratio2 As Double = LvGears.Items.Item(2).SubItems(GearboxTbl.Ratio).Text.ToDouble(0)
+
+				If ratio1 / ratio2 >= DeclarationData.Gearbox.TorqueConverterSecondGearThreshold(_vehicleCategory) Then
+					text = "Torque converter is used in 1st and 2nd gear"
+				Else
+					text = "Torque converter is used in 1st gear only"
+				End If
+			End If
+		End If
+		lblGbxInfo.Text = text
+	End Sub
+
+
+	Private Sub LvGears_SelectedIndexChanged(sender As Object, e As EventArgs) _
+		Handles LvGears.SelectedIndexChanged
+		Try
+			UpdatePic()
+			btExportVGBS.Enabled = True
+		Catch
+			btExportVGBS.Enabled = False
+		End Try
+	End Sub
+
+#Region "Gears"
+
+	'Gear-DoubleClick
+	Private Sub LvGears_MouseDoubleClick(ByVal sender As Object, ByVal e As MouseEventArgs) _
+		Handles LvGears.MouseDoubleClick
+		EditGear()
+	End Sub
+
+	'Gear-KeyDown
+	Private Sub LvGears_KeyDown(sender As Object, e As KeyEventArgs) Handles LvGears.KeyDown
+		Select Case e.KeyCode
+			Case Keys.Delete, Keys.Back
+				RemoveGear(False)
+			Case Keys.Enter
+				EditGear()
+		End Select
+	End Sub
+
+	'Remove Gear Button
+	Private Sub BtClearGear_Click(sender As Object, e As EventArgs) Handles BtRemGear.Click
+		RemoveGear(False)
+	End Sub
+
+	'Add Gear button
+	Private Sub BtAddGear_Click(sender As Object, e As EventArgs) Handles BtAddGear.Click
+		AddGear()
+		LvGears.Items(LvGears.Items.Count - 1).Selected = True
+		EditGear()
+	End Sub
+
+	'Edit Gear
+	Private Sub EditGear()
+
+		Do
+
+			'GearDia.ChIsTCgear.Enabled = (Me.ChTCon.Checked And Me.LvGears.SelectedIndices(0) > 0)
+			_gearDialog.GearboxType = CType(CbGStype.SelectedValue, GearboxType)
+			_gearDialog.PnShiftPoly.Enabled = (Not Cfg.DeclMode And LvGears.SelectedIndices(0) > 0)
+			_gearDialog.PnFld.Enabled = (LvGears.SelectedIndices(0) > 0)
+			_gearDialog.GbxPath = GetPath(_gbxFile)
+			_gearDialog.TbGear.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.GearNr).Text
+			_gearDialog.TbRatio.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.Ratio).Text
+			_gearDialog.TbMapPath.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.LossMapEfficiency).Text
+			If LvGears.SelectedIndices(0) > 0 Then
+				_gearDialog.TbShiftPolyFile.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.ShiftPolygons).Text
+				_gearDialog.TbMaxTorque.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.MaxTorque).Text
+				_gearDialog.tbMaxSpeed.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.MaxSpeed).Text
+			Else
+				_gearDialog.TbShiftPolyFile.Text = ""
+				_gearDialog.TbMaxTorque.Text = ""
+				_gearDialog.tbMaxSpeed.Text = ""
+			End If
+
+			If LvGears.SelectedItems(0).Index = 0 Then
+				_gearDialog.BtPrevious.Enabled = False
+			Else
+				_gearDialog.BtPrevious.Enabled = True
+			End If
+
+			If _gearDialog.ShowDialog = DialogResult.OK Then
+				'Me.LvGears.SelectedItems(0).SubItems(GearboxTbl.TorqueConverter).Text = "-"
+				LvGears.SelectedItems(0).SubItems(GearboxTbl.Ratio).Text = _gearDialog.TbRatio.Text
+				LvGears.SelectedItems(0).SubItems(GearboxTbl.LossMapEfficiency).Text = _gearDialog.TbMapPath.Text
+				LvGears.SelectedItems(0).SubItems(GearboxTbl.ShiftPolygons).Text = _gearDialog.TbShiftPolyFile.Text
+				LvGears.SelectedItems(0).SubItems(GearboxTbl.MaxTorque).Text = _gearDialog.TbMaxTorque.Text
+				LvGears.SelectedItems(0).SubItems(GearboxTbl.MaxSpeed).Text = _gearDialog.tbMaxSpeed.Text
+
+				UpdateGearboxInfoText()
+				Try
+					UpdatePic()
+				Catch
+				End Try
+
+				Change()
+
+			Else
+
+				If LvGears.SelectedItems(0).SubItems(GearboxTbl.Ratio).Text = "" Then RemoveGear(True)
+
+			End If
+
+			If _gearDialog.NextGear Then
+				If LvGears.Items.Count - 1 = LvGears.SelectedIndices(0) Then AddGear()
+
+				LvGears.Items(LvGears.SelectedIndices(0) + 1).Selected = True
+			End If
+
+			If _gearDialog.PreviousGear AndAlso LvGears.SelectedIndices(0) > 0 Then
+				LvGears.Items(LvGears.SelectedIndices(0) - 1).Selected = True
+			End If
+
+		Loop Until Not (_gearDialog.NextGear OrElse _gearDialog.PreviousGear)
+	End Sub
+
+	'Add Gear
+	Private Sub AddGear()
+		Dim lvi As ListViewItem
+
+		lvi = CreateListviewItem(LvGears.Items.Count.ToString("00"), 1, "", "", "", "")
+
+		LvGears.Items.Add(lvi)
+
+		lvi.EnsureVisible()
+		UpdateGearboxInfoText()
+		LvGears.Focus()
+
+		'Change() => NO! Change() is already handled by EditGear
+	End Sub
+
+	'Remove Gear
+	Private Sub RemoveGear(noChange As Boolean)
+		Dim i0 As Integer
+		Dim i As Integer
+		Dim lv0 As ListViewItem
+
+		If LvGears.Items.Count < 2 Then Exit Sub
+
+		If LvGears.SelectedItems.Count = 0 Then LvGears.Items(LvGears.Items.Count - 1).Selected = True
+
+		i0 = LvGears.SelectedItems(0).Index
+
+		If i0 = 0 Then Exit Sub 'Must not remove axle
+
+		LvGears.SelectedItems(0).Remove()
+
+		i = 0
+		For Each lv0 In LvGears.Items
+			If lv0.SubItems(GearboxTbl.GearNr).Text = "Axle" Then Continue For
+			i += 1
+			lv0.SubItems(GearboxTbl.GearNr).Text = i.ToString("00")
+		Next
+
+		If i0 < LvGears.Items.Count Then
+			LvGears.Items(i0).Selected = True
+			LvGears.Items(i0).EnsureVisible()
+		End If
+		UpdateGearboxInfoText()
+		LvGears.Focus()
+		Try
+			UpdatePic()
+		Catch
+		End Try
+
+		If Not noChange Then Change()
+	End Sub
+
+
+#End Region
+
+
+#Region "Open File Context Menu"
+
+	Private _contextMenuFiles As String()
+	Private _vehicleCategory As VehicleCategory
+
+	Private Sub OpenFiles(ParamArray files() As String)
+
+		If files.Length = 0 Then Exit Sub
+
+		_contextMenuFiles = files
+
+		OpenWithToolStripMenuItem.Text = "Open with " & Cfg.OpenCmdName
+
+		CmOpenFile.Show(Windows.Forms.Cursor.Position)
+	End Sub
+
+	Private Sub OpenWithToolStripMenuItem_Click(sender As Object, e As EventArgs) _
+		Handles OpenWithToolStripMenuItem.Click
+		If Not FileOpenAlt(_contextMenuFiles(0)) Then MsgBox("Failed to open file!")
+	End Sub
+
+	Private Sub ShowInFolderToolStripMenuItem_Click(sender As Object, e As EventArgs) _
+		Handles ShowInFolderToolStripMenuItem.Click
+		If File.Exists(_contextMenuFiles(0)) Then
+			Try
+				Process.Start("explorer", "/select,""" & _contextMenuFiles(0) & "")
+			Catch ex As Exception
+				MsgBox("Failed to open file!")
+			End Try
+		Else
+			MsgBox("File not found!")
+		End If
+	End Sub
+
+#End Region
+
+
+	Private Sub UpdatePic()
+
+		Dim path As String
+
+		Dim chart As Chart
+		Dim s As Series
+		Dim a As ChartArea
+		Dim img As Bitmap
+		Dim gear As Integer
+		'Dim fullLoadCurve As EngineFullLoadCurve = Nothing
+		'Dim shiftOk As Boolean
+
+
+		PicBox.Image = Nothing
+
+		Dim shiftPolygon As ShiftPolygon = Nothing
+		'Dim engineFld As FullLoadCurve
+
+		If LvGears.Items.Count <= 1 Then Exit Sub
+
+		Try
+			If LvGears.SelectedItems.Count > 0 AndAlso LvGears.SelectedIndices(0) > 0 Then
+				path = FileRepl(LvGears.SelectedItems(0).SubItems(GearboxTbl.ShiftPolygons).Text, GetPath(_gbxFile))
+				gear = LvGears.SelectedIndices(0)
+			Else
+				path = FileRepl(LvGears.Items(1).SubItems(GearboxTbl.ShiftPolygons).Text, GetPath(_gbxFile))
+				gear = 1
+			End If
+
+			If File.Exists(path) Then shiftPolygon = ShiftPolygonReader.ReadFromFile(path)
+
+		Catch ex As Exception
+
+		End Try
+
+		chart = New Chart
+		chart.Width = PicBox.Width
+		chart.Height = PicBox.Height
+
+		a = New ChartArea
+
+		'Shiftpolygons from file
+
+		If Not shiftPolygon Is Nothing Then
+			s = New Series
+			s.Points.DataBindXY(shiftPolygon.Upshift.Select(Function(x) x.AngularSpeed.AsRPM).ToArray(),
+								shiftPolygon.Upshift.Select(Function(x) x.Torque.Value()).ToArray())
+			s.ChartType = SeriesChartType.FastLine
+			s.BorderWidth = 2
+			s.Color = Color.DarkRed
+			s.Name = "Upshift curve"
+			chart.Series.Add(s)
+
+			s = New Series
+			s.Points.DataBindXY(shiftPolygon.Downshift.Select(Function(x) x.AngularSpeed.AsRPM).ToArray(),
+								shiftPolygon.Downshift.Select(Function(x) x.Torque.Value()).ToArray())
+			s.ChartType = SeriesChartType.FastLine
+			s.BorderWidth = 2
+			s.Color = Color.DarkRed
+			s.Name = "Downshift curve"
+			chart.Series.Add(s)
+		End If
+
+		'Dim vectoJob As VectoJob = New VectoJob() With {.FilePath = VectoJobForm.VECTOfile}
+		'Dim vectoOk As Boolean = vectoJob.ReadFile()
+		Dim jobFile As String = VectoJobForm.VectoFile
+		If Not jobFile Is Nothing AndAlso File.Exists(jobFile) Then
+
+			Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadJsonJob(jobFile), 
+																	IEngineeringInputDataProvider)
+			If (inputData Is Nothing) Then
+				Exit Sub
+			End If
+			Dim vehicle As IVehicleEngineeringInputData = inputData.JobInputData.Vehicle
+			'inputData = TryCast(JSONInputDataFactory.ReadComponentData(vectoJob.PathEng(False)), IEngineeringInputDataProvider)
+			Dim engine As IEngineEngineeringInputData = inputData.JobInputData.Vehicle.EngineInputData
+			Dim engineFld As EngineFullLoadCurve = FullLoadCurveReader.Create(engine.FullLoadCurve)
+
+
+			s = New Series
+			s.Points.DataBindXY(engineFld.FullLoadEntries.Select(Function(x) x.EngineSpeed.AsRPM).ToArray(),
+								engineFld.FullLoadEntries.Select(Function(x) x.TorqueFullLoad.Value()).ToArray())
+			s.ChartType = SeriesChartType.FastLine
+			s.BorderWidth = 2
+			s.Color = Color.DarkBlue
+			s.Name = "Full load"
+			chart.Series.Add(s)
+
+			If VectoJobForm.Visible AndAlso engine.IdleSpeed > 0 Then
+				'If FLD0.Init(VectoJobForm.n_idle) Then
+
+				'Dim fullLoadCurve As FullLoadCurve = ConvertToFullLoadCurve(FLD0.LnU, FLD0.LTq)
+				Dim gears As IList(Of ITransmissionInputData) = ConvertToGears(LvGears.Items)
+				Dim shiftLines As ShiftPolygon = GetShiftLines(engine.IdleSpeed, engineFld, vehicle, gears, gear)
+				If (Not IsNothing(shiftLines)) Then
+
+
+					s = New Series
+
+					's.Points.DataBindXY(Shiftpoly.gs_nUup, Shiftpoly.gs_TqUp)
+					s.Points.DataBindXY(
+						shiftLines.Upshift.Select(Function(pt) pt.AngularSpeed.AsRPM).
+											ToArray(),
+						shiftLines.Upshift.Select(Function(pt) pt.Torque.Value()).ToArray())
+					s.ChartType = SeriesChartType.FastLine
+					s.BorderWidth = 2
+					s.Color = Color.DarkRed
+					s.BorderDashStyle = ChartDashStyle.Dash
+					s.Name = "Upshift curve (generic)"
+					chart.Series.Add(s)
+
+					s = New Series
+					's.Points.DataBindXY(Shiftpoly.gs_nUdown, Shiftpoly.gs_TqDown)
+					s.Points.DataBindXY(
+						shiftLines.Downshift.Select(Function(pt) pt.AngularSpeed.AsRPM) _
+											.ToArray(),
+						shiftLines.Downshift.Select(Function(pt) pt.Torque.Value()).ToArray())
+					s.ChartType = SeriesChartType.FastLine
+					s.BorderWidth = 2
+					s.Color = Color.DarkRed
+					s.BorderDashStyle = ChartDashStyle.Dash
+					s.Name = "Downshift curve (generic)"
+					chart.Series.Add(s)
+				End If
+				'End If
+			End If
+		End If
+
+		a.Name = "main"
+
+		a.AxisX.Title = "engine speed [1/min]"
+		a.AxisX.TitleFont = New Font("Helvetica", 10)
+		a.AxisX.LabelStyle.Font = New Font("Helvetica", 8)
+		a.AxisX.LabelAutoFitStyle = LabelAutoFitStyles.None
+		a.AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dot
+
+		a.AxisY.Title = "engine torque [Nm]"
+		a.AxisY.TitleFont = New Font("Helvetica", 10)
+		a.AxisY.LabelStyle.Font = New Font("Helvetica", 8)
+		a.AxisY.LabelAutoFitStyle = LabelAutoFitStyles.None
+		a.AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dot
+
+		a.AxisX.Minimum = 300
+		a.BorderDashStyle = ChartDashStyle.Solid
+		a.BorderWidth = 1
+
+		a.BackColor = Color.GhostWhite
+
+		chart.ChartAreas.Add(a)
+
+		chart.Titles.Add("Gear " & gear & " shift polygons")
+		chart.Titles(0).Font = New Font("Helvetica", 12)
+
+		chart.Update()
+
+		img = New Bitmap(chart.Width, chart.Height, PixelFormat.Format32bppArgb)
+		chart.DrawToBitmap(img, New Rectangle(0, 0, PicBox.Width, PicBox.Height))
+
+		PicBox.Image = img
+	End Sub
+
+
+	Private Function GetShiftLines(ByVal idleSpeed As PerSecond, engineFullLoadCurve As EngineFullLoadCurve,
+									vehicle As IVehicleEngineeringInputData, gears As IList(Of ITransmissionInputData), ByVal gear As Integer) _
+		As ShiftPolygon
+		Dim maxTqStr As String = LvGears.Items(gear).SubItems(GearboxTbl.MaxTorque).Text
+		Dim engine As CombustionEngineData = ConvertToEngineData(engineFullLoadCurve, idleSpeed, gear,
+																If(String.IsNullOrWhiteSpace(maxTqStr), Nothing, maxTqStr.ToDouble(0).SI(Of NewtonMeter)))
+		If gears.Count <= 1 Then
+			Return Nothing
+		End If
+		Dim rDyn As Meter = vehicle.DynamicTyreRadius
+		If rDyn.IsEqual(0) Then
+			If (vehicle.Axles.Count < 2) Then
+				Return Nothing
+			End If
+			rDyn = DeclarationData.Wheels.Lookup(vehicle.Axles(1).Wheels).DynamicTyreRadius
+		End If
+		If (rDyn.IsEqual(0)) Then
+			Return Nothing
+		End If
+		Dim shiftLines As ShiftPolygon = DeclarationData.Gearbox.ComputeShiftPolygon(
+			CType(CbGStype.SelectedValue, GearboxType), gear - 1,
+			engine.FullLoadCurves(CType(gear, UInteger)), gears, engine,
+			Double.Parse(LvGears.Items(0).SubItems(GearboxTbl.Ratio).Text, CultureInfo.InvariantCulture),
+			(rDyn))
+		Return shiftLines
+	End Function
+
+	Private Function ConvertToGears(gbx As ListView.ListViewItemCollection) As IList(Of ITransmissionInputData)
+		Dim retVal As List(Of ITransmissionInputData) = New List(Of ITransmissionInputData)
+		Dim value As Double
+
+		For i As Integer = 1 To gbx.Count - 1
+			If _
+				gbx(i).SubItems(GearboxTbl.Ratio).Text <> "" AndAlso Double.TryParse(gbx(i).SubItems(GearboxTbl.Ratio).Text, value) _
+				Then
+				Dim maxSpeed As PerSecond =
+						If _
+						(String.IsNullOrWhiteSpace(gbx(i).SubItems(GearboxTbl.MaxSpeed).Text), Nothing,
+						gbx(i).SubItems(GearboxTbl.MaxSpeed).Text.ToDouble().RPMtoRad())
+				retVal.Add(
+					New TransmissionInputData() _
+							With {.Ratio = value, .MaxInputSpeed = maxSpeed})
+
+			End If
+		Next
+		Return retVal
+	End Function
+
+
+#Region "Torque Converter"
+
+
+	'Browse TC file
+	Private Sub BtTCfileBrowse_Click(sender As Object, e As EventArgs) Handles BtTCfileBrowse.Click
+		If TorqueConverterFileBrowser.OpenDialog(FileRepl(TbTCfile.Text, GetPath(_gbxFile))) Then
+			TbTCfile.Text = GetFilenameWithoutDirectory(TorqueConverterFileBrowser.Files(0), GetPath(_gbxFile))
+		End If
+	End Sub
+
+	'Open TC file
+	Private Sub BtTCfileOpen_Click(sender As Object, e As EventArgs) Handles BtTCfileOpen.Click
+		OpenFiles(FileRepl(TbTCfile.Text, GetPath(_gbxFile)))
+	End Sub
+
+
+#End Region
+
+	Private Sub GroupBox1_Enter(sender As Object, e As EventArgs) Handles GroupBox1.Enter
+	End Sub
+
+	Public Sub New()
+
+		' Dieser Aufruf ist für den Designer erforderlich.
+		InitializeComponent()
+
+		' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
+	End Sub
+
+	Private Sub BtTCShiftFileBrowse_Click(sender As Object, e As EventArgs) Handles BtTCShiftFileBrowse.Click
+		If TorqueConverterShiftPolygonFileBrowser.OpenDialog(FileRepl(TBTCShiftPolygon.Text, GetPath(_gbxFile))) Then
+			TBTCShiftPolygon.Text = GetFilenameWithoutDirectory(TorqueConverterShiftPolygonFileBrowser.Files(0),
+																GetPath(_gbxFile))
+		End If
+	End Sub
+
+	Private Sub btnExportXML_Click(sender As Object, e As EventArgs) Handles btnExportXML.Click
+		If Not Cfg.DeclMode Then
+			MsgBox("XML Export is only supported in Declaration Mode")
+			Exit Sub
+		End If
+		If Not FolderFileBrowser.OpenDialog("") Then
+			Exit Sub
+		End If
+		Dim filePath As String = FolderFileBrowser.Files(0)
+
+		Dim data As Gearbox = FillGearboxData(_gbxFile)
+		If (Cfg.DeclMode) Then
+			Dim export As XDocument = New XMLDeclarationWriter(data.Manufacturer).GenerateVectoComponent(data, data)
+			export.Save(Path.Combine(filePath, data.ModelName + ".xml"))
+		Else
+			Dim export As XDocument = New XMLEngineeringWriter(_gbxFile, True, data.Manufacturer).GenerateVectoComponent(data,
+																														data)
+			export.Save(Path.Combine(filePath, data.ModelName + ".xml"))
+		End If
+	End Sub
+
+	Private Sub btnExportAxlGearXML_Click(sender As Object, e As EventArgs) Handles btnExportAxlGearXML.Click
+		If Not Cfg.DeclMode Then
+			MsgBox("XML Export is only supported in Declaration Mode")
+			Exit Sub
+		End If
+		If Not FolderFileBrowser.OpenDialog("") Then
+			Exit Sub
+		End If
+		Dim filePath As String = FolderFileBrowser.Files(0)
+
+		Dim data As Gearbox = FillGearboxData(_gbxFile)
+		If (Cfg.DeclMode) Then
+			Dim export As XDocument = New XMLDeclarationWriter(data.Manufacturer).GenerateVectoComponent(data)
+			export.Save(Path.Combine(filePath, data.ModelName + ".xml"))
+		Else
+			Dim export As XDocument = New XMLEngineeringWriter(_gbxFile, True, data.Manufacturer).GenerateVectoComponent(data)
+			export.Save(Path.Combine(filePath, data.ModelName + ".xml"))
+		End If
+	End Sub
 
 	Private Sub btExportVGBS_Click(sender As Object, e As EventArgs) Handles btExportVGBS.Click
-		If LvGears.Items.Count <= 1 Then Exit Sub
-
-		Dim shiftPolygon As ShiftPolygon = Nothing
-		Dim path As String
-		Dim gear As Integer
-		Try
-			If LvGears.SelectedItems.Count > 0 AndAlso LvGears.SelectedIndices(0) > 0 Then
-				path = FileRepl(LvGears.SelectedItems(0).SubItems(GearboxTbl.ShiftPolygons).Text, GetPath(_gbxFile))
-				gear = LvGears.SelectedIndices(0)
-			Else
-				path = FileRepl(LvGears.Items(1).SubItems(GearboxTbl.ShiftPolygons).Text, GetPath(_gbxFile))
-				gear = 1
-			End If
-
-			If File.Exists(path) Then shiftPolygon = ShiftPolygonReader.ReadFromFile(path)
-
-			If Not shiftPolygon Is Nothing Then
-				ShiftPolygonExport.WriteShiftPolygon(shiftPolygon, path & ".vgbs")
-			End If
-		Catch ex As Exception
-		End Try
-
-		Dim jobFile As String = VectoJobForm.VectoFile
-		If Not jobFile Is Nothing AndAlso File.Exists(jobFile) Then
-			Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadJsonJob(jobFile),
-																	IEngineeringInputDataProvider)
-			If (inputData Is Nothing) Then
-				Exit Sub
-			End If
-
-			Dim vehicle As IVehicleEngineeringInputData = inputData.VehicleInputData
-			Dim engine As IEngineEngineeringInputData = inputData.EngineInputData
-			Dim engineFld As EngineFullLoadCurve = FullLoadCurveReader.Create(engine.FullLoadCurve)
-
-			If VectoJobForm.Visible AndAlso engine.IdleSpeed > 0 Then
-				Dim gears As IList(Of ITransmissionInputData) = ConvertToGears(LvGears.Items)
-				Dim shiftLines As ShiftPolygon = GetShiftLines(engine.IdleSpeed, engineFld, vehicle, gears, gear)
-				If (Not IsNothing(shiftLines)) Then
-					ShiftPolygonExport.WriteShiftPolygon(shiftLines, jobFile & "_Gear " & gear & ".vgbs")
-				End If
-			End If
+		If LvGears.Items.Count <= 1 Then Exit Sub
+
+		Dim shiftPolygon As ShiftPolygon = Nothing
+		Dim path As String
+		Dim gear As Integer
+		Try
+			If LvGears.SelectedItems.Count > 0 AndAlso LvGears.SelectedIndices(0) > 0 Then
+				path = FileRepl(LvGears.SelectedItems(0).SubItems(GearboxTbl.ShiftPolygons).Text, GetPath(_gbxFile))
+				gear = LvGears.SelectedIndices(0)
+			Else
+				path = FileRepl(LvGears.Items(1).SubItems(GearboxTbl.ShiftPolygons).Text, GetPath(_gbxFile))
+				gear = 1
+			End If
+
+			If File.Exists(path) Then shiftPolygon = ShiftPolygonReader.ReadFromFile(path)
+
+			If Not shiftPolygon Is Nothing Then
+				ShiftPolygonExport.WriteShiftPolygon(shiftPolygon, path & ".vgbs")
+			End If
+		Catch ex As Exception
+		End Try
+
+		Dim jobFile As String = VectoJobForm.VectoFile
+		If Not jobFile Is Nothing AndAlso File.Exists(jobFile) Then
+			Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadJsonJob(jobFile), 
+																	IEngineeringInputDataProvider)
+			If (inputData Is Nothing) Then
+				Exit Sub
+			End If
+
+			Dim vehicle As IVehicleEngineeringInputData = inputData.JobInputData.Vehicle
+			Dim engine As IEngineEngineeringInputData = vehicle.EngineInputData
+			Dim engineFld As EngineFullLoadCurve = FullLoadCurveReader.Create(engine.FullLoadCurve)
+
+			If VectoJobForm.Visible AndAlso engine.IdleSpeed > 0 Then
+				Dim gears As IList(Of ITransmissionInputData) = ConvertToGears(LvGears.Items)
+				Dim shiftLines As ShiftPolygon = GetShiftLines(engine.IdleSpeed, engineFld, vehicle, gears, gear)
+				If (Not IsNothing(shiftLines)) Then
+					ShiftPolygonExport.WriteShiftPolygon(shiftLines, jobFile & "_Gear " & gear & ".vgbs")
+				End If
+			End If
 		End If
 	End Sub
-End Class
-
-
+End Class
+
+
diff --git a/VECTO/GUI/VectoEPTPJobForm.vb b/VECTO/GUI/VectoEPTPJobForm.vb
index 0eb10face8ff43adf3c70063df086952fbba5553..fc6e84a975977697c13d9fc0cdd75218180ff89c 100644
--- a/VECTO/GUI/VectoEPTPJobForm.vb
+++ b/VECTO/GUI/VectoEPTPJobForm.vb
@@ -52,8 +52,7 @@ Public Class VectoEPTPJobForm
 
 	'Initialise form
 	Private Sub F02_GEN_Load(sender As Object, e As EventArgs) Handles Me.Load
-		Dim x As Integer
-
+		
 		_auxDialog = New VehicleAuxiliariesDialog
 
 
@@ -195,14 +194,14 @@ Public Class VectoEPTPJobForm
 
 		
 		'Files -----------------------------
-		TbVEH.Text = GetRelativePath(inputData.VehicleInputData.Source, _basePath)
+		TbVEH.Text = GetRelativePath(inputData.JobInputData.Vehicle.Source, _basePath)
 
 		'Start/Stop
 		Dim driver As IDriverEngineeringInputData = inputData.DriverInputData
 
 
 		Dim declarationInput As IDeclarationInputDataProvider = CType(inputData, IDeclarationInputDataProvider)
-		Dim auxInput As IAuxiliariesDeclarationInputData = declarationInput.AuxiliaryInputData()
+		Dim auxInput As IAuxiliariesDeclarationInputData = declarationInput.JobInputData.Vehicle.AuxiliaryInputData()
 
 		LvAux.Items.Clear()
 		Dim entry As IAuxiliaryDeclarationInputData
@@ -255,7 +254,7 @@ Public Class VectoEPTPJobForm
 		Dim message As String = String.Empty
 
 		
-		Dim vectoJob As VectoJob = New VectoJob
+		Dim vectoJob As VectoEPTPJob = New VectoEPTPJob
 		vectoJob.FilePath = file
 
 		'Files ------------------------------------------------- -----------------
@@ -268,24 +267,7 @@ Public Class VectoEPTPJobForm
 			vectoJob.CycleFiles.Add(sb)
 		Next
 
-		For Each lv0 As ListViewItem In LvAux.Items
-			Dim auxEntry As VectoJob.AuxEntry = New VectoJob.AuxEntry
-
-			If Cfg.DeclMode Then
-				auxEntry.TechnologyList.Clear()
-				auxEntry.TechnologyList.AddRange(
-					lv0.SubItems(AuxViewColumns.AuxInputOrTech).Text.Split(";"c).Select(
-						Function(x) Trim(x)))
-			Else
-				auxEntry.Path.Init(GetPath(file), lv0.SubItems(AuxViewColumns.AuxInputOrTech).Text)
-			End If
-
-			auxEntry.Type = AuxiliaryTypeHelper.ParseKey(lv0.SubItems(AuxViewColumns.AuxID).Text)
-			vectoJob.AuxPaths.Add(lv0.SubItems(AuxViewColumns.AuxID).Text, auxEntry)
-		Next
 		
-		'------------------------------------------------------------
-
 		'SAVE
 		If Not vectoJob.SaveFile Then
 			MsgBox("Cannot safe to " & file, MsgBoxStyle.Critical)
@@ -504,9 +486,7 @@ Public Class VectoEPTPJobForm
 	End Sub
 
 	Private Sub UpdateGearboxPic(ByRef chartArea As Chart)
-		Dim s As Series
-		Dim i As Integer
-
+		
 		Dim gearbox As IGearboxEngineeringInputData = Nothing
 		Dim vehicleFile As String =
 				If(Not String.IsNullOrWhiteSpace(VectoFile), Path.Combine(Path.GetDirectoryName(VectoFile), TbVEH.Text), TbVEH.Text)
@@ -514,7 +494,7 @@ Public Class VectoEPTPJobForm
 			Try
 				Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(vehicleFile), 
 																		IEngineeringInputDataProvider)
-				gearbox = inputData.GearboxInputData
+				gearbox = inputData.JobInputData.Vehicle.GearboxInputData
 			Catch
 			End Try
 		End If
@@ -537,7 +517,7 @@ Public Class VectoEPTPJobForm
 			Try
 				Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(vehicleFile), 
 																		IEngineeringInputDataProvider)
-				engine = inputData.EngineInputData
+				engine = inputData.JobInputData.Vehicle.EngineInputData
 			Catch
 				Return
 			End Try
@@ -613,7 +593,7 @@ Public Class VectoEPTPJobForm
 			Try
 				Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(vehicleFile), 
 																		IEngineeringInputDataProvider)
-				vehicle = inputData.VehicleInputData
+				vehicle = inputData.JobInputData.Vehicle
 			Catch
 			End Try
 		End If
diff --git a/VECTO/GUI/VectoJobForm.vb b/VECTO/GUI/VectoJobForm.vb
index 06575c2357f8fea6438aa55ee1a64878a029b010..8add30eee942d8790109646ef7bebefb50fc231f 100644
--- a/VECTO/GUI/VectoJobForm.vb
+++ b/VECTO/GUI/VectoJobForm.vb
@@ -301,7 +301,7 @@ Public Class VectoJobForm
 			If Not Trim(f) = "" Then
 				Dim vehInput As IVehicleDeclarationInputData =
 						CType(JSONInputDataFactory.ReadComponentData(FileRepl(TbVEH.Text, GetPath(VectoFile))), 
-							IEngineeringInputDataProvider).VehicleInputData
+							IEngineeringInputDataProvider).JobInputData.Vehicle
 				vehicleType = vehInput.VehicleCategory
 			End If
 
@@ -423,7 +423,7 @@ Public Class VectoJobForm
 		'Update Form
 
 		If inputData.JobInputData().EngineOnlyMode Then
-			TbENG.Text = GetRelativePath(inputData.EngineInputData.Source, _basePath)
+			TbENG.Text = GetRelativePath(inputData.JobInputData.Vehicle.EngineInputData.Source, _basePath)
 			CbEngOnly.Checked = True
 			Try
 				Dim sb As ICycleData
@@ -440,9 +440,9 @@ Public Class VectoJobForm
 		CbEngOnly.Checked = False
 		CheckEngOnly()
 		'Files -----------------------------
-		TbVEH.Text = GetRelativePath(inputData.VehicleInputData.Source, _basePath)
-		TbENG.Text = GetRelativePath(inputData.EngineInputData.Source, _basePath)
-		TbGBX.Text = GetRelativePath(inputData.GearboxInputData.Source, _basePath)
+		TbVEH.Text = GetRelativePath(inputData.JobInputData.Vehicle.Source, _basePath)
+		TbENG.Text = GetRelativePath(inputData.JobInputData.Vehicle.EngineInputData.Source, _basePath)
+		TbGBX.Text = GetRelativePath(inputData.JobInputData.Vehicle.GearboxInputData.Source, _basePath)
 
 		'Start/Stop
 		Dim driver As IDriverEngineeringInputData = inputData.DriverInputData
@@ -452,7 +452,7 @@ Public Class VectoJobForm
 			'AA-TB
 			'Try and Select any previously selected Auxiliary Type
 			Dim declarationInput As IDeclarationInputDataProvider = CType(inputData, IDeclarationInputDataProvider)
-			Dim auxInput As IAuxiliariesDeclarationInputData = declarationInput.AuxiliaryInputData()
+			Dim auxInput As IAuxiliariesDeclarationInputData = declarationInput.JobInputData.Vehicle.AuxiliaryInputData()
 
 			cboAdvancedAuxiliaries.SelectedIndex = 0
 			cboAdvancedAuxiliaries.Enabled = False
@@ -472,7 +472,7 @@ Public Class VectoJobForm
 				If(driver.AccelerationCurve Is Nothing, "", GetRelativePath(driver.AccelerationCurve.Source, _basePath))
 
 			cboAdvancedAuxiliaries.Enabled = True
-			Dim auxInput As IAuxiliariesEngineeringInputData = inputData.AuxiliaryInputData()
+			Dim auxInput As IAuxiliariesEngineeringInputData = inputData.JobInputData.Vehicle.AuxiliaryInputData()
 			For Each item As AdvancedAuxiliary In cboAdvancedAuxiliaries.Items
 				If _
 					AuxiliaryModelHelper.Parse(item.AssemblyName) = auxInput.AuxiliaryAssembly AndAlso
@@ -1144,7 +1144,7 @@ lbDlog:
 			Try
 				Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(gearboxFile), 
 																		IEngineeringInputDataProvider)
-				gearbox = inputData.GearboxInputData
+				gearbox = inputData.JobInputData.Vehicle.GearboxInputData
 			Catch
 			End Try
 		End If
@@ -1228,7 +1228,7 @@ lbDlog:
 			Try
 				Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(engineFile), 
 																		IEngineeringInputDataProvider)
-				engine = inputData.EngineInputData
+				engine = inputData.JobInputData.Vehicle.EngineInputData
 			Catch
 				Return
 			End Try
@@ -1304,7 +1304,7 @@ lbDlog:
 			Try
 				Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(vehicleFile), 
 																		IEngineeringInputDataProvider)
-				vehicle = inputData.VehicleInputData
+				vehicle = inputData.JobInputData.Vehicle
 			Catch
 			End Try
 		End If
diff --git a/VECTO/GUI/VehicleForm.vb b/VECTO/GUI/VehicleForm.vb
index d33f796457485e8908ecd75bb540a91617cc65d5..bb1c333c168a6844606e54265e971311ec7ab580 100644
--- a/VECTO/GUI/VehicleForm.vb
+++ b/VECTO/GUI/VehicleForm.vb
@@ -338,11 +338,11 @@ Public Class VehicleForm
 
 		Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(file), 
 																IEngineeringInputDataProvider)
-		Dim vehicle As IVehicleEngineeringInputData = inputData.VehicleInputData
-		Dim airdrag As IAirdragEngineeringInputData = inputData.AirdragInputData
-		Dim retarder As IRetarderInputData = inputData.RetarderInputData
-		Dim angledrive As IAngledriveInputData = inputData.AngledriveInputData
-		Dim pto As IPTOTransmissionInputData = inputData.PTOTransmissionInputData
+		Dim vehicle As IVehicleEngineeringInputData = inputData.JobInputData.Vehicle
+		Dim airdrag As IAirdragEngineeringInputData = inputData.JobInputData.Vehicle.AirdragInputData
+		Dim retarder As IRetarderInputData = inputData.JobInputData.Vehicle.RetarderInputData
+		Dim angledrive As IAngledriveInputData = inputData.JobInputData.Vehicle.AngledriveInputData
+		Dim pto As IPTOTransmissionInputData = inputData.JobInputData.Vehicle.PTOTransmissionInputData
 
 		If Cfg.DeclMode <> vehicle.SavedInDeclarationMode Then
 			Select Case WrongMode()
diff --git a/VECTO/Input Files/Gearbox.vb b/VECTO/Input Files/Gearbox.vb
index e2b8f1ba39c5d71867055e137be4d48cd6049ad7..7e7114271978b843958bfd2eb2a92587d0222212 100644
--- a/VECTO/Input Files/Gearbox.vb	
+++ b/VECTO/Input Files/Gearbox.vb	
@@ -208,7 +208,7 @@ Public Class Gearbox
 			Dim vehiclecategory As VehicleCategory
 			Dim rdyn As Meter = 0.5.SI(Of Meter)()
 			Try
-				vehiclecategory = inputData.VehicleInputData.VehicleCategory
+				vehiclecategory = inputData.JobInputData.Vehicle.VehicleCategory
 			Catch ex As Exception
 				vehiclecategory = vehiclecategory.RigidTruck
 			End Try
@@ -217,7 +217,7 @@ Public Class Gearbox
 
 				Try
 
-					engine = doa.CreateEngineData(inputData.EngineInputData, Nothing, gearbox, New List(Of ITorqueLimitInputData))
+					engine = doa.CreateEngineData(inputData.JobInputData.Vehicle.EngineInputData, Nothing, gearbox, New List(Of ITorqueLimitInputData))
 				Catch
 					engine = GetDefaultEngine(gearbox.Gears)
 				End Try
@@ -227,7 +227,7 @@ Public Class Gearbox
 			Else
 				Dim doa As EngineeringDataAdapter = New EngineeringDataAdapter()
 				Try
-					engine = doa.CreateEngineData(inputData.EngineInputData, gearbox, New List(Of ITorqueLimitInputData))
+					engine = doa.CreateEngineData(inputData.JobInputData.Vehicle.EngineInputData, gearbox, New List(Of ITorqueLimitInputData))
 				Catch
 					engine = GetDefaultEngine(gearbox.Gears)
 				End Try
diff --git a/VECTO/Input Files/VectoEPTPJob.vb b/VECTO/Input Files/VectoEPTPJob.vb
index f1069cbb6f1d5a72c6b77c1f33adb7a3d9f64698..94f1e7d4173076a287b988db27bc7d5dcc299cfe 100644
--- a/VECTO/Input Files/VectoEPTPJob.vb	
+++ b/VECTO/Input Files/VectoEPTPJob.vb	
@@ -1,16 +1,35 @@
 
 Imports System.Collections.Generic
+Imports System.ComponentModel.DataAnnotations
 Imports System.IO
+Imports System.Linq
+Imports System.Xml
 Imports TUGraz.VECTO.Input_Files
+Imports TUGraz.VectoCommon.Exceptions
 Imports TUGraz.VectoCommon.InputData
+Imports TUGraz.VectoCommon.Models
+Imports TUGraz.VectoCommon.Utils
+Imports TUGraz.VectoCore.InputData.FileIO.JSON
+Imports TUGraz.VectoCore.InputData.FileIO.XML.Declaration
+Imports TUGraz.VectoCore.InputData.Impl
+Imports TUGraz.VectoCore.Models.Declaration
+Imports TUGraz.VectoCore.Utils
 
+<CustomValidation(GetType(VectoJob), "ValidateJob")>
 Public Class VectoEPTPJob
-	Implements IEPTPInputDataProvider
+	Implements IEPTPInputDataProvider, IEPTPJobInputData
+
 	Private _sFilePath As String
 	Private _myPath As String
 
 	Private ReadOnly _vehicleFile As SubPath
 
+	Public ReadOnly CycleFiles As List(Of SubPath)
+
+
+	Public Sub New()
+		CycleFiles = New List(Of SubPath)
+	End Sub
 
 	Public Property FilePath As String
 		Get
@@ -41,13 +60,89 @@ Public Class VectoEPTPJob
 	End Property
 
 
-	Public ReadOnly Property Vehicle As IDeclarationInputDataProvider Implements IEPTPInputDataProvider.Vehicle
+	Public Function SaveFile() As Boolean
+		Dim validationResults As IList(Of ValidationResult) =
+				Validate(ExecutionMode.Declaration, Nothing, False)
+
+		If validationResults.Count > 0 Then
+			Dim messages As IEnumerable(Of String) =
+					validationResults.Select(Function(r) r.ErrorMessage + String.Join(", ", r.MemberNames.Distinct()))
+			MsgBox("Invalid input." + Environment.NewLine + String.Join(Environment.NewLine, messages), MsgBoxStyle.OkOnly,
+					"Failed to save Vecto Job")
+			Return False
+		End If
+
+		Try
+			Dim writer As JSONFileWriter = JSONFileWriter.Instance
+			writer.SaveJob(Me, _sFilePath)
+		Catch ex As Exception
+			MsgBox("Failed to save Job file: " + ex.Message)
+			Return False
+		End Try
+		Return True
+	End Function
+
+	' ReSharper disable once UnusedMember.Global -- used by Validation
+	Public Shared Function ValidateJob(vectoJob As VectoEPTPJob, validationContext As ValidationContext) As ValidationResult
+		Dim modeService As VectoValidationModeServiceContainer =
+				TryCast(validationContext.GetService(GetType(VectoValidationModeServiceContainer)), 
+						VectoValidationModeServiceContainer)
+		Dim mode As ExecutionMode = If(modeService Is Nothing, ExecutionMode.Declaration, modeService.Mode)
+
+		Return ValidateVehicleJob(vectoJob, mode)
+	End Function
+
+	Private Shared Function ValidateVehicleJob(vectoJob As VectoEPTPJob, mode As ExecutionMode) As ValidationResult
+
+
+	End Function
+
+	Public ReadOnly Property Vehicle As IVehicleDeclarationInputData Implements IEPTPJobInputData.Vehicle
+		Get
+			If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
+			'Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle
+			Return New XMLDeclarationInputDataProvider(XmlReader.Create(_vehicleFile.FullPath), True).JobInputData.Vehicle
+		End Get
+	End Property
+
+	Public ReadOnly Property Cycles As IList(Of ICycleData) Implements IEPTPJobInputData.Cycles
+		Get
+			Dim retVal As ICycleData() = New ICycleData(CycleFiles.Count - 1) {}
+			Dim i As Integer = 0
+			For Each cycleFile As SubPath In CycleFiles
+				Dim cycleData As TableData
+				If (File.Exists(cycleFile.FullPath)) Then
+					cycleData = VectoCSVFile.Read(cycleFile.FullPath)
+				Else
+					Try
+						Dim resourceName As String = DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles." +
+													cycleFile.OriginalPath + TUGraz.VectoCore.Configuration.Constants.FileExtensions.CycleFile
+						Dim cycleDataRes As Stream = RessourceHelper.ReadStream(resourceName)
+						cycleData = VectoCSVFile.ReadStream(cycleDataRes, source:=resourceName)
+					Catch ex As Exception
+						Throw New VectoException("Driving Cycle could not be read: " + cycleFile.OriginalPath)
+					End Try
+				End If
+				retVal(i) = New CycleInputData With {
+					.Name = Path.GetFileNameWithoutExtension(cycleFile.FullPath),
+					.CycleData = cycleData
+					}
+				i += 1
+			Next
+			Return retVal
+
+		End Get
+	End Property
+
+	Public ReadOnly Property FanPowerCoefficents As IEnumerable(Of Double) Implements IEPTPJobInputData.FanPowerCoefficents
 		Get
+			Return New Double() {0, 0, 0}
 		End Get
 	End Property
 
-	Public ReadOnly Property Cycles As IList(Of ICycleData) Implements IEPTPInputDataProvider.Cycles
+	Public ReadOnly Property JobInputData As IEPTPJobInputData Implements IEPTPInputDataProvider.JobInputData
 		Get
+			Return Me
 		End Get
 	End Property
 End Class
diff --git a/VECTO/Input Files/VectoJob.vb b/VECTO/Input Files/VectoJob.vb
index d4b167272a4e884ebfcfef60544aed470ee412bd..44659bd7edfb68991573d37152d86c99faae8b6f 100644
--- a/VECTO/Input Files/VectoJob.vb	
+++ b/VECTO/Input Files/VectoJob.vb	
@@ -110,7 +110,7 @@ Public Class VectoJob
 	Public Function SaveFile() As Boolean
 		Dim validationResults As IList(Of ValidationResult) =
 				Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering),
-						If(GearboxInputData Is Nothing, GearboxType.MT, GearboxInputData.Type), False)
+						Nothing, False)
 
 		If validationResults.Count > 0 Then
 			Dim messages As IEnumerable(Of String) =
@@ -198,14 +198,14 @@ Public Class VectoJob
 		End Get
 	End Property
 
-	Public Property StartStop As Boolean
-		Get
-			Return _startStop
-		End Get
-		Set(value As Boolean)
-			_startStop = value
-		End Set
-	End Property
+	'Public Property StartStop As Boolean
+	'	Get
+	'		Return _startStop
+	'	End Get
+	'	Set(value As Boolean)
+	'		_startStop = value
+	'	End Set
+	'End Property
 
 	Public ReadOnly Property IDriverEngineeringInputData_OverSpeedEcoRoll As IOverSpeedEcoRollEngineeringInputData _
 		Implements IDriverEngineeringInputData.OverSpeedEcoRoll
@@ -227,13 +227,6 @@ Public Class VectoJob
 	End Property
 
 
-	Public ReadOnly Property OverSpeedEcoRoll As IOverSpeedEcoRollDeclarationInputData _
-		Implements IDriverDeclarationInputData.OverSpeedEcoRoll
-		Get
-			Return IDriverEngineeringInputData_OverSpeedEcoRoll
-		End Get
-	End Property
-
 	Public ReadOnly Property AccelerationCurve As TableData Implements IDriverEngineeringInputData.AccelerationCurve
 		Get
 			If String.IsNullOrWhiteSpace(_driverAccelerationFile.FullPath) Then Return Nothing
@@ -315,7 +308,7 @@ Public Class VectoJob
 
 		'vectoJob._engineInputData = New JSONComponentInputData(vectoJob._engineFile.FullPath)
 
-		If vectoJob.EngineInputData Is Nothing Then _
+		If vectoJob.Vehicle.EngineInputData Is Nothing Then _
 			result.Add(New ValidationResult("Engine File is missing or invalid"))
 		If result.Any() Then
 			Return _
@@ -336,9 +329,9 @@ Public Class VectoJob
 
 		Dim result As IList(Of ValidationResult) = New List(Of ValidationResult)
 
-		Dim vehicleInputData As IVehicleEngineeringInputData = vectoJob.VehicleInputData
-		Dim engineInputData As IEngineEngineeringInputData = vectoJob.EngineInputData
-		Dim gearboxInputData As IGearboxEngineeringInputData = vectoJob.GearboxInputData
+		Dim vehicleInputData As IVehicleEngineeringInputData = vectoJob.JobInputData.Vehicle
+		Dim engineInputData As IEngineDeclarationInputData = vectoJob.Vehicle.EngineInputData
+		Dim gearboxInputData As IGearboxDeclarationInputData = vectoJob.Vehicle.GearboxInputData
 
 		If vehicleInputData Is Nothing Then _
 			result.Add(New ValidationResult("Vehicle File is missing or invalid"))
@@ -414,162 +407,158 @@ Public Class VectoJob
 
 #Region "IInputData"
 
-	Public Function JobInputData() As IEngineeringJobInputData Implements IEngineeringInputDataProvider.JobInputData
-		Return Me
-	End Function
-
-	Public ReadOnly Property IDeclarationInputDataProvider_VehicleInputData As IVehicleDeclarationInputData _
-		Implements IDeclarationInputDataProvider.VehicleInputData
-		Get
-			If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_vehicleFile.FullPath).VehicleInputData
-		End Get
-	End Property
-
-	Public ReadOnly Property VehicleInputData As IVehicleEngineeringInputData _
-		Implements IEngineeringInputDataProvider.VehicleInputData
-		Get
-			If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_vehicleFile.FullPath).VehicleInputData
-		End Get
-	End Property
-
-	Public ReadOnly Property IDeclarationInputDataProvider_AirdragInputData As IAirdragDeclarationInputData _
-		Implements IDeclarationInputDataProvider.AirdragInputData
+	Public ReadOnly Property JobInputData As IEngineeringJobInputData Implements IEngineeringInputDataProvider.JobInputData
 		Get
-			Return AirdragInputData
-		End Get
-	End Property
-
-	Public ReadOnly Property AirdragInputData As IAirdragEngineeringInputData _
-		Implements IEngineeringInputDataProvider.AirdragInputData
-		Get
-			If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_vehicleFile.FullPath).AirdragInputData
+			Return Me
 		End Get
 	End Property
 
-
-	Public Function IDeclarationInputDataProvider_JobInputData() As IDeclarationJobInputData _
+	Public ReadOnly Property IDeclarationInputDataProvider_JobInputData As IDeclarationJobInputData _
 		Implements IDeclarationInputDataProvider.JobInputData
-		Return Me
-	End Function
-
-
-	Public ReadOnly Property IDeclarationInputDataProvider_GearboxInputData As IGearboxDeclarationInputData _
-		Implements IDeclarationInputDataProvider.GearboxInputData
-		Get
-			If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_gearboxFile.FullPath).GearboxInputData
-		End Get
-	End Property
-
-	Public ReadOnly Property GearboxInputData As IGearboxEngineeringInputData _
-		Implements IEngineeringInputDataProvider.GearboxInputData
-		Get
-			If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_gearboxFile.FullPath).GearboxInputData
-		End Get
-	End Property
-
-	Public ReadOnly Property IDeclarationInputDataProvider_TorqueConverterInputData As ITorqueConverterDeclarationInputData _
-		Implements IDeclarationInputDataProvider.TorqueConverterInputData
-		Get
-			If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_gearboxFile.FullPath).TorqueConverterInputData
-		End Get
-	End Property
-
-	Public ReadOnly Property TorqueConverterInputData As ITorqueConverterEngineeringInputData _
-		Implements IEngineeringInputDataProvider.TorqueConverterInputData
-		Get
-			If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_gearboxFile.FullPath).TorqueConverterInputData
-		End Get
-	End Property
-
-	Public ReadOnly Property IDeclarationInputDataProvider_AxleGearInputData As IAxleGearInputData _
-		Implements IDeclarationInputDataProvider.AxleGearInputData
 		Get
-			If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_gearboxFile.FullPath).AxleGearInputData
-		End Get
-	End Property
-
-	Public ReadOnly Property AxleGearInputData As IAxleGearInputData _
-		Implements IEngineeringInputDataProvider.AxleGearInputData
-		Get
-			If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_gearboxFile.FullPath).AxleGearInputData
-		End Get
-	End Property
-
-	Public ReadOnly Property DeclarationInputDataProviderAngledriveInputData As IAngledriveInputData _
-		Implements IDeclarationInputDataProvider.AngledriveInputData
-		Get
-			If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_vehicleFile.FullPath).AngledriveInputData
-		End Get
-	End Property
-
-	Public ReadOnly Property AngledriveInputData As IAngledriveInputData _
-		Implements IEngineeringInputDataProvider.AngledriveInputData
-		Get
-			If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_vehicleFile.FullPath).AngledriveInputData
-		End Get
-	End Property
-
-	Public ReadOnly Property IDeclarationInputDataProvider_EngineInputData As IEngineDeclarationInputData _
-		Implements IDeclarationInputDataProvider.EngineInputData
-		Get
-			If Not File.Exists(_engineFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_engineFile.FullPath).EngineInputData
-		End Get
-	End Property
-
-	Public ReadOnly Property EngineInputData As IEngineEngineeringInputData _
-		Implements IEngineeringInputDataProvider.EngineInputData
-		Get
-			If Not File.Exists(_engineFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_engineFile.FullPath).EngineInputData
-		End Get
-	End Property
-
-	Public Function AuxiliaryInputData() As IAuxiliariesEngineeringInputData _
-		Implements IEngineeringInputDataProvider.AuxiliaryInputData
-
-		Return Me
-	End Function
-
-	Public Function IDeclarationInputDataProvider_AuxiliaryInputData() As IAuxiliariesDeclarationInputData _
-		Implements IDeclarationInputDataProvider.AuxiliaryInputData
-
-		Return Me
-	End Function
-
-	Public ReadOnly Property IDeclarationInputDataProvider_RetarderInputData As IRetarderInputData _
-		Implements IDeclarationInputDataProvider.RetarderInputData
-		Get
-			If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_vehicleFile.FullPath).RetarderInputData
+			Return Me
 		End Get
 	End Property
 
-	Public ReadOnly Property RetarderInputData As IRetarderInputData _
-		Implements IEngineeringInputDataProvider.RetarderInputData
-		Get
-			If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_vehicleFile.FullPath).RetarderInputData
-		End Get
-	End Property
+	'Public ReadOnly Property IDeclarationInputDataProvider_VehicleInputData As IVehicleDeclarationInputData _
+	'	Implements IDeclarationInputDataProvider.VehicleInputData
+	'	Get
+	'		If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
+	'		Return New JSONComponentInputData(_vehicleFile.FullPath).VehicleInputData
+	'	End Get
+	'End Property
+
+	'Public ReadOnly Property VehicleInputData As IVehicleEngineeringInputData _
+	'	Implements IEngineeringInputDataProvider.VehicleInputData
+	'	Get
+	'		If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
+	'		Return New JSONComponentInputData(_vehicleFile.FullPath).VehicleInputData
+	'	End Get
+	'End Property
+
+	'Public ReadOnly Property IDeclarationInputDataProvider_AirdragInputData As IAirdragDeclarationInputData _
+	'	Implements IVehicleDeclarationInputData.AirdragInputData
+	'	Get
+	'		Return AirdragInputData
+	'	End Get
+	'End Property
+
+	'Public ReadOnly Property AirdragInputData As IAirdragEngineeringInputData _
+	'	Implements IVehicleEngineeringInputData.AirdragInputData
+	'	Get
+	'		If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
+	'		Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle.AirdragInputData
+	'	End Get
+	'End Property
+
+	'Public ReadOnly Property IDeclarationInputDataProvider_GearboxInputData As IGearboxDeclarationInputData _
+	'	Implements IVehicleDeclarationInputData.GearboxInputData
+	'	Get
+	'		If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing
+	'		Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.GearboxInputData
+	'	End Get
+	'End Property
+
+	'Public ReadOnly Property GearboxInputData As IGearboxEngineeringInputData _
+	'	Implements IVehicleEngineeringInputData.GearboxInputData
+	'	Get
+	'		If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing
+	'		Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.GearboxInputData
+	'	End Get
+	'End Property
+
+	'Public ReadOnly Property IDeclarationInputDataProvider_TorqueConverterInputData As ITorqueConverterDeclarationInputData _
+	'	Implements IVehicleDeclarationInputData.TorqueConverterInputData
+	'	Get
+	'		If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing
+	'		Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.TorqueConverterInputData
+	'	End Get
+	'End Property
+
+	'Public ReadOnly Property TorqueConverterInputData As ITorqueConverterEngineeringInputData _
+	'	Implements IVehicleEngineeringInputData.TorqueConverterInputData
+	'	Get
+	'		If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing
+	'		Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.TorqueConverterInputData
+	'	End Get
+	'End Property
+
+	'Public ReadOnly Property IDeclarationInputDataProvider_AxleGearInputData As IAxleGearInputData _
+	'	Implements IVehicleDeclarationInputData.AxleGearInputData
+	'	Get
+	'		If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing
+	'		Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.AxleGearInputData
+	'	End Get
+	'End Property
+
+	'Public ReadOnly Property AxleGearInputData As IAxleGearInputData _
+	'	Implements IVehicleEngineeringInputData.AxleGearInputData
+	'	Get
+	'		If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing
+	'		Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.AxleGearInputData
+	'	End Get
+	'End Property
+
+	'Public ReadOnly Property DeclarationInputDataProviderAngledriveInputData As IAngledriveInputData _
+	'	Implements IVehicleDeclarationInputData.AngledriveInputData
+	'	Get
+	'		If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
+	'		Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle.AngledriveInputData
+	'	End Get
+	'End Property
+
+	'Public ReadOnly Property AngledriveInputData As IAngledriveInputData _
+	'	Implements IVehicleEngineeringInputData.AngledriveInputData
+	'	Get
+	'		If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
+	'		Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle.AngledriveInputData
+	'	End Get
+	'End Property
+
+	'Public ReadOnly Property IDeclarationInputDataProvider_EngineInputData As IEngineDeclarationInputData _
+	'	Implements IVehicleDeclarationInputData.EngineInputData
+	'	Get
+	'		If Not File.Exists(_engineFile.FullPath) Then Return Nothing
+	'		Return New JSONComponentInputData(_engineFile.FullPath).JobInputData.Vehicle.EngineInputData
+	'	End Get
+	'End Property
+
+	'Public ReadOnly Property EngineInputData As IEngineEngineeringInputData _
+	'	Implements IVehicleEngineeringInputData.EngineInputData
+	'	Get
+	'		If Not File.Exists(_engineFile.FullPath) Then Return Nothing
+	'		Return New JSONComponentInputData(_engineFile.FullPath).JobInputData.Vehicle.EngineInputData
+	'	End Get
+	'End Property
+
+	'Public Function AuxiliaryInputData() As IAuxiliariesEngineeringInputData _
+	'	Implements IVehicleEngineeringInputData.AuxiliaryInputData
+
+	'	Return Me
+	'End Function
+
+	'Public Function IDeclarationInputDataProvider_AuxiliaryInputData() As IAuxiliariesDeclarationInputData _
+	'	Implements IVehicleDeclarationInputData.AuxiliaryInputData
+
+	'	Return Me
+	'End Function
+
+	'Public ReadOnly Property IDeclarationInputDataProvider_RetarderInputData As IRetarderInputData _
+	'	Implements IVehicleDeclarationInputData.RetarderInputData
+	'	Get
+	'		If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
+	'		Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle.RetarderInputData
+	'	End Get
+	'End Property
+
+	'Public ReadOnly Property RetarderInputData As IRetarderInputData _
+	'	Implements IVehicleEngineeringInputData.RetarderInputData
+	'	Get
+	'		If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
+	'		Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle.RetarderInputData
+	'	End Get
+	'End Property
 
-	Public ReadOnly Property IDeclarationInputDataProvider_DriverInputData As IDriverDeclarationInputData _
-		Implements IDeclarationInputDataProvider.DriverInputData
-		Get
-			Return Me
-		End Get
-	End Property
 
 	Public ReadOnly Property DriverInputData As IDriverEngineeringInputData _
 		Implements IEngineeringInputDataProvider.DriverInputData
@@ -578,21 +567,21 @@ Public Class VectoJob
 		End Get
 	End Property
 
-	Public ReadOnly Property IDeclarationInputDataProvider_PTOTransmissionInputData As IPTOTransmissionInputData _
-		Implements IDeclarationInputDataProvider.PTOTransmissionInputData
-		Get
-			If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_vehicleFile.FullPath).PTOTransmissionInputData
-		End Get
-	End Property
+	'Public ReadOnly Property IDeclarationInputDataProvider_PTOTransmissionInputData As IPTOTransmissionInputData _
+	'	Implements IVehicleDeclarationInputData.PTOTransmissionInputData
+	'	Get
+	'		If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
+	'		Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle.PTOTransmissionInputData
+	'	End Get
+	'End Property
 
-	Public ReadOnly Property PTOTransmissionInputData As IPTOTransmissionInputData _
-		Implements IEngineeringInputDataProvider.PTOTransmissionInputData
-		Get
-			If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_vehicleFile.FullPath).PTOTransmissionInputData
-		End Get
-	End Property
+	'Public ReadOnly Property PTOTransmissionInputData As IPTOTransmissionInputData _
+	'	Implements IVehicleEngineeringInputData.PTOTransmissionInputData
+	'	Get
+	'		If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
+	'		Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle.PTOTransmissionInputData
+	'	End Get
+	'End Property
 
 	Public ReadOnly Property XMLHash As XElement Implements IDeclarationInputDataProvider.XMLHash
 		Get
@@ -612,14 +601,14 @@ Public Class VectoJob
 		Implements IEngineeringJobInputData.Vehicle
 		Get
 			If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_vehicleFile.FullPath).VehicleInputData
+			Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle
 		End Get
 	End Property
 
 	Public ReadOnly Property Vehicle As IVehicleDeclarationInputData Implements IDeclarationJobInputData.Vehicle
 		Get
 			If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
-			Return New JSONComponentInputData(_vehicleFile.FullPath).VehicleInputData
+			Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle
 		End Get
 	End Property
 
@@ -657,6 +646,13 @@ Public Class VectoJob
 		End Get
 	End Property
 
+	Public ReadOnly Property IEngineeringJobInputData_EngineOnly As IEngineEngineeringInputData Implements IEngineeringJobInputData.EngineOnly
+		Get
+			If Not File.Exists(_engineFile.FullPath) Then Return Nothing
+			Return New JSONComponentInputData(_engineFile.FullPath).JobInputData.Vehicle.EngineInputData
+		End Get
+	End Property
+
 	Public ReadOnly Property JobName As String Implements IDeclarationJobInputData.JobName
 		Get
 			Return Path.GetFileNameWithoutExtension(FilePath)
diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb
index eeff657adc771ad91d24ac728d0a1b8f89e8798b..0c5eaa62e4274c9b1a84127a7f2e5908b3eed200 100644
--- a/VECTO/Input Files/Vehicle.vb	
+++ b/VECTO/Input Files/Vehicle.vb	
@@ -18,6 +18,7 @@ Imports TUGraz.VECTO.Input_Files
 Imports TUGraz.VectoCommon.InputData
 Imports TUGraz.VectoCommon.Models
 Imports TUGraz.VectoCommon.Utils
+Imports TUGraz.VectoCore.InputData.FileIO.JSON
 Imports TUGraz.VectoCore.InputData.Impl
 Imports TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 Imports TUGraz.VectoCore.Models.Declaration
@@ -495,4 +496,153 @@ Public Class Vehicle
 			Return VectoCSVFile.Read(PtoLossMap.FullPath)
 		End Get
 	End Property
-End Class
\ No newline at end of file
+
+
+	Public ReadOnly Property IDeclarationInputDataProvider_AirdragInputData As IAirdragDeclarationInputData _
+		Implements IVehicleDeclarationInputData.AirdragInputData
+		Get
+			Return AirdragInputData
+		End Get
+	End Property
+
+	Public ReadOnly Property AirdragInputData As IAirdragEngineeringInputData _
+		Implements IVehicleEngineeringInputData.AirdragInputData
+		Get
+			Return Me
+		End Get
+	End Property
+
+	Public ReadOnly Property IDeclarationInputDataProvider_GearboxInputData As IGearboxDeclarationInputData _
+		Implements IVehicleDeclarationInputData.GearboxInputData
+		Get
+			Return Nothing
+			'If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing
+			'Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.GearboxInputData
+		End Get
+	End Property
+
+	Public ReadOnly Property GearboxInputData As IGearboxEngineeringInputData _
+		Implements IVehicleEngineeringInputData.GearboxInputData
+		Get
+			Return Nothing
+			'If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing
+			'Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.GearboxInputData
+		End Get
+	End Property
+
+	Public ReadOnly Property IDeclarationInputDataProvider_TorqueConverterInputData As ITorqueConverterDeclarationInputData _
+		Implements IVehicleDeclarationInputData.TorqueConverterInputData
+		Get
+			Return Nothing
+			'If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing
+			'Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.TorqueConverterInputData
+		End Get
+	End Property
+
+	Public ReadOnly Property TorqueConverterInputData As ITorqueConverterEngineeringInputData _
+		Implements IVehicleEngineeringInputData.TorqueConverterInputData
+		Get
+			Return Nothing
+			'If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing
+			'Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.TorqueConverterInputData
+		End Get
+	End Property
+
+	Public ReadOnly Property IDeclarationInputDataProvider_AxleGearInputData As IAxleGearInputData _
+		Implements IVehicleDeclarationInputData.AxleGearInputData
+		Get
+			Return Nothing
+			'If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing
+			'Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.AxleGearInputData
+		End Get
+	End Property
+
+	Public ReadOnly Property AxleGearInputData As IAxleGearInputData _
+		Implements IVehicleEngineeringInputData.AxleGearInputData
+		Get
+			Return Nothing
+			'If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing
+			'Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.AxleGearInputData
+		End Get
+	End Property
+
+	Public ReadOnly Property DeclarationInputDataProviderAngledriveInputData As IAngledriveInputData _
+		Implements IVehicleDeclarationInputData.AngledriveInputData
+		Get
+			Return Me
+		End Get
+	End Property
+
+	Public ReadOnly Property AngledriveInputData As IAngledriveInputData _
+		Implements IVehicleEngineeringInputData.AngledriveInputData
+		Get
+			Return Me
+		End Get
+	End Property
+
+	Public ReadOnly Property IDeclarationInputDataProvider_EngineInputData As IEngineDeclarationInputData _
+		Implements IVehicleDeclarationInputData.EngineInputData
+		Get
+			Return Nothing
+			'If Not File.Exists(_engineFile.FullPath) Then Return Nothing
+			'Return New JSONComponentInputData(_engineFile.FullPath).JobInputData.Vehicle.EngineInputData
+		End Get
+	End Property
+
+	Public ReadOnly Property EngineInputData As IEngineEngineeringInputData _
+		Implements IVehicleEngineeringInputData.EngineInputData
+		Get
+			Return Nothing
+			'If Not File.Exists(_engineFile.FullPath) Then Return Nothing
+			'Return New JSONComponentInputData(_engineFile.FullPath).JobInputData.Vehicle.EngineInputData
+		End Get
+	End Property
+
+	Public Function AuxiliaryInputData() As IAuxiliariesEngineeringInputData _
+		Implements IVehicleEngineeringInputData.AuxiliaryInputData
+
+		Return Nothing
+	End Function
+
+	Public Function IDeclarationInputDataProvider_AuxiliaryInputData() As IAuxiliariesDeclarationInputData _
+		Implements IVehicleDeclarationInputData.AuxiliaryInputData
+
+		Return Nothing
+	End Function
+
+	Public ReadOnly Property IDeclarationInputDataProvider_RetarderInputData As IRetarderInputData _
+		Implements IVehicleDeclarationInputData.RetarderInputData
+		Get
+			Return Me
+		End Get
+	End Property
+
+	Public ReadOnly Property RetarderInputData As IRetarderInputData _
+		Implements IVehicleEngineeringInputData.RetarderInputData
+		Get
+			Return Me
+		End Get
+	End Property
+
+
+	'Public ReadOnly Property DriverInputData As IDriverEngineeringInputData _
+	'	Implements IEngineeringInputDataProvider.DriverInputData
+	'	Get
+	'		Return Nothing
+	'	End Get
+	'End Property
+
+	Public ReadOnly Property IDeclarationInputDataProvider_PTOTransmissionInputData As IPTOTransmissionInputData _
+		Implements IVehicleDeclarationInputData.PTOTransmissionInputData
+		Get
+			Return Me
+		End Get
+	End Property
+
+	Public ReadOnly Property PTOTransmissionInputData As IPTOTransmissionInputData _
+		Implements IVehicleEngineeringInputData.PTOTransmissionInputData
+		Get
+			Return Me
+		End Get
+	End Property
+End Class
diff --git a/VECTO/OutputData/JSONFileWriter.vb b/VECTO/OutputData/JSONFileWriter.vb
index f81964733b181d63c76f793bd3287b8d170c5974..0ff39920c209f0fc8fdc1d16542661cd901f511e 100644
--- a/VECTO/OutputData/JSONFileWriter.vb
+++ b/VECTO/OutputData/JSONFileWriter.vb
@@ -253,7 +253,7 @@ Public Class JSONFileWriter
 		'SavedInDeclMode = Cfg.DeclMode
 
 		Dim job As IEngineeringJobInputData = input.JobInputData()
-		Dim aux As IAuxiliariesEngineeringInputData = input.AuxiliaryInputData()
+		Dim aux As IAuxiliariesEngineeringInputData = input.JobInputData.Vehicle.AuxiliaryInputData()
 		Dim driver As IDriverEngineeringInputData = input.DriverInputData
 
 		body.Add("SavedInDeclMode", job.SavedInDeclarationMode)
@@ -261,7 +261,7 @@ Public Class JSONFileWriter
 		body.Add("EngineOnlyMode", job.EngineOnlyMode)
 
 		If job.EngineOnlyMode Then
-			body.Add("EngineFile", GetRelativePath(input.EngineInputData.Source, basePath))
+			body.Add("EngineFile", GetRelativePath(input.JobInputData.Vehicle.EngineInputData.Source, basePath))
 			body.Add("Cycles",
 					job.Cycles.Select(Function(x) GetRelativePath(x.CycleData.Source, Path.GetDirectoryName(filename))).ToArray())
 			WriteFile(header, body, filename)
@@ -270,8 +270,8 @@ Public Class JSONFileWriter
 
 		'Main Files
 		body.Add("VehicleFile", GetRelativePath(job.Vehicle.Source, basePath))
-		body.Add("EngineFile", GetRelativePath(input.EngineInputData.Source, basePath))
-		body.Add("GearboxFile", GetRelativePath(input.GearboxInputData.Source, basePath))
+		body.Add("EngineFile", GetRelativePath(input.JobInputData.Vehicle.EngineInputData.Source, basePath))
+		body.Add("GearboxFile", GetRelativePath(input.JobInputData.Vehicle.GearboxInputData.Source, basePath))
 
 		'AA-TB
 		'ADVANCED AUXILIARIES 
@@ -352,15 +352,15 @@ Public Class JSONFileWriter
 		WriteFile(header, body, filename)
 	End Sub
 
-	Public Sub Save(job As IEPTPInputDataProvider, filename As String) Implements IOutputFileWriter.SaveJob
+	Public Sub SaveJob(input As IEPTPInputDataProvider, filename As String) Implements IOutputFileWriter.SaveJob
 		Dim basePath As String = Path.GetDirectoryName(filename)
 		'Header
 		Dim header As Dictionary(Of String, Object) = GetHeader(VectoJobFormatVersion)
 
 		'Body
 		Dim body As Dictionary(Of String, Object) = New Dictionary(Of String, Object)
-
-		body.Add("DeclarationVehicle", job.Vehicle.VehicleInputData.Source)
+		Dim job As IEPTPJobInputData = input.JobInputData
+		body.Add("DeclarationVehicle", job.Vehicle.Source)
 		body.Add("FanPowerCoefficients", job.FanPowerCoefficents)
 		body.Add("Cycles", job.Cycles)
 
diff --git a/VECTO/VECTO.vbproj b/VECTO/VECTO.vbproj
index cb11c8ed38ff6492f5dd985fb6203e68852fbb70..c549ca0e9ceac7e2e1062a004d48e411d44818c8 100644
--- a/VECTO/VECTO.vbproj
+++ b/VECTO/VECTO.vbproj
@@ -278,6 +278,7 @@
     <Compile Include="File Browser\FileBrowserFavoritesDialog.vb">
       <SubType>Form</SubType>
     </Compile>
+    <Compile Include="Input Files\VectoEPTPJob.vb" />
     <Compile Include="Input Files\VectoJob.vb" />
     <Compile Include="Input Files\Vehicle.vb" />
     <Compile Include="GUI\GearboxGearDialog.Designer.vb">
diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
index 75060d28e6ee1a754cd0940625c1e97951e67dd2..c4c74728e14ab729476796a3fe79ed7b361decf8 100644
--- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
+++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
@@ -113,6 +113,24 @@ namespace TUGraz.VectoCommon.InputData
 		string ManufacturerAddress { get; }
 
 		PerSecond EngineIdleSpeed { get; }
+
+		IAirdragDeclarationInputData AirdragInputData { get; }
+
+		IGearboxDeclarationInputData GearboxInputData { get; }
+
+		ITorqueConverterDeclarationInputData TorqueConverterInputData { get; }
+
+		IAxleGearInputData AxleGearInputData { get; }
+
+		IAngledriveInputData AngledriveInputData { get; }
+
+		IEngineDeclarationInputData EngineInputData { get; }
+
+		IAuxiliariesDeclarationInputData AuxiliaryInputData();
+
+		IRetarderInputData RetarderInputData { get; }
+
+		IPTOTransmissionInputData PTOTransmissionInputData { get; }
 	}
 
 	public interface IAirdragDeclarationInputData : IComponentInputData
@@ -392,7 +410,7 @@ namespace TUGraz.VectoCommon.InputData
 	{
 		bool SavedInDeclarationMode { get; }
 
-		IOverSpeedEcoRollDeclarationInputData OverSpeedEcoRoll { get; }
+		//IOverSpeedEcoRollDeclarationInputData OverSpeedEcoRoll { get; }
 	}
 
 	public interface IOverSpeedEcoRollDeclarationInputData
@@ -425,4 +443,4 @@ namespace TUGraz.VectoCommon.InputData
 
 		NewtonMeter MaxTorque { get; }
 	}
-}
\ No newline at end of file
+}
diff --git a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs
index 376f432fccd70852f32bbb5c988c9ac8d4000e19..40e0a9ebdac137b0bd276419a3e423c3e7f6f2a5 100644
--- a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs
+++ b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs
@@ -50,6 +50,8 @@ namespace TUGraz.VectoCommon.InputData
 		/// cf. VECTO Input Parameters.xlsx
 		/// </summary>
 		bool EngineOnlyMode { get; }
+
+		IEngineEngineeringInputData EngineOnly { get; }
 	}
 
 	public interface IVehicleEngineeringInputData : IVehicleDeclarationInputData
@@ -80,6 +82,25 @@ namespace TUGraz.VectoCommon.InputData
 		Meter DynamicTyreRadius { get; }
 
 		Meter Height { get; }
+
+
+		new IAirdragEngineeringInputData AirdragInputData { get; }
+
+		new IGearboxEngineeringInputData GearboxInputData { get; }
+
+		new ITorqueConverterEngineeringInputData TorqueConverterInputData { get; }
+
+		new IAxleGearInputData AxleGearInputData { get; }
+
+		new IAngledriveInputData AngledriveInputData { get; }
+
+		new IEngineEngineeringInputData EngineInputData { get; }
+
+		new IAuxiliariesEngineeringInputData AuxiliaryInputData();
+
+		new IRetarderInputData RetarderInputData { get; }
+
+		new IPTOTransmissionInputData PTOTransmissionInputData { get; }
 	}
 
 	public interface IAirdragEngineeringInputData : IAirdragDeclarationInputData
@@ -367,4 +388,4 @@ namespace TUGraz.VectoCommon.InputData
 		/// </summary>
 		Watt ConstantPowerDemand { get; }
 	}
-}
\ No newline at end of file
+}
diff --git a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs
index efe192178226b09d3f2322f1905eb04992ac5a19..53f5309230828aa131ecbb2a889ed43ae7e464ee 100644
--- a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs
+++ b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs
@@ -38,63 +38,68 @@ namespace TUGraz.VectoCommon.InputData
 
 	public interface IDeclarationInputDataProvider : IInputDataProvider
 	{
-		IDeclarationJobInputData JobInputData();
+		IDeclarationJobInputData JobInputData { get; }
 
-		IVehicleDeclarationInputData VehicleInputData { get; }
+		//IVehicleDeclarationInputData VehicleInputData { get; }
 
-		IAirdragDeclarationInputData AirdragInputData { get; }
+		//IAirdragDeclarationInputData AirdragInputData { get; }
 
-		IGearboxDeclarationInputData GearboxInputData { get; }
+		//IGearboxDeclarationInputData GearboxInputData { get; }
 
-		ITorqueConverterDeclarationInputData TorqueConverterInputData { get; }
+		//ITorqueConverterDeclarationInputData TorqueConverterInputData { get; }
 
-		IAxleGearInputData AxleGearInputData { get; }
+		//IAxleGearInputData AxleGearInputData { get; }
 
-		IAngledriveInputData AngledriveInputData { get; }
+		//IAngledriveInputData AngledriveInputData { get; }
 
-		IEngineDeclarationInputData EngineInputData { get; }
+		//IEngineDeclarationInputData EngineInputData { get; }
 
-		IAuxiliariesDeclarationInputData AuxiliaryInputData();
+		//IAuxiliariesDeclarationInputData AuxiliaryInputData();
 
-		IRetarderInputData RetarderInputData { get; }
+		//IRetarderInputData RetarderInputData { get; }
 
-		IDriverDeclarationInputData DriverInputData { get; }
+		//IDriverDeclarationInputData DriverInputData { get; }
 
-		IPTOTransmissionInputData PTOTransmissionInputData { get; }
+		//IPTOTransmissionInputData PTOTransmissionInputData { get; }
 
 		XElement XMLHash { get; }
 	}
 
 	public interface IEngineeringInputDataProvider : IInputDataProvider
 	{
-		IEngineeringJobInputData JobInputData();
+		IEngineeringJobInputData JobInputData { get; }
 
-		IVehicleEngineeringInputData VehicleInputData { get; }
+		//IVehicleEngineeringInputData VehicleInputData { get; }
 
-		IAirdragEngineeringInputData AirdragInputData { get; }
+		//IAirdragEngineeringInputData AirdragInputData { get; }
 
-		IGearboxEngineeringInputData GearboxInputData { get; }
+		//IGearboxEngineeringInputData GearboxInputData { get; }
 
-		ITorqueConverterEngineeringInputData TorqueConverterInputData { get; }
+		//ITorqueConverterEngineeringInputData TorqueConverterInputData { get; }
 
-		IAxleGearInputData AxleGearInputData { get; }
+		//IAxleGearInputData AxleGearInputData { get; }
 
-		IAngledriveInputData AngledriveInputData { get; }
+		//IAngledriveInputData AngledriveInputData { get; }
 
-		IEngineEngineeringInputData EngineInputData { get; }
+		//IEngineEngineeringInputData EngineInputData { get; }
 
-		IAuxiliariesEngineeringInputData AuxiliaryInputData();
+		//IAuxiliariesEngineeringInputData AuxiliaryInputData();
 
-		IRetarderInputData RetarderInputData { get; }
+		//IRetarderInputData RetarderInputData { get; }
 
 		IDriverEngineeringInputData DriverInputData { get; }
 
-		IPTOTransmissionInputData PTOTransmissionInputData { get; }
+		//IPTOTransmissionInputData PTOTransmissionInputData { get; }
 	}
 
 	public interface IEPTPInputDataProvider : IInputDataProvider
 	{
-		IDeclarationInputDataProvider Vehicle { get; }
+		IEPTPJobInputData JobInputData { get; }
+	}
+
+	public interface IEPTPJobInputData
+	{
+		IVehicleDeclarationInputData Vehicle { get; }
 
 		IList<ICycleData> Cycles { get; }
 
diff --git a/VectoCommon/VectoCommon/Models/ExecutionMode.cs b/VectoCommon/VectoCommon/Models/ExecutionMode.cs
index 641b41989f62ace66101556079732fe5371d9334..d627105885646857191649977e7296b5d3d91aed 100644
--- a/VectoCommon/VectoCommon/Models/ExecutionMode.cs
+++ b/VectoCommon/VectoCommon/Models/ExecutionMode.cs
@@ -35,5 +35,6 @@ namespace TUGraz.VectoCommon.Models
 	{
 		Engineering,
 		Declaration,
+//		ExPostTest,
 	}
-}
\ No newline at end of file
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs
index 53f64fc8c4ea957001a627be8194ec63a575b602..068c2112b9a9bc2b14c94436f245f5a3dc2d5de9 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs
@@ -33,6 +33,7 @@ using System;
 using System.IO;
 using System.Xml.Linq;
 using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.Utils;
 
@@ -57,7 +58,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			object tmp = null;
 			switch (extension) {
 				case Constants.FileExtensions.VehicleDataFile:
-					tmp = JSONInputDataFactory.ReadJsonVehicle(filename, tolerateMissing);
+					tmp = JSONInputDataFactory.ReadJsonVehicle(filename, null, tolerateMissing);
 					break;
 				case Constants.FileExtensions.EngineDataFile:
 					tmp = JSONInputDataFactory.ReadEngine(filename, tolerateMissing);
@@ -79,110 +80,111 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 		}
 
 
-		public IEngineeringJobInputData JobInputData()
+		public IEngineeringJobInputData JobInputData
 		{
-			throw new NotImplementedException();
-		}
-
-
-		IVehicleDeclarationInputData IDeclarationInputDataProvider.VehicleInputData
-		{
-			get { return VehicleData; }
-		}
-
-		IAirdragDeclarationInputData IDeclarationInputDataProvider.AirdragInputData
-		{
-			get { return AirdragInputData; }
-		}
-
-		public IAirdragEngineeringInputData AirdragInputData
-		{
-			get { return AirdragData; }
-		}
-
-		IGearboxDeclarationInputData IDeclarationInputDataProvider.GearboxInputData
-		{
-			get { return GearboxInputData; }
-		}
-
-		ITorqueConverterDeclarationInputData IDeclarationInputDataProvider.TorqueConverterInputData
-		{
-			get { return TorqueConverterInputData; }
-		}
-
-		IDeclarationJobInputData IDeclarationInputDataProvider.JobInputData()
-		{
-			throw new NotImplementedException();
-		}
-
-		public IVehicleEngineeringInputData VehicleInputData
-		{
-			get { return VehicleData; }
-		}
-
-		public IGearboxEngineeringInputData GearboxInputData
-		{
-			get { return Gearbox; }
+			get { throw new NotImplementedException(); }
 		}
 
-		public ITorqueConverterEngineeringInputData TorqueConverterInputData
-		{
-			get { return TorqueConverter; }
-		}
+		public XElement XMLHash { get { return new XElement(XMLNames.DI_Signature); } }
 
-		public IAxleGearInputData AxleGearInputData
-		{
-			get { return AxleGear; }
-		}
 
-		public IAngledriveInputData AngledriveInputData
-		{
-			get { return Angledrive; }
-		}
+		//IVehicleDeclarationInputData IDeclarationJobInputData.Vehicle
+		//{
+		//	get { return VehicleData; }
+		//}
 
-		IEngineDeclarationInputData IDeclarationInputDataProvider.EngineInputData
-		{
-			get { return EngineInputData; }
-		}
+		//IAirdragDeclarationInputData IDeclarationInputDataProvider.AirdragInputData
+		//{
+		//	get { return AirdragInputData; }
+		//}
 
-		public IEngineEngineeringInputData EngineInputData
-		{
-			get { return Engine; }
-		}
+		//public IAirdragEngineeringInputData AirdragInputData
+		//{
+		//	get { return AirdragData; }
+		//}
 
-		public IAuxiliariesEngineeringInputData AuxiliaryInputData()
-		{
-			throw new NotImplementedException();
-		}
+		//IGearboxDeclarationInputData IDeclarationInputDataProvider.GearboxInputData
+		//{
+		//	get { return GearboxInputData; }
+		//}
 
-		IAuxiliariesDeclarationInputData IDeclarationInputDataProvider.AuxiliaryInputData()
-		{
-			throw new NotImplementedException();
-		}
+		//ITorqueConverterDeclarationInputData IDeclarationInputDataProvider.TorqueConverterInputData
+		//{
+		//	get { return TorqueConverterInputData; }
+		//}
 
-		public IRetarderInputData RetarderInputData
+		IDeclarationJobInputData IDeclarationInputDataProvider.JobInputData
 		{
-			get { return Retarder; }
+			get {
+				throw new NotImplementedException();
+			}
 		}
 
-		IDriverDeclarationInputData IDeclarationInputDataProvider.DriverInputData
-		{
-			get { throw new NotImplementedException(); }
-		}
+		//public IVehicleEngineeringInputData VehicleInputData
+		//{
+		//	get { return VehicleData; }
+		//}
+
+		//public IGearboxEngineeringInputData GearboxInputData
+		//{
+		//	get { return Gearbox; }
+		//}
+
+		//public ITorqueConverterEngineeringInputData TorqueConverterInputData
+		//{
+		//	get { return TorqueConverter; }
+		//}
+
+		//public IAxleGearInputData AxleGearInputData
+		//{
+		//	get { return AxleGear; }
+		//}
+
+		//public IAngledriveInputData AngledriveInputData
+		//{
+		//	get { return Angledrive; }
+		//}
+
+		//IEngineDeclarationInputData IDeclarationInputDataProvider.EngineInputData
+		//{
+		//	get { return EngineInputData; }
+		//}
+
+		//public IEngineEngineeringInputData EngineInputData
+		//{
+		//	get { return Engine; }
+		//}
+
+		//public IAuxiliariesEngineeringInputData AuxiliaryInputData()
+		//{
+		//	throw new NotImplementedException();
+		//}
+
+		//IAuxiliariesDeclarationInputData IDeclarationInputDataProvider.AuxiliaryInputData()
+		//{
+		//	throw new NotImplementedException();
+		//}
+
+		//public IRetarderInputData RetarderInputData
+		//{
+		//	get { return Retarder; }
+		//}
+
+		//IDriverDeclarationInputData IDeclarationInputDataProvider.DriverInputData
+		//{
+		//	get { throw new NotImplementedException(); }
+		//}
 
 		public IDriverEngineeringInputData DriverInputData
 		{
 			get { throw new NotImplementedException(); }
 		}
 
-		public IPTOTransmissionInputData PTOTransmissionInputData
-		{
-			get { return PTOTransmission; }
-		}
+		//public IPTOTransmissionInputData PTOTransmissionInputData
+		//{
+		//	get { return PTOTransmission; }
+		//}
 
-		public XElement XMLHash
-		{
-			get { return null; }
-		}
+		
 	}
-}
\ No newline at end of file
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
index 19d015b541a80c3718189125ec065210c939c25f..225d2ef299cbb35761b83c9a62fcfc93138340a1 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
@@ -38,6 +38,7 @@ using System.Xml.Linq;
 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.InputData.Impl;
@@ -125,17 +126,19 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 		IEngineeringJobInputData, IDriverEngineeringInputData, IAuxiliariesEngineeringInputData,
 		IAuxiliariesDeclarationInputData
 	{
-		protected readonly IGearboxEngineeringInputData Gearbox;
-		protected readonly IAxleGearInputData AxleGear;
-		protected readonly ITorqueConverterEngineeringInputData TorqueConverter;
-		protected readonly IAngledriveInputData Angledrive;
-		protected readonly IEngineEngineeringInputData Engine;
+		public IGearboxEngineeringInputData Gearbox { get; internal set; }
+		public IAxleGearInputData AxleGear { get; internal set; }
+		public ITorqueConverterEngineeringInputData TorqueConverter { get; internal set; }
+		//public IAngledriveInputData Angledrive { get; internal set; }
+		public IEngineEngineeringInputData Engine { get; internal set; }
+		//public IRetarderInputData Retarder { get; internal set; }
+		//public IPTOTransmissionInputData PTOTransmission { get; internal set; }
+		//public IAirdragEngineeringInputData AirdragData { get; internal set; }
+
 		protected readonly IVehicleEngineeringInputData VehicleData;
-		protected readonly IRetarderInputData Retarder;
-		protected readonly IPTOTransmissionInputData PTOTransmission;
 
 		private readonly string _jobname;
-		protected internal IAirdragEngineeringInputData AirdragData;
+
 
 		public JSONInputDataV2(JObject data, string filename, bool tolerateMissing = false)
 			: base(data, filename, tolerateMissing)
@@ -153,10 +156,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			TorqueConverter = Gearbox as ITorqueConverterEngineeringInputData;
 
 			VehicleData = ReadVehicle();
-			Angledrive = VehicleData as IAngledriveInputData;
-			Retarder = VehicleData as IRetarderInputData;
-			PTOTransmission = VehicleData as IPTOTransmissionInputData;
-			AirdragData = VehicleData as IAirdragEngineeringInputData;
+			//Angledrive = VehicleData as IAngledriveInputData;
+			//Retarder = VehicleData as IRetarderInputData;
+			//PTOTransmission = VehicleData as IPTOTransmissionInputData;
+			//AirdragData = VehicleData as IAirdragEngineeringInputData;
 		}
 
 		private IVehicleEngineeringInputData ReadVehicle()
@@ -164,14 +167,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			try {
 				var vehicleFile = Body.GetEx(JsonKeys.Vehicle_VehicleFile).Value<string>();
 				return JSONInputDataFactory.ReadJsonVehicle(
-					Path.Combine(BasePath, vehicleFile));
+					Path.Combine(BasePath, vehicleFile), this);
 			} catch (Exception e) {
 				if (!TolerateMissing) {
 					throw new VectoException("JobFile: Failed to read Vehicle file '{0}': {1}", e, Body[JsonKeys.Vehicle_VehicleFile],
 						e.Message);
 				}
 				return new JSONVehicleDataV7(GetDummyJSONStructure(),
-					Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_VehicleFile).Value<string>()) + MissingFileSuffix);
+					Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_VehicleFile).Value<string>()) + MissingFileSuffix, this);
 			}
 		}
 
@@ -210,58 +213,62 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		#region IInputDataProvider
 
-		public virtual IEngineeringJobInputData JobInputData()
-		{
-			return this;
-		}
-
-		IVehicleDeclarationInputData IDeclarationInputDataProvider.VehicleInputData
+		IVehicleDeclarationInputData IDeclarationJobInputData.Vehicle
 		{
 			get { return VehicleInputData; }
 		}
 
-		IAirdragDeclarationInputData IDeclarationInputDataProvider.AirdragInputData
-		{
-			get { return AirdragInputData; }
-		}
+		//IAirdragDeclarationInputData IDeclarationInputDataProvider.AirdragInputData
+		//{
+		//	get { return AirdragInputData; }
+		//}
 
-		public IAirdragEngineeringInputData AirdragInputData
-		{
-			get { return AirdragData; }
-		}
+		//public IAirdragEngineeringInputData AirdragInputData
+		//{
+		//	get { return AirdragData; }
+		//}
 
-		IGearboxDeclarationInputData IDeclarationInputDataProvider.GearboxInputData
-		{
-			get { return GearboxInputData; }
-		}
+		//IGearboxDeclarationInputData IDeclarationInputDataProvider.GearboxInputData
+		//{
+		//	get { return GearboxInputData; }
+		//}
+
+		//ITorqueConverterDeclarationInputData IDeclarationInputDataProvider.TorqueConverterInputData
+		//{
+		//	get { return TorqueConverterInputData; }
+		//}
 
-		ITorqueConverterDeclarationInputData IDeclarationInputDataProvider.TorqueConverterInputData
+		//public ITorqueConverterEngineeringInputData TorqueConverterInputData
+		//{
+		//	get
+		//	{
+		//		if (TorqueConverter == null) {
+		//			throw new InvalidFileFormatException("TorqueConverterData not found");
+		//		}
+		//		return TorqueConverter;
+		//	}
+		//}
+
+		public virtual IEngineeringJobInputData JobInputData
 		{
-			get { return TorqueConverterInputData; }
+			get { return this; }
 		}
 
-		public ITorqueConverterEngineeringInputData TorqueConverterInputData
+		public XElement XMLHash
 		{
-			get
-			{
-				if (TorqueConverter == null) {
-					throw new InvalidFileFormatException("TorqueConverterData not found");
-				}
-				return TorqueConverter;
-			}
+			get { return new XElement(XMLNames.DI_Signature); }
 		}
 
-		IDeclarationJobInputData IDeclarationInputDataProvider.JobInputData()
+		IDeclarationJobInputData IDeclarationInputDataProvider.JobInputData
 		{
-			return JobInputData();
+			get { return this; }
 		}
 
 		public virtual IVehicleEngineeringInputData VehicleInputData
 		{
 			[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
 				"CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
-			get
-			{
+			get {
 				if (VehicleData == null) {
 					throw new InvalidFileFormatException("VehicleData not found ");
 				}
@@ -269,48 +276,47 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public virtual IGearboxEngineeringInputData GearboxInputData
+		//public virtual IGearboxEngineeringInputData GearboxInputData
+		//{
+		//	[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
+		//		"CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
+		//	get
+		//	{
+		//		if (Gearbox == null) {
+		//			throw new InvalidFileFormatException("GearboxData not found");
+		//		}
+		//		return Gearbox;
+		//	}
+		//}
+
+		//public virtual IAxleGearInputData AxleGearInputData
+		//{
+		//	[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
+		//		"CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
+		//	get
+		//	{
+		//		if (AxleGear == null) {
+		//			throw new InvalidFileFormatException("AxleGearData not found");
+		//		}
+		//		return AxleGear;
+		//	}
+		//}
+
+		//public IAngledriveInputData AngledriveInputData
+		//{
+		//	get { return Angledrive; }
+		//}
+
+		//IEngineDeclarationInputData IDeclarationInputDataProvider.EngineInputData
+		//{
+		//	get { return EngineInputData; }
+		//}
+
+		public virtual IEngineEngineeringInputData EngineOnly
 		{
 			[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
 				"CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
-			get
-			{
-				if (Gearbox == null) {
-					throw new InvalidFileFormatException("GearboxData not found");
-				}
-				return Gearbox;
-			}
-		}
-
-		public virtual IAxleGearInputData AxleGearInputData
-		{
-			[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
-				"CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
-			get
-			{
-				if (AxleGear == null) {
-					throw new InvalidFileFormatException("AxleGearData not found");
-				}
-				return AxleGear;
-			}
-		}
-
-		public IAngledriveInputData AngledriveInputData
-		{
-			get { return Angledrive; }
-		}
-
-		IEngineDeclarationInputData IDeclarationInputDataProvider.EngineInputData
-		{
-			get { return EngineInputData; }
-		}
-
-		public virtual IEngineEngineeringInputData EngineInputData
-		{
-			[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
-				"CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
-			get
-			{
+			get {
 				if (Engine == null) {
 					throw new InvalidFileFormatException("EngineData not found");
 				}
@@ -318,48 +324,48 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public virtual IAuxiliariesEngineeringInputData AuxiliaryInputData()
-		{
-			return this;
-		}
+		//public virtual IAuxiliariesEngineeringInputData AuxiliaryInputData()
+		//{
+		//	return this;
+		//}
 
 		IDriverEngineeringInputData IEngineeringInputDataProvider.DriverInputData
 		{
 			get { return this; }
 		}
 
-		public IPTOTransmissionInputData PTOTransmissionInputData
-		{
-			get { return PTOTransmission; }
-		}
-
-		public XElement XMLHash
-		{
-			get { return null; }
-		}
-
-		IAuxiliariesDeclarationInputData IDeclarationInputDataProvider.AuxiliaryInputData()
-		{
-			return this;
-		}
-
-		public virtual IRetarderInputData RetarderInputData
-		{
-			[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
-				"CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
-			get
-			{
-				if (Retarder == null) {
-					throw new InvalidFileFormatException("RetarderData not found");
-				}
-				return Retarder;
-			}
-		}
-
-		public virtual IDriverDeclarationInputData DriverInputData
-		{
-			get { return this; }
-		}
+		//public IPTOTransmissionInputData PTOTransmissionInputData
+		//{
+		//	get { return PTOTransmission; }
+		//}
+
+		//public XElement XMLHash
+		//{
+		//	get { return null; }
+		//}
+
+		//IAuxiliariesDeclarationInputData IDeclarationInputDataProvider.AuxiliaryInputData()
+		//{
+		//	return this;
+		//}
+
+		//public virtual IRetarderInputData RetarderInputData
+		//{
+		//	[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
+		//		"CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
+		//	get
+		//	{
+		//		if (Retarder == null) {
+		//			throw new InvalidFileFormatException("RetarderData not found");
+		//		}
+		//		return Retarder;
+		//	}
+		//}
+
+		//public virtual IDriverDeclarationInputData DriverInputData
+		//{
+		//	get { return this; }
+		//}
 
 		#endregion
 
@@ -374,8 +380,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 		{
 			[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
 				"CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
-			get
-			{
+			get {
 				var retVal = new List<ICycleData>();
 				if (Body[JsonKeys.Job_Cycles] == null) {
 					return retVal;
@@ -413,10 +418,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			get { return Body.GetEx(JsonKeys.Job_EngineOnlyMode).Value<bool>(); }
 		}
 
-		IVehicleDeclarationInputData IDeclarationJobInputData.Vehicle
-		{
-			get { return Vehicle; }
-		}
+		//IVehicleDeclarationInputData IDeclarationJobInputData.Vehicle
+		//{
+		//	get { return Vehicle; }
+		//}
 
 		public virtual string JobName
 		{
@@ -427,21 +432,20 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		#region DriverInputData
 
-		IOverSpeedEcoRollDeclarationInputData IDriverDeclarationInputData.OverSpeedEcoRoll
-		{
-			get
-			{
-				var overspeed = Body.GetEx(JsonKeys.DriverData_OverspeedEcoRoll);
-				return new OverSpeedEcoRollInputData() {
-					Mode = DriverData.ParseDriverMode(overspeed.GetEx<string>(JsonKeys.DriverData_OverspeedEcoRoll_Mode))
-				};
-			}
-		}
+		//IOverSpeedEcoRollDeclarationInputData IDriverDeclarationInputData.OverSpeedEcoRoll
+		//{
+		//	get
+		//	{
+		//		var overspeed = Body.GetEx(JsonKeys.DriverData_OverspeedEcoRoll);
+		//		return new OverSpeedEcoRollInputData() {
+		//			Mode = DriverData.ParseDriverMode(overspeed.GetEx<string>(JsonKeys.DriverData_OverspeedEcoRoll_Mode))
+		//		};
+		//	}
+		//}
 
 		public virtual ILookaheadCoastingInputData Lookahead
 		{
-			get
-			{
+			get {
 				if (Body[JsonKeys.DriverData_LookaheadCoasting] == null) {
 					return null;
 				}
@@ -512,8 +516,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		public virtual IOverSpeedEcoRollEngineeringInputData OverSpeedEcoRoll
 		{
-			get
-			{
+			get {
 				var overspeed = Body.GetEx(JsonKeys.DriverData_OverspeedEcoRoll);
 				return new OverSpeedEcoRollInputData() {
 					Mode = DriverData.ParseDriverMode(overspeed.GetEx<string>(JsonKeys.DriverData_OverspeedEcoRoll_Mode)),
@@ -529,8 +532,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 		{
 			[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
 				"CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
-			get
-			{
+			get {
 				var acceleration = Body[JsonKeys.DriverData_AccelerationCurve];
 				if (acceleration == null || EmptyOrInvalidFileName(acceleration.Value<string>())) {
 					return null;
@@ -637,8 +639,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		public AuxiliaryModel AuxiliaryAssembly
 		{
-			get
-			{
+			get {
 				return AuxiliaryModelHelper.Parse(Body["AuxiliaryAssembly"] == null ? "" : Body["AuxiliaryAssembly"].ToString());
 			}
 		}
@@ -650,8 +651,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		public string AdvancedAuxiliaryFilePath
 		{
-			get
-			{
+			get {
 				return Body["AdvancedAuxiliaryFilePath"] != null
 					? Path.Combine(Path.GetFullPath(BasePath), Body["AdvancedAuxiliaryFilePath"].Value<string>())
 					: "";
@@ -704,4 +704,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			return retVal;
 		}
 	}
-}
\ No newline at end of file
+
+
+	public class JSONInputDataV4 : JSONInputDataV3
+	{
+		public JSONInputDataV4(JObject data, string filename, bool tolerateMissing = false)
+			: base(data, filename, tolerateMissing) {}
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs
index 84520f0a606ea9de508fb2a5a096b860c97d0320..43f42130cdc55c2faae84ada2b63520a188b71a7 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs
@@ -70,18 +70,20 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 					return new JSONInputDataV2(json, filename, tolerateMissing);
 				case 3:
 					return new JSONInputDataV3(json, filename, tolerateMissing);
+				case 4:
+					return new JSONInputDataV4(json, filename, tolerateMissing);
 				default:
 					throw new VectoException("Job-File: Unsupported FileVersion. Got: {0} ", version);
 			}
 		}
 
-		public static IVehicleEngineeringInputData ReadJsonVehicle(string filename, bool tolerateMissing = false)
+		public static IVehicleEngineeringInputData ReadJsonVehicle(string filename, JSONInputDataV2 job,  bool tolerateMissing = false)
 		{
 			var json = ReadFile(filename);
 			var version = ReadVersion(json);
 			switch (version) {
 				case 7:
-					return new JSONVehicleDataV7(json, filename, tolerateMissing);
+					return new JSONVehicleDataV7(json, filename, job,tolerateMissing);
 				default:
 					throw new VectoException("Vehicle-File: Unsupported FileVersion. Got {0}", version);
 			}
@@ -121,4 +123,4 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			return (int)double.Parse(value.Trim('"'));
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
index a17fb0be088810eaa60c53ecc91d881bc38abe50..30b734744f688b112378bd19c6bd41d011c6fab3 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
@@ -34,6 +34,7 @@ using System.Collections.Generic;
 using System.IO;
 using System.Linq;
 using Newtonsoft.Json.Linq;
+using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
@@ -44,8 +45,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 	public class JSONVehicleDataV7 : JSONFile, IVehicleEngineeringInputData, IRetarderInputData, IAngledriveInputData,
 		IPTOTransmissionInputData, IAirdragEngineeringInputData
 	{
-		public JSONVehicleDataV7(JObject data, string fileName, bool tolerateMissing = false)
-			: base(data, fileName, tolerateMissing) {}
+		public JSONVehicleDataV7(JObject data, string fileName, JSONInputDataV2 job, bool tolerateMissing = false)
+			: base(data, fileName, tolerateMissing)
+		{
+			Job = job;
+		}
+
+		private JSONInputDataV2 Job;
 
 		#region IVehicleInputData
 
@@ -167,6 +173,103 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 					});
 		}
 
+		#endregion
+
+		#region "VehicleComponents"
+
+		IAirdragDeclarationInputData IVehicleDeclarationInputData.AirdragInputData
+		{
+			get { return this; }
+		}
+
+		IAirdragEngineeringInputData IVehicleEngineeringInputData.AirdragInputData
+		{
+			get { return this; }
+		}
+
+		IGearboxDeclarationInputData IVehicleDeclarationInputData.GearboxInputData
+		{
+			get { return Job.Gearbox; }
+		}
+
+		IGearboxEngineeringInputData IVehicleEngineeringInputData.GearboxInputData
+		{
+			get { return Job.Gearbox; }
+		}
+
+		ITorqueConverterDeclarationInputData IVehicleDeclarationInputData.TorqueConverterInputData
+		{
+			get { return Job.TorqueConverter; }
+		}
+
+		ITorqueConverterEngineeringInputData IVehicleEngineeringInputData.TorqueConverterInputData
+		{
+			get { return Job.TorqueConverter; }
+		}
+
+		IAxleGearInputData IVehicleEngineeringInputData.AxleGearInputData
+		{
+			get { return Job.AxleGear; }
+		}
+
+		IAngledriveInputData IVehicleEngineeringInputData.AngledriveInputData
+		{
+			get { return this; }
+		}
+
+		public IEngineEngineeringInputData EngineInputData
+		{
+			get { return Job.Engine; }
+		}
+
+		IAxleGearInputData IVehicleDeclarationInputData.AxleGearInputData
+		{
+			get { return Job.AxleGear; }
+		}
+
+		IAngledriveInputData IVehicleDeclarationInputData.AngledriveInputData
+		{
+			get { return this; }
+		}
+
+		IEngineDeclarationInputData IVehicleDeclarationInputData.EngineInputData
+		{
+			get { return Job.Engine; }
+		}
+
+		IAuxiliariesDeclarationInputData IVehicleDeclarationInputData.AuxiliaryInputData()
+		{
+			return Job;
+		}
+
+		IRetarderInputData IVehicleEngineeringInputData.RetarderInputData
+		{
+			get { return this; }
+		}
+
+		IPTOTransmissionInputData IVehicleEngineeringInputData.PTOTransmissionInputData
+		{
+			get { return this; }
+		}
+
+		IAuxiliariesEngineeringInputData IVehicleEngineeringInputData.AuxiliaryInputData()
+		{
+			return Job;
+		}
+
+		IRetarderInputData IVehicleDeclarationInputData.RetarderInputData
+		{
+			get { return this; }
+		}
+
+
+		IPTOTransmissionInputData IVehicleDeclarationInputData.PTOTransmissionInputData
+		{
+			get { return this; }
+		}
+
+
+
 		#endregion
 
 		#region Airdrag
@@ -387,4 +490,4 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			get { return ""; }
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAngledriveDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAngledriveDataProvider.cs
index 09de364e5a1efd6eea072b88275fb26a3cf7d541..c50041ecf62e1eaafb4f655b30f58568d8f6d90c 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAngledriveDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAngledriveDataProvider.cs
@@ -29,48 +29,48 @@
 *   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;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
-{
-	public class XMLDeclarationAngledriveDataProvider : AbstractDeclarationXMLComponentDataProvider, IAngledriveInputData
-	{
-		public XMLDeclarationAngledriveDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider) : base(xmlInputDataProvider)
-		{
-			XBasePath = Helper.Query(VehiclePath,
-				XMLNames.Vehicle_Components,
-				XMLNames.Component_Angledrive,
-				XMLNames.ComponentDataWrapper);
-		}
-
-		public AngledriveType Type
-		{
-			get { return InputData._vehicleInputData.AngulargearType; }
-		}
-
-		public double Ratio
-		{
-			get { return GetDoubleElementValue(XMLNames.AngleDrive_Ratio); }
-		}
-
-		public TableData LossMap
-		{
-			get
-			{
-				return ReadTableData(AttributeMappings.TransmissionLossmapMapping,
-					Helper.Query(
-						XMLNames.AngleDrive_TorqueLossMap,
-						XMLNames.Angledrive_LossMap_Entry));
-			}
-		}
-
-		public double Efficiency
-		{
-			get { throw new VectoException("Efficiency not supported in Declaration Mode!"); }
-		}
-	}
-}
\ No newline at end of file
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
+{
+	public class XMLDeclarationAngledriveDataProvider : AbstractDeclarationXMLComponentDataProvider, IAngledriveInputData
+	{
+		public XMLDeclarationAngledriveDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider) : base(xmlInputDataProvider)
+		{
+			XBasePath = Helper.Query(VehiclePath,
+				XMLNames.Vehicle_Components,
+				XMLNames.Component_Angledrive,
+				XMLNames.ComponentDataWrapper);
+		}
+
+		public AngledriveType Type
+		{
+			get { return InputData.XMLJob.XMLVehicle.AngulargearType; }
+		}
+
+		public double Ratio
+		{
+			get { return GetDoubleElementValue(XMLNames.AngleDrive_Ratio); }
+		}
+
+		public TableData LossMap
+		{
+			get
+			{
+				return ReadTableData(AttributeMappings.TransmissionLossmapMapping,
+					Helper.Query(
+						XMLNames.AngleDrive_TorqueLossMap,
+						XMLNames.Angledrive_LossMap_Entry));
+			}
+		}
+
+		public double Efficiency
+		{
+			get { throw new VectoException("Efficiency not supported in Declaration Mode!"); }
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationDriverDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationDriverDataProvider.cs
deleted file mode 100644
index 76b683eb75cee947b6b3d85ecdc7e8d60d205339..0000000000000000000000000000000000000000
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationDriverDataProvider.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2017 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
-
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCore.InputData.Impl;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
-{
-	public class XMLDeclarationDriverDataProvider : AbstractDeclarationXMLComponentDataProvider,
-		IDriverDeclarationInputData
-	{
-		public XMLDeclarationDriverDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider)
-			: base(xmlInputDataProvider)
-		{
-			XBasePath = VehiclePath;
-		}
-
-		public IOverSpeedEcoRollDeclarationInputData OverSpeedEcoRoll
-		{
-			get {
-				//var node =
-				//	Navigator.SelectSingleNode(Helper.Query(VehiclePath,
-				//		XMLNames.Vehicle_AdvancedDriverAssist,
-				//		XMLNames.DriverModel_Overspeed,
-				//		XMLNames.DriverModel_Overspeed_Mode), Manager);
-				return new OverSpeedEcoRollInputData() {
-					Mode = DriverMode.Overspeed
-				};
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationInputDataProvider.cs
index 87fdd1356c60bb0f627039844a89bf6bd40757b7..27af6be5ac3abb891dbb62264ec6f006cd366523 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationInputDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationInputDataProvider.cs
@@ -45,10 +45,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 	{
 		internal readonly XPathDocument Document;
 
-		private readonly IAuxiliariesDeclarationInputData XMLAuxiliaryData;
-		private readonly IDriverDeclarationInputData XMLDriverData;
-		private readonly IDeclarationJobInputData XMLJobData;
-		protected internal readonly XMLDeclarationVehicleDataProvider _vehicleInputData;
+		//private readonly IAuxiliariesDeclarationInputData XMLAuxiliaryData;
+		//private readonly IDriverDeclarationInputData XMLDriverData;
+		private readonly XMLDeclarationJobInputDataProvider _xmlJobData;
+		//protected internal readonly XMLDeclarationVehicleDataProvider _vehicleInputData;
 
 		public XMLDeclarationInputDataProvider(XmlReader inputData, bool verifyXml)
 		{
@@ -75,18 +75,18 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 
 			//CheckInputDocument();
 
-			XMLJobData = new XMLDeclarationJobInputDataProvider(this);
-			_vehicleInputData = new XMLDeclarationVehicleDataProvider(this);
-			AirdragInputData = new XMLDeclarationAirdragDataProvider(this);
-			AxleGearInputData = new XMLDeclarationAxlegearDataProvider(this);
-			AngledriveInputData = new XMLDeclarationAngledriveDataProvider(this);
-			EngineInputData = new XMLDeclarationEngineDataProvider(this);
-			GearboxInputData = new XMLDeclarationGearboxDataProvider(this);
-			TorqueConverterInputData = new XMLDeclarationTorqueConverterDataProvider(this);
-			RetarderInputData = new XMLDeclarationRetarderDataProvider(this);
-			XMLDriverData = new XMLDeclarationDriverDataProvider(this);
-			XMLAuxiliaryData = new XMLDeclarationAuxiliaryDataProvider(this);
-			PTOTransmissionInputData = _vehicleInputData.GetPTOData();
+			_xmlJobData = new XMLDeclarationJobInputDataProvider(this);
+			//_vehicleInputData = new XMLDeclarationVehicleDataProvider(this);
+			//AirdragInputData = new XMLDeclarationAirdragDataProvider(this);
+			//AxleGearInputData = new XMLDeclarationAxlegearDataProvider(this);
+			//AngledriveInputData = new XMLDeclarationAngledriveDataProvider(this);
+			//EngineInputData = new XMLDeclarationEngineDataProvider(this);
+			//GearboxInputData = new XMLDeclarationGearboxDataProvider(this);
+			//TorqueConverterInputData = new XMLDeclarationTorqueConverterDataProvider(this);
+			//RetarderInputData = new XMLDeclarationRetarderDataProvider(this);
+			//XMLDriverData = new XMLDeclarationDriverDataProvider(this);
+			//XMLAuxiliaryData = new XMLDeclarationAuxiliaryDataProvider(this);
+			//PTOTransmissionInputData = _vehicleInputData.GetPTOData();
 		}
 
 		private static void ValidationCallBack(object sender, ValidationEventArgs args)
@@ -107,41 +107,46 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 			return xset;
 		}
 
-		public IDeclarationJobInputData JobInputData()
+		public IDeclarationJobInputData JobInputData
 		{
-			return XMLJobData;
+			get { return _xmlJobData; }
 		}
 
-		public IVehicleDeclarationInputData VehicleInputData
+		public XMLDeclarationJobInputDataProvider XMLJob
 		{
-			get { return _vehicleInputData; }
+			get { return _xmlJobData; }
 		}
 
-		public IAirdragDeclarationInputData AirdragInputData { get; private set; }
+		//public IVehicleDeclarationInputData VehicleInputData
+		//{
+		//	get { return _vehicleInputData; }
+		//}
 
-		public IGearboxDeclarationInputData GearboxInputData { get; private set; }
+		//public IAirdragDeclarationInputData AirdragInputData { get; private set; }
 
-		public ITorqueConverterDeclarationInputData TorqueConverterInputData { get; private set; }
+		//public IGearboxDeclarationInputData GearboxInputData { get; private set; }
 
-		public IAxleGearInputData AxleGearInputData { get; private set; }
+		//public ITorqueConverterDeclarationInputData TorqueConverterInputData { get; private set; }
 
-		public IAngledriveInputData AngledriveInputData { get; private set; }
+		//public IAxleGearInputData AxleGearInputData { get; private set; }
 
-		public IEngineDeclarationInputData EngineInputData { get; private set; }
+		//public IAngledriveInputData AngledriveInputData { get; private set; }
 
-		public IAuxiliariesDeclarationInputData AuxiliaryInputData()
-		{
-			return XMLAuxiliaryData;
-		}
+		//public IEngineDeclarationInputData EngineInputData { get; private set; }
 
-		public IRetarderInputData RetarderInputData { get; private set; }
+		//public IAuxiliariesDeclarationInputData AuxiliaryInputData()
+		//{
+		//	return XMLAuxiliaryData;
+		//}
 
-		public IDriverDeclarationInputData DriverInputData
-		{
-			get { return XMLDriverData; }
-		}
+		//public IRetarderInputData RetarderInputData { get; private set; }
+
+		//public IDriverDeclarationInputData DriverInputData
+		//{
+		//	get { return XMLDriverData; }
+		//}
 
-		public IPTOTransmissionInputData PTOTransmissionInputData { get; private set; }
+		//public IPTOTransmissionInputData PTOTransmissionInputData { get; private set; }
 
 		public XElement XMLHash { get; private set; }
 	}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationJobInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationJobInputDataProvider.cs
index 5f0447ef1b0e03cc73383d22aa07667083eb5170..300a9294e0646b4052d84792caa08a4d0e6ae1bf 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationJobInputDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationJobInputDataProvider.cs
@@ -37,15 +37,24 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 	// ReSharper disable once InconsistentNaming
 	public class XMLDeclarationJobInputDataProvider : AbstractDeclarationXMLComponentDataProvider, IDeclarationJobInputData
 	{
-		public XMLDeclarationJobInputDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider) : base(xmlInputDataProvider)
+		private readonly XMLDeclarationVehicleDataProvider _vehicle;
+
+		public XMLDeclarationJobInputDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider)
+			: base(xmlInputDataProvider)
 		{
 			XBasePath = VehiclePath;
+			_vehicle = new XMLDeclarationVehicleDataProvider(xmlInputDataProvider);
 		}
 
 
 		public IVehicleDeclarationInputData Vehicle
 		{
-			get { return InputData.VehicleInputData; }
+			get { return _vehicle; }
+		}
+
+		public XMLDeclarationVehicleDataProvider XMLVehicle
+		{
+			get { return _vehicle; }
 		}
 
 		public string JobName
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationRetarderDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationRetarderDataProvider.cs
index f13861ad1680ea92c38ab84abd5e92e0290097ea..4e03a20b1c6b79586569b7d29f278eb7149e53eb 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationRetarderDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationRetarderDataProvider.cs
@@ -29,46 +29,46 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
-using TUGraz.IVT.VectoXML;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
-{
-	public class XMLDeclarationRetarderDataProvider : AbstractDeclarationXMLComponentDataProvider, IRetarderInputData
-	{
-		public XMLDeclarationRetarderDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider) : base(xmlInputDataProvider)
-		{
-			XBasePath = Helper.Query(VehiclePath,
-				XMLNames.Vehicle_Components,
-				XMLNames.Component_Retarder,
-				XMLNames.ComponentDataWrapper);
-		}
-
-
-		public override bool SavedInDeclarationMode
-		{
-			get { return true; }
-		}
-
-		public RetarderType Type
-		{
-			get { return InputData._vehicleInputData.RetarderType; }
-		}
-
-		public double Ratio
-		{
-			get { return InputData._vehicleInputData.RetarderRatio; }
-		}
-
-		public TableData LossMap
-		{
-			get
-			{
-				return ReadTableData(AttributeMappings.RetarderLossmapMapping,
-					Helper.Query(XMLNames.Retarder_RetarderLossMap, XMLNames.Retarder_RetarderLossMap_Entry));
-			}
-		}
-	}
-}
\ No newline at end of file
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
+{
+	public class XMLDeclarationRetarderDataProvider : AbstractDeclarationXMLComponentDataProvider, IRetarderInputData
+	{
+		public XMLDeclarationRetarderDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider) : base(xmlInputDataProvider)
+		{
+			XBasePath = Helper.Query(VehiclePath,
+				XMLNames.Vehicle_Components,
+				XMLNames.Component_Retarder,
+				XMLNames.ComponentDataWrapper);
+		}
+
+
+		public override bool SavedInDeclarationMode
+		{
+			get { return true; }
+		}
+
+		public RetarderType Type
+		{
+			get { return InputData.XMLJob.XMLVehicle.RetarderType; }
+		}
+
+		public double Ratio
+		{
+			get { return InputData.XMLJob.XMLVehicle.RetarderRatio; }
+		}
+
+		public TableData LossMap
+		{
+			get
+			{
+				return ReadTableData(AttributeMappings.RetarderLossmapMapping,
+					Helper.Query(XMLNames.Retarder_RetarderLossMap, XMLNames.Retarder_RetarderLossMap_Entry));
+			}
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationVehicleDataProvider.cs
index af787557a5dcd8bd7a6a284e15f8d83bb8915d7c..b2c8e7c15e92f90ba1ee8550081b1b2ca38e40f1 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationVehicleDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationVehicleDataProvider.cs
@@ -46,10 +46,20 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 	public class XMLDeclarationVehicleDataProvider : AbstractDeclarationXMLComponentDataProvider,
 		IVehicleDeclarationInputData, IPTOTransmissionInputData
 	{
+		private readonly IAuxiliariesDeclarationInputData XMLAuxiliaryData;
+
 		public XMLDeclarationVehicleDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider)
 			: base(xmlInputDataProvider)
 		{
 			XBasePath = VehiclePath;
+			AirdragInputData = new XMLDeclarationAirdragDataProvider(xmlInputDataProvider);
+			AxleGearInputData = new XMLDeclarationAxlegearDataProvider(xmlInputDataProvider);
+			AngledriveInputData = new XMLDeclarationAngledriveDataProvider(xmlInputDataProvider);
+			EngineInputData = new XMLDeclarationEngineDataProvider(xmlInputDataProvider);
+			GearboxInputData = new XMLDeclarationGearboxDataProvider(xmlInputDataProvider);
+			TorqueConverterInputData = new XMLDeclarationTorqueConverterDataProvider(xmlInputDataProvider);
+			RetarderInputData = new XMLDeclarationRetarderDataProvider(xmlInputDataProvider);
+			XMLAuxiliaryData = new XMLDeclarationAuxiliaryDataProvider(xmlInputDataProvider);
 		}
 
 		public string VIN
@@ -181,11 +191,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 			get { return GetElementValue(XMLNames.Vehicle_AngledriveType).ParseEnum<AngledriveType>(); }
 		}
 
-		public IPTOTransmissionInputData GetPTOData()
-		{
-			return this;
-		}
-
 		public string PTOTransmissionType
 		{
 			get {
@@ -214,5 +219,29 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 		{
 			get { return null; }
 		}
+
+		public IAirdragDeclarationInputData AirdragInputData { get; private set; }
+
+		public IGearboxDeclarationInputData GearboxInputData { get; private set; }
+
+		public ITorqueConverterDeclarationInputData TorqueConverterInputData { get; private set; }
+
+		public IAxleGearInputData AxleGearInputData { get; private set; }
+
+		public IAngledriveInputData AngledriveInputData { get; private set; }
+
+		public IEngineDeclarationInputData EngineInputData { get; private set; }
+
+		public IAuxiliariesDeclarationInputData AuxiliaryInputData()
+		{
+			return XMLAuxiliaryData;
+		}
+
+		public IRetarderInputData RetarderInputData { get; private set; }
+
+		public IPTOTransmissionInputData PTOTransmissionInputData
+		{
+			get { return this; }
+		}
 	}
-}
\ No newline at end of file
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringInputDataProvider.cs
index 5d40e4ce5c52129d48f98d3cac1c0e40cf8139d9..daaa388879a0e3fde41ac122d0243566f370ac16 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringInputDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringInputDataProvider.cs
@@ -29,217 +29,221 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
-using System.IO;
-using System.Xml;
-using System.Xml.Schema;
-using System.Xml.XPath;
-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.Engineering
-{
-	public class XMLEngineeringInputDataProvider : IEngineeringInputDataProvider
-	{
-		public readonly string FileName;
-
-		internal XPathDocument Document;
-
-		protected internal XMLEngineeringAuxiliaryDataProvider XMLEngineeringAuxiliaryData;
-		protected internal XMLEngineeringDriverDataProvider XMLEngineeringDriverData;
-		protected internal XMLEngineeringJobInputDataProvider XMLEngineeringJobData;
-		protected internal XMLEngineeringVehicleDataProvider VehicleData;
-		protected internal XMLEngineeringAxlegearDataProvider AxlegearData;
-
-		public XMLEngineeringInputDataProvider(string filename, bool verifyXml)
-		{
-			FileName = filename;
-			ReadXMLDocument(File.OpenRead(filename), verifyXml);
-
-			InitializeComponentDataProvider(verifyXml);
-		}
-
-
-		public XMLEngineeringInputDataProvider(Stream inputData, bool verifyXml)
-		{
-			FileName = ".";
-			ReadXMLDocument(inputData, verifyXml);
-
-			var nav = Document.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-			var refNodes =
-				nav.Select(
-					"//" + helper.Query(helper.QueryConstraint(XMLNames.ExternalResource, XMLNames.ExtResource_File_Attr, null)),
-					manager);
-			if (refNodes.Count > 0) {
-				throw new VectoException("XML input data with file references can not be read via stream!");
-			}
-
-			InitializeComponentDataProvider(verifyXml);
-		}
-
-
-		private void ReadXMLDocument(Stream inputData, bool verifyXml)
-		{
-			XmlReaderSettings settings = null;
-			if (verifyXml) {
-				settings = new XmlReaderSettings {
-					ValidationType = ValidationType.Schema,
-					ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema |
-									//XmlSchemaValidationFlags.ProcessSchemaLocation |
-									XmlSchemaValidationFlags.ReportValidationWarnings
-				};
-				settings.ValidationEventHandler += ValidationCallBack;
-				settings.Schemas.Add(GetXMLSchema(""));
-			}
-			try {
-				Document = new XPathDocument(XmlReader.Create(inputData, settings));
-			} catch (XmlSchemaValidationException validationException) {
-				throw new VectoException("Validation of input data failed", validationException);
-			}
-		}
-
-		private void InitializeComponentDataProvider(bool verifyXml)
-		{
-			XmlReaderSettings settings = null;
-			if (verifyXml) {
-				settings = new XmlReaderSettings {
-					ValidationType = ValidationType.Schema,
-					ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema |
-									//XmlSchemaValidationFlags.ProcessSchemaLocation |
-									XmlSchemaValidationFlags.ReportValidationWarnings
-				};
-				settings.Schemas.Add(GetXMLSchema(""));
-			}
-
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			XMLEngineeringJobData = new XMLEngineeringJobInputDataProvider(this, Document,
-				helper.QueryAbs(helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix)),
-				Path.GetDirectoryName(Path.GetFullPath(FileName)));
-			if (XMLEngineeringJobData.EngineOnlyMode) {
-				EngineInputData = new XMLEngineeringEngineDataProvider(this, Document,
-					helper.QueryAbs(helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-						XMLNames.Component_Engine,
-						XMLNames.ComponentDataWrapper), Path.GetDirectoryName(Path.GetFullPath(FileName)));
-				return;
-			}
-			ReadVehicle(settings);
-
-			XMLEngineeringDriverData = XMLEngineeringJobData.GetDriverData();
-			AxlegearData = VehicleData.GetAxleGearInputData(settings);
-			AngledriveInputData = VehicleData.GetAngularGearInputData();
-			EngineInputData = VehicleData.GetEngineInputData(settings);
-			RetarderInputData = VehicleData.GetRetarderInputData(settings);
-			XMLEngineeringAuxiliaryData = VehicleData.GetAuxiliaryData(settings);
-			GearboxInputData = VehicleData.GetGearboxData(settings);
-			TorqueConverterInputData = GearboxInputData.TorqueConverter;
-			PTOTransmissionInputData = VehicleData.GetPTOData();
-			AirdragInputData = VehicleData.GetAirdragInputData(settings);
-		}
-
-		private static void ValidationCallBack(object sender, ValidationEventArgs args)
-		{
-			if (args.Severity == XmlSeverityType.Error) {
-				throw new VectoException("Validation error: {0}", args.Message);
-			}
-		}
-
-		private void ReadVehicle(XmlReaderSettings settings)
-		{
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-
-
-			var nav = Document.CreateNavigator();
-			var vehiclePath = helper.QueryAbs(helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.Component_Vehicle);
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			helper.AddNamespaces(manager);
-			var vehicle = nav.SelectSingleNode(vehiclePath, manager);
-			if (vehicle != null) {
-				VehicleData = new XMLEngineeringVehicleDataProvider(this, Document, vehiclePath,
-					Path.GetDirectoryName(Path.GetFullPath(FileName)));
-				return;
-			}
-
-			var extVehilePath = helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				helper.QueryConstraint(XMLNames.ExternalResource, "@component='Vehicle' and @type='xml'", null, ""));
-			var extVehicle = nav.SelectSingleNode(extVehilePath, manager);
-			if (extVehicle != null) {
-				try {
-					var vehicleFile = extVehicle.GetAttribute(XMLNames.ExtResource_File_Attr, "");
-					var vehicleDocument = new XPathDocument(
-						XmlReader.Create(Path.Combine(Path.GetDirectoryName(FileName) ?? "./", vehicleFile),
-							settings));
-					var vehicleCompPath =
-						helper.QueryAbs(
-							helper.NSPrefix("VectoComponentEngineering", Constants.XML.RootNSPrefix),
-							XMLNames.Component_Vehicle);
-					VehicleData = new XMLEngineeringVehicleDataProvider(this, vehicleDocument, vehicleCompPath,
-						Path.GetDirectoryName(Path.GetFullPath(Path.Combine(Path.GetDirectoryName(FileName) ?? "./", vehicleFile))));
-					return;
-				} catch (XmlSchemaValidationException validationException) {
-					throw new VectoException("Validation of XML-file for Vehicle failed", validationException);
-				}
-			}
-			throw new VectoException("No Vehicle found");
-		}
-
-		private static XmlSchemaSet GetXMLSchema(string version)
-		{
-			var resource = RessourceHelper.LoadResourceAsStream(RessourceHelper.ResourceType.XMLSchema,
-				"VectoEngineeringInput.xsd");
-			var xset = new XmlSchemaSet() { XmlResolver = new XmlResourceResolver() };
-			var reader = XmlReader.Create(resource, new XmlReaderSettings(), XmlResourceResolver.BaseUri);
-			xset.Add(XmlSchema.Read(reader, null));
-			xset.Compile();
-			return xset;
-		}
-
-		public IEngineeringJobInputData JobInputData()
-		{
-			return XMLEngineeringJobData;
-		}
-
-		public IVehicleEngineeringInputData VehicleInputData
-		{
-			get { return VehicleData; }
-		}
-
-		public IAirdragEngineeringInputData AirdragInputData { get; private set; }
-
-
-		public IGearboxEngineeringInputData GearboxInputData { get; private set; }
-
-		public ITorqueConverterEngineeringInputData TorqueConverterInputData { get; private set; }
-
-		public IAxleGearInputData AxleGearInputData
-		{
-			get { return AxlegearData; }
-		}
-
-		public IAngledriveInputData AngledriveInputData { get; private set; }
-
-		public IEngineEngineeringInputData EngineInputData { get; private set; }
-
-		public IAuxiliariesEngineeringInputData AuxiliaryInputData()
-		{
-			return XMLEngineeringAuxiliaryData;
-		}
-
-		public IRetarderInputData RetarderInputData { get; private set; }
-
-		public IDriverEngineeringInputData DriverInputData
-		{
-			get { return XMLEngineeringDriverData; }
-		}
-
-		public IPTOTransmissionInputData PTOTransmissionInputData { get; private set; }
-	}
-}
\ No newline at end of file
+using System.IO;
+using System.Xml;
+using System.Xml.Schema;
+using System.Xml.XPath;
+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.Engineering
+{
+	public class XMLEngineeringInputDataProvider : IEngineeringInputDataProvider
+	{
+		public readonly string FileName;
+
+		internal XPathDocument Document;
+
+		protected internal XMLEngineeringJobInputDataProvider XMLEngineeringJobData;
+
+		protected internal XMLEngineeringVehicleDataProvider VehicleData;
+		protected internal XMLEngineeringDriverDataProvider XMLEngineeringDriverData;
+
+		public XmlReaderSettings Settings { get; private set; }
+
+		//protected internal XMLEngineeringAuxiliaryDataProvider XMLEngineeringAuxiliaryData;
+		//protected internal XMLEngineeringAxlegearDataProvider AxlegearData;
+
+		public XMLEngineeringInputDataProvider(string filename, bool verifyXml)
+		{
+			FileName = filename;
+			ReadXMLDocument(File.OpenRead(filename), verifyXml);
+
+			InitializeComponentDataProvider(verifyXml);
+		}
+
+
+		public XMLEngineeringInputDataProvider(Stream inputData, bool verifyXml)
+		{
+			FileName = ".";
+			ReadXMLDocument(inputData, verifyXml);
+
+			var nav = Document.CreateNavigator();
+			var manager = new XmlNamespaceManager(nav.NameTable);
+			var helper = new XPathHelper(ExecutionMode.Engineering);
+			helper.AddNamespaces(manager);
+
+			var refNodes =
+				nav.Select(
+					"//" + helper.Query(helper.QueryConstraint(XMLNames.ExternalResource, XMLNames.ExtResource_File_Attr, null)),
+					manager);
+			if (refNodes.Count > 0) {
+				throw new VectoException("XML input data with file references can not be read via stream!");
+			}
+
+			InitializeComponentDataProvider(verifyXml);
+		}
+
+
+		private void ReadXMLDocument(Stream inputData, bool verifyXml)
+		{
+			XmlReaderSettings settings = null;
+			if (verifyXml) {
+				settings = new XmlReaderSettings {
+					ValidationType = ValidationType.Schema,
+					ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema |
+									//XmlSchemaValidationFlags.ProcessSchemaLocation |
+									XmlSchemaValidationFlags.ReportValidationWarnings
+				};
+				settings.ValidationEventHandler += ValidationCallBack;
+				settings.Schemas.Add(GetXMLSchema(""));
+			}
+			try {
+				Document = new XPathDocument(XmlReader.Create(inputData, settings));
+			} catch (XmlSchemaValidationException validationException) {
+				throw new VectoException("Validation of input data failed", validationException);
+			}
+		}
+
+		private void InitializeComponentDataProvider(bool verifyXml)
+		{
+			Settings = null;
+			if (verifyXml) {
+				Settings = new XmlReaderSettings {
+					ValidationType = ValidationType.Schema,
+					ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema |
+									//XmlSchemaValidationFlags.ProcessSchemaLocation |
+									XmlSchemaValidationFlags.ReportValidationWarnings
+				};
+				Settings.Schemas.Add(GetXMLSchema(""));
+			}
+
+			var helper = new XPathHelper(ExecutionMode.Engineering);
+			XMLEngineeringJobData = new XMLEngineeringJobInputDataProvider(this, Document,
+				helper.QueryAbs(helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix)),
+				Path.GetDirectoryName(Path.GetFullPath(FileName)));
+			if (XMLEngineeringJobData.EngineOnlyMode) {
+				EngineOnlyInputData = new XMLEngineeringEngineDataProvider(this, Document,
+					helper.QueryAbs(helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+						XMLNames.Component_Engine,
+						XMLNames.ComponentDataWrapper), Path.GetDirectoryName(Path.GetFullPath(FileName)));
+				return;
+			}
+			ReadVehicle(Settings);
+
+			XMLEngineeringDriverData = XMLEngineeringJobData.GetDriverData();
+			//AxlegearData = VehicleData.GetAxleGearInputData(settings);
+			//AngledriveInputData = VehicleData.GetAngularGearInputData();
+			//EngineInputData = VehicleData.GetEngineInputData(settings);
+			//RetarderInputData = VehicleData.GetRetarderInputData(settings);
+			//XMLEngineeringAuxiliaryData = VehicleData.GetAuxiliaryData(settings);
+			//GearboxInputData = VehicleData.GetGearboxData(settings);
+			//TorqueConverterInputData = GearboxInputData.TorqueConverter;
+			//PTOTransmissionInputData = VehicleData.GetPTOData();
+			//AirdragInputData = VehicleData.GetAirdragInputData(settings);
+		}
+
+		private static void ValidationCallBack(object sender, ValidationEventArgs args)
+		{
+			if (args.Severity == XmlSeverityType.Error) {
+				throw new VectoException("Validation error: {0}", args.Message);
+			}
+		}
+
+		private void ReadVehicle(XmlReaderSettings settings)
+		{
+			var helper = new XPathHelper(ExecutionMode.Engineering);
+
+
+			var nav = Document.CreateNavigator();
+			var vehiclePath = helper.QueryAbs(helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+				XMLNames.Component_Vehicle);
+			var manager = new XmlNamespaceManager(nav.NameTable);
+			helper.AddNamespaces(manager);
+			var vehicle = nav.SelectSingleNode(vehiclePath, manager);
+			if (vehicle != null) {
+				VehicleData = new XMLEngineeringVehicleDataProvider(this, Document, vehiclePath,
+					Path.GetDirectoryName(Path.GetFullPath(FileName)));
+				return;
+			}
+
+			var extVehilePath = helper.QueryAbs(
+				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+				helper.QueryConstraint(XMLNames.ExternalResource, "@component='Vehicle' and @type='xml'", null, ""));
+			var extVehicle = nav.SelectSingleNode(extVehilePath, manager);
+			if (extVehicle != null) {
+				try {
+					var vehicleFile = extVehicle.GetAttribute(XMLNames.ExtResource_File_Attr, "");
+					var vehicleDocument = new XPathDocument(
+						XmlReader.Create(Path.Combine(Path.GetDirectoryName(FileName) ?? "./", vehicleFile),
+							settings));
+					var vehicleCompPath =
+						helper.QueryAbs(
+							helper.NSPrefix("VectoComponentEngineering", Constants.XML.RootNSPrefix),
+							XMLNames.Component_Vehicle);
+					VehicleData = new XMLEngineeringVehicleDataProvider(this, vehicleDocument, vehicleCompPath,
+						Path.GetDirectoryName(Path.GetFullPath(Path.Combine(Path.GetDirectoryName(FileName) ?? "./", vehicleFile))));
+					return;
+				} catch (XmlSchemaValidationException validationException) {
+					throw new VectoException("Validation of XML-file for Vehicle failed", validationException);
+				}
+			}
+			throw new VectoException("No Vehicle found");
+		}
+
+		private static XmlSchemaSet GetXMLSchema(string version)
+		{
+			var resource = RessourceHelper.LoadResourceAsStream(RessourceHelper.ResourceType.XMLSchema,
+				"VectoEngineeringInput.xsd");
+			var xset = new XmlSchemaSet() { XmlResolver = new XmlResourceResolver() };
+			var reader = XmlReader.Create(resource, new XmlReaderSettings(), XmlResourceResolver.BaseUri);
+			xset.Add(XmlSchema.Read(reader, null));
+			xset.Compile();
+			return xset;
+		}
+
+		public IEngineeringJobInputData JobInputData
+		{
+			get { return XMLEngineeringJobData; }
+		}
+
+		public IVehicleEngineeringInputData VehicleInputData
+		{
+			get { return VehicleData; }
+		}
+
+		//public IAirdragEngineeringInputData AirdragInputData { get; private set; }
+
+
+		//public IGearboxEngineeringInputData GearboxInputData { get; private set; }
+
+		//public ITorqueConverterEngineeringInputData TorqueConverterInputData { get; private set; }
+
+		//public IAxleGearInputData AxleGearInputData
+		//{
+		//	get { return AxlegearData; }
+		//}
+
+		//public IAngledriveInputData AngledriveInputData { get; private set; }
+
+		public IEngineEngineeringInputData EngineOnlyInputData { get; private set; }
+
+		//public IAuxiliariesEngineeringInputData AuxiliaryInputData()
+		//{
+		//	return XMLEngineeringAuxiliaryData;
+		//}
+
+		//public IRetarderInputData RetarderInputData { get; private set; }
+
+		public IDriverEngineeringInputData DriverInputData
+		{
+			get { return XMLEngineeringDriverData; }
+		}
+
+		//public IPTOTransmissionInputData PTOTransmissionInputData { get; private set; }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringJobInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringJobInputDataProvider.cs
index 50d44c5e76a300a9df74e5c2b42d21ad16baf2c9..324054616a2a41207b09eaf43bb792a195a8c119 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringJobInputDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringJobInputDataProvider.cs
@@ -29,232 +29,237 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
-using System.Collections.Generic;
-using System.IO;
-using System.Xml;
-using System.Xml.XPath;
-using TUGraz.VectoCommon.Exceptions;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.Configuration;
-using TUGraz.VectoCore.InputData.Impl;
-using TUGraz.VectoCore.Models.Declaration;
-using TUGraz.VectoCore.Utils;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
-{
-	// ReSharper disable once InconsistentNaming
-	public class XMLEngineeringJobInputDataProvider : AbstractEngineeringXMLComponentDataProvider, IEngineeringJobInputData
-	{
-		public XMLEngineeringJobInputDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider,
-			XPathDocument jobDocument, string xmlBasePath, string fsBasePath)
-			: base(xmlEngineeringJobInputDataProvider, jobDocument, xmlBasePath, fsBasePath) {}
-
-
-		public IVehicleDeclarationInputData Vehicle
-		{
-			get { return InputData.VehicleInputData; }
-		}
-
-		IVehicleEngineeringInputData IEngineeringJobInputData.Vehicle
-		{
-			get { return InputData.VehicleInputData; }
-		}
-
-		//IEngineEngineeringInputData EngineInputData
-		//{
-		//	get { return new XMLEngineeringEngineDataProvider(InputData, XMLDocument, Helper.Query(XBasePath, XMLNames.Component_Engine, XMLNames.ComponentDataWrapper) ,FSBasePath); } 
-		//}
-
-		public IList<ICycleData> Cycles
-		{
-			get {
-				var retVal = new List<ICycleData>();
-				var cycles = Navigator.Select(Helper.Query(XBasePath, XMLNames.VectoJob_MissionCycles,
-					Helper.QueryConstraint(XMLNames.Missions_Cycle, XMLNames.ExtResource_Type_Attr,
-						XMLNames.ExtResource_Type_Value_CSV)), Manager);
-				while (cycles.MoveNext()) {
-					var file = cycles.Current.GetAttribute(XMLNames.ExtResource_File_Attr, "");
-					var fileFull = Path.Combine(FSBasePath ?? "", file);
-					if (File.Exists(fileFull)) {
-						retVal.Add(new CycleInputData() {
-							Name = Path.GetFileNameWithoutExtension(fileFull),
-							CycleData = VectoCSVFile.Read(fileFull)
-						});
-					} else {
-						try {
-							var resourceName = DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles." + file +
-												Constants.FileExtensions.CycleFile;
-							retVal.Add(new CycleInputData() {
-								Name = Path.GetFileNameWithoutExtension(file),
-								CycleData = VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName), source: resourceName),
-							});
-						} catch {
-							//Log.Debug("Driving Cycle could not be read: " + cycleFile);
-							throw new VectoException("Driving Cycle could not be read: " + file);
-						}
-					}
-				}
-				return retVal;
-			}
-		}
-
-		public bool EngineOnlyMode
-		{
-			get {
-				return ElementExists(XMLNames.VectoJob_EngineOnlyMode) &&
-						XmlConvert.ToBoolean(GetElementValue(XMLNames.VectoJob_EngineOnlyMode));
-			}
-		}
-
-		protected internal Second DownshiftAfterUpshiftDelay
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						"DownshiftAfterUpshiftDelay"))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							"DownshiftAfterUpshiftDelay")).SI<Second>()
-						: DeclarationData.Gearbox.DownshiftAfterUpshiftDelay;
-			}
-		}
-
-		protected internal Second UpshiftAfterDownshiftDelay
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						"UpshiftAfterDownshiftDelay"))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							"UpshiftAfterDownshiftDelay")).SI<Second>()
-						: DeclarationData.Gearbox.UpshiftAfterDownshiftDelay;
-			}
-		}
-
-		protected internal MeterPerSquareSecond UpshiftMinAcceleration
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						"UpshiftMinAcceleration"))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							"UpshiftMinAcceleration"))
-							.SI<MeterPerSquareSecond>()
-						: DeclarationData.Gearbox.UpshiftMinAcceleration;
-			}
-		}
-
-
-		public string JobName
-		{
-			get {
-				return InputData.JobInputData().EngineOnlyMode
-					? InputData.EngineInputData.Model
-					: InputData.VehicleData.GetVehicleID;
-			}
-		}
-
-		public double TorqueReserve
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve))
-						: DeclarationData.Gearbox.TorqueReserve;
-			}
-		}
-
-		public Second MinTimeBetweenGearshift
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift)).SI<Second>()
-						: DeclarationData.Gearbox.MinTimeBetweenGearshifts;
-			}
-		}
-
-		public MeterPerSecond StartSpeed
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed)).SI<MeterPerSecond>()
-						: DeclarationData.Gearbox.StartSpeed;
-			}
-		}
-
-		public MeterPerSquareSecond StartAcceleration
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration)).SI<MeterPerSquareSecond>()
-						: DeclarationData.Gearbox.StartAcceleration;
-			}
-		}
-
-		public double StartTorqueReserve
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve))
-						: DeclarationData.Gearbox.TorqueReserveStart;
-			}
-		}
-
-
-		public Second PowershiftShiftTime
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						"PowershiftShiftTime"))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							"PowershiftShiftTime")).SI<Second>()
-						: 0.8.SI<Second>();
-			}
-		}
-
-		public MeterPerSquareSecond CCUpshiftMinAcceleration
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						"CCUpshiftMinAcceleration"))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							"CCUpshiftMinAcceleration")).SI<MeterPerSquareSecond>()
-						: DeclarationData.Gearbox.UpshiftMinAcceleration;
-			}
-		}
-
-		public MeterPerSquareSecond CLUpshiftMinAcceleration
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						"CLUpshiftMinAcceleration"))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							"CLUpshiftMinAcceleration")).SI<MeterPerSquareSecond>()
-						: DeclarationData.Gearbox.UpshiftMinAcceleration;
-			}
-		}
-
-		public XMLEngineeringDriverDataProvider GetDriverData()
-		{
-			return new XMLEngineeringDriverDataProvider(InputData, XMLDocument, XBasePath, FSBasePath);
-		}
-	}
-}
\ No newline at end of file
+using System.Collections.Generic;
+using System.IO;
+using System.Xml;
+using System.Xml.XPath;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.InputData.Impl;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
+{
+	// ReSharper disable once InconsistentNaming
+	public class XMLEngineeringJobInputDataProvider : AbstractEngineeringXMLComponentDataProvider, IEngineeringJobInputData
+	{
+		public XMLEngineeringJobInputDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider,
+			XPathDocument jobDocument, string xmlBasePath, string fsBasePath)
+			: base(xmlEngineeringJobInputDataProvider, jobDocument, xmlBasePath, fsBasePath) {}
+
+
+		public IVehicleDeclarationInputData Vehicle
+		{
+			get { return InputData.VehicleInputData; }
+		}
+
+		IVehicleEngineeringInputData IEngineeringJobInputData.Vehicle
+		{
+			get { return InputData.VehicleInputData; }
+		}
+
+		//IEngineEngineeringInputData EngineInputData
+		//{
+		//	get { return new XMLEngineeringEngineDataProvider(InputData, XMLDocument, Helper.Query(XBasePath, XMLNames.Component_Engine, XMLNames.ComponentDataWrapper) ,FSBasePath); } 
+		//}
+
+		public IList<ICycleData> Cycles
+		{
+			get {
+				var retVal = new List<ICycleData>();
+				var cycles = Navigator.Select(Helper.Query(XBasePath, XMLNames.VectoJob_MissionCycles,
+					Helper.QueryConstraint(XMLNames.Missions_Cycle, XMLNames.ExtResource_Type_Attr,
+						XMLNames.ExtResource_Type_Value_CSV)), Manager);
+				while (cycles.MoveNext()) {
+					var file = cycles.Current.GetAttribute(XMLNames.ExtResource_File_Attr, "");
+					var fileFull = Path.Combine(FSBasePath ?? "", file);
+					if (File.Exists(fileFull)) {
+						retVal.Add(new CycleInputData() {
+							Name = Path.GetFileNameWithoutExtension(fileFull),
+							CycleData = VectoCSVFile.Read(fileFull)
+						});
+					} else {
+						try {
+							var resourceName = DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles." + file +
+												Constants.FileExtensions.CycleFile;
+							retVal.Add(new CycleInputData() {
+								Name = Path.GetFileNameWithoutExtension(file),
+								CycleData = VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName), source: resourceName),
+							});
+						} catch {
+							//Log.Debug("Driving Cycle could not be read: " + cycleFile);
+							throw new VectoException("Driving Cycle could not be read: " + file);
+						}
+					}
+				}
+				return retVal;
+			}
+		}
+
+		public bool EngineOnlyMode
+		{
+			get {
+				return ElementExists(XMLNames.VectoJob_EngineOnlyMode) &&
+						XmlConvert.ToBoolean(GetElementValue(XMLNames.VectoJob_EngineOnlyMode));
+			}
+		}
+
+		public IEngineEngineeringInputData EngineOnly
+		{
+			get { return InputData.EngineOnlyInputData; }
+		}
+
+		protected internal Second DownshiftAfterUpshiftDelay
+		{
+			get {
+				return
+					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+						"DownshiftAfterUpshiftDelay"))
+						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+							"DownshiftAfterUpshiftDelay")).SI<Second>()
+						: DeclarationData.Gearbox.DownshiftAfterUpshiftDelay;
+			}
+		}
+
+		protected internal Second UpshiftAfterDownshiftDelay
+		{
+			get {
+				return
+					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+						"UpshiftAfterDownshiftDelay"))
+						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+							"UpshiftAfterDownshiftDelay")).SI<Second>()
+						: DeclarationData.Gearbox.UpshiftAfterDownshiftDelay;
+			}
+		}
+
+		protected internal MeterPerSquareSecond UpshiftMinAcceleration
+		{
+			get {
+				return
+					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+						"UpshiftMinAcceleration"))
+						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+							"UpshiftMinAcceleration"))
+							.SI<MeterPerSquareSecond>()
+						: DeclarationData.Gearbox.UpshiftMinAcceleration;
+			}
+		}
+
+
+		public string JobName
+		{
+			get {
+				return InputData.JobInputData.EngineOnlyMode
+					? InputData.JobInputData.EngineOnly.Model
+					: InputData.VehicleData.GetVehicleID;
+			}
+		}
+
+		public double TorqueReserve
+		{
+			get {
+				return
+					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+						XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve))
+						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+							XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve))
+						: DeclarationData.Gearbox.TorqueReserve;
+			}
+		}
+
+		public Second MinTimeBetweenGearshift
+		{
+			get {
+				return
+					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+						XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift))
+						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+							XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift)).SI<Second>()
+						: DeclarationData.Gearbox.MinTimeBetweenGearshifts;
+			}
+		}
+
+		public MeterPerSecond StartSpeed
+		{
+			get {
+				return
+					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+						XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed))
+						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+							XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed)).SI<MeterPerSecond>()
+						: DeclarationData.Gearbox.StartSpeed;
+			}
+		}
+
+		public MeterPerSquareSecond StartAcceleration
+		{
+			get {
+				return
+					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+						XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration))
+						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+							XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration)).SI<MeterPerSquareSecond>()
+						: DeclarationData.Gearbox.StartAcceleration;
+			}
+		}
+
+		public double StartTorqueReserve
+		{
+			get {
+				return
+					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+						XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve))
+						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+							XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve))
+						: DeclarationData.Gearbox.TorqueReserveStart;
+			}
+		}
+
+
+		public Second PowershiftShiftTime
+		{
+			get {
+				return
+					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+						"PowershiftShiftTime"))
+						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+							"PowershiftShiftTime")).SI<Second>()
+						: 0.8.SI<Second>();
+			}
+		}
+
+		public MeterPerSquareSecond CCUpshiftMinAcceleration
+		{
+			get {
+				return
+					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+						"CCUpshiftMinAcceleration"))
+						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+							"CCUpshiftMinAcceleration")).SI<MeterPerSquareSecond>()
+						: DeclarationData.Gearbox.UpshiftMinAcceleration;
+			}
+		}
+
+		public MeterPerSquareSecond CLUpshiftMinAcceleration
+		{
+			get {
+				return
+					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+						"CLUpshiftMinAcceleration"))
+						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
+							"CLUpshiftMinAcceleration")).SI<MeterPerSquareSecond>()
+						: DeclarationData.Gearbox.UpshiftMinAcceleration;
+			}
+		}
+
+		public XMLEngineeringDriverDataProvider GetDriverData()
+		{
+			return new XMLEngineeringDriverDataProvider(InputData, XMLDocument, XBasePath, FSBasePath);
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs
index bc02bb6a76f1af3664189268ef24d7ce7a6cdc48..a0bc6cb48c0b61e2edb3d7768048515148972d08 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs
@@ -51,9 +51,23 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
 		IVehicleEngineeringInputData,
 		IPTOTransmissionInputData
 	{
-		public XMLEngineeringVehicleDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider,
+		protected internal XMLEngineeringAuxiliaryDataProvider XMLEngineeringAuxiliaryData;
+		protected internal XMLEngineeringAxlegearDataProvider AxlegearData;
+
+		public XMLEngineeringVehicleDataProvider(XMLEngineeringInputDataProvider jobProvider,
 			XPathDocument vehicleDocument, string xmlBasePath, string fsBasePath)
-			: base(xmlEngineeringJobInputDataProvider, vehicleDocument, xmlBasePath, fsBasePath) {}
+			: base(jobProvider, vehicleDocument, xmlBasePath, fsBasePath)
+		{
+			AxlegearData = GetAxleGearInputData(jobProvider.Settings);
+			AngledriveInputData = GetAngularGearInputData();
+			EngineInputData = GetEngineInputData(jobProvider.Settings);
+			RetarderInputData = GetRetarderInputData(jobProvider.Settings);
+			XMLEngineeringAuxiliaryData = GetAuxiliaryData(jobProvider.Settings);
+			GearboxInputData = GetGearboxData(jobProvider.Settings);
+			TorqueConverterInputData = GearboxInputData.TorqueConverter;
+			PTOTransmissionInputData = GetPTOData();
+			AirdragInputData = GetAirdragInputData(jobProvider.Settings);
+		}
 
 		public string GetVehicleID
 		{
@@ -224,25 +238,76 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
 			get { return GetElementValue(XMLNames.Vehicle_AngledriveType).ParseEnum<AngledriveType>(); }
 		}
 
-		public IAirdragEngineeringInputData GetAirdragInputData(XmlReaderSettings settings)
+		public IAirdragEngineeringInputData AirdragInputData { get; private set; }
+
+		IAirdragDeclarationInputData IVehicleDeclarationInputData.AirdragInputData
+		{
+			get { return AirdragInputData; }
+		}
+
+		IGearboxDeclarationInputData IVehicleDeclarationInputData.GearboxInputData
+		{
+			get { return GearboxInputData; }
+		}
+
+		ITorqueConverterDeclarationInputData IVehicleDeclarationInputData.TorqueConverterInputData
+		{
+			get { return TorqueConverterInputData; }
+		}
+
+		public IGearboxEngineeringInputData GearboxInputData { get; private set; }
+
+		public ITorqueConverterEngineeringInputData TorqueConverterInputData { get; private set; }
+
+		public IAxleGearInputData AxleGearInputData
+		{
+			get { return AxlegearData; }
+		}
+
+		public IAngledriveInputData AngledriveInputData { get; private set; }
+
+		IEngineDeclarationInputData IVehicleDeclarationInputData.EngineInputData
+		{
+			get { return EngineInputData; }
+		}
+
+		public IEngineEngineeringInputData EngineInputData { get; private set; }
+
+		public IAuxiliariesEngineeringInputData AuxiliaryInputData()
+		{
+			return XMLEngineeringAuxiliaryData;
+		}
+
+		IAuxiliariesDeclarationInputData IVehicleDeclarationInputData.AuxiliaryInputData()
+		{
+			throw new NotImplementedException();
+		}
+
+		public IRetarderInputData RetarderInputData { get; private set; }
+
+		public IPTOTransmissionInputData PTOTransmissionInputData { get; private set; }
+
+		#region "FactoryMethods"
+
+		private IAirdragEngineeringInputData GetAirdragInputData(XmlReaderSettings settings)
 		{
 			return CreateComponentInput(XMLNames.Component_AirDrag, settings,
 				(a, b, c, d) => new XMLEngineeringAirdragDataProvider(a, b, c, d));
 		}
 
-		public XMLEngineeringAxlegearDataProvider GetAxleGearInputData(XmlReaderSettings settings)
+		private XMLEngineeringAxlegearDataProvider GetAxleGearInputData(XmlReaderSettings settings)
 		{
 			return CreateComponentInput(XMLNames.Component_Axlegear, settings,
 				(a, b, c, d) => new XMLEngineeringAxlegearDataProvider(a, b, c, d));
 		}
 
-		public XMLEngineeringEngineDataProvider GetEngineInputData(XmlReaderSettings settings)
+		private XMLEngineeringEngineDataProvider GetEngineInputData(XmlReaderSettings settings)
 		{
 			return CreateComponentInput(XMLNames.Component_Engine, settings,
 				(a, b, c, d) => new XMLEngineeringEngineDataProvider(a, b, c, d));
 		}
 
-		public XMLEngineeringRetarderDataProvider GetRetarderInputData(XmlReaderSettings settings)
+		private XMLEngineeringRetarderDataProvider GetRetarderInputData(XmlReaderSettings settings)
 		{
 			if (!RetarderType.IsDedicatedComponent()) {
 				return new XMLEngineeringRetarderDataProvider(InputData, XMLDocument,
@@ -254,20 +319,20 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
 				(a, b, c, d) => new XMLEngineeringRetarderDataProvider(a, b, c, d));
 		}
 
-		public XMLEngineeringGearboxDataProvider GetGearboxData(XmlReaderSettings settings)
+		private XMLEngineeringGearboxDataProvider GetGearboxData(XmlReaderSettings settings)
 		{
 			return CreateComponentInput(XMLNames.Component_Gearbox, settings,
 				(a, b, c, d) => new XMLEngineeringGearboxDataProvider(a, b, c, d));
 		}
 
-		public XMLEngineeringAuxiliaryDataProvider GetAuxiliaryData(XmlReaderSettings settings)
+		private XMLEngineeringAuxiliaryDataProvider GetAuxiliaryData(XmlReaderSettings settings)
 		{
 			return CreateComponentInput(XMLNames.Component_Auxiliaries, settings,
 				(a, b, c, d) => new XMLEngineeringAuxiliaryDataProvider(a, b, c, d));
 		}
 
 
-		protected T CreateComponentInput<T>(string componentName, XmlReaderSettings settings,
+		private T CreateComponentInput<T>(string componentName, XmlReaderSettings settings,
 			Func<XMLEngineeringInputDataProvider, XPathDocument, string, string, T> creator)
 		{
 			if (ElementExists(Helper.Query(XMLNames.Vehicle_Components, componentName))) {
@@ -297,6 +362,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
 			throw new VectoException("Component {0} not found!", componentName);
 		}
 
+		#endregion
+
 		public XMLEngineeringAngledriveDataProvider GetAngularGearInputData()
 		{
 			return new XMLEngineeringAngledriveDataProvider(InputData, XMLDocument,
@@ -346,4 +413,4 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
 
 		#endregion
 	}
-}
\ No newline at end of file
+}
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs
index c3696d9f0b8b3647e7a5ee848732e9513792f562..08d226acfd4aba8319adbdfa0b5443d112628d0a 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs
@@ -50,11 +50,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 {
 	public class DeclarationDataAdapter : AbstractSimulationDataAdapter
 	{
-		public DriverData CreateDriverData(IDriverDeclarationInputData data)
+		public DriverData CreateDriverData()
 		{
-			if (!data.SavedInDeclarationMode) {
-				WarnDeclarationMode("DriverData");
-			}
 			var lookAheadData = new DriverData.LACData {
 				Enabled = DeclarationData.Driver.LookAhead.Enabled,
 				//Deceleration = DeclarationData.Driver.LookAhead.Deceleration,
@@ -63,7 +60,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 				LookAheadDistanceFactor = DeclarationData.Driver.LookAhead.LookAheadDistanceFactor,
 			};
 			var overspeedData = new DriverData.OverSpeedEcoRollData {
-				Mode = data.OverSpeedEcoRoll.Mode,
+				Mode = DriverMode.Overspeed,
 				MinSpeed = DeclarationData.Driver.OverSpeedEcoRoll.MinSpeed,
 				OverSpeed = DeclarationData.Driver.OverSpeedEcoRoll.OverSpeed,
 				UnderSpeed = DeclarationData.Driver.OverSpeedEcoRoll.UnderSpeed
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs
index 232ac66901c97c98f95e948b3583dba45e074bb9..2fa122c79b7512692acf3b9967a8282363778d94 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs
@@ -88,30 +88,33 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 		private void Initialize()
 		{
 			_dao = new DeclarationDataAdapter();
-			_segment = GetVehicleClassification(InputDataProvider.VehicleInputData.VehicleCategory,
-				InputDataProvider.VehicleInputData.AxleConfiguration,
-				InputDataProvider.VehicleInputData.GrossVehicleMassRating, InputDataProvider.VehicleInputData.CurbMassChassis);
+			_segment = GetVehicleClassification(InputDataProvider.JobInputData.Vehicle.VehicleCategory,
+				InputDataProvider.JobInputData.Vehicle.AxleConfiguration,
+				InputDataProvider.JobInputData.Vehicle.GrossVehicleMassRating,
+				InputDataProvider.JobInputData.Vehicle.CurbMassChassis);
 			if (!_segment.Found) {
 				throw new VectoException(
 					"no segment found for vehicle configruation: vehicle category: {0}, axle configuration: {1}, GVMR: {2}",
-					InputDataProvider.VehicleInputData.VehicleCategory, InputDataProvider.VehicleInputData.AxleConfiguration,
-					InputDataProvider.VehicleInputData.GrossVehicleMassRating);
+					InputDataProvider.JobInputData.Vehicle.VehicleCategory, InputDataProvider.JobInputData.Vehicle.AxleConfiguration,
+					InputDataProvider.JobInputData.Vehicle.GrossVehicleMassRating);
 			}
-			_driverdata = _dao.CreateDriverData(InputDataProvider.DriverInputData);
+			_driverdata = _dao.CreateDriverData();
 			_driverdata.AccelerationCurve = AccelerationCurveReader.ReadFromStream(_segment.AccelerationFile);
-			var tempVehicle = _dao.CreateVehicleData(InputDataProvider.VehicleInputData, _segment.Missions.First(),
+			var tempVehicle = _dao.CreateVehicleData(InputDataProvider.JobInputData.Vehicle, _segment.Missions.First(),
 				_segment.Missions.First().Loadings.First().Value, _segment.MunicipalBodyWeight);
-			_airdragData = _dao.CreateAirdragData(InputDataProvider.AirdragInputData, _segment.Missions.First(), _segment);
-			_engineData = _dao.CreateEngineData(InputDataProvider.EngineInputData,
-				InputDataProvider.VehicleInputData.EngineIdleSpeed,
-				InputDataProvider.GearboxInputData, InputDataProvider.VehicleInputData.TorqueLimits);
-			_axlegearData = _dao.CreateAxleGearData(InputDataProvider.AxleGearInputData, false);
-			_angledriveData = _dao.CreateAngledriveData(InputDataProvider.AngledriveInputData, false);
-			_gearboxData = _dao.CreateGearboxData(InputDataProvider.GearboxInputData, _engineData, _axlegearData.AxleGear.Ratio,
+			_airdragData = _dao.CreateAirdragData(InputDataProvider.JobInputData.Vehicle.AirdragInputData,
+				_segment.Missions.First(), _segment);
+			_engineData = _dao.CreateEngineData(InputDataProvider.JobInputData.Vehicle.EngineInputData,
+				InputDataProvider.JobInputData.Vehicle.EngineIdleSpeed,
+				InputDataProvider.JobInputData.Vehicle.GearboxInputData, InputDataProvider.JobInputData.Vehicle.TorqueLimits);
+			_axlegearData = _dao.CreateAxleGearData(InputDataProvider.JobInputData.Vehicle.AxleGearInputData, false);
+			_angledriveData = _dao.CreateAngledriveData(InputDataProvider.JobInputData.Vehicle.AngledriveInputData, false);
+			_gearboxData = _dao.CreateGearboxData(InputDataProvider.JobInputData.Vehicle.GearboxInputData, _engineData,
+				_axlegearData.AxleGear.Ratio,
 				tempVehicle.DynamicTyreRadius, tempVehicle.VehicleCategory, false);
-			_retarderData = _dao.CreateRetarderData(InputDataProvider.RetarderInputData);
+			_retarderData = _dao.CreateRetarderData(InputDataProvider.JobInputData.Vehicle.RetarderInputData);
 
-			_ptoTransmissionData = _dao.CreatePTOTransmissionData(InputDataProvider.PTOTransmissionInputData);
+			_ptoTransmissionData = _dao.CreatePTOTransmissionData(InputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData);
 
 			_municipalPtoTransmissionData = CreateDefaultPTOData();
 		}
@@ -120,15 +123,17 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 		{
 			var powertrainConfig = new VectoRunData() {
 				VehicleData =
-					_dao.CreateVehicleData(InputDataProvider.VehicleInputData, _segment.Missions.First(),
+					_dao.CreateVehicleData(InputDataProvider.JobInputData.Vehicle, _segment.Missions.First(),
 						_segment.Missions.First().Loadings.First().Value, _segment.MunicipalBodyWeight),
 				AirdragData = _airdragData,
 				EngineData = _engineData,
 				GearboxData = _gearboxData,
 				AxleGearData = _axlegearData,
 				Retarder = _retarderData,
-				Aux = _dao.CreateAuxiliaryData(InputDataProvider.AuxiliaryInputData(), _segment.Missions.First().MissionType,
-					_segment.VehicleClass),
+				Aux =
+					_dao.CreateAuxiliaryData(InputDataProvider.JobInputData.Vehicle.AuxiliaryInputData(),
+						_segment.Missions.First().MissionType,
+						_segment.VehicleClass),
 				InputDataHash = InputDataProvider.XMLHash
 			};
 			powertrainConfig.VehicleData.VehicleClass = _segment.VehicleClass;
@@ -159,19 +164,20 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 					var simulationRunData = new VectoRunData {
 						Loading = loading.Key,
 						VehicleData =
-							_dao.CreateVehicleData(InputDataProvider.VehicleInputData, mission, loading.Value, _segment.MunicipalBodyWeight),
-						AirdragData = _dao.CreateAirdragData(InputDataProvider.AirdragInputData, mission, _segment),
+							_dao.CreateVehicleData(InputDataProvider.JobInputData.Vehicle, mission, loading.Value,
+								_segment.MunicipalBodyWeight),
+						AirdragData = _dao.CreateAirdragData(InputDataProvider.JobInputData.Vehicle.AirdragInputData, mission, _segment),
 						EngineData = _engineData.Copy(),
 						GearboxData = _gearboxData,
 						AxleGearData = _axlegearData,
 						AngledriveData = _angledriveData,
-						Aux = _dao.CreateAuxiliaryData(InputDataProvider.AuxiliaryInputData(), mission.MissionType,
+						Aux = _dao.CreateAuxiliaryData(InputDataProvider.JobInputData.Vehicle.AuxiliaryInputData(), mission.MissionType,
 							_segment.VehicleClass),
 						Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()),
 						Retarder = _retarderData,
 						DriverData = _driverdata,
 						ExecutionMode = ExecutionMode.Declaration,
-						JobName = InputDataProvider.JobInputData().JobName,
+						JobName = InputDataProvider.JobInputData.JobName,
 						ModFileSuffix = loading.Key.ToString(),
 						Report = Report,
 						Mission = mission,
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs
index 6b0e0fe5f8909d62f7466d997f2195af0914d95b..40c0e2808647b65d9774a126345fa1806c4b9f6f 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs
@@ -29,36 +29,36 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
-using System.Collections.Generic;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
-using TUGraz.VectoCore.Models.Simulation.Data;
-using TUGraz.VectoCore.Models.SimulationComponent.Data;
-
-namespace TUGraz.VectoCore.InputData.Reader.Impl
-{
-	public class EngineOnlyVectoRunDataFactory : EngineeringModeVectoRunDataFactory
-	{
-		internal EngineOnlyVectoRunDataFactory(IEngineeringInputDataProvider dataProvider) : base(dataProvider) {}
-
-		public override IEnumerable<VectoRunData> NextRun()
-		{
-			if (InputDataProvider == null) {
-				Log.Warn("No valid data provider given");
-				yield break;
-			}
-			var dao = new EngineeringDataAdapter();
-			foreach (var cycle in InputDataProvider.JobInputData().Cycles) {
-				var simulationRunData = new VectoRunData {
-					JobName = InputDataProvider.JobInputData().JobName,
-					EngineData = dao.CreateEngineData(InputDataProvider.EngineInputData, null, new List<ITorqueLimitInputData>()),
-					Cycle = new DrivingCycleProxy(
-						DrivingCycleDataReader.ReadFromDataTable(cycle.CycleData, CycleType.EngineOnly, cycle.Name, false), cycle.Name),
-					ExecutionMode = ExecutionMode.Engineering
-				};
-				yield return simulationRunData;
-			}
-		}
-	}
-}
\ No newline at end of file
+using System.Collections.Generic;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+
+namespace TUGraz.VectoCore.InputData.Reader.Impl
+{
+	public class EngineOnlyVectoRunDataFactory : EngineeringModeVectoRunDataFactory
+	{
+		internal EngineOnlyVectoRunDataFactory(IEngineeringInputDataProvider dataProvider) : base(dataProvider) {}
+
+		public override IEnumerable<VectoRunData> NextRun()
+		{
+			if (InputDataProvider == null) {
+				Log.Warn("No valid data provider given");
+				yield break;
+			}
+			var dao = new EngineeringDataAdapter();
+			foreach (var cycle in InputDataProvider.JobInputData.Cycles) {
+				var simulationRunData = new VectoRunData {
+					JobName = InputDataProvider.JobInputData.JobName,
+					EngineData = dao.CreateEngineData(InputDataProvider.JobInputData.EngineOnly, null, new List<ITorqueLimitInputData>()),
+					Cycle = new DrivingCycleProxy(
+						DrivingCycleDataReader.ReadFromDataTable(cycle.CycleData, CycleType.EngineOnly, cycle.Name, false), cycle.Name),
+					ExecutionMode = ExecutionMode.Engineering
+				};
+				yield return simulationRunData;
+			}
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs
index dfcd0c3c747e29c04e293b8c6fff25400f979587..e4c0de271c4114b1b655a7694679ca9ade4e0fb4 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs
@@ -61,35 +61,35 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 		{
 			var dao = new EngineeringDataAdapter();
 			var driver = dao.CreateDriverData(InputDataProvider.DriverInputData);
-			var engineData = dao.CreateEngineData(InputDataProvider.EngineInputData, InputDataProvider.GearboxInputData,
-				InputDataProvider.VehicleInputData.TorqueLimits);
+			var engineData = dao.CreateEngineData(InputDataProvider.JobInputData.Vehicle.EngineInputData, InputDataProvider.JobInputData.Vehicle.GearboxInputData,
+				InputDataProvider.JobInputData.Vehicle.TorqueLimits);
 
-			var tempVehicle = dao.CreateVehicleData(InputDataProvider.VehicleInputData);
+			var tempVehicle = dao.CreateVehicleData(InputDataProvider.JobInputData.Vehicle);
 
-			var axlegearData = dao.CreateAxleGearData(InputDataProvider.AxleGearInputData, useEfficiencyFallback: true);
-			var gearboxData = dao.CreateGearboxData(InputDataProvider.GearboxInputData, engineData, axlegearData.AxleGear.Ratio,
+			var axlegearData = dao.CreateAxleGearData(InputDataProvider.JobInputData.Vehicle.AxleGearInputData, useEfficiencyFallback: true);
+			var gearboxData = dao.CreateGearboxData(InputDataProvider.JobInputData.Vehicle.GearboxInputData, engineData, axlegearData.AxleGear.Ratio,
 				tempVehicle.DynamicTyreRadius,tempVehicle.VehicleCategory, useEfficiencyFallback: true);
-			var crossWindRequired = InputDataProvider.AirdragInputData.CrossWindCorrectionMode ==
+			var crossWindRequired = InputDataProvider.JobInputData.Vehicle.AirdragInputData.CrossWindCorrectionMode ==
 									CrossWindCorrectionMode.VAirBetaLookupTable;
-			var angledriveData = dao.CreateAngledriveData(InputDataProvider.AngledriveInputData, useEfficiencyFallback: true);
-			var ptoTransmissionData = dao.CreatePTOTransmissionData(InputDataProvider.PTOTransmissionInputData);
+			var angledriveData = dao.CreateAngledriveData(InputDataProvider.JobInputData.Vehicle.AngledriveInputData, useEfficiencyFallback: true);
+			var ptoTransmissionData = dao.CreatePTOTransmissionData(InputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData);
 
-			return InputDataProvider.JobInputData().Cycles.Select(cycle => {
+			return InputDataProvider.JobInputData.Cycles.Select(cycle => {
 				var drivingCycle = CyclesCache.ContainsKey(cycle.CycleData.Source)
 					? CyclesCache[cycle.CycleData.Source]
 					: DrivingCycleDataReader.ReadFromDataTable(cycle.CycleData, cycle.Name, crossWindRequired);
 				return new VectoRunData {
-					JobName = InputDataProvider.JobInputData().JobName,
+					JobName = InputDataProvider.JobInputData.JobName,
 					EngineData = engineData,
 					GearboxData = gearboxData,
 					AxleGearData = axlegearData,
 					AngledriveData = angledriveData,
-					VehicleData = dao.CreateVehicleData(InputDataProvider.VehicleInputData),
-					AirdragData = dao.CreateAirdragData(InputDataProvider.AirdragInputData, InputDataProvider.VehicleInputData),
+					VehicleData = dao.CreateVehicleData(InputDataProvider.JobInputData.Vehicle),
+					AirdragData = dao.CreateAirdragData(InputDataProvider.JobInputData.Vehicle.AirdragInputData, InputDataProvider.JobInputData.Vehicle),
 					DriverData = driver,
-					Aux = dao.CreateAuxiliaryData(InputDataProvider.AuxiliaryInputData()),
-					AdvancedAux = dao.CreateAdvancedAuxData(InputDataProvider.AuxiliaryInputData()),
-					Retarder = dao.CreateRetarderData(InputDataProvider.RetarderInputData),
+					Aux = dao.CreateAuxiliaryData(InputDataProvider.JobInputData.Vehicle.AuxiliaryInputData()),
+					AdvancedAux = dao.CreateAdvancedAuxData(InputDataProvider.JobInputData.Vehicle.AuxiliaryInputData()),
+					Retarder = dao.CreateRetarderData(InputDataProvider.JobInputData.Vehicle.RetarderInputData),
 					PTO = ptoTransmissionData,
 					Cycle = new DrivingCycleProxy(drivingCycle, cycle.Name),
 					ExecutionMode = ExecutionMode.Engineering
@@ -97,4 +97,4 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 			});
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
index 11c557e304aaee0106ab38126b6930bbddd7635e..fe23cb39d833e3399990360f303f022c2e43330f 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
@@ -90,7 +90,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 		private void CreateEngineeringDataReader(IInputDataProvider dataProvider)
 		{
 			var engDataProvider = ToEngineeringInputDataProvider(dataProvider);
-			if (engDataProvider.JobInputData().EngineOnlyMode) {
+			if (engDataProvider.JobInputData.EngineOnlyMode) {
 				DataReader = new EngineOnlyVectoRunDataFactory(engDataProvider);
 				_engineOnlyMode = true;
 			} else {
@@ -228,4 +228,4 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			return addReportResult;
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs
index 917ed39bcfb3848f5de3c247a1fffc0a87c0c8bb..2e04f525689a82178783f3351d2053fd4125560c 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs
@@ -116,10 +116,11 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 		protected XElement CreateVehicle(IDeclarationInputDataProvider data)
 		{
-			var retarder = data.RetarderInputData;
-			var gearbox = data.GearboxInputData;
-			var vehicle = data.VehicleInputData;
-			var angledrive = data.AngledriveInputData;
+			var retarder = data.JobInputData.Vehicle.RetarderInputData;
+			var gearbox = data.JobInputData.Vehicle.GearboxInputData;
+			var vehicle = data.JobInputData.Vehicle;
+			var engine = data.JobInputData.Vehicle.EngineInputData;
+			var angledrive = data.JobInputData.Vehicle.AngledriveInputData;
 
 
 			var id = CreateIdString("VEH-" + vehicle.Model);
@@ -135,7 +136,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 				new XElement(tns + XMLNames.Vehicle_IdlingSpeed,
 					vehicle.EngineIdleSpeed != null
 						? vehicle.EngineIdleSpeed.AsRPM.ToXMLFormat(0)
-						: data.EngineInputData.IdleSpeed.AsRPM.ToXMLFormat(0)),
+						: engine.IdleSpeed.AsRPM.ToXMLFormat(0)),
 				new XElement(tns + XMLNames.Vehicle_RetarderType, retarder.Type.ToXMLFormat()),
 				retarder.Type.IsDedicatedComponent()
 					? new XElement(tns + XMLNames.Vehicle_RetarderRatio, retarder.Ratio.ToXMLFormat(3))
@@ -146,14 +147,14 @@ namespace TUGraz.VectoCore.OutputData.XML
 					new XElement(tns + XMLNames.Vehicle_PTO_OtherElements, "none")),
 				CreateTorqueLimits(vehicle),
 				new XElement(tns + XMLNames.Vehicle_Components,
-					CreateEngine(data.EngineInputData),
-					CreateGearbox(gearbox, gearbox.Type.AutomaticTransmission() ? data.TorqueConverterInputData : null),
+					CreateEngine(engine),
+					CreateGearbox(gearbox, gearbox.Type.AutomaticTransmission() ? vehicle.TorqueConverterInputData : null),
 					angledrive.Type == AngledriveType.SeparateAngledrive ? CreateAngleDrive(angledrive) : null,
 					retarder.Type.IsDedicatedComponent() ? CreateRetarder(retarder) : null,
-					CreateAxlegear(data.AxleGearInputData),
-					CreateAxleWheels(data.VehicleInputData),
-					CreateAuxiliaries(data.AuxiliaryInputData()),
-					CreateAirdrag(data.AirdragInputData)
+					CreateAxlegear(vehicle.AxleGearInputData),
+					CreateAxleWheels(vehicle),
+					CreateAuxiliaries(vehicle.AuxiliaryInputData()),
+					CreateAirdrag(vehicle.AirdragInputData)
 					)
 				);
 		}
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs b/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs
index 18771c538e1345b74bba4a68d7fa91250ef15441..acc2e46aea864f98a09417555c8ae41ecda5a42b 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs
@@ -77,7 +77,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 				new XAttribute(XNamespace.Xmlns + "vdecdef", _declarationNamespace),
 				new XAttribute(xsi + "schemaLocation",
 					string.Format("{0} {1}VectoEngineeringInput.xsd", rootNamespace, SchemaLocationBaseUrl)),
-				data.JobInputData().EngineOnlyMode
+				data.JobInputData.EngineOnlyMode
 					? CreateEngineOnly(data)
 					: CreateEngineeringJob(data))
 				);
@@ -117,8 +117,8 @@ namespace TUGraz.VectoCore.OutputData.XML
 		{
 			return new[] {
 				new XElement(tns + XMLNames.VectoJob_EngineOnlyMode, true),
-				CreateEngine(data.EngineInputData, false),
-				CreateMissions(data.JobInputData().Cycles)
+				CreateEngine(data.JobInputData.EngineOnly, false),
+				CreateMissions(data.JobInputData.Cycles)
 			};
 		}
 
@@ -128,7 +128,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 				new XElement(tns + XMLNames.VectoJob_EngineOnlyMode, false),
 				CreateVehicle(data),
 				CreateDriverModel(data),
-				CreateMissions(data.JobInputData().Cycles)
+				CreateMissions(data.JobInputData.Cycles)
 			};
 		}
 
@@ -153,7 +153,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 		private XElement CreateDriverModel(IEngineeringInputDataProvider engineering)
 		{
 			var driver = engineering.DriverInputData;
-			var gbx = engineering.GearboxInputData;
+			var gbx = engineering.JobInputData.Vehicle.GearboxInputData;
 			var lookahead = driver.Lookahead;
 			var overspeed = driver.OverSpeedEcoRoll;
 
@@ -213,11 +213,11 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 		protected XElement CreateVehicle(IEngineeringInputDataProvider data)
 		{
-			var retarder = data.RetarderInputData;
-			var gearbox = data.GearboxInputData;
-			var vehicle = data.VehicleInputData;
-			var angledrive = data.AngledriveInputData;
-			var pto = data.PTOTransmissionInputData;
+			var retarder = data.JobInputData.Vehicle.RetarderInputData;
+			var gearbox = data.JobInputData.Vehicle.GearboxInputData;
+			var vehicle = data.JobInputData.Vehicle;
+			var angledrive = data.JobInputData.Vehicle.AngledriveInputData;
+			var pto = data.JobInputData.Vehicle.PTOTransmissionInputData;
 
 			return new XElement(tns + XMLNames.Component_Vehicle,
 				new XAttribute(XMLNames.Component_ID_Attr, "VEH-" + vehicle.Model),
@@ -238,14 +238,14 @@ namespace TUGraz.VectoCore.OutputData.XML
 				new XElement(tns + XMLNames.Vehicle_CurbMassExtra, vehicle.CurbMassExtra.Value()),
 				new XElement(tns + XMLNames.Vehicle_Loading, vehicle.Loading.Value()),
 				new XElement(tns + XMLNames.Vehicle_Components,
-					CreateEngine(data.EngineInputData),
+					CreateEngine(vehicle.EngineInputData),
 					CreateGearbox(gearbox, gearbox.TorqueConverter),
 					angledrive.Type == AngledriveType.SeparateAngledrive ? CreateAngleDrive(angledrive) : null,
 					retarder.Type.IsDedicatedComponent() ? CreateRetarder(retarder) : null,
-					CreateAxlegear(data.AxleGearInputData),
-					CreateAxleWheels(data.VehicleInputData),
-					CreateAuxiliaries(data.AuxiliaryInputData(), RemoveInvalidFileCharacters(data.VehicleInputData.Model)),
-					CreateAirdrag(data.AirdragInputData)
+					CreateAxlegear(vehicle.AxleGearInputData),
+					CreateAxleWheels(vehicle),
+					CreateAuxiliaries(vehicle.AuxiliaryInputData(), RemoveInvalidFileCharacters(vehicle.Model)),
+					CreateAirdrag(vehicle.AirdragInputData)
 					),
 				new XElement(tns + XMLNames.Vehicle_AdvancedDriverAssist,
 					new XElement(tns + XMLNames.Vehicle_AdvancedDriverAssist_EngineStartStop,
@@ -599,4 +599,4 @@ namespace TUGraz.VectoCore.OutputData.XML
 			};
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj
index 734ddce0d1fc171013b28277750c6da4fcbdc9dc..5287618a7740a1d87572b08bd2672d8b40aca299 100644
--- a/VectoCore/VectoCore/VectoCore.csproj
+++ b/VectoCore/VectoCore/VectoCore.csproj
@@ -116,7 +116,6 @@
     <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationAngledriveDataProvider.cs" />
     <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationAuxiliaryDataProvider.cs" />
     <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationAxlegearDataProvider.cs" />
-    <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationDriverDataProvider.cs" />
     <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationEngineDataProvider.cs" />
     <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationGearboxDataProvider.cs" />
     <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationJobInputDataProvider.cs" />
@@ -338,6 +337,11 @@
     </Compile>
     <Compile Include="Utils\XmlResourceResolver.cs" />
     <Compile Include="Utils\XPathHelper.cs" />
+    <Compile Include="VersionNumber1.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>VersionNumber.t4</DependentUpon>
+    </Compile>
   </ItemGroup>
   <ItemGroup>
     <None Include="app.config" />
@@ -463,7 +467,6 @@
     </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-    
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
   <Target Name="BeforeBuild">
@@ -471,6 +474,5 @@
   <Target Name="AfterBuild">
   </Target>
   -->
-  
   <Import Project="$(SolutionDir)Build\TextPreProcessing.targets" />
 </Project>
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/FileIO/JsonTest.cs b/VectoCore/VectoCoreTest/FileIO/JsonTest.cs
index 2947d9f5f6b0950dc04b65e206a0e4064930c287..1d5cc14530be0a4ee2921ee26023d2c846bebc0c 100644
--- a/VectoCore/VectoCoreTest/FileIO/JsonTest.cs
+++ b/VectoCore/VectoCoreTest/FileIO/JsonTest.cs
@@ -43,20 +43,19 @@ using TUGraz.VectoCore.Tests.Utils;
 
 namespace TUGraz.VectoCore.Tests.FileIO
 {
-
-    [TestFixture]
+	[TestFixture]
 	public class JsonTest
 	{
 		private const string TestJobFile = @"Testdata\Jobs\40t_Long_Haul_Truck.vecto";
 		private const string TestVehicleFile = @"Testdata\Components\24t Coach.vveh";
 
-        [OneTimeSetUp]
-        public void RunBeforeAnyTests()
-        {
-            Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
-        }
+		[OneTimeSetUp]
+		public void RunBeforeAnyTests()
+		{
+			Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
+		}
 
-        [TestCase]
+		[TestCase]
 		public void ReadJobTest()
 		{
 			var job = JSONInputDataFactory.ReadJsonJob(TestJobFile);
@@ -112,7 +111,7 @@ namespace TUGraz.VectoCore.Tests.FileIO
 			((JObject)json["Body"]).Property("Aux").Remove();
 
 			// MK,2016-01-20: Changed for PWheel: aux entry may be missing, and that is ok.
-			var tmp = new JSONInputDataV2(json, TestJobFile).AuxiliaryInputData().Auxiliaries;
+			var tmp = new JSONInputDataV2(json, TestJobFile).JobInputData.Vehicle.AuxiliaryInputData().Auxiliaries;
 			Assert.IsTrue(tmp.Count == 0);
 		}
 
@@ -156,7 +155,9 @@ namespace TUGraz.VectoCore.Tests.FileIO
 			((JObject)json["Body"]).Property("OverSpeedEcoRoll").Remove();
 
 			AssertHelper.Exception<VectoException>(
-				() => { var tmp = new JSONInputDataV2(json, TestJobFile).DriverInputData.OverSpeedEcoRoll; },
+				() => {
+					var tmp = ((IEngineeringInputDataProvider)new JSONInputDataV2(json, TestJobFile)).DriverInputData.OverSpeedEcoRoll;
+				},
 				"Key OverSpeedEcoRoll not found");
 		}
 
@@ -508,4 +509,4 @@ namespace TUGraz.VectoCore.Tests.FileIO
 	//			Assert.AreEqual(json, jsonCompare);
 	//		}
 	//	}
-}
\ No newline at end of file
+}
diff --git a/VectoCore/VectoCoreTest/Integration/TestVehicleIdlingSpeed.cs b/VectoCore/VectoCoreTest/Integration/TestVehicleIdlingSpeed.cs
index 827d160f8d687a38a50364faf842446532a6a86c..705fc50a30f85621202b8f2ecc9e1fd7fe33e5eb 100644
--- a/VectoCore/VectoCoreTest/Integration/TestVehicleIdlingSpeed.cs
+++ b/VectoCore/VectoCoreTest/Integration/TestVehicleIdlingSpeed.cs
@@ -29,70 +29,76 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
-using System.IO;
-using System.Xml;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.Configuration;
-using TUGraz.VectoCore.InputData.FileIO.XML.Declaration;
-using TUGraz.VectoCore.Models.Simulation.Data;
-using TUGraz.VectoCore.Models.Simulation.Impl;
-using TUGraz.VectoCore.OutputData;
-using TUGraz.VectoCore.OutputData.FileIO;
-using TUGraz.VectoCore.Utils;
+using System.IO;
+using System.Xml;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.OutputData;
+using TUGraz.VectoCore.OutputData.FileIO;
+using TUGraz.VectoCore.Utils;
 using NUnit.Framework;
 
-namespace TUGraz.VectoCore.Tests.Integration
-{
-	[TestFixture]
-	public class TestVehicleIdlingSpeed
-	{
-		const string SampleVehicleDecl = "TestData/XML/XMLReaderDeclaration/vecto_vehicle-sample.xml";
-
-		[TestCase, Category("LongRunning")]
-		public void VehicleIdlingSpeedTest()
-		{
-			var VehicleEngineIdleSpeed = 900.RPMtoRad();
-
-			var reader = XmlReader.Create(SampleVehicleDecl);
-
-			var doc = new XmlDocument();
-			doc.Load(reader);
-			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Declaration);
-			helper.AddNamespaces(manager);
-
-			var idlingSpeed = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputDeclaration, Constants.XML.RootNSPrefix),
-				XMLNames.Component_Vehicle,
-				XMLNames.Vehicle_IdlingSpeed), manager);
-			idlingSpeed.SetValue(VehicleEngineIdleSpeed.AsRPM.ToXMLFormat(0));
-
-			var modified = XmlReader.Create(new StringReader(nav.OuterXml));
-
-			var inputDataProvider = new XMLDeclarationInputDataProvider(modified, true);
-
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputDataProvider, new FileOutputWriter("Idle900"));
-			//factory.WriteModalResults = true;
-
-			var jobContainer = new JobContainer(null);
-			jobContainer.AddRuns(factory);
-
-			var runIdx = 0;
-			var run = jobContainer.Runs[runIdx];
-			var modContainer = (ModalDataContainer)run.Run.GetContainer().ModalData;
-			var modData = modContainer.Data;
-
-			run.Run.Run();
-
-			modContainer.Data = modData;
-			Assert.IsTrue(modContainer.Min<PerSecond>(ModalResultField.n_eng_avg).IsGreaterOrEqual(VehicleEngineIdleSpeed));
-
-
-			//jobContainer.Execute();
-			//jobContainer.WaitFinished();
-		}
-	}
-}
\ No newline at end of file
+namespace TUGraz.VectoCore.Tests.Integration
+{
+	[TestFixture]
+	public class TestVehicleIdlingSpeed
+	{
+		const string SampleVehicleDecl = "TestData/XML/XMLReaderDeclaration/vecto_vehicle-sample.xml";
+
+		[OneTimeSetUp]
+		public void RunBeforeAnyTests()
+		{
+			Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
+		}
+
+		[TestCase, Category("LongRunning")]
+		public void VehicleIdlingSpeedTest()
+		{
+			var VehicleEngineIdleSpeed = 900.RPMtoRad();
+
+			var reader = XmlReader.Create(SampleVehicleDecl);
+
+			var doc = new XmlDocument();
+			doc.Load(reader);
+			var nav = doc.CreateNavigator();
+			var manager = new XmlNamespaceManager(nav.NameTable);
+			var helper = new XPathHelper(ExecutionMode.Declaration);
+			helper.AddNamespaces(manager);
+
+			var idlingSpeed = nav.SelectSingleNode(helper.QueryAbs(
+				helper.NSPrefix(XMLNames.VectoInputDeclaration, Constants.XML.RootNSPrefix),
+				XMLNames.Component_Vehicle,
+				XMLNames.Vehicle_IdlingSpeed), manager);
+			idlingSpeed.SetValue(VehicleEngineIdleSpeed.AsRPM.ToXMLFormat(0));
+
+			var modified = XmlReader.Create(new StringReader(nav.OuterXml));
+
+			var inputDataProvider = new XMLDeclarationInputDataProvider(modified, true);
+
+			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputDataProvider, new FileOutputWriter("Idle900"));
+			//factory.WriteModalResults = true;
+
+			var jobContainer = new JobContainer(null);
+			jobContainer.AddRuns(factory);
+
+			var runIdx = 0;
+			var run = jobContainer.Runs[runIdx];
+			var modContainer = (ModalDataContainer)run.Run.GetContainer().ModalData;
+			var modData = modContainer.Data;
+
+			run.Run.Run();
+
+			modContainer.Data = modData;
+			Assert.IsTrue(modContainer.Min<PerSecond>(ModalResultField.n_eng_avg).IsGreaterOrEqual(VehicleEngineIdleSpeed));
+
+
+			//jobContainer.Execute();
+			//jobContainer.WaitFinished();
+		}
+	}
+}
diff --git a/VectoCore/VectoCoreTest/Models/Declaration/AirdragDefaultValuesTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/AirdragDefaultValuesTest.cs
index 9348277b6ac2d98382b7e1ec32c7b50c6f763838..8d4007feac44137f7af3ce8a9911ded511d5d491 100644
--- a/VectoCore/VectoCoreTest/Models/Declaration/AirdragDefaultValuesTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Declaration/AirdragDefaultValuesTest.cs
@@ -29,61 +29,64 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
-using System.Linq;
-using TUGraz.VectoCore.InputData.FileIO.JSON;
-using TUGraz.VectoCore.InputData.Reader.Impl;
-using TUGraz.VectoCore.Tests.Models.Declaration.DataAdapter;
+using System.IO;
+using System.Linq;
+using TUGraz.VectoCore.InputData.FileIO.JSON;
+using TUGraz.VectoCore.InputData.Reader.Impl;
+using TUGraz.VectoCore.Tests.Models.Declaration.DataAdapter;
 using NUnit.Framework;
 
-namespace TUGraz.VectoCore.Tests.Models.Declaration
-{
-	[TestFixture]
-	public class AirdragDefaultValuesTest
-	{
-		[TestCase]
-		public void TestClass2()
-		{
-			var file = @"TestData\Integration\DeclarationMode\Class2_RigidTruck_4x2\Class2_RigidTruck_DECL.vecto";
-			var inputData = (JSONInputDataV3)JSONInputDataFactory.ReadJsonJob(file);
-			inputData.AirdragData = null; // force use of standard values
-
-			var dataReader = new DeclarationModeVectoRunDataFactory(inputData, null);
-			var runData = dataReader.NextRun().ToArray();
-			var runDataOrig = DeclarationAdapterTestHelper.CreateVectoRunData(file);
-
-			Assert.AreEqual(4.83, runDataOrig[0].AirdragData.DeclaredAirdragArea.Value());
-
-			Assert.AreEqual(7.2, runData[0].AirdragData.DeclaredAirdragArea.Value());
-		}
-
-		[TestCase]
-		public void TestClass5()
-		{
-			var file = @"TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Class5_Tractor_DECL.vecto";
-			var inputData = (JSONInputDataV3)JSONInputDataFactory.ReadJsonJob(file);
-			inputData.AirdragData = null; // force use of standard values
-
-			var dataReader = new DeclarationModeVectoRunDataFactory(inputData, null);
-			var runData = dataReader.NextRun().ToArray();
-			var runDataOrig = DeclarationAdapterTestHelper.CreateVectoRunData(file);
-
-			Assert.AreEqual(5.3, runDataOrig[0].AirdragData.DeclaredAirdragArea.Value());
-			Assert.AreEqual(8.7, runData[0].AirdragData.DeclaredAirdragArea.Value());
-		}
-
-		[TestCase]
-		public void TestClass9()
-		{
-			var file = @"TestData\Integration\DeclarationMode\Class9_RigidTruck_6x2\Class9_RigidTruck_DECL.vecto";
-			var inputData = (JSONInputDataV3)JSONInputDataFactory.ReadJsonJob(file);
-			inputData.AirdragData = null; // force use of standard values
-
-			var dataReader = new DeclarationModeVectoRunDataFactory(inputData, null);
-			var runData = dataReader.NextRun().ToArray();
-			var runDataOrig = DeclarationAdapterTestHelper.CreateVectoRunData(file);
-
-			Assert.AreEqual(5.2, runDataOrig[0].AirdragData.DeclaredAirdragArea.Value());
-			Assert.AreEqual(8.5, runData[0].AirdragData.DeclaredAirdragArea.Value());
-		}
-	}
-}
\ No newline at end of file
+namespace TUGraz.VectoCore.Tests.Models.Declaration
+{
+	[TestFixture]
+	public class AirdragDefaultValuesTest
+	{
+		[OneTimeSetUp]
+		public void RunBeforeAnyTests()
+		{
+			Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
+		}
+
+		[TestCase]
+		public void TestClass2()
+		{
+			var file = @"TestData\Integration\DeclarationMode\Class2_RigidTruck_4x2\Class2_RigidTruck_DECL.vecto";
+			var fileNoAirdrag =
+				@"TestData\Integration\DeclarationMode\Class2_RigidTruck_4x2\Class2_RigidTruck_NoAirdrag_DECL.vecto";
+
+			var runData = DeclarationAdapterTestHelper.CreateVectoRunData(fileNoAirdrag);
+			var runDataOrig = DeclarationAdapterTestHelper.CreateVectoRunData(file);
+
+			Assert.AreEqual(4.83, runDataOrig[0].AirdragData.DeclaredAirdragArea.Value());
+
+			Assert.AreEqual(7.2, runData[0].AirdragData.DeclaredAirdragArea.Value());
+		}
+
+		[TestCase]
+		public void TestClass5()
+		{
+			var file = @"TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Class5_Tractor_DECL.vecto";
+			var fileNoAirdrag = @"TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Class5_Tractor_NoAirdrag_DECL.vecto";
+
+			var runData = DeclarationAdapterTestHelper.CreateVectoRunData(fileNoAirdrag);
+			var runDataOrig = DeclarationAdapterTestHelper.CreateVectoRunData(file);
+
+			Assert.AreEqual(5.3, runDataOrig[0].AirdragData.DeclaredAirdragArea.Value());
+			Assert.AreEqual(8.7, runData[0].AirdragData.DeclaredAirdragArea.Value());
+		}
+
+		[TestCase]
+		public void TestClass9()
+		{
+			var file = @"TestData\Integration\DeclarationMode\Class9_RigidTruck_6x2\Class9_RigidTruck_DECL.vecto";
+			var fileNoAirdrag =
+				@"TestData\Integration\DeclarationMode\Class9_RigidTruck_6x2\Class9_RigidTruck_NoAirdrag_DECL.vecto";
+
+			var runData = DeclarationAdapterTestHelper.CreateVectoRunData(fileNoAirdrag);
+			var runDataOrig = DeclarationAdapterTestHelper.CreateVectoRunData(file);
+
+			Assert.AreEqual(5.2, runDataOrig[0].AirdragData.DeclaredAirdragArea.Value());
+			Assert.AreEqual(8.5, runData[0].AirdragData.DeclaredAirdragArea.Value());
+		}
+	}
+}
diff --git a/VectoCore/VectoCoreTest/Models/Simulation/DeclarationSimulationFactoryTest.cs b/VectoCore/VectoCoreTest/Models/Simulation/DeclarationSimulationFactoryTest.cs
index 1c116da6e77979afe44c807131a38d893908c91d..5b92db6249a63ce9d641319f0029349b540a9613 100644
--- a/VectoCore/VectoCoreTest/Models/Simulation/DeclarationSimulationFactoryTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Simulation/DeclarationSimulationFactoryTest.cs
@@ -47,6 +47,12 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 	{
 		const string SampleVehicleDecl = "TestData/XML/XMLReaderDeclaration/vecto_vehicle-sample.xml";
 
+		[OneTimeSetUp]
+		public void RunBeforeAnyTests()
+		{
+			Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
+		}
+
 		[TestCase("None", RetarderType.None),
 		TestCase("Losses included in Gearbox", RetarderType.LossesIncludedInTransmission),
 		TestCase("Engine Retarder", RetarderType.EngineRetarder),
diff --git a/VectoCore/VectoCoreTest/Reports/ModDataTest.cs b/VectoCore/VectoCoreTest/Reports/ModDataTest.cs
index f1e7981b69801f1f5d6b0f34278838b70cee9041..5b9852f05ce667107ffa6fd1cbecb57cd7f839e7 100644
--- a/VectoCore/VectoCoreTest/Reports/ModDataTest.cs
+++ b/VectoCore/VectoCoreTest/Reports/ModDataTest.cs
@@ -132,7 +132,7 @@ namespace TUGraz.VectoCore.Tests.Reports
 
 			foreach (var modalResults in modData) {
 				AssertModDataIntegrity(modalResults.Item1, auxKeys, modalResults.Item2,
-					FuelConsumptionMapReader.Create(((IEngineeringInputDataProvider)inputData).EngineInputData.FuelConsumptionMap));
+					FuelConsumptionMapReader.Create(((IEngineeringInputDataProvider)inputData).JobInputData.Vehicle.EngineInputData.FuelConsumptionMap));
 			}
 
 			AssertSumDataIntegrity(sumData, mode);
@@ -392,7 +392,7 @@ namespace TUGraz.VectoCore.Tests.Reports
 
 			foreach (var modalResults in modData) {
 				AssertModDataIntegrityAT(modalResults.Item1, auxKeys, modalResults.Item2,
-					FuelConsumptionMapReader.Create(((IEngineeringInputDataProvider)inputData).EngineInputData.FuelConsumptionMap));
+					FuelConsumptionMapReader.Create(((IEngineeringInputDataProvider)inputData).JobInputData.Vehicle.EngineInputData.FuelConsumptionMap));
 			}
 
 			AssertSumDataIntegrity(sumData, ExecutionMode.Engineering);
diff --git a/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs b/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs
index ab32be6c4e0e912c76aefd97dc27082781f3a83e..14d157dac0436a822b86c3a7f0c3a4f06957910f 100644
--- a/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs
+++ b/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs
@@ -49,6 +49,12 @@ namespace TUGraz.VectoCore.Tests.Reports
 	[TestFixture]
 	public class SumWriterTest
 	{
+		[OneTimeSetUp]
+		public void RunBeforeAnyTests()
+		{
+			Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
+		}
+
 		[TestCase]
 		public void TestSumCalcFixedTime()
 		{
@@ -181,28 +187,37 @@ namespace TUGraz.VectoCore.Tests.Reports
 			jobContainer.WaitFinished();
 
 			var sumRow = sumData.Table.Rows[1];
-			Assert.AreEqual(dataProvider.VehicleInputData.Manufacturer, sumRow[SummaryDataContainer.VEHICLE_MANUFACTURER]);
-			Assert.AreEqual(dataProvider.VehicleInputData.Model, sumRow[SummaryDataContainer.VEHICLE_MODEL]);
-			Assert.AreEqual(dataProvider.VehicleInputData.VIN, sumRow[SummaryDataContainer.VIN_NUMBER]);
-			Assert.AreEqual(dataProvider.EngineInputData.Manufacturer, sumRow[SummaryDataContainer.ENGINE_MANUFACTURER]);
-			Assert.AreEqual(dataProvider.EngineInputData.Model, sumRow[SummaryDataContainer.ENGINE_MODEL]);
-			Assert.AreEqual(dataProvider.EngineInputData.FuelType.GetLabel(), sumRow[SummaryDataContainer.ENGINE_FUEL_TYPE]);
-			Assert.AreEqual((dataProvider.EngineInputData.RatedPowerDeclared.ConvertTo().Kilo.Watt.Value()),
+			Assert.AreEqual(dataProvider.JobInputData.Vehicle.Manufacturer, sumRow[SummaryDataContainer.VEHICLE_MANUFACTURER]);
+			Assert.AreEqual(dataProvider.JobInputData.Vehicle.Model, sumRow[SummaryDataContainer.VEHICLE_MODEL]);
+			Assert.AreEqual(dataProvider.JobInputData.Vehicle.VIN, sumRow[SummaryDataContainer.VIN_NUMBER]);
+			Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.Manufacturer,
+				sumRow[SummaryDataContainer.ENGINE_MANUFACTURER]);
+			Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.Model, sumRow[SummaryDataContainer.ENGINE_MODEL]);
+			Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.FuelType.GetLabel(),
+				sumRow[SummaryDataContainer.ENGINE_FUEL_TYPE]);
+			Assert.AreEqual((dataProvider.JobInputData.Vehicle.EngineInputData.RatedPowerDeclared.ConvertTo().Kilo.Watt.Value()),
 				((SI)sumRow[SummaryDataContainer.ENGINE_RATED_POWER]).Value());
-			Assert.AreEqual(dataProvider.EngineInputData.RatedSpeedDeclared.AsRPM,
+			Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.RatedSpeedDeclared.AsRPM,
 				((SI)sumRow[SummaryDataContainer.ENGINE_RATED_SPEED]).Value());
-			Assert.AreEqual(dataProvider.EngineInputData.Displacement.ConvertTo().Cubic.Centi.Meter.Value(),
+			Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.Displacement.ConvertTo().Cubic.Centi.Meter.Value(),
 				((SI)sumRow[SummaryDataContainer.ENGINE_DISPLACEMENT]).Value());
-			Assert.AreEqual(dataProvider.GearboxInputData.Manufacturer, sumRow[SummaryDataContainer.GEARBOX_MANUFACTURER]);
-			Assert.AreEqual(dataProvider.GearboxInputData.Model, sumRow[SummaryDataContainer.GEARBOX_MODEL]);
-			Assert.AreEqual(dataProvider.AxleGearInputData.Manufacturer, sumRow[SummaryDataContainer.AXLE_MANUFACTURER]);
-			Assert.AreEqual(dataProvider.AxleGearInputData.Model, sumRow[SummaryDataContainer.AXLE_MODEL]);
-
-			Assert.AreEqual(dataProvider.EngineInputData.ColdHotBalancingFactor, sumRow[SummaryDataContainer.ENGINE_BF_COLD_HOT]);
-			Assert.AreEqual(dataProvider.EngineInputData.CorrectionFactorRegPer, sumRow[SummaryDataContainer.ENGINE_CF_REG_PER]);
-			Assert.AreEqual(dataProvider.EngineInputData.WHTCRural, sumRow[SummaryDataContainer.ENGINE_WHTC_RURAL]);
-			Assert.AreEqual(dataProvider.EngineInputData.WHTCUrban, sumRow[SummaryDataContainer.ENGINE_WHTC_URBAN]);
-			Assert.AreEqual(dataProvider.EngineInputData.WHTCMotorway, sumRow[SummaryDataContainer.ENGINE_WHTC_MOTORWAY]);
+			Assert.AreEqual(dataProvider.JobInputData.Vehicle.GearboxInputData.Manufacturer,
+				sumRow[SummaryDataContainer.GEARBOX_MANUFACTURER]);
+			Assert.AreEqual(dataProvider.JobInputData.Vehicle.GearboxInputData.Model, sumRow[SummaryDataContainer.GEARBOX_MODEL]);
+			Assert.AreEqual(dataProvider.JobInputData.Vehicle.AxleGearInputData.Manufacturer,
+				sumRow[SummaryDataContainer.AXLE_MANUFACTURER]);
+			Assert.AreEqual(dataProvider.JobInputData.Vehicle.AxleGearInputData.Model, sumRow[SummaryDataContainer.AXLE_MODEL]);
+
+			Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.ColdHotBalancingFactor,
+				sumRow[SummaryDataContainer.ENGINE_BF_COLD_HOT]);
+			Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.CorrectionFactorRegPer,
+				sumRow[SummaryDataContainer.ENGINE_CF_REG_PER]);
+			Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.WHTCRural,
+				sumRow[SummaryDataContainer.ENGINE_WHTC_RURAL]);
+			Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.WHTCUrban,
+				sumRow[SummaryDataContainer.ENGINE_WHTC_URBAN]);
+			Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.WHTCMotorway,
+				sumRow[SummaryDataContainer.ENGINE_WHTC_MOTORWAY]);
 		}
 	}
 }
diff --git a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class2_RigidTruck_4x2/Class2_RigidTruck_NoAirdrag.vveh b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class2_RigidTruck_4x2/Class2_RigidTruck_NoAirdrag.vveh
new file mode 100644
index 0000000000000000000000000000000000000000..e4417aadc5129ad5a6f0258acd4a08b748c7b7c6
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class2_RigidTruck_4x2/Class2_RigidTruck_NoAirdrag.vveh
@@ -0,0 +1,55 @@
+{
+  "Header": {
+    "CreatedBy": " ()",
+    "Date": "2016-10-13T10:06:43.0936564Z",
+    "AppVersion": "3",
+    "FileVersion": 7
+  },
+  "Body": {
+    "SavedInDeclMode": true,
+    "VehCat": "RigidTruck",
+    "CurbWeight": 4670.0,
+    "CurbWeightExtra": 0.0,
+    "Loading": 0.0,
+    "MassMax": 11.99,
+    "rdyn": 0.0,
+    "CdCorrMode": "CdofVdecl",
+    "CdCorrFile": "",
+    "Retarder": {
+      "Type": "None",
+      "Ratio": 0.0,
+      "File": ""
+    },
+    "Angledrive": {
+      "Type": "None",
+      "Ratio": 0.0,
+      "LossMap": ""
+    },
+    "PTO": {
+      "Type": "None",
+      "LossMap": "",
+      "Cycle": ""
+    },
+    "AxleConfig": {
+      "Type": "4x2",
+      "Axles": [
+        {
+          "Inertia": 6.5,
+          "Wheels": "265/70 R19.5",
+          "AxleWeightShare": 0.0,
+          "TwinTyres": false,
+          "RRCISO": 0.0065,
+          "FzISO": 20850.0
+        },
+        {
+          "Inertia": 6.5,
+          "Wheels": "265/70 R19.5",
+          "AxleWeightShare": 0.0,
+          "TwinTyres": true,
+          "RRCISO": 0.0075,
+          "FzISO": 20850.0
+        }
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class2_RigidTruck_4x2/Class2_RigidTruck_NoAirdrag_DECL.vecto b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class2_RigidTruck_4x2/Class2_RigidTruck_NoAirdrag_DECL.vecto
new file mode 100644
index 0000000000000000000000000000000000000000..d4dcaa469fb0330e304f2f269f778718c8cabb35
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class2_RigidTruck_4x2/Class2_RigidTruck_NoAirdrag_DECL.vecto
@@ -0,0 +1,67 @@
+{
+  "Header": {
+    "CreatedBy": " ()",
+    "Date": "2016-10-13T15:21:02.8206564Z",
+    "AppVersion": "3",
+    "FileVersion": 3
+  },
+  "Body": {
+    "SavedInDeclMode": true,
+    "EngineOnlyMode": false,
+    "VehicleFile": "Class2_RigidTruck_NoAirdrag.vveh",
+    "EngineFile": "Engine_175kW_6.8l.veng",
+    "GearboxFile": "MT_6.vgbx",
+    "AuxiliaryAssembly": "Classic",
+    "AuxiliaryVersion": "CLASSIC",
+    "AdvancedAuxiliaryFilePath": "",
+    "Aux": [
+      {
+        "ID": "FAN",
+        "Type": "Fan",
+        "Technology": [
+          "Belt driven or driven via transm. - Electronically controlled visco clutch"
+        ]
+      },
+      {
+        "ID": "STP",
+        "Type": "Steering pump",
+        "Technology": [
+          "Fixed displacement with elec. control"
+        ]
+      },
+      {
+        "ID": "AC",
+        "Type": "HVAC",
+        "Technology": [
+          "Default"
+        ]
+      },
+      {
+        "ID": "ES",
+        "Type": "Electric System",
+        "Technology": [
+          "Standard technology"
+        ]
+      },
+      {
+        "ID": "PS",
+        "Type": "Pneumatic System",
+        "Technology": [
+          "Medium Supply 1-stage + ESS + AMS"
+        ]
+      }
+    ],
+    "StartStop": {
+      "Enabled": false,
+      "MaxSpeed": 5.0,
+      "MinTime": 5.0,
+      "Delay": 5.0
+    },
+    "OverSpeedEcoRoll": {
+      "Mode": "Overspeed",
+      "MinSpeed": 50.0,
+      "OverSpeed": 5.0,
+      "UnderSpeed": 5.0
+    }
+  }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class5_Tractor_4x2/Class5_Tractor_NoAirdrag.vveh b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class5_Tractor_4x2/Class5_Tractor_NoAirdrag.vveh
new file mode 100644
index 0000000000000000000000000000000000000000..64fccc70e26f7c7a54628d7e3ac8a98d9c557767
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class5_Tractor_4x2/Class5_Tractor_NoAirdrag.vveh
@@ -0,0 +1,55 @@
+{
+  "Header": {
+    "CreatedBy": " ()",
+    "Date": "2016-10-13T10:08:01.8366564Z",
+    "AppVersion": "3",
+    "FileVersion": 7
+  },
+  "Body": {
+    "SavedInDeclMode": true,
+    "VehCat": "Tractor",
+    "CurbWeight": 8229.0,
+    "CurbWeightExtra": 0.0,
+    "Loading": 0.0,
+    "MassMax": 18.0,
+    "rdyn": 0.0,
+    "CdCorrMode": "CdofVdecl",
+    "CdCorrFile": "",
+    "Retarder": {
+      "Type": "secondary",
+      "Ratio": 1.0,
+      "File": "Default.vrlm"
+    },
+    "Angledrive": {
+      "Type": "None",
+      "Ratio": 0.0,
+      "LossMap": ""
+    },
+    "PTO": {
+      "Type": "None",
+      "LossMap": "",
+      "Cycle": ""
+    },
+    "AxleConfig": {
+      "Type": "4x2",
+      "Axles": [
+        {
+          "Inertia": 14.9,
+          "Wheels": "315/70 R22.5",
+          "AxleWeightShare": 0.0,
+          "TwinTyres": false,
+          "RRCISO": 0.0055,
+          "FzISO": 33350.0
+        },
+        {
+          "Inertia": 14.9,
+          "Wheels": "315/70 R22.5",
+          "AxleWeightShare": 0.0,
+          "TwinTyres": true,
+          "RRCISO": 0.0065,
+          "FzISO": 33350.0
+        }
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class5_Tractor_4x2/Class5_Tractor_NoAirdrag_DECL.vecto b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class5_Tractor_4x2/Class5_Tractor_NoAirdrag_DECL.vecto
new file mode 100644
index 0000000000000000000000000000000000000000..93db21f9470d29926de1951b0c7ba633485153d9
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class5_Tractor_4x2/Class5_Tractor_NoAirdrag_DECL.vecto
@@ -0,0 +1,67 @@
+{
+  "Header": {
+    "CreatedBy": " ()",
+    "Date": "2016-10-13T10:08:21.7776564Z",
+    "AppVersion": "3",
+    "FileVersion": 3
+  },
+  "Body": {
+    "SavedInDeclMode": true,
+    "EngineOnlyMode": false,
+    "VehicleFile": "Class5_Tractor_NoAirdrag.vveh",
+    "EngineFile": "Engine_325kW_12.7l.veng",
+    "GearboxFile": "AMT_12.vgbx",
+    "AuxiliaryAssembly": "Classic",
+    "AuxiliaryVersion": "CLASSIC",
+    "AdvancedAuxiliaryFilePath": "",
+    "Aux": [
+      {
+        "ID": "FAN",
+        "Type": "Fan",
+        "Technology": [
+          "Belt driven or driven via transm. - Electronically controlled visco clutch"
+        ]
+      },
+      {
+        "ID": "STP",
+        "Type": "Steering pump",
+        "Technology": [
+          "Fixed displacement with elec. control"
+        ]
+      },
+      {
+        "ID": "AC",
+        "Type": "HVAC",
+        "Technology": [
+          "Default"
+        ]
+      },
+      {
+        "ID": "ES",
+        "Type": "Electric System",
+        "Technology": [
+          "Standard technology"
+        ]
+      },
+      {
+        "ID": "PS",
+        "Type": "Pneumatic System",
+        "Technology": [
+          "Medium Supply 2-stage + ESS + AMS"
+        ]
+      }
+    ],
+    "StartStop": {
+      "Enabled": false,
+      "MaxSpeed": 5.0,
+      "MinTime": 5.0,
+      "Delay": 5.0
+    },
+    "OverSpeedEcoRoll": {
+      "Mode": "Overspeed",
+      "MinSpeed": 50.0,
+      "OverSpeed": 5.0,
+      "UnderSpeed": 5.0
+    }
+  }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class9_RigidTruck_6x2/Class9_RigidTruck_NoAirdrag.vveh b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class9_RigidTruck_6x2/Class9_RigidTruck_NoAirdrag.vveh
new file mode 100644
index 0000000000000000000000000000000000000000..846a9f48eb234064715f573abd782297d2cc518f
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class9_RigidTruck_6x2/Class9_RigidTruck_NoAirdrag.vveh
@@ -0,0 +1,64 @@
+{
+  "Header": {
+    "CreatedBy": " ()",
+    "Date": "2017-05-19T08:36:54.5380903Z",
+    "AppVersion": "3",
+    "FileVersion": 7
+  },
+  "Body": {
+    "SavedInDeclMode": true,
+    "VehCat": "RigidTruck",
+    "CurbWeight": 9300.0,
+    "CurbWeightExtra": 0.0,
+    "Loading": 0.0,
+    "MassMax": 26.0,
+    "rdyn": 0.0,
+    "CdCorrMode": "CdofVdecl",
+    "CdCorrFile": "",
+    "Retarder": {
+      "Type": "secondary",
+      "Ratio": 1.0,
+      "File": "Retarder.vrlm"
+    },
+    "Angledrive": {
+      "Type": "None",
+      "Ratio": "NaN",
+      "LossMap": ""
+    },
+    "PTO": {
+      "Type": "drive shaft and/or more than 2 gear wheels - multi-disc clutch, oil pump",
+      "LossMap": "",
+      "Cycle": ""
+    },
+    "TorqueLimits": {},
+    "AxleConfig": {
+      "Type": "6x2",
+      "Axles": [
+        {
+          "Inertia": 14.9,
+          "Wheels": "315/70 R22.5",
+          "AxleWeightShare": 0.0,
+          "TwinTyres": false,
+          "RRCISO": 0.0055,
+          "FzISO": 33350.0
+        },
+        {
+          "Inertia": 14.9,
+          "Wheels": "315/70 R22.5",
+          "AxleWeightShare": 0.0,
+          "TwinTyres": true,
+          "RRCISO": 0.0055,
+          "FzISO": 33350.0
+        },
+        {
+          "Inertia": 14.9,
+          "Wheels": "315/70 R22.5",
+          "AxleWeightShare": 0.0,
+          "TwinTyres": false,
+          "RRCISO": 0.0055,
+          "FzISO": 33350.0
+        }
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class9_RigidTruck_6x2/Class9_RigidTruck_NoAirdrag_DECL.vecto b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class9_RigidTruck_6x2/Class9_RigidTruck_NoAirdrag_DECL.vecto
new file mode 100644
index 0000000000000000000000000000000000000000..f0721f236761c993cc383176902663513dc1a83c
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class9_RigidTruck_6x2/Class9_RigidTruck_NoAirdrag_DECL.vecto
@@ -0,0 +1,61 @@
+{
+  "Header": {
+    "CreatedBy": " ()",
+    "Date": "2017-05-19T08:36:57.2458195Z",
+    "AppVersion": "3",
+    "FileVersion": 3
+  },
+  "Body": {
+    "SavedInDeclMode": true,
+    "EngineOnlyMode": false,
+    "VehicleFile": "Class9_RigidTruck_NoAirdrag.vveh",
+    "EngineFile": "Engine_324kW_12.7l.veng",
+    "GearboxFile": "AMT_12.vgbx",
+    "AuxiliaryAssembly": "Classic",
+    "AuxiliaryVersion": "CLASSIC",
+    "AdvancedAuxiliaryFilePath": "",
+    "Aux": [
+      {
+        "ID": "FAN",
+        "Type": "Fan",
+        "Technology": [
+          "Crankshaft mounted - On/off clutch"
+        ]
+      },
+      {
+        "ID": "STP",
+        "Type": "Steering pump",
+        "Technology": [
+          "Fixed displacement with elec. control"
+        ]
+      },
+      {
+        "ID": "AC",
+        "Type": "HVAC",
+        "Technology": [
+          "Default"
+        ]
+      },
+      {
+        "ID": "ES",
+        "Type": "Electric System",
+        "Technology": [
+          "Standard technology"
+        ]
+      },
+      {
+        "ID": "PS",
+        "Type": "Pneumatic System",
+        "Technology": [
+          "Medium Supply 2-stage + ESS + AMS"
+        ]
+      }
+    ],
+    "OverSpeedEcoRoll": {
+      "Mode": "Overspeed",
+      "MinSpeed": 50.0,
+      "OverSpeed": 5.0,
+      "UnderSpeed": 5.0
+    }
+  }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs b/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs
index 675a82b958dfce5b28dde0ecebee4a215dafdce5..4d4e0df9feefcf8381834804fbead9e8a6ea778d 100644
--- a/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs
+++ b/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs
@@ -89,7 +89,7 @@ namespace TUGraz.VectoCore.Tests.Utils
 		public static VehicleData CreateVehicleDataFromFile(string vehicleDataFile)
 		{
 			var dao = new EngineeringDataAdapter();
-			var vehicleInput = JSONInputDataFactory.ReadJsonVehicle(vehicleDataFile);
+			var vehicleInput = JSONInputDataFactory.ReadJsonVehicle(vehicleDataFile, null);
 			var airdragData = vehicleInput as IAirdragEngineeringInputData;
 			return dao.CreateVehicleData(vehicleInput);
 		}
@@ -97,7 +97,7 @@ namespace TUGraz.VectoCore.Tests.Utils
 		public static AirdragData CreateAirdragDataFromFile(string vehicleDataFile)
 		{
 			var dao = new EngineeringDataAdapter();
-			var vehicleInput = JSONInputDataFactory.ReadJsonVehicle(vehicleDataFile);
+			var vehicleInput = JSONInputDataFactory.ReadJsonVehicle(vehicleDataFile, null);
 			var airdragData = vehicleInput as IAirdragEngineeringInputData;
 			return dao.CreateAirdragData(airdragData, vehicleInput);
 		}
@@ -113,4 +113,4 @@ namespace TUGraz.VectoCore.Tests.Utils
 			return dao.CreateDriverData(engineeringJob.DriverInputData);
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index 7f997ee209a67ede57dd26814c5093c4327cd6ed..d68ab9739649ee6eb56cf624620aee35d75fa11e 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -681,6 +681,12 @@
     <None Include="TestData\Integration\DeclarationMode\Class2_RigidTruck_4x2\Axle_4x2_orig.vtlm">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="TestData\Integration\DeclarationMode\Class2_RigidTruck_4x2\Class2_RigidTruck_NoAirdrag_DECL.vecto">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="TestData\Integration\DeclarationMode\Class2_RigidTruck_4x2\Class2_RigidTruck_NoAirdrag.vveh">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Include="TestData\Integration\DeclarationMode\Class2_RigidTruck_4x2\Class2_RigidTruck.vveh">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
@@ -903,9 +909,15 @@
     <None Include="TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Axle_4x2_Tractor.vtlm">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Class5_Tractor_NoAirdrag.vveh">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Include="TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Class5_Tractor.vveh">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Class5_Tractor_NoAirdrag_DECL.vecto">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Include="TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Class5_Tractor_DECL.vecto">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
@@ -1023,9 +1035,15 @@
     <None Include="TestData\Integration\DeclarationMode\Class9_RigidTruck_6x2\Axle_4x2.vtlm">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="TestData\Integration\DeclarationMode\Class9_RigidTruck_6x2\Class9_RigidTruck_NoAirdrag.vveh">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Include="TestData\Integration\DeclarationMode\Class9_RigidTruck_6x2\Class9_RigidTruck.vveh">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="TestData\Integration\DeclarationMode\Class9_RigidTruck_6x2\Class9_RigidTruck_NoAirdrag_DECL.vecto">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Include="TestData\Integration\DeclarationMode\Class9_RigidTruck_6x2\Class9_RigidTruck_DECL.vecto">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
diff --git a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs
index 4f7adbf62a85cb6a2c469584121c091bc4fe92e1..9f3ff414511bfd3337bac009bd6907638c9c55d2 100644
--- a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs
@@ -61,6 +61,12 @@ namespace TUGraz.VectoCore.Tests.XML
 		const string SampleVehicleFullDeclCertificationOptions =
 			"TestData/XML/XMLReaderDeclaration/vecto_vehicle-sample_certificationOptions.xml";
 
+		[OneTimeSetUp]
+		public void RunBeforeAnyTests()
+		{
+			Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
+		}
+
 		[TestCase]
 		public void TestXMLInputEng()
 		{
@@ -68,7 +74,7 @@ namespace TUGraz.VectoCore.Tests.XML
 
 			var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true);
 
-			var engineDataProvider = inputDataProvider.EngineInputData;
+			var engineDataProvider = inputDataProvider.JobInputData.Vehicle.EngineInputData;
 
 			Assert.IsTrue(engineDataProvider.SavedInDeclarationMode);
 
@@ -102,7 +108,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var reader = XmlReader.Create(SampleVehicleDecl);
 
 			var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true);
-			var gearboxDataProvider = inputDataProvider.GearboxInputData;
+			var gearboxDataProvider = inputDataProvider.JobInputData.Vehicle.GearboxInputData;
 
 			Assert.AreEqual("Generic 40t Long Haul Truck Gearbox", gearboxDataProvider.Model);
 			Assert.AreEqual(GearboxType.AMT, gearboxDataProvider.Type);
@@ -127,7 +133,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var reader = XmlReader.Create(SampleVehicleDecl);
 
 			var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true);
-			var axlegearDataProvider = inputDataProvider.AxleGearInputData;
+			var axlegearDataProvider = inputDataProvider.JobInputData.Vehicle.AxleGearInputData;
 
 			Assert.AreEqual("Generic 40t Long Haul Truck AxleGear", axlegearDataProvider.Model);
 
@@ -149,7 +155,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var reader = XmlReader.Create(SampleVehicleDecl);
 
 			var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true);
-			var retarderDataProvider = inputDataProvider.RetarderInputData;
+			var retarderDataProvider = inputDataProvider.JobInputData.Vehicle.RetarderInputData;
 
 			Assert.AreEqual("Generic Retarder", retarderDataProvider.Model);
 
@@ -170,7 +176,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var reader = XmlReader.Create(SampleVehicleDecl);
 
 			var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true);
-			var vehicleDataProvider = inputDataProvider.VehicleInputData;
+			var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle;
 
 			var axles = vehicleDataProvider.Axles;
 
@@ -211,7 +217,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var modified = XmlReader.Create(new StringReader(nav.OuterXml));
 
 			var inputDataProvider = new XMLDeclarationInputDataProvider(modified, true);
-			var vehicleDataProvider = inputDataProvider.VehicleInputData;
+			var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle;
 
 			AssertHelper.Exception<VectoException>(() => { var axles = vehicleDataProvider.Axles; });
 		}
@@ -275,7 +281,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var modified = XmlReader.Create(new StringReader(nav.OuterXml));
 
 			var inputDataProvider = new XMLDeclarationInputDataProvider(modified, true);
-			var vehicleDataProvider = inputDataProvider.VehicleInputData;
+			var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle;
 
 			AssertHelper.Exception<VectoException>(() => { var axles = vehicleDataProvider.Axles; });
 		}
@@ -286,7 +292,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var reader = XmlReader.Create(SampleVehicleDecl);
 
 			var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true);
-			var auxDataProvider = inputDataProvider.AuxiliaryInputData();
+			var auxDataProvider = inputDataProvider.JobInputData.Vehicle.AuxiliaryInputData();
 
 			var aux = auxDataProvider.Auxiliaries;
 			var aux1 = aux[0];
@@ -299,18 +305,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			Assert.AreEqual("Standard technology - LED headlights, all", aux3.Technology.First());
 		}
 
-		[TestCase]
-		public void TestXMLInputADAS()
-		{
-			var reader = XmlReader.Create(SampleVehicleDecl);
-
-			var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true);
-
-			var adas = inputDataProvider.DriverInputData;
-
-			Assert.AreEqual(DriverMode.Overspeed, adas.OverSpeedEcoRoll.Mode);
-		}
-
+		
 		[TestCase]
 		public void TestVehicleInput()
 		{
@@ -318,16 +313,16 @@ namespace TUGraz.VectoCore.Tests.XML
 
 			var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true);
 
-			var vehicleDataProvider = inputDataProvider.VehicleInputData;
+			var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle;
 
 			Assert.AreEqual(VehicleCategory.Tractor, vehicleDataProvider.VehicleCategory);
 			Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleDataProvider.AxleConfiguration);
 
 			Assert.AreEqual(7100.0, vehicleDataProvider.CurbMassChassis.Value());
 			Assert.AreEqual(40000.0, vehicleDataProvider.GrossVehicleMassRating.Value());
-			Assert.AreEqual(6.34, inputDataProvider.AirdragInputData.AirDragArea.Value());
+			Assert.AreEqual(6.34, inputDataProvider.JobInputData.Vehicle.AirdragInputData.AirDragArea.Value());
 
-			Assert.AreEqual(1.0, inputDataProvider.RetarderInputData.Ratio);
+			Assert.AreEqual(1.0, inputDataProvider.JobInputData.Vehicle.RetarderInputData.Ratio);
 		}
 
 		[TestCase]
@@ -356,7 +351,7 @@ namespace TUGraz.VectoCore.Tests.XML
 
 			var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true);
 
-			var tcDataProvider = inputDataProvider.TorqueConverterInputData;
+			var tcDataProvider = inputDataProvider.JobInputData.Vehicle.TorqueConverterInputData;
 
 
 			Assert.AreEqual(3, tcDataProvider.TCData.Rows.Count);
@@ -372,7 +367,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true);
 
 
-			var angledriveDataProvider = inputDataProvider.AngledriveInputData;
+			var angledriveDataProvider = inputDataProvider.JobInputData.Vehicle.AngledriveInputData;
 
 			Assert.AreEqual(2.345, angledriveDataProvider.Ratio);
 			Assert.AreEqual(6, angledriveDataProvider.LossMap.Rows.Count);
@@ -387,16 +382,16 @@ namespace TUGraz.VectoCore.Tests.XML
 			var reader = XmlReader.Create(SampleVehicleFullDecl);
 
 			var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true);
-			var vehicleDataProvider = inputDataProvider.JobInputData().Vehicle;
+			var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle;
 
 			Assert.AreEqual(VehicleCategory.Tractor, vehicleDataProvider.VehicleCategory);
 			Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleDataProvider.AxleConfiguration);
 
 			Assert.AreEqual(7100.0, vehicleDataProvider.CurbMassChassis.Value());
 			Assert.AreEqual(40000.0, vehicleDataProvider.GrossVehicleMassRating.Value());
-			Assert.AreEqual(6.34, inputDataProvider.AirdragInputData.AirDragArea.Value());
+			Assert.AreEqual(6.34, inputDataProvider.JobInputData.Vehicle.AirdragInputData.AirDragArea.Value());
 
-			Assert.AreEqual(1.0, inputDataProvider.RetarderInputData.Ratio);
+			Assert.AreEqual(1.0, inputDataProvider.JobInputData.Vehicle.RetarderInputData.Ratio);
 		}
 
 		[TestCase]
@@ -405,7 +400,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var reader = XmlReader.Create(SampleVehicleFullDecl);
 
 			var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true);
-			var vehicleDataProvider = inputDataProvider.JobInputData().Vehicle;
+			var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle;
 
 			var torqueLimits = vehicleDataProvider.TorqueLimits.OrderBy(x => x.Gear).ToList();
 			Assert.AreEqual(3, torqueLimits.Count);
@@ -420,7 +415,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var reader = XmlReader.Create(SampleVehicleFullDecl);
 
 			var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true);
-			var gearboxDataProvider = inputDataProvider.GearboxInputData;
+			var gearboxDataProvider = inputDataProvider.JobInputData.Vehicle.GearboxInputData;
 			var gears = gearboxDataProvider.Gears;
 
 			Assert.AreEqual(12, gears.Count);
@@ -435,7 +430,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var reader = XmlReader.Create(SampleVehicleFullDecl);
 
 			var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true);
-			var gearboxDataProvider = inputDataProvider.GearboxInputData;
+			var gearboxDataProvider = inputDataProvider.JobInputData.Vehicle.GearboxInputData;
 			var gears = gearboxDataProvider.Gears;
 
 			Assert.AreEqual(12, gears.Count);
@@ -466,7 +461,7 @@ namespace TUGraz.VectoCore.Tests.XML
 
 			var inputDataProvider = new XMLDeclarationInputDataProvider(modified, true);
 
-			AssertHelper.Exception<VectoException>(() => { var tmp = inputDataProvider.RetarderInputData.Ratio; });
+			AssertHelper.Exception<VectoException>(() => { var tmp = inputDataProvider.JobInputData.Vehicle.RetarderInputData.Ratio; });
 		}
 
 		[TestCase]
@@ -535,7 +530,7 @@ namespace TUGraz.VectoCore.Tests.XML
 
 				var inputDataProvider = new XMLDeclarationInputDataProvider(modified, true);
 
-				Assert.AreEqual(retarderType.Value, inputDataProvider.RetarderInputData.Type);
+				Assert.AreEqual(retarderType.Value, inputDataProvider.JobInputData.Vehicle.RetarderInputData.Type);
 			}
 		}
 
@@ -573,7 +568,7 @@ namespace TUGraz.VectoCore.Tests.XML
 
 				var inputDataProvider = new XMLDeclarationInputDataProvider(modified, true);
 
-				Assert.AreEqual(axleConfiguration.Value, inputDataProvider.VehicleInputData.AxleConfiguration);
+				Assert.AreEqual(axleConfiguration.Value, inputDataProvider.JobInputData.Vehicle.AxleConfiguration);
 			}
 		}
 
@@ -607,7 +602,7 @@ namespace TUGraz.VectoCore.Tests.XML
 
 				var inputDataProvider = new XMLDeclarationInputDataProvider(modified, true);
 
-				Assert.AreEqual(vehicleCategory.Value, inputDataProvider.VehicleInputData.VehicleCategory);
+				Assert.AreEqual(vehicleCategory.Value, inputDataProvider.JobInputData.Vehicle.VehicleCategory);
 			}
 		}
 
@@ -640,7 +635,7 @@ namespace TUGraz.VectoCore.Tests.XML
 					true);
 
 				Assert.AreEqual(retarderType.Value,
-					inputDataProvider.RetarderInputData.Type);
+					inputDataProvider.JobInputData.Vehicle.RetarderInputData.Type);
 			}
 		}
 
@@ -694,15 +689,15 @@ namespace TUGraz.VectoCore.Tests.XML
 
 				if (ptoType[0] == "none") {
 					Assert.AreEqual("None",
-						inputDataProvider.PTOTransmissionInputData.PTOTransmissionType);
+						inputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData.PTOTransmissionType);
 				} else if (ptoType[0] == "only one engaged gearwheel above oil level") {
 					Assert.AreEqual(ptoType[0],
-						inputDataProvider.PTOTransmissionInputData.PTOTransmissionType);
+						inputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData.PTOTransmissionType);
 				} else {
 					Assert.AreEqual(string.Format("{0} - {1}", ptoType[0], ptoType[1]),
-						inputDataProvider.PTOTransmissionInputData.PTOTransmissionType);
+						inputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData.PTOTransmissionType);
 				}
-				DeclarationData.PTOTransmission.Lookup(inputDataProvider.PTOTransmissionInputData.PTOTransmissionType);
+				DeclarationData.PTOTransmission.Lookup(inputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData.PTOTransmissionType);
 			}
 		}
 
@@ -737,7 +732,7 @@ namespace TUGraz.VectoCore.Tests.XML
 				var inputDataProvider = new XMLDeclarationInputDataProvider(modified,
 					true);
 
-				Assert.AreEqual(angleDrive.Value, inputDataProvider.AngledriveInputData.Type);
+				Assert.AreEqual(angleDrive.Value, inputDataProvider.JobInputData.Vehicle.AngledriveInputData.Type);
 			}
 		}
 
@@ -776,7 +771,7 @@ namespace TUGraz.VectoCore.Tests.XML
 				var inputDataProvider = new XMLDeclarationInputDataProvider(modified,
 					true);
 
-				Assert.AreEqual(gearboxType.Value, inputDataProvider.GearboxInputData.Type);
+				Assert.AreEqual(gearboxType.Value, inputDataProvider.JobInputData.Vehicle.GearboxInputData.Type);
 			}
 		}
 
@@ -786,7 +781,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var reader = XmlReader.Create(SampleVehicleDecl);
 
 			var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true);
-			var ptoDataProvider = inputDataProvider.PTOTransmissionInputData;
+			var ptoDataProvider = inputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData;
 
 			Assert.AreEqual("None", ptoDataProvider.PTOTransmissionType);
 		}
@@ -797,7 +792,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var reader = XmlReader.Create(SampleVehicleFullDecl);
 
 			var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true);
-			var ptoDataProvider = inputDataProvider.PTOTransmissionInputData;
+			var ptoDataProvider = inputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData;
 			var lookup = DeclarationData.PTOTransmission.Lookup(ptoDataProvider.PTOTransmissionType);
 
 			Assert.AreEqual("only the drive shaft of the PTO - multi-disc clutch", ptoDataProvider.PTOTransmissionType);
@@ -811,10 +806,10 @@ namespace TUGraz.VectoCore.Tests.XML
 
 			var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true);
 
-			Assert.AreEqual(CertificationMethod.Option2, inputDataProvider.GearboxInputData.CertificationMethod);
-			Assert.AreEqual(CertificationMethod.Measured, inputDataProvider.AxleGearInputData.CertificationMethod);
-			Assert.AreEqual(CertificationMethod.Measured, inputDataProvider.RetarderInputData.CertificationMethod);
-			Assert.AreEqual(CertificationMethod.Measured, inputDataProvider.AirdragInputData.CertificationMethod);
+			Assert.AreEqual(CertificationMethod.Option2, inputDataProvider.JobInputData.Vehicle.GearboxInputData.CertificationMethod);
+			Assert.AreEqual(CertificationMethod.Measured, inputDataProvider.JobInputData.Vehicle.AxleGearInputData.CertificationMethod);
+			Assert.AreEqual(CertificationMethod.Measured, inputDataProvider.JobInputData.Vehicle.RetarderInputData.CertificationMethod);
+			Assert.AreEqual(CertificationMethod.Measured, inputDataProvider.JobInputData.Vehicle.AirdragInputData.CertificationMethod);
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/VectoCore/VectoCoreTest/XML/XMLEngineeringInputRefTest.cs b/VectoCore/VectoCoreTest/XML/XMLEngineeringInputRefTest.cs
index 4ff66a106ce86498c9d2b8386adaf473af761b31..aa6c04732577102185b57610b13a6aa6fa7a8b7e 100644
--- a/VectoCore/VectoCoreTest/XML/XMLEngineeringInputRefTest.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLEngineeringInputRefTest.cs
@@ -29,295 +29,301 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
-using System.IO;
-using System.Linq;
-using TUGraz.VectoCommon.Exceptions;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.InputData.FileIO.XML.Engineering;
-using TUGraz.VectoCore.InputData.Reader;
-using TUGraz.VectoCore.InputData.Reader.ComponentData;
-using TUGraz.VectoCore.Models.Simulation.Impl;
-using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine;
-using TUGraz.VectoCore.OutputData;
-using TUGraz.VectoCore.OutputData.FileIO;
-using TUGraz.VectoCore.Tests.Utils;
-using TUGraz.VectoCore.Utils;
+using System.IO;
+using System.Linq;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering;
+using TUGraz.VectoCore.InputData.Reader;
+using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine;
+using TUGraz.VectoCore.OutputData;
+using TUGraz.VectoCore.OutputData.FileIO;
+using TUGraz.VectoCore.Tests.Utils;
+using TUGraz.VectoCore.Utils;
 using NUnit.Framework;
 
-namespace TUGraz.VectoCore.Tests.XML
-{
-	[TestFixture]
-	public class XMLEngineeringInputRefTest
-	{
-		public const string EngineeringSampleFile = "TestData/XML/XMLReaderEngineering/engineering_job-sample_ref.xml";
-
-		[TestCase]
-		public void TestXMLInputEngineeringReferencedFileAsStream()
-		{
-			AssertHelper.Exception<VectoException>(() => {
-				var reader = File.OpenRead(EngineeringSampleFile);
-				var foo = new XMLEngineeringInputDataProvider(reader, true);
-			});
-		}
-
-		[TestCase]
-		public void TestXMLInputEngReferencedFile()
-		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
-
-			var engineDataProvider = inputDataProvider.EngineInputData;
-
-			Assert.IsFalse(engineDataProvider.SavedInDeclarationMode);
-
-			Assert.AreEqual("Generic 40t Long Haul Truck Engine", engineDataProvider.Model);
-			Assert.AreEqual(0.012730, engineDataProvider.Displacement.Value());
-			Assert.AreEqual(0.77, engineDataProvider.Inertia.Value());
-
-			AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCMotorway; });
-			AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCRural; });
-			AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCUrban; });
-
-			var fcMapTable = engineDataProvider.FuelConsumptionMap;
-			Assert.AreEqual(112, fcMapTable.Rows.Count);
-			Assert.AreEqual("engine speed", fcMapTable.Columns[0].Caption);
-			Assert.AreEqual("torque", fcMapTable.Columns[1].Caption);
-			Assert.AreEqual("fuel consumption", fcMapTable.Columns[2].Caption);
-
-			Assert.AreEqual("560", fcMapTable.Rows[0][0]);
-			var fcMap = FuelConsumptionMapReader.Create(fcMapTable);
-			Assert.AreEqual(1256.SI().Gramm.Per.Hour.ConvertTo().Kilo.Gramm.Per.Second.Value(),
-				fcMap.GetFuelConsumption(0.SI<NewtonMeter>(), 560.RPMtoRad()).Value.Value());
-
-			var fldTable = engineDataProvider.FullLoadCurve;
-			Assert.AreEqual(10, fldTable.Rows.Count);
-			Assert.AreEqual("engine speed", fldTable.Columns[0].Caption);
-			Assert.AreEqual("full load torque", fldTable.Columns[1].Caption);
-			Assert.AreEqual("motoring torque", fldTable.Columns[2].Caption);
-			var fldMap = FullLoadCurveReader.Create(fldTable, true);
-		}
-
-		[TestCase]
-		public void TestXMLInputGbxReferencedFile()
-		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
-			var gearboxDataProvider = inputDataProvider.GearboxInputData;
-
-			Assert.AreEqual("Generic 40t Long Haul Truck Gearbox", gearboxDataProvider.Model);
-			Assert.AreEqual(GearboxType.AMT, gearboxDataProvider.Type);
-			var gears = gearboxDataProvider.Gears;
-			Assert.AreEqual(12, gears.Count);
-
-			Assert.AreEqual(1, gears.First().Gear);
-			Assert.AreEqual(14.93, gears.First().Ratio);
-			Assert.AreEqual("0", gears.First().LossMap.Rows[0][0]);
-			Assert.AreEqual("-350", gears.First().LossMap.Rows[0][1]);
-			Assert.AreEqual("12.06", gears.First().LossMap.Rows[0][2]);
-
-			var lossMap = TransmissionLossMapReader.Create(gears.First().LossMap, gears.First().Ratio,
-				gears.First().Gear.ToString());
-
-			Assert.AreEqual("-100", gears.First().ShiftPolygon.Rows[0][0]);
-			Assert.AreEqual("700", gears.First().ShiftPolygon.Rows[0][1]);
-			Assert.AreEqual("1800", gears.First().ShiftPolygon.Rows[0][2]);
-
-			//Assert.AreEqual("560", gears.First().FullLoadCurve.Rows[0][0]);
-			//Assert.AreEqual("2500", gears.First().FullLoadCurve.Rows[0][1]);
-
-			//var fldMap = FullLoadCurveReader.Create(gears.First().FullLoadCurve, true);
-		}
-
-		[TestCase]
-		public void TestXMLInputGbxTCReferencedFile()
-		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
-			var tcInputDataProvider = inputDataProvider.GearboxInputData.TorqueConverter;
-
-
-			Assert.AreEqual("GBX_ShiftPolygons.vgbs", Path.GetFileName(tcInputDataProvider.ShiftPolygon.Source));
-			Assert.AreEqual("-100", tcInputDataProvider.ShiftPolygon.Rows[0][0]);
-			Assert.AreEqual("700", tcInputDataProvider.ShiftPolygon.Rows[0][1]);
-			Assert.AreEqual("1800", tcInputDataProvider.ShiftPolygon.Rows[0][2]);
-
-			Assert.AreEqual("tc_data.vtcc", Path.GetFileName(tcInputDataProvider.TCData.Source));
-			Assert.AreEqual(3, tcInputDataProvider.TCData.Rows.Count);
-			Assert.AreEqual("300", tcInputDataProvider.TCData.Rows[0][1]);
-			Assert.AreEqual("0.9", tcInputDataProvider.TCData.Rows[2][2]);
-		}
-
-		[TestCase]
-		public void TestXMLInputAngledriveReferencedFile()
-		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
-			var angledriveInputData = inputDataProvider.AngledriveInputData;
-
-			Assert.AreEqual("Generic Angledrive", angledriveInputData.Model);
-
-			var lossMapData = angledriveInputData.LossMap;
-			Assert.AreEqual(1.2, angledriveInputData.Ratio);
-			Assert.AreEqual("0", lossMapData.Rows[0][0]);
-			Assert.AreEqual("-10000", lossMapData.Rows[0][1]);
-			Assert.AreEqual("100", lossMapData.Rows[0][2]);
-
-			var lossMap = TransmissionLossMapReader.Create(lossMapData, angledriveInputData.Ratio, "Angledrive");
-		}
-
-		[TestCase]
-		public void TestXMLInputAxlGReferencedFile()
-		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
-			var axlegearDataProvider = inputDataProvider.AxleGearInputData;
-
-			Assert.AreEqual("Generic 40t Long Haul Truck AxleGear", axlegearDataProvider.Model);
-
-			var lossMapData = axlegearDataProvider.LossMap;
-			Assert.AreEqual(2.59, axlegearDataProvider.Ratio);
-			Assert.AreEqual("0", lossMapData.Rows[0][0]);
-			Assert.AreEqual("-5000", lossMapData.Rows[0][1]);
-			Assert.AreEqual("115", lossMapData.Rows[0][2]);
-
-			var lossMap = TransmissionLossMapReader.Create(lossMapData, axlegearDataProvider.Ratio, "AxleGear");
-		}
-
-		[TestCase]
-		public void TestXMLInputRetarderReferencedFile()
-		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
-			var retarderDataProvider = inputDataProvider.RetarderInputData;
-
-			Assert.AreEqual("Generic Retarder", retarderDataProvider.Model);
-
-			var lossMapData = retarderDataProvider.LossMap;
-
-			Assert.AreEqual(RetarderType.TransmissionOutputRetarder, retarderDataProvider.Type);
-
-			Assert.AreEqual("0", lossMapData.Rows[0][0]);
-			Assert.AreEqual("10", lossMapData.Rows[0][1]);
-
-			var lossMap = RetarderLossMapReader.Create(lossMapData);
-		}
-
-		[TestCase]
-		public void TestXMLInputAxleWheelsReferencedFile()
-		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
-			var vehicleDataProvider = inputDataProvider.VehicleInputData;
-
-			var axles = vehicleDataProvider.Axles;
-
-			Assert.AreEqual("315/70 R22.5", axles[0].Wheels);
-			Assert.AreEqual(0.0055, axles[0].RollResistanceCoefficient);
-			Assert.AreEqual(31300, axles[0].TyreTestLoad.Value());
-
-			Assert.AreEqual("315/70 R22.5", axles[1].Wheels);
-			Assert.AreEqual(0.0063, axles[1].RollResistanceCoefficient);
-			Assert.AreEqual(31300, axles[1].TyreTestLoad.Value());
-
-			//AssertHelper.Exception<VectoException>(() => { var tmp = vehicleDataProvider.Rim; });
-			Assert.AreEqual(0.488822, vehicleDataProvider.DynamicTyreRadius.Value());
-		}
-
-		[TestCase]
-		public void TestXMLInputAuxiliariesReferencedFile()
-		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
-			var auxDataProvider = inputDataProvider.AuxiliaryInputData();
-
-			var aux = auxDataProvider.Auxiliaries;
-			var aux1 = aux[0];
-
-			Assert.AreEqual("ES", aux1.ID);
-
-			Assert.AreEqual(70, aux1.DemandMap.Rows[0].ParseDouble(AuxiliaryDataReader.Fields.MechPower));
-			Assert.AreEqual(640, aux1.DemandMap.Rows[2].ParseDouble(AuxiliaryDataReader.Fields.SupplyPower));
-
-			var aux2 = aux[1];
-
-			Assert.AreEqual("FAN", aux2.ID);
-			Assert.AreEqual(70, aux2.DemandMap.Rows[0].ParseDouble(AuxiliaryDataReader.Fields.MechPower));
-			Assert.AreEqual(3190, aux2.DemandMap.Rows[113].ParseDouble(AuxiliaryDataReader.Fields.SupplyPower));
-		}
-
-		[TestCase]
-		public void TestXMLInputADASReferencedFile()
-		{
-			//var reader = XmlReader.Create(EngineeringSampleFile);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
-
-			var adas = inputDataProvider.DriverInputData;
-
-			Assert.AreEqual(DriverMode.Overspeed, adas.OverSpeedEcoRoll.Mode);
-		}
-
-		[TestCase]
-		public void TestVehicleInputReferencedFile()
-		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
-
-			var vehicleDataProvider = inputDataProvider.VehicleInputData;
-
-			Assert.AreEqual(VehicleCategory.Tractor, vehicleDataProvider.VehicleCategory);
-			Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleDataProvider.AxleConfiguration);
-
-			Assert.AreEqual(7100.0, vehicleDataProvider.CurbMassChassis.Value());
-			Assert.AreEqual(18000.0, vehicleDataProvider.GrossVehicleMassRating.Value());
-			Assert.AreEqual(6.29, inputDataProvider.AirdragInputData.AirDragArea.Value());
-
-			Assert.AreEqual(1500, vehicleDataProvider.Loading.Value());
-			Assert.AreEqual(500, vehicleDataProvider.CurbMassExtra.Value());
-
-			Assert.AreEqual(1.0, inputDataProvider.RetarderInputData.Ratio);
-		}
-
-		[TestCase]
-		public void TestXMLPowertrainGenerationReferencedFile()
-		{
-			var fileWriter = new FileOutputWriter("foo");
-			var sumWriter = new FileOutputWriter("vecto_vehicle-sample_xml");
-			var sumData = new SummaryDataContainer(sumWriter);
-			var jobContainer = new JobContainer(sumData);
-			var dataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
-
-			var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, dataProvider, fileWriter);
-			runsFactory.WriteModalResults = true;
-
-			jobContainer.AddRuns(runsFactory);
-
-			//Assert.AreEqual(6, jobContainer.Runs.Count);
-		}
-
-
-		[TestCase]
-		public void TestXMEngineering_DriverModelLACExt()
-		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
-
-			var driverDataProvider = inputDataProvider.DriverInputData;
-
-			var lac = driverDataProvider.Lookahead;
-			Assert.IsTrue(lac.Enabled);
-
-			Assert.AreEqual("lac_speedDependent.csv", Path.GetFileName(lac.CoastingDecisionFactorTargetSpeedLookup.Source));
-			Assert.AreEqual("lac_velocityDrop.csv", Path.GetFileName(lac.CoastingDecisionFactorVelocityDropLookup.Source));
-		}
-
-		[TestCase]
-		public void TestXMEngineering_PTO()
-		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
-
-			var ptoData = inputDataProvider.PTOTransmissionInputData;
-
-			//Assert.AreEqual("only the drive shaft of the PTO - multi-disc clutch", ptoData.PTOTransmissionType);
-			Assert.AreEqual(2, ptoData.PTOLossMap.Rows.Count);
-			Assert.AreEqual("2800", ptoData.PTOLossMap.Rows[1][0]);
-			Assert.AreEqual("100", ptoData.PTOLossMap.Rows[1][1]);
-
-			Assert.AreEqual(4, ptoData.PTOCycle.Rows.Count);
-			Assert.AreEqual("3", ptoData.PTOCycle.Rows[3][0]);
-			Assert.AreEqual("1200", ptoData.PTOCycle.Rows[3][1]);
-			Assert.AreEqual("100", ptoData.PTOCycle.Rows[3][2]);
-		}
-	}
-}
\ No newline at end of file
+namespace TUGraz.VectoCore.Tests.XML
+{
+	[TestFixture]
+	public class XMLEngineeringInputRefTest
+	{
+		public const string EngineeringSampleFile = "TestData/XML/XMLReaderEngineering/engineering_job-sample_ref.xml";
+
+		[OneTimeSetUp]
+		public void RunBeforeAnyTests()
+		{
+			Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
+		}
+
+		[TestCase]
+		public void TestXMLInputEngineeringReferencedFileAsStream()
+		{
+			AssertHelper.Exception<VectoException>(() => {
+				var reader = File.OpenRead(EngineeringSampleFile);
+				var foo = new XMLEngineeringInputDataProvider(reader, true);
+			});
+		}
+
+		[TestCase]
+		public void TestXMLInputEngReferencedFile()
+		{
+			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+
+			var engineDataProvider = inputDataProvider.JobInputData.Vehicle.EngineInputData;
+
+			Assert.IsFalse(engineDataProvider.SavedInDeclarationMode);
+
+			Assert.AreEqual("Generic 40t Long Haul Truck Engine", engineDataProvider.Model);
+			Assert.AreEqual(0.012730, engineDataProvider.Displacement.Value());
+			Assert.AreEqual(0.77, engineDataProvider.Inertia.Value());
+
+			AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCMotorway; });
+			AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCRural; });
+			AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCUrban; });
+
+			var fcMapTable = engineDataProvider.FuelConsumptionMap;
+			Assert.AreEqual(112, fcMapTable.Rows.Count);
+			Assert.AreEqual("engine speed", fcMapTable.Columns[0].Caption);
+			Assert.AreEqual("torque", fcMapTable.Columns[1].Caption);
+			Assert.AreEqual("fuel consumption", fcMapTable.Columns[2].Caption);
+
+			Assert.AreEqual("560", fcMapTable.Rows[0][0]);
+			var fcMap = FuelConsumptionMapReader.Create(fcMapTable);
+			Assert.AreEqual(1256.SI().Gramm.Per.Hour.ConvertTo().Kilo.Gramm.Per.Second.Value(),
+				fcMap.GetFuelConsumption(0.SI<NewtonMeter>(), 560.RPMtoRad()).Value.Value());
+
+			var fldTable = engineDataProvider.FullLoadCurve;
+			Assert.AreEqual(10, fldTable.Rows.Count);
+			Assert.AreEqual("engine speed", fldTable.Columns[0].Caption);
+			Assert.AreEqual("full load torque", fldTable.Columns[1].Caption);
+			Assert.AreEqual("motoring torque", fldTable.Columns[2].Caption);
+			var fldMap = FullLoadCurveReader.Create(fldTable, true);
+		}
+
+		[TestCase]
+		public void TestXMLInputGbxReferencedFile()
+		{
+			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var gearboxDataProvider = inputDataProvider.JobInputData.Vehicle.GearboxInputData;
+
+			Assert.AreEqual("Generic 40t Long Haul Truck Gearbox", gearboxDataProvider.Model);
+			Assert.AreEqual(GearboxType.AMT, gearboxDataProvider.Type);
+			var gears = gearboxDataProvider.Gears;
+			Assert.AreEqual(12, gears.Count);
+
+			Assert.AreEqual(1, gears.First().Gear);
+			Assert.AreEqual(14.93, gears.First().Ratio);
+			Assert.AreEqual("0", gears.First().LossMap.Rows[0][0]);
+			Assert.AreEqual("-350", gears.First().LossMap.Rows[0][1]);
+			Assert.AreEqual("12.06", gears.First().LossMap.Rows[0][2]);
+
+			var lossMap = TransmissionLossMapReader.Create(gears.First().LossMap, gears.First().Ratio,
+				gears.First().Gear.ToString());
+
+			Assert.AreEqual("-100", gears.First().ShiftPolygon.Rows[0][0]);
+			Assert.AreEqual("700", gears.First().ShiftPolygon.Rows[0][1]);
+			Assert.AreEqual("1800", gears.First().ShiftPolygon.Rows[0][2]);
+
+			//Assert.AreEqual("560", gears.First().FullLoadCurve.Rows[0][0]);
+			//Assert.AreEqual("2500", gears.First().FullLoadCurve.Rows[0][1]);
+
+			//var fldMap = FullLoadCurveReader.Create(gears.First().FullLoadCurve, true);
+		}
+
+		[TestCase]
+		public void TestXMLInputGbxTCReferencedFile()
+		{
+			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var tcInputDataProvider = inputDataProvider.JobInputData.Vehicle.GearboxInputData.TorqueConverter;
+
+
+			Assert.AreEqual("GBX_ShiftPolygons.vgbs", Path.GetFileName(tcInputDataProvider.ShiftPolygon.Source));
+			Assert.AreEqual("-100", tcInputDataProvider.ShiftPolygon.Rows[0][0]);
+			Assert.AreEqual("700", tcInputDataProvider.ShiftPolygon.Rows[0][1]);
+			Assert.AreEqual("1800", tcInputDataProvider.ShiftPolygon.Rows[0][2]);
+
+			Assert.AreEqual("tc_data.vtcc", Path.GetFileName(tcInputDataProvider.TCData.Source));
+			Assert.AreEqual(3, tcInputDataProvider.TCData.Rows.Count);
+			Assert.AreEqual("300", tcInputDataProvider.TCData.Rows[0][1]);
+			Assert.AreEqual("0.9", tcInputDataProvider.TCData.Rows[2][2]);
+		}
+
+		[TestCase]
+		public void TestXMLInputAngledriveReferencedFile()
+		{
+			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var angledriveInputData = inputDataProvider.JobInputData.Vehicle.AngledriveInputData;
+
+			Assert.AreEqual("Generic Angledrive", angledriveInputData.Model);
+
+			var lossMapData = angledriveInputData.LossMap;
+			Assert.AreEqual(1.2, angledriveInputData.Ratio);
+			Assert.AreEqual("0", lossMapData.Rows[0][0]);
+			Assert.AreEqual("-10000", lossMapData.Rows[0][1]);
+			Assert.AreEqual("100", lossMapData.Rows[0][2]);
+
+			var lossMap = TransmissionLossMapReader.Create(lossMapData, angledriveInputData.Ratio, "Angledrive");
+		}
+
+		[TestCase]
+		public void TestXMLInputAxlGReferencedFile()
+		{
+			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var axlegearDataProvider = inputDataProvider.JobInputData.Vehicle.AxleGearInputData;
+
+			Assert.AreEqual("Generic 40t Long Haul Truck AxleGear", axlegearDataProvider.Model);
+
+			var lossMapData = axlegearDataProvider.LossMap;
+			Assert.AreEqual(2.59, axlegearDataProvider.Ratio);
+			Assert.AreEqual("0", lossMapData.Rows[0][0]);
+			Assert.AreEqual("-5000", lossMapData.Rows[0][1]);
+			Assert.AreEqual("115", lossMapData.Rows[0][2]);
+
+			var lossMap = TransmissionLossMapReader.Create(lossMapData, axlegearDataProvider.Ratio, "AxleGear");
+		}
+
+		[TestCase]
+		public void TestXMLInputRetarderReferencedFile()
+		{
+			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var retarderDataProvider = inputDataProvider.JobInputData.Vehicle.RetarderInputData;
+
+			Assert.AreEqual("Generic Retarder", retarderDataProvider.Model);
+
+			var lossMapData = retarderDataProvider.LossMap;
+
+			Assert.AreEqual(RetarderType.TransmissionOutputRetarder, retarderDataProvider.Type);
+
+			Assert.AreEqual("0", lossMapData.Rows[0][0]);
+			Assert.AreEqual("10", lossMapData.Rows[0][1]);
+
+			var lossMap = RetarderLossMapReader.Create(lossMapData);
+		}
+
+		[TestCase]
+		public void TestXMLInputAxleWheelsReferencedFile()
+		{
+			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var vehicleDataProvider = inputDataProvider.VehicleInputData;
+
+			var axles = vehicleDataProvider.Axles;
+
+			Assert.AreEqual("315/70 R22.5", axles[0].Wheels);
+			Assert.AreEqual(0.0055, axles[0].RollResistanceCoefficient);
+			Assert.AreEqual(31300, axles[0].TyreTestLoad.Value());
+
+			Assert.AreEqual("315/70 R22.5", axles[1].Wheels);
+			Assert.AreEqual(0.0063, axles[1].RollResistanceCoefficient);
+			Assert.AreEqual(31300, axles[1].TyreTestLoad.Value());
+
+			//AssertHelper.Exception<VectoException>(() => { var tmp = vehicleDataProvider.Rim; });
+			Assert.AreEqual(0.488822, vehicleDataProvider.DynamicTyreRadius.Value());
+		}
+
+		[TestCase]
+		public void TestXMLInputAuxiliariesReferencedFile()
+		{
+			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var auxDataProvider = inputDataProvider.JobInputData.Vehicle.AuxiliaryInputData();
+
+			var aux = auxDataProvider.Auxiliaries;
+			var aux1 = aux[0];
+
+			Assert.AreEqual("ES", aux1.ID);
+
+			Assert.AreEqual(70, aux1.DemandMap.Rows[0].ParseDouble(AuxiliaryDataReader.Fields.MechPower));
+			Assert.AreEqual(640, aux1.DemandMap.Rows[2].ParseDouble(AuxiliaryDataReader.Fields.SupplyPower));
+
+			var aux2 = aux[1];
+
+			Assert.AreEqual("FAN", aux2.ID);
+			Assert.AreEqual(70, aux2.DemandMap.Rows[0].ParseDouble(AuxiliaryDataReader.Fields.MechPower));
+			Assert.AreEqual(3190, aux2.DemandMap.Rows[113].ParseDouble(AuxiliaryDataReader.Fields.SupplyPower));
+		}
+
+		[TestCase]
+		public void TestXMLInputADASReferencedFile()
+		{
+			//var reader = XmlReader.Create(EngineeringSampleFile);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+
+			var adas = inputDataProvider.DriverInputData;
+
+			Assert.AreEqual(DriverMode.Overspeed, adas.OverSpeedEcoRoll.Mode);
+		}
+
+		[TestCase]
+		public void TestVehicleInputReferencedFile()
+		{
+			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+
+			var vehicleDataProvider = inputDataProvider.VehicleInputData;
+
+			Assert.AreEqual(VehicleCategory.Tractor, vehicleDataProvider.VehicleCategory);
+			Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleDataProvider.AxleConfiguration);
+
+			Assert.AreEqual(7100.0, vehicleDataProvider.CurbMassChassis.Value());
+			Assert.AreEqual(18000.0, vehicleDataProvider.GrossVehicleMassRating.Value());
+			Assert.AreEqual(6.29, inputDataProvider.JobInputData.Vehicle.AirdragInputData.AirDragArea.Value());
+
+			Assert.AreEqual(1500, vehicleDataProvider.Loading.Value());
+			Assert.AreEqual(500, vehicleDataProvider.CurbMassExtra.Value());
+
+			Assert.AreEqual(1.0, inputDataProvider.JobInputData.Vehicle.RetarderInputData.Ratio);
+		}
+
+		[TestCase]
+		public void TestXMLPowertrainGenerationReferencedFile()
+		{
+			var fileWriter = new FileOutputWriter("foo");
+			var sumWriter = new FileOutputWriter("vecto_vehicle-sample_xml");
+			var sumData = new SummaryDataContainer(sumWriter);
+			var jobContainer = new JobContainer(sumData);
+			var dataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+
+			var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, dataProvider, fileWriter);
+			runsFactory.WriteModalResults = true;
+
+			jobContainer.AddRuns(runsFactory);
+
+			//Assert.AreEqual(6, jobContainer.Runs.Count);
+		}
+
+
+		[TestCase]
+		public void TestXMEngineering_DriverModelLACExt()
+		{
+			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+
+			var driverDataProvider = inputDataProvider.DriverInputData;
+
+			var lac = driverDataProvider.Lookahead;
+			Assert.IsTrue(lac.Enabled);
+
+			Assert.AreEqual("lac_speedDependent.csv", Path.GetFileName(lac.CoastingDecisionFactorTargetSpeedLookup.Source));
+			Assert.AreEqual("lac_velocityDrop.csv", Path.GetFileName(lac.CoastingDecisionFactorVelocityDropLookup.Source));
+		}
+
+		[TestCase]
+		public void TestXMEngineering_PTO()
+		{
+			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+
+			var ptoData = inputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData;
+
+			//Assert.AreEqual("only the drive shaft of the PTO - multi-disc clutch", ptoData.PTOTransmissionType);
+			Assert.AreEqual(2, ptoData.PTOLossMap.Rows.Count);
+			Assert.AreEqual("2800", ptoData.PTOLossMap.Rows[1][0]);
+			Assert.AreEqual("100", ptoData.PTOLossMap.Rows[1][1]);
+
+			Assert.AreEqual(4, ptoData.PTOCycle.Rows.Count);
+			Assert.AreEqual("3", ptoData.PTOCycle.Rows[3][0]);
+			Assert.AreEqual("1200", ptoData.PTOCycle.Rows[3][1]);
+			Assert.AreEqual("100", ptoData.PTOCycle.Rows[3][2]);
+		}
+	}
+}
diff --git a/VectoCore/VectoCoreTest/XML/XMLEngineeringInputSingleTest.cs b/VectoCore/VectoCoreTest/XML/XMLEngineeringInputSingleTest.cs
index 1802bdc2b3bd6a8779701a3fa4c7756a63421494..9f68f52d2899e85e0e4322379ebf1ce70ab92480 100644
--- a/VectoCore/VectoCoreTest/XML/XMLEngineeringInputSingleTest.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLEngineeringInputSingleTest.cs
@@ -29,890 +29,890 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
-using System.IO;
-using System.Linq;
-using System.Xml;
-using System.Xml.Linq;
-using TUGraz.VectoCommon.Exceptions;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.Configuration;
-using TUGraz.VectoCore.InputData.FileIO.XML.Engineering;
-using TUGraz.VectoCore.InputData.Reader;
-using TUGraz.VectoCore.InputData.Reader.ComponentData;
-using TUGraz.VectoCore.Models.Declaration;
-using TUGraz.VectoCore.Models.Simulation.Impl;
-using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine;
-using TUGraz.VectoCore.OutputData;
-using TUGraz.VectoCore.OutputData.FileIO;
-using TUGraz.VectoCore.Tests.Utils;
-using TUGraz.VectoCore.Utils;
+using System.IO;
+using System.Linq;
+using System.Xml;
+using System.Xml.Linq;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering;
+using TUGraz.VectoCore.InputData.Reader;
+using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine;
+using TUGraz.VectoCore.OutputData;
+using TUGraz.VectoCore.OutputData.FileIO;
+using TUGraz.VectoCore.Tests.Utils;
+using TUGraz.VectoCore.Utils;
 using NUnit.Framework;
 
-namespace TUGraz.VectoCore.Tests.XML
-{
-	[TestFixture]
-	public class XMLEngineeringInputSingleTest
-	{
-		public const string EngineeringSampleFile = "TestData/XML/XMLReaderEngineering/engineering_job-sample.xml";
-
-		public const string EngineeringSampleFileFull = "TestData/XML/XMLReaderEngineering/engineering_job-sample_FULL.xml";
-
-
-		[TestCase]
-		public void TestXMLInputEngSingleFile()
-		{
-			var reader = File.OpenRead(EngineeringSampleFile);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
-
-			var engineDataProvider = inputDataProvider.EngineInputData;
-
-			Assert.IsFalse(engineDataProvider.SavedInDeclarationMode);
-
-			Assert.AreEqual("Generic 40t Long Haul Truck Engine", engineDataProvider.Model);
-			Assert.AreEqual(0.012730, engineDataProvider.Displacement.Value());
-			Assert.AreEqual(0.77, engineDataProvider.Inertia.Value());
-
-			AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCMotorway; });
-			AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCRural; });
-			AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCUrban; });
-
-			var fcMapTable = engineDataProvider.FuelConsumptionMap;
-			Assert.AreEqual(112, fcMapTable.Rows.Count);
-			Assert.AreEqual("engine speed", fcMapTable.Columns[0].Caption);
-			Assert.AreEqual("torque", fcMapTable.Columns[1].Caption);
-			Assert.AreEqual("fuel consumption", fcMapTable.Columns[2].Caption);
-
-			Assert.AreEqual("560.00", fcMapTable.Rows[0][0]);
-			var fcMap = FuelConsumptionMapReader.Create(fcMapTable);
-			Assert.AreEqual(1256.SI().Gramm.Per.Hour.ConvertTo().Kilo.Gramm.Per.Second.Value(),
-				fcMap.GetFuelConsumption(0.SI<NewtonMeter>(), 560.RPMtoRad()).Value.Value());
-
-			var fldTable = engineDataProvider.FullLoadCurve;
-			Assert.AreEqual(10, fldTable.Rows.Count);
-			Assert.AreEqual("engine speed", fldTable.Columns[0].Caption);
-			Assert.AreEqual("full load torque", fldTable.Columns[1].Caption);
-			Assert.AreEqual("motoring torque", fldTable.Columns[2].Caption);
-			var fldMap = FullLoadCurveReader.Create(fldTable, true);
-		}
-
-		[TestCase]
-		public void TestXMLInputGbxSingleFile()
-		{
-			var reader = File.OpenRead(EngineeringSampleFile);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
-			var gearboxDataProvider = inputDataProvider.GearboxInputData;
-
-			Assert.AreEqual("Generic 40t Long Haul Truck Gearbox", gearboxDataProvider.Model);
-			Assert.AreEqual(GearboxType.AMT, gearboxDataProvider.Type);
-			var gears = gearboxDataProvider.Gears;
-			Assert.AreEqual(12, gears.Count);
-
-			Assert.AreEqual(1, gears.First().Gear);
-			Assert.AreEqual(14.93, gears.First().Ratio);
-			Assert.AreEqual("0.00", gears.First().LossMap.Rows[0][0]);
-			Assert.AreEqual("-350.00", gears.First().LossMap.Rows[0][1]);
-			Assert.AreEqual("12.06", gears.First().LossMap.Rows[0][2]);
-
-			var lossMap = TransmissionLossMapReader.Create(gears.First().LossMap, gears.First().Ratio,
-				gears.First().Gear.ToString());
-
-			//Assert.AreEqual("560", gears.First().FullLoadCurve.Rows[0][0]);
-			//Assert.AreEqual("2500", gears.First().FullLoadCurve.Rows[0][1]);
-
-			//var fldMap = FullLoadCurveReader.Create(gears.First().FullLoadCurve, true);
-		}
-
-
-		[TestCase]
-		public void TestXMLInputAxlGSingleFile()
-		{
-			var reader = File.OpenRead(EngineeringSampleFile);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
-			var axlegearDataProvider = inputDataProvider.AxleGearInputData;
-
-			Assert.AreEqual("Generic 40t Long Haul Truck AxleGear", axlegearDataProvider.Model);
-
-			var lossMapData = axlegearDataProvider.LossMap;
-			Assert.AreEqual(2.59, axlegearDataProvider.Ratio);
-			Assert.AreEqual("0.00", lossMapData.Rows[0][0]);
-			Assert.AreEqual("-5000.00", lossMapData.Rows[0][1]);
-			Assert.AreEqual("115.00", lossMapData.Rows[0][2]);
-
-			var lossMap = TransmissionLossMapReader.Create(lossMapData, axlegearDataProvider.Ratio, "AxleGear");
-		}
-
-		[TestCase]
-		public void TestXMLInputAxlGSingleFileEfficiency()
-		{
-			var reader = XmlReader.Create(EngineeringSampleFile);
-
-			var doc = new XmlDocument();
-			doc.Load(reader);
-			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-
-			var axleglosses = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Axlegear,
-				XMLNames.ComponentDataWrapper, XMLNames.Axlegear_TorqueLossMap), manager);
-			//accData.DeleteSelf();
-			axleglosses.ReplaceSelf(
-				new XElement(XMLNames.Axlegear_TorqueLossMap, new XElement(XMLNames.Axlegear_Efficiency, "0.9123")).ToString());
-
-			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
-			var stream = new MemoryStream();
-			var writer = new StreamWriter(stream);
-			writer.Write(nav.OuterXml);
-			writer.Flush();
-			stream.Seek(0, SeekOrigin.Begin);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
-
-			var axleGear = inputDataProvider.AxleGearInputData;
-			Assert.AreEqual(0.9123, axleGear.Efficiency);
-		}
-
-		[TestCase]
-		public void TestXMLInputRetarderSingleFile()
-		{
-			var reader = File.OpenRead(EngineeringSampleFile);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
-			var retarderDataProvider = inputDataProvider.RetarderInputData;
-
-			Assert.AreEqual("Generic Retarder", retarderDataProvider.Model);
-
-			var lossMapData = retarderDataProvider.LossMap;
-
-			Assert.AreEqual(RetarderType.TransmissionOutputRetarder, retarderDataProvider.Type);
-
-			Assert.AreEqual("0.00", lossMapData.Rows[0][0]);
-			Assert.AreEqual("10.00", lossMapData.Rows[0][1]);
-
-			var lossMap = RetarderLossMapReader.Create(lossMapData);
-		}
-
-		[TestCase]
-		public void TestXMLInputAxleWheelsSingleFile()
-		{
-			var reader = File.OpenRead(EngineeringSampleFile);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
-			var vehicleDataProvider = inputDataProvider.VehicleInputData;
-
-			var axles = vehicleDataProvider.Axles;
-
-			Assert.AreEqual("315/70 R22.5", axles[0].Wheels);
-			Assert.AreEqual(0.0055, axles[0].RollResistanceCoefficient);
-			Assert.AreEqual(31300, axles[0].TyreTestLoad.Value());
-
-			Assert.AreEqual("315/70 R22.5", axles[1].Wheels);
-			Assert.AreEqual(0.0063, axles[1].RollResistanceCoefficient);
-			Assert.AreEqual(31300, axles[1].TyreTestLoad.Value());
-
-			//AssertHelper.Exception<VectoException>(() => { var tmp = vehicleDataProvider.Rim; });
-			Assert.AreEqual(0.488822, vehicleDataProvider.DynamicTyreRadius.Value());
-		}
-
-		[TestCase]
-		public void TestXMLInputAxleWheelsDuplicates()
-		{
-			var reader = XmlReader.Create(EngineeringSampleFile);
-
-			var doc = new XmlDocument();
-			doc.Load(reader);
-			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-			var firstAxle = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.Component_Vehicle,
-				XMLNames.Vehicle_Components,
-				XMLNames.Component_AxleWheels,
-				XMLNames.ComponentDataWrapper,
-				XMLNames.AxleWheels_Axles,
-				helper.QueryConstraint(XMLNames.AxleWheels_Axles_Axle, "1", null, string.Empty)
-				), manager);
-			firstAxle.MoveToAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, string.Empty);
-			firstAxle.SetTypedValue(2);
-
-
-			var stream = new MemoryStream();
-			var writer = new StreamWriter(stream);
-			writer.Write(nav.OuterXml);
-			writer.Flush();
-			stream.Seek(0, SeekOrigin.Begin);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
-
-			var vehicleDataProvider = inputDataProvider.VehicleInputData;
-
-			AssertHelper.Exception<VectoException>(() => { var axles = vehicleDataProvider.Axles; });
-		}
-
-		[TestCase]
-		public void TestXMLInputAxleWheelsAxleNumTooLow()
-		{
-			var reader = XmlReader.Create(EngineeringSampleFile);
-
-			var doc = new XmlDocument();
-			doc.Load(reader);
-			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-			var firstAxle = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.Component_Vehicle,
-				XMLNames.Vehicle_Components,
-				XMLNames.Component_AxleWheels,
-				XMLNames.ComponentDataWrapper,
-				XMLNames.AxleWheels_Axles,
-				helper.QueryConstraint(XMLNames.AxleWheels_Axles_Axle, "1", null, string.Empty)
-				), manager);
-			firstAxle.MoveToAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, string.Empty);
-			firstAxle.SetTypedValue(0);
-
-			var stream = new MemoryStream();
-			var writer = new StreamWriter(stream);
-			writer.Write(nav.OuterXml);
-			writer.Flush();
-			stream.Seek(0, SeekOrigin.Begin);
-
-			AssertHelper.Exception<VectoException>(
-				() => {
-					var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
-					var axles = inputDataProvider.VehicleInputData.Axles;
-				});
-		}
-
-		[TestCase]
-		public void TestXMLInputAxleWheelsAxleNumTooHigh()
-		{
-			var reader = XmlReader.Create(EngineeringSampleFile);
-
-			var doc = new XmlDocument();
-			doc.Load(reader);
-			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-			var firstAxle = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.Component_Vehicle,
-				XMLNames.Vehicle_Components,
-				XMLNames.Component_AxleWheels,
-				XMLNames.ComponentDataWrapper,
-				XMLNames.AxleWheels_Axles,
-				helper.QueryConstraint(XMLNames.AxleWheels_Axles_Axle, "1", null, string.Empty)
-				), manager);
-			firstAxle.MoveToAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, string.Empty);
-			firstAxle.SetTypedValue(3);
-
-
-			var stream = new MemoryStream();
-			var writer = new StreamWriter(stream);
-			writer.Write(nav.OuterXml);
-			writer.Flush();
-			stream.Seek(0, SeekOrigin.Begin);
-
-			AssertHelper.Exception<VectoException>(
-				() => {
-					var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
-					var axles = inputDataProvider.VehicleInputData.Axles;
-				});
-		}
-
-		[TestCase]
-		public void TestXMLInputAuxiliariesSingleFile()
-		{
-			var reader = File.OpenRead(EngineeringSampleFile);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
-			var auxDataProvider = inputDataProvider.AuxiliaryInputData();
-
-			var aux = auxDataProvider.Auxiliaries;
-			var aux1 = aux[0];
-
-			Assert.AreEqual("ES", aux1.ID);
-
-			Assert.AreEqual(70, aux1.DemandMap.Rows[0].ParseDouble(AuxiliaryDataReader.Fields.MechPower));
-			Assert.AreEqual(640, aux1.DemandMap.Rows[2].ParseDouble(AuxiliaryDataReader.Fields.SupplyPower));
-
-			var aux2 = aux[1];
-
-			Assert.AreEqual("FAN", aux2.ID);
-		}
-
-		[TestCase]
-		public void TestXMLInputADASSingleFile()
-		{
-			var reader = File.OpenRead(EngineeringSampleFile);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
-
-			var adas = inputDataProvider.DriverInputData;
-
-			Assert.AreEqual(DriverMode.Overspeed, adas.OverSpeedEcoRoll.Mode);
-		}
-
-		[TestCase]
-		public void TestVehicleInputSingleFile()
-		{
-			var reader = File.OpenRead(EngineeringSampleFile);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
-
-			var vehicleDataProvider = inputDataProvider.VehicleInputData;
-
-			Assert.AreEqual(VehicleCategory.Tractor, vehicleDataProvider.VehicleCategory);
-			Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleDataProvider.AxleConfiguration);
-
-			Assert.AreEqual(7100.0, vehicleDataProvider.CurbMassChassis.Value());
-			Assert.AreEqual(40000.0, vehicleDataProvider.GrossVehicleMassRating.Value());
-			Assert.AreEqual(6.29, inputDataProvider.AirdragInputData.AirDragArea.Value());
-
-			Assert.AreEqual(1500, vehicleDataProvider.Loading.Value());
-			Assert.AreEqual(500, vehicleDataProvider.CurbMassExtra.Value());
-
-			Assert.AreEqual(1.0, inputDataProvider.RetarderInputData.Ratio);
-		}
-
-		[TestCase]
-		public void TestXMEngineering_DriverModel()
-		{
-			var reader = File.OpenRead(EngineeringSampleFile);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
-
-			var driverDataProvider = inputDataProvider.DriverInputData;
-
-			var lac = driverDataProvider.Lookahead;
-			Assert.IsTrue(lac.Enabled);
-			Assert.AreEqual(DeclarationData.Driver.LookAhead.MinimumSpeed.AsKmph, lac.MinSpeed.AsKmph, 1e-6);
-
-			var overspeed = driverDataProvider.OverSpeedEcoRoll;
-			Assert.AreEqual(DriverMode.Overspeed, overspeed.Mode);
-			Assert.AreEqual(50, overspeed.MinSpeed.AsKmph, 1e-6);
-			Assert.AreEqual(5, overspeed.OverSpeed.AsKmph, 1e-6);
-			Assert.AreEqual(5, overspeed.UnderSpeed.AsKmph, 1e-6);
-
-			var driverAcc = driverDataProvider.AccelerationCurve;
-			Assert.AreEqual(2, driverAcc.Rows.Count);
-			Assert.AreEqual("100", driverAcc.Rows[1][0]);
-			Assert.AreEqual("1", driverAcc.Rows[1][1]);
-			Assert.AreEqual("-1", driverAcc.Rows[1][2]);
-
-			var declarationDriverDataProvider = (IDriverDeclarationInputData)inputDataProvider.DriverInputData;
-
-			Assert.AreEqual(DriverMode.Overspeed, declarationDriverDataProvider.OverSpeedEcoRoll.Mode);
-
-			var shiftStrategy = inputDataProvider.GearboxInputData;
-
-			Assert.AreEqual(DeclarationData.Gearbox.UpshiftMinAcceleration.Value(), shiftStrategy.UpshiftMinAcceleration.Value(),
-				1e-6);
-			Assert.AreEqual(DeclarationData.Gearbox.DownshiftAfterUpshiftDelay.Value(),
-				shiftStrategy.DownshiftAfterUpshiftDelay.Value(), 1e-6);
-			Assert.AreEqual(DeclarationData.Gearbox.UpshiftAfterDownshiftDelay.Value(),
-				shiftStrategy.UpshiftAfterDownshiftDelay.Value(), 1e-6);
-
-			Assert.AreEqual(DeclarationData.Gearbox.TorqueReserve, shiftStrategy.TorqueReserve, 1e-6);
-			Assert.AreEqual(DeclarationData.Gearbox.MinTimeBetweenGearshifts.Value(),
-				shiftStrategy.MinTimeBetweenGearshift.Value(), 1e-6);
-			Assert.AreEqual(DeclarationData.Gearbox.StartSpeed.Value(), shiftStrategy.StartSpeed.Value(), 1e-6);
-			Assert.AreEqual(DeclarationData.Gearbox.StartAcceleration.Value(), shiftStrategy.StartAcceleration.Value(), 1e-6);
-			Assert.AreEqual(DeclarationData.Gearbox.TorqueReserveStart, shiftStrategy.StartTorqueReserve, 1e-6);
-
-			AssertHelper.AreRelativeEqual(Constants.DefaultPowerShiftTime, shiftStrategy.PowershiftShiftTime);
-
-			var tcShiftStrategy = inputDataProvider.GearboxInputData.TorqueConverter;
-
-			AssertHelper.AreRelativeEqual(DeclarationData.TorqueConverter.CCUpshiftMinAcceleration,
-				tcShiftStrategy.CCUpshiftMinAcceleration);
-			AssertHelper.AreRelativeEqual(DeclarationData.TorqueConverter.CLUpshiftMinAcceleration,
-				tcShiftStrategy.CLUpshiftMinAcceleration);
-		}
-
-		[TestCase]
-		public void TestXMEngineering_DriverModelNoAcc()
-		{
-			var reader = XmlReader.Create(EngineeringSampleFile);
-
-			var doc = new XmlDocument();
-			doc.Load(reader);
-			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-
-			var accData = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.Component_DriverModel,
-				XMLNames.DriverModel_DriverAccelerationCurve), manager);
-			accData.DeleteSelf();
-
-			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
-			var stream = new MemoryStream();
-			var writer = new StreamWriter(stream);
-			writer.Write(nav.OuterXml);
-			writer.Flush();
-			stream.Seek(0, SeekOrigin.Begin);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
-
-			var driverDataProvider = inputDataProvider.DriverInputData;
-
-			var driverAcc = driverDataProvider.AccelerationCurve;
-			Assert.AreEqual("TUGraz.VectoCore.Resources.Declaration.VACC.Truck.vacc", driverAcc.Source);
-			Assert.AreEqual(5, driverAcc.Rows.Count);
-		}
-
-
-		[TestCase]
-		public void TestXMLPowertrainGenerationSingleFile()
-		{
-			var fileWriter = new FileOutputWriter("foo");
-			var sumWriter = new FileOutputWriter("vecto_vehicle-sample_xml");
-			var sumData = new SummaryDataContainer(sumWriter);
-			var jobContainer = new JobContainer(sumData);
-			var dataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
-
-			var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, dataProvider, fileWriter);
-			runsFactory.WriteModalResults = true;
-
-			jobContainer.AddRuns(runsFactory);
-
-			//Assert.AreEqual(6, jobContainer.Runs.Count);
-		}
-
-		[TestCase]
-		public void TestFullFeaturedXMEngineering_TorqueConverter()
-		{
-			var reader = File.OpenRead(EngineeringSampleFileFull);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
-
-			var tcDataProvider = inputDataProvider.TorqueConverterInputData;
-
-			Assert.AreEqual(1000, tcDataProvider.ReferenceRPM.AsRPM, 1e-6);
-			Assert.AreEqual(1.1, tcDataProvider.Inertia.Value());
-
-			Assert.AreEqual(3, tcDataProvider.TCData.Rows.Count);
-			Assert.AreEqual("300.00", tcDataProvider.TCData.Rows[0][2]);
-			Assert.AreEqual("0.90", tcDataProvider.TCData.Rows[2][1]);
-
-			Assert.IsNotNull(tcDataProvider.ShiftPolygon);
-			Assert.AreEqual("700", tcDataProvider.ShiftPolygon.Rows[0][1]);
-			Assert.AreEqual("800", tcDataProvider.ShiftPolygon.Rows[1][2]);
-
-			Assert.AreEqual(1700, tcDataProvider.MaxInputSpeed.AsRPM, 1e-6);
-		}
-
-		[TestCase]
-		public void TestFullFeaturedXMEngineering_AngleDrive()
-		{
-			var reader = File.OpenRead(EngineeringSampleFileFull);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
-
-			var angledriveDataProvider = inputDataProvider.AngledriveInputData;
-
-			Assert.AreEqual(1.2, angledriveDataProvider.Ratio);
-			Assert.AreEqual(6, angledriveDataProvider.LossMap.Rows.Count);
-			Assert.AreEqual("-10000.00", angledriveDataProvider.LossMap.Rows[0][1]);
-			Assert.AreEqual("100.00", angledriveDataProvider.LossMap.Rows[4][2]);
-		}
-
-		[TestCase]
-		public void TestFullFeaturedXMEngineering_DriverModel()
-		{
-			var reader = File.OpenRead(EngineeringSampleFileFull);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
-
-			var driverDataProvider = inputDataProvider.DriverInputData;
-
-			var lac = driverDataProvider.Lookahead;
-			Assert.IsTrue(lac.Enabled);
-			Assert.AreEqual(60, lac.MinSpeed.AsKmph, 1e-6);
-			Assert.AreEqual(2, lac.CoastingDecisionFactorTargetSpeedLookup.Rows.Count);
-			Assert.AreEqual("100", lac.CoastingDecisionFactorTargetSpeedLookup.Rows[1][0]);
-			Assert.AreEqual("2", lac.CoastingDecisionFactorTargetSpeedLookup.Rows[1][1]);
-
-			Assert.AreEqual(2, lac.CoastingDecisionFactorVelocityDropLookup.Rows.Count);
-			Assert.AreEqual("100", lac.CoastingDecisionFactorVelocityDropLookup.Rows[1][0]);
-			Assert.AreEqual("1", lac.CoastingDecisionFactorVelocityDropLookup.Rows[1][1]);
-
-			var overspeed = driverDataProvider.OverSpeedEcoRoll;
-			Assert.AreEqual(DriverMode.Overspeed, overspeed.Mode);
-			Assert.AreEqual(50, overspeed.MinSpeed.AsKmph, 1e-6);
-			Assert.AreEqual(5, overspeed.OverSpeed.AsKmph, 1e-6);
-			Assert.AreEqual(5, overspeed.UnderSpeed.AsKmph, 1e-6);
-
-			var driverAcc = driverDataProvider.AccelerationCurve;
-			Assert.AreEqual(2, driverAcc.Rows.Count);
-			Assert.AreEqual("100", driverAcc.Rows[1][0]);
-			Assert.AreEqual("1", driverAcc.Rows[1][1]);
-			Assert.AreEqual("-1", driverAcc.Rows[1][2]);
-
-			var declarationDriverDataProvider = (IDriverDeclarationInputData)inputDataProvider.DriverInputData;
-
-			Assert.AreEqual(DriverMode.Overspeed, declarationDriverDataProvider.OverSpeedEcoRoll.Mode);
-
-			var shiftStrategy = inputDataProvider.GearboxInputData;
-
-			Assert.AreEqual(0.133, shiftStrategy.UpshiftMinAcceleration.Value(), 1e-6);
-			Assert.AreEqual(12, shiftStrategy.DownshiftAfterUpshiftDelay.Value(), 1e-6);
-			Assert.AreEqual(13, shiftStrategy.UpshiftAfterDownshiftDelay.Value(), 1e-6);
-
-			Assert.AreEqual(0.213, shiftStrategy.TorqueReserve, 1e-6);
-			Assert.AreEqual(2.33, shiftStrategy.MinTimeBetweenGearshift.Value(), 1e-6);
-			Assert.AreEqual(2.11, shiftStrategy.StartSpeed.Value(), 1e-6);
-			Assert.AreEqual(0.211, shiftStrategy.StartAcceleration.Value(), 1e-6);
-			Assert.AreEqual(0.212, shiftStrategy.StartTorqueReserve, 1e-6);
-
-			Assert.AreEqual(0.811, shiftStrategy.PowershiftShiftTime.Value(), 1e-6);
-
-			var tcShiftStrategy = inputDataProvider.GearboxInputData.TorqueConverter;
-
-			Assert.AreEqual(0.134, tcShiftStrategy.CCUpshiftMinAcceleration.Value(), 1e-6);
-			Assert.AreEqual(0.133, tcShiftStrategy.CLUpshiftMinAcceleration.Value(), 1e-6);
-		}
-
-		[TestCase]
-		public void TestFullFeaturedXMEngineering_CrosswindCorrection()
-		{
-			var reader = File.OpenRead(EngineeringSampleFileFull);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
-
-			var airdragData = inputDataProvider.AirdragInputData;
-			Assert.AreEqual(CrossWindCorrectionMode.SpeedDependentCorrectionFactor, airdragData.CrossWindCorrectionMode);
-			Assert.AreEqual(2, airdragData.CrosswindCorrectionMap.Rows.Count);
-			Assert.AreEqual("100", airdragData.CrosswindCorrectionMap.Rows[1][0]);
-			Assert.AreEqual("1.8", airdragData.CrosswindCorrectionMap.Rows[1][1]);
-		}
-
-		[TestCase]
-		public void TestFullFeaturedXMEngineering_PTO()
-		{
-			var reader = File.OpenRead(EngineeringSampleFileFull);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
-
-			var ptoData = inputDataProvider.PTOTransmissionInputData;
-
-			Assert.AreEqual("only the drive shaft of the PTO - multi-disc clutch", ptoData.PTOTransmissionType);
-			Assert.AreEqual(2, ptoData.PTOLossMap.Rows.Count);
-			Assert.AreEqual("2800.00", ptoData.PTOLossMap.Rows[1][0]);
-			Assert.AreEqual("100.00", ptoData.PTOLossMap.Rows[1][1]);
-
-			Assert.AreEqual(4, ptoData.PTOCycle.Rows.Count);
-			Assert.AreEqual("3", ptoData.PTOCycle.Rows[3][0]);
-			Assert.AreEqual("1200.00", ptoData.PTOCycle.Rows[3][1]);
-			Assert.AreEqual("100.00", ptoData.PTOCycle.Rows[3][2]);
-		}
-
-
-		[TestCase]
-		public void TestXMLInputAngledriveGSingleFile()
-		{
-			var reader = File.OpenRead(EngineeringSampleFileFull);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
-			var angledriveInputData = inputDataProvider.AngledriveInputData;
-
-			Assert.AreEqual("Generic Angledrive", angledriveInputData.Model);
-
-			var lossMapData = angledriveInputData.LossMap;
-			Assert.AreEqual(1.2, angledriveInputData.Ratio);
-			Assert.AreEqual("0.00", lossMapData.Rows[0][0]);
-			Assert.AreEqual("-10000.00", lossMapData.Rows[0][1]);
-			Assert.AreEqual("100.00", lossMapData.Rows[0][2]);
-
-			var lossMap = TransmissionLossMapReader.Create(lossMapData, angledriveInputData.Ratio, "Angledrive");
-		}
-
-		[TestCase]
-		public void TestXMLInputAngledriveSingleFileEfficiency()
-		{
-			var reader = XmlReader.Create(EngineeringSampleFileFull);
-
-			var doc = new XmlDocument();
-			doc.Load(reader);
-			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-
-			var angledrivelosses = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Angledrive,
-				XMLNames.ComponentDataWrapper, XMLNames.AngleDrive_TorqueLossMap), manager);
-			//accData.DeleteSelf();
-			angledrivelosses.ReplaceSelf(
-				new XElement(XMLNames.AngleDrive_TorqueLossMap, new XElement(XMLNames.AngleDrive_Efficiency, "0.9124")).ToString());
-
-			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
-			var stream = new MemoryStream();
-			var writer = new StreamWriter(stream);
-			writer.Write(nav.OuterXml);
-			writer.Flush();
-			stream.Seek(0, SeekOrigin.Begin);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
-
-			var angledrive = inputDataProvider.AngledriveInputData;
-			Assert.AreEqual(0.9124, angledrive.Efficiency);
-		}
-
-		[TestCase]
-		public void TestXMLInputConstantAuxSingleFile()
-		{
-			var reader = XmlReader.Create(EngineeringSampleFileFull);
-
-			var doc = new XmlDocument();
-			doc.Load(reader);
-			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-
-			var aux = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Auxiliaries,
-				XMLNames.ComponentDataWrapper), manager);
-			//accData.DeleteSelf();
-			//angledrivelosses.ReplaceSelf(new XElement(XMLNames.AngleDrive_Efficiency, "0.9124").ToString());
-			aux.InnerXml =
-				new XElement(XMLNames.Auxiliaries_Auxiliary, new XAttribute(XMLNames.Auxiliaries_Auxiliary_ID_Attr, "const"),
-					new XElement(XMLNames.Auxiliaries_Auxiliary_ConstantAuxLoad, "5000")).ToString();
-
-			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
-			var stream = new MemoryStream();
-			var writer = new StreamWriter(stream);
-			writer.Write(nav.OuterXml);
-			writer.Flush();
-			stream.Seek(0, SeekOrigin.Begin);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
-
-			var auxInput = inputDataProvider.AuxiliaryInputData().Auxiliaries;
-
-			Assert.AreEqual(1, auxInput.Count);
-			Assert.AreEqual(AuxiliaryDemandType.Constant, auxInput[0].AuxiliaryType);
-			Assert.AreEqual(5000, auxInput[0].ConstantPowerDemand.Value(), 1e-6);
-		}
-
-		[TestCase]
-		public void TestRetarderTypeNone()
-		{
-			var reader = XmlReader.Create(EngineeringSampleFile);
-
-			var doc = new XmlDocument();
-			doc.Load(reader);
-			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-			var retarderType = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.Component_Vehicle,
-				XMLNames.Vehicle_RetarderType), manager);
-			retarderType.SetValue("None");
-
-			var retarder = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.Component_Vehicle,
-				XMLNames.Vehicle_Components,
-				XMLNames.Component_Retarder), manager);
-			retarder.DeleteSelf();
-
-			//modify cycle & remove AUX to make simulation valid
-			var cycle = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.VectoJob_MissionCycles), manager);
-			cycle.InnerXml =
-				new XElement(XMLNames.Missions_Cycle,
-					new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV),
-					new XAttribute(XMLNames.ExtResource_File_Attr, "LongHaul")).ToString();
-			var aux = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Auxiliaries,
-				XMLNames.ComponentDataWrapper), manager);
-			aux.InnerXml = "";
-
-			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
-			var stream = new MemoryStream();
-			var writer = new StreamWriter(stream);
-			writer.Write(nav.OuterXml);
-			writer.Flush();
-			stream.Seek(0, SeekOrigin.Begin);
-
-			var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
-
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputDataProvider, new FileOutputWriter("dummy"));
-			var jobContainer = new JobContainer(null);
-			jobContainer.AddRuns(factory);
-			jobContainer.Execute();
-		}
-
-		[TestCase]
-		public void TestXMLInputInvalidXML()
-		{
-			var reader = XmlReader.Create(EngineeringSampleFileFull);
-
-			var doc = new XmlDocument();
-			doc.Load(reader);
-			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-
-			var engine = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Engine), manager);
-			//accData.DeleteSelf();
-			engine.DeleteSelf();
-
-			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
-			var stream = new MemoryStream();
-			var writer = new StreamWriter(stream);
-			writer.Write(nav.OuterXml);
-			writer.Flush();
-			stream.Seek(0, SeekOrigin.Begin);
-
-			AssertHelper.Exception<VectoException>(
-				() => { var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); });
-		}
-
-
-		[TestCase]
-		public void TestXMLInputInvalidCycle()
-		{
-			var reader = XmlReader.Create(EngineeringSampleFileFull);
-
-			var doc = new XmlDocument();
-			doc.Load(reader);
-			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-
-			var cycles = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.VectoJob_MissionCycles), manager);
-			//accData.DeleteSelf();
-			cycles.InnerXml =
-				new XElement(XMLNames.Missions_Cycle,
-					new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV),
-					new XAttribute(XMLNames.ExtResource_File_Attr, "invalid_cycle.vdri")).ToString();
-
-			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
-			var stream = new MemoryStream();
-			var writer = new StreamWriter(stream);
-			writer.Write(nav.OuterXml);
-			writer.Flush();
-			stream.Seek(0, SeekOrigin.Begin);
-
-			AssertHelper.Exception<VectoException>(
-				() => {
-					var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
-					var cyclesList = inputDataProvider.JobInputData().Cycles;
-				});
-		}
-
-		[TestCase]
-		public void TestXMLInputInvalidDriverAcceleration()
-		{
-			var reader = XmlReader.Create(EngineeringSampleFileFull);
-
-			var doc = new XmlDocument();
-			doc.Load(reader);
-			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-
-			var driverAcceleration = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.Component_DriverModel, XMLNames.DriverModel_DriverAccelerationCurve), manager);
-			//accData.DeleteSelf();
-			driverAcceleration.InnerXml =
-				new XElement(XMLNames.ExternalResource,
-					new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV),
-					new XAttribute(XMLNames.ExtResource_File_Attr, "invalid_acceleration.vacc")).ToString();
-
-			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
-			var stream = new MemoryStream();
-			var writer = new StreamWriter(stream);
-			writer.Write(nav.OuterXml);
-			writer.Flush();
-			stream.Seek(0, SeekOrigin.Begin);
-
-			AssertHelper.Exception<VectoException>(
-				() => {
-					var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
-					var cyclesList = inputDataProvider.DriverInputData.AccelerationCurve;
-				});
-		}
-
-		[TestCase]
-		public void TestXMLInputExtResourceMissingTag()
-		{
-			var reader = XmlReader.Create(EngineeringSampleFileFull);
-
-			var doc = new XmlDocument();
-			doc.Load(reader);
-			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-
-			var axlegearLossMap = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Axlegear,
-				XMLNames.ComponentDataWrapper, XMLNames.Axlegear_TorqueLossMap), manager);
-			//accData.DeleteSelf();
-			axlegearLossMap.InnerXml = "";
-			//InnerXml =
-			//new XElement(XMLNames.ExternalResource,
-			//	new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV),
-			//	new XAttribute(XMLNames.ExtResource_File_Attr, "invalid_acceleration.vacc")).ToString();
-
-			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
-			var stream = new MemoryStream();
-			var writer = new StreamWriter(stream);
-			writer.Write(nav.OuterXml);
-			writer.Flush();
-			stream.Seek(0, SeekOrigin.Begin);
-
-			AssertHelper.Exception<VectoException>(
-				() => {
-					var inputDataProvider = new XMLEngineeringInputDataProvider(stream, false);
-					var lossmap = inputDataProvider.AxleGearInputData.LossMap;
-				}, "Failed to read TorqueLossMap resource");
-		}
-	}
-}
\ No newline at end of file
+namespace TUGraz.VectoCore.Tests.XML
+{
+	[TestFixture]
+	public class XMLEngineeringInputSingleTest
+	{
+		public const string EngineeringSampleFile = "TestData/XML/XMLReaderEngineering/engineering_job-sample.xml";
+
+		public const string EngineeringSampleFileFull = "TestData/XML/XMLReaderEngineering/engineering_job-sample_FULL.xml";
+
+		[OneTimeSetUp]
+		public void RunBeforeAnyTests()
+		{
+			Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
+		}
+
+		[TestCase]
+		public void TestXMLInputEngSingleFile()
+		{
+			var reader = File.OpenRead(EngineeringSampleFile);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+
+			var engineDataProvider = inputDataProvider.JobInputData.Vehicle.EngineInputData;
+
+			Assert.IsFalse(engineDataProvider.SavedInDeclarationMode);
+
+			Assert.AreEqual("Generic 40t Long Haul Truck Engine", engineDataProvider.Model);
+			Assert.AreEqual(0.012730, engineDataProvider.Displacement.Value());
+			Assert.AreEqual(0.77, engineDataProvider.Inertia.Value());
+
+			AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCMotorway; });
+			AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCRural; });
+			AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCUrban; });
+
+			var fcMapTable = engineDataProvider.FuelConsumptionMap;
+			Assert.AreEqual(112, fcMapTable.Rows.Count);
+			Assert.AreEqual("engine speed", fcMapTable.Columns[0].Caption);
+			Assert.AreEqual("torque", fcMapTable.Columns[1].Caption);
+			Assert.AreEqual("fuel consumption", fcMapTable.Columns[2].Caption);
+
+			Assert.AreEqual("560.00", fcMapTable.Rows[0][0]);
+			var fcMap = FuelConsumptionMapReader.Create(fcMapTable);
+			Assert.AreEqual(1256.SI().Gramm.Per.Hour.ConvertTo().Kilo.Gramm.Per.Second.Value(),
+				fcMap.GetFuelConsumption(0.SI<NewtonMeter>(), 560.RPMtoRad()).Value.Value());
+
+			var fldTable = engineDataProvider.FullLoadCurve;
+			Assert.AreEqual(10, fldTable.Rows.Count);
+			Assert.AreEqual("engine speed", fldTable.Columns[0].Caption);
+			Assert.AreEqual("full load torque", fldTable.Columns[1].Caption);
+			Assert.AreEqual("motoring torque", fldTable.Columns[2].Caption);
+			var fldMap = FullLoadCurveReader.Create(fldTable, true);
+		}
+
+		[TestCase]
+		public void TestXMLInputGbxSingleFile()
+		{
+			var reader = File.OpenRead(EngineeringSampleFile);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var gearboxDataProvider = inputDataProvider.JobInputData.Vehicle.GearboxInputData;
+
+			Assert.AreEqual("Generic 40t Long Haul Truck Gearbox", gearboxDataProvider.Model);
+			Assert.AreEqual(GearboxType.AMT, gearboxDataProvider.Type);
+			var gears = gearboxDataProvider.Gears;
+			Assert.AreEqual(12, gears.Count);
+
+			Assert.AreEqual(1, gears.First().Gear);
+			Assert.AreEqual(14.93, gears.First().Ratio);
+			Assert.AreEqual("0.00", gears.First().LossMap.Rows[0][0]);
+			Assert.AreEqual("-350.00", gears.First().LossMap.Rows[0][1]);
+			Assert.AreEqual("12.06", gears.First().LossMap.Rows[0][2]);
+
+			var lossMap = TransmissionLossMapReader.Create(gears.First().LossMap, gears.First().Ratio,
+				gears.First().Gear.ToString());
+
+			//Assert.AreEqual("560", gears.First().FullLoadCurve.Rows[0][0]);
+			//Assert.AreEqual("2500", gears.First().FullLoadCurve.Rows[0][1]);
+
+			//var fldMap = FullLoadCurveReader.Create(gears.First().FullLoadCurve, true);
+		}
+
+
+		[TestCase]
+		public void TestXMLInputAxlGSingleFile()
+		{
+			var reader = File.OpenRead(EngineeringSampleFile);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var axlegearDataProvider = inputDataProvider.JobInputData.Vehicle.AxleGearInputData;
+
+			Assert.AreEqual("Generic 40t Long Haul Truck AxleGear", axlegearDataProvider.Model);
+
+			var lossMapData = axlegearDataProvider.LossMap;
+			Assert.AreEqual(2.59, axlegearDataProvider.Ratio);
+			Assert.AreEqual("0.00", lossMapData.Rows[0][0]);
+			Assert.AreEqual("-5000.00", lossMapData.Rows[0][1]);
+			Assert.AreEqual("115.00", lossMapData.Rows[0][2]);
+
+			var lossMap = TransmissionLossMapReader.Create(lossMapData, axlegearDataProvider.Ratio, "AxleGear");
+		}
+
+		[TestCase]
+		public void TestXMLInputAxlGSingleFileEfficiency()
+		{
+			var reader = XmlReader.Create(EngineeringSampleFile);
+
+			var doc = new XmlDocument();
+			doc.Load(reader);
+			var nav = doc.CreateNavigator();
+			var manager = new XmlNamespaceManager(nav.NameTable);
+			var helper = new XPathHelper(ExecutionMode.Engineering);
+			helper.AddNamespaces(manager);
+
+
+			var axleglosses = nav.SelectSingleNode(helper.QueryAbs(
+				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Axlegear,
+				XMLNames.ComponentDataWrapper, XMLNames.Axlegear_TorqueLossMap), manager);
+			//accData.DeleteSelf();
+			axleglosses.ReplaceSelf(
+				new XElement(XMLNames.Axlegear_TorqueLossMap, new XElement(XMLNames.Axlegear_Efficiency, "0.9123")).ToString());
+
+			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
+			var stream = new MemoryStream();
+			var writer = new StreamWriter(stream);
+			writer.Write(nav.OuterXml);
+			writer.Flush();
+			stream.Seek(0, SeekOrigin.Begin);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
+
+			var axleGear = inputDataProvider.JobInputData.Vehicle.AxleGearInputData;
+			Assert.AreEqual(0.9123, axleGear.Efficiency);
+		}
+
+		[TestCase]
+		public void TestXMLInputRetarderSingleFile()
+		{
+			var reader = File.OpenRead(EngineeringSampleFile);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var retarderDataProvider = inputDataProvider.JobInputData.Vehicle.RetarderInputData;
+
+			Assert.AreEqual("Generic Retarder", retarderDataProvider.Model);
+
+			var lossMapData = retarderDataProvider.LossMap;
+
+			Assert.AreEqual(RetarderType.TransmissionOutputRetarder, retarderDataProvider.Type);
+
+			Assert.AreEqual("0.00", lossMapData.Rows[0][0]);
+			Assert.AreEqual("10.00", lossMapData.Rows[0][1]);
+
+			var lossMap = RetarderLossMapReader.Create(lossMapData);
+		}
+
+		[TestCase]
+		public void TestXMLInputAxleWheelsSingleFile()
+		{
+			var reader = File.OpenRead(EngineeringSampleFile);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var vehicleDataProvider = inputDataProvider.VehicleInputData;
+
+			var axles = vehicleDataProvider.Axles;
+
+			Assert.AreEqual("315/70 R22.5", axles[0].Wheels);
+			Assert.AreEqual(0.0055, axles[0].RollResistanceCoefficient);
+			Assert.AreEqual(31300, axles[0].TyreTestLoad.Value());
+
+			Assert.AreEqual("315/70 R22.5", axles[1].Wheels);
+			Assert.AreEqual(0.0063, axles[1].RollResistanceCoefficient);
+			Assert.AreEqual(31300, axles[1].TyreTestLoad.Value());
+
+			//AssertHelper.Exception<VectoException>(() => { var tmp = vehicleDataProvider.Rim; });
+			Assert.AreEqual(0.488822, vehicleDataProvider.DynamicTyreRadius.Value());
+		}
+
+		[TestCase]
+		public void TestXMLInputAxleWheelsDuplicates()
+		{
+			var reader = XmlReader.Create(EngineeringSampleFile);
+
+			var doc = new XmlDocument();
+			doc.Load(reader);
+			var nav = doc.CreateNavigator();
+			var manager = new XmlNamespaceManager(nav.NameTable);
+			var helper = new XPathHelper(ExecutionMode.Engineering);
+			helper.AddNamespaces(manager);
+
+			var firstAxle = nav.SelectSingleNode(helper.QueryAbs(
+				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+				XMLNames.Component_Vehicle,
+				XMLNames.Vehicle_Components,
+				XMLNames.Component_AxleWheels,
+				XMLNames.ComponentDataWrapper,
+				XMLNames.AxleWheels_Axles,
+				helper.QueryConstraint(XMLNames.AxleWheels_Axles_Axle, "1", null, string.Empty)
+				), manager);
+			firstAxle.MoveToAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, string.Empty);
+			firstAxle.SetTypedValue(2);
+
+
+			var stream = new MemoryStream();
+			var writer = new StreamWriter(stream);
+			writer.Write(nav.OuterXml);
+			writer.Flush();
+			stream.Seek(0, SeekOrigin.Begin);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
+
+			var vehicleDataProvider = inputDataProvider.VehicleInputData;
+
+			AssertHelper.Exception<VectoException>(() => { var axles = vehicleDataProvider.Axles; });
+		}
+
+		[TestCase]
+		public void TestXMLInputAxleWheelsAxleNumTooLow()
+		{
+			var reader = XmlReader.Create(EngineeringSampleFile);
+
+			var doc = new XmlDocument();
+			doc.Load(reader);
+			var nav = doc.CreateNavigator();
+			var manager = new XmlNamespaceManager(nav.NameTable);
+			var helper = new XPathHelper(ExecutionMode.Engineering);
+			helper.AddNamespaces(manager);
+
+			var firstAxle = nav.SelectSingleNode(helper.QueryAbs(
+				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+				XMLNames.Component_Vehicle,
+				XMLNames.Vehicle_Components,
+				XMLNames.Component_AxleWheels,
+				XMLNames.ComponentDataWrapper,
+				XMLNames.AxleWheels_Axles,
+				helper.QueryConstraint(XMLNames.AxleWheels_Axles_Axle, "1", null, string.Empty)
+				), manager);
+			firstAxle.MoveToAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, string.Empty);
+			firstAxle.SetTypedValue(0);
+
+			var stream = new MemoryStream();
+			var writer = new StreamWriter(stream);
+			writer.Write(nav.OuterXml);
+			writer.Flush();
+			stream.Seek(0, SeekOrigin.Begin);
+
+			AssertHelper.Exception<VectoException>(
+				() => {
+					var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
+					var axles = inputDataProvider.VehicleInputData.Axles;
+				});
+		}
+
+		[TestCase]
+		public void TestXMLInputAxleWheelsAxleNumTooHigh()
+		{
+			var reader = XmlReader.Create(EngineeringSampleFile);
+
+			var doc = new XmlDocument();
+			doc.Load(reader);
+			var nav = doc.CreateNavigator();
+			var manager = new XmlNamespaceManager(nav.NameTable);
+			var helper = new XPathHelper(ExecutionMode.Engineering);
+			helper.AddNamespaces(manager);
+
+			var firstAxle = nav.SelectSingleNode(helper.QueryAbs(
+				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+				XMLNames.Component_Vehicle,
+				XMLNames.Vehicle_Components,
+				XMLNames.Component_AxleWheels,
+				XMLNames.ComponentDataWrapper,
+				XMLNames.AxleWheels_Axles,
+				helper.QueryConstraint(XMLNames.AxleWheels_Axles_Axle, "1", null, string.Empty)
+				), manager);
+			firstAxle.MoveToAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, string.Empty);
+			firstAxle.SetTypedValue(3);
+
+
+			var stream = new MemoryStream();
+			var writer = new StreamWriter(stream);
+			writer.Write(nav.OuterXml);
+			writer.Flush();
+			stream.Seek(0, SeekOrigin.Begin);
+
+			AssertHelper.Exception<VectoException>(
+				() => {
+					var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
+					var axles = inputDataProvider.VehicleInputData.Axles;
+				});
+		}
+
+		[TestCase]
+		public void TestXMLInputAuxiliariesSingleFile()
+		{
+			var reader = File.OpenRead(EngineeringSampleFile);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var auxDataProvider = inputDataProvider.JobInputData.Vehicle.AuxiliaryInputData();
+
+			var aux = auxDataProvider.Auxiliaries;
+			var aux1 = aux[0];
+
+			Assert.AreEqual("ES", aux1.ID);
+
+			Assert.AreEqual(70, aux1.DemandMap.Rows[0].ParseDouble(AuxiliaryDataReader.Fields.MechPower));
+			Assert.AreEqual(640, aux1.DemandMap.Rows[2].ParseDouble(AuxiliaryDataReader.Fields.SupplyPower));
+
+			var aux2 = aux[1];
+
+			Assert.AreEqual("FAN", aux2.ID);
+		}
+
+		[TestCase]
+		public void TestXMLInputADASSingleFile()
+		{
+			var reader = File.OpenRead(EngineeringSampleFile);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+
+			var adas = inputDataProvider.DriverInputData;
+
+			Assert.AreEqual(DriverMode.Overspeed, adas.OverSpeedEcoRoll.Mode);
+		}
+
+		[TestCase]
+		public void TestVehicleInputSingleFile()
+		{
+			var reader = File.OpenRead(EngineeringSampleFile);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+
+			var vehicleDataProvider = inputDataProvider.VehicleInputData;
+
+			Assert.AreEqual(VehicleCategory.Tractor, vehicleDataProvider.VehicleCategory);
+			Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleDataProvider.AxleConfiguration);
+
+			Assert.AreEqual(7100.0, vehicleDataProvider.CurbMassChassis.Value());
+			Assert.AreEqual(40000.0, vehicleDataProvider.GrossVehicleMassRating.Value());
+			Assert.AreEqual(6.29, inputDataProvider.JobInputData.Vehicle.AirdragInputData.AirDragArea.Value());
+
+			Assert.AreEqual(1500, vehicleDataProvider.Loading.Value());
+			Assert.AreEqual(500, vehicleDataProvider.CurbMassExtra.Value());
+
+			Assert.AreEqual(1.0, inputDataProvider.JobInputData.Vehicle.RetarderInputData.Ratio);
+		}
+
+		[TestCase]
+		public void TestXMEngineering_DriverModel()
+		{
+			var reader = File.OpenRead(EngineeringSampleFile);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+
+			var driverDataProvider = inputDataProvider.DriverInputData;
+
+			var lac = driverDataProvider.Lookahead;
+			Assert.IsTrue(lac.Enabled);
+			Assert.AreEqual(DeclarationData.Driver.LookAhead.MinimumSpeed.AsKmph, lac.MinSpeed.AsKmph, 1e-6);
+
+			var overspeed = driverDataProvider.OverSpeedEcoRoll;
+			Assert.AreEqual(DriverMode.Overspeed, overspeed.Mode);
+			Assert.AreEqual(50, overspeed.MinSpeed.AsKmph, 1e-6);
+			Assert.AreEqual(5, overspeed.OverSpeed.AsKmph, 1e-6);
+			Assert.AreEqual(5, overspeed.UnderSpeed.AsKmph, 1e-6);
+
+			var driverAcc = driverDataProvider.AccelerationCurve;
+			Assert.AreEqual(2, driverAcc.Rows.Count);
+			Assert.AreEqual("100", driverAcc.Rows[1][0]);
+			Assert.AreEqual("1", driverAcc.Rows[1][1]);
+			Assert.AreEqual("-1", driverAcc.Rows[1][2]);
+
+			var declarationDriverDataProvider = (IDriverDeclarationInputData)inputDataProvider.DriverInputData;
+
+
+			var shiftStrategy = inputDataProvider.JobInputData.Vehicle.GearboxInputData;
+
+			Assert.AreEqual(DeclarationData.Gearbox.UpshiftMinAcceleration.Value(), shiftStrategy.UpshiftMinAcceleration.Value(),
+				1e-6);
+			Assert.AreEqual(DeclarationData.Gearbox.DownshiftAfterUpshiftDelay.Value(),
+				shiftStrategy.DownshiftAfterUpshiftDelay.Value(), 1e-6);
+			Assert.AreEqual(DeclarationData.Gearbox.UpshiftAfterDownshiftDelay.Value(),
+				shiftStrategy.UpshiftAfterDownshiftDelay.Value(), 1e-6);
+
+			Assert.AreEqual(DeclarationData.Gearbox.TorqueReserve, shiftStrategy.TorqueReserve, 1e-6);
+			Assert.AreEqual(DeclarationData.Gearbox.MinTimeBetweenGearshifts.Value(),
+				shiftStrategy.MinTimeBetweenGearshift.Value(), 1e-6);
+			Assert.AreEqual(DeclarationData.Gearbox.StartSpeed.Value(), shiftStrategy.StartSpeed.Value(), 1e-6);
+			Assert.AreEqual(DeclarationData.Gearbox.StartAcceleration.Value(), shiftStrategy.StartAcceleration.Value(), 1e-6);
+			Assert.AreEqual(DeclarationData.Gearbox.TorqueReserveStart, shiftStrategy.StartTorqueReserve, 1e-6);
+
+			AssertHelper.AreRelativeEqual(Constants.DefaultPowerShiftTime, shiftStrategy.PowershiftShiftTime);
+
+			var tcShiftStrategy = inputDataProvider.JobInputData.Vehicle.GearboxInputData.TorqueConverter;
+
+			AssertHelper.AreRelativeEqual(DeclarationData.TorqueConverter.CCUpshiftMinAcceleration,
+				tcShiftStrategy.CCUpshiftMinAcceleration);
+			AssertHelper.AreRelativeEqual(DeclarationData.TorqueConverter.CLUpshiftMinAcceleration,
+				tcShiftStrategy.CLUpshiftMinAcceleration);
+		}
+
+		[TestCase]
+		public void TestXMEngineering_DriverModelNoAcc()
+		{
+			var reader = XmlReader.Create(EngineeringSampleFile);
+
+			var doc = new XmlDocument();
+			doc.Load(reader);
+			var nav = doc.CreateNavigator();
+			var manager = new XmlNamespaceManager(nav.NameTable);
+			var helper = new XPathHelper(ExecutionMode.Engineering);
+			helper.AddNamespaces(manager);
+
+
+			var accData = nav.SelectSingleNode(helper.QueryAbs(
+				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+				XMLNames.Component_DriverModel,
+				XMLNames.DriverModel_DriverAccelerationCurve), manager);
+			accData.DeleteSelf();
+
+			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
+			var stream = new MemoryStream();
+			var writer = new StreamWriter(stream);
+			writer.Write(nav.OuterXml);
+			writer.Flush();
+			stream.Seek(0, SeekOrigin.Begin);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
+
+			var driverDataProvider = inputDataProvider.DriverInputData;
+
+			var driverAcc = driverDataProvider.AccelerationCurve;
+			Assert.AreEqual("TUGraz.VectoCore.Resources.Declaration.VACC.Truck.vacc", driverAcc.Source);
+			Assert.AreEqual(5, driverAcc.Rows.Count);
+		}
+
+
+		[TestCase]
+		public void TestXMLPowertrainGenerationSingleFile()
+		{
+			var fileWriter = new FileOutputWriter("foo");
+			var sumWriter = new FileOutputWriter("vecto_vehicle-sample_xml");
+			var sumData = new SummaryDataContainer(sumWriter);
+			var jobContainer = new JobContainer(sumData);
+			var dataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+
+			var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, dataProvider, fileWriter);
+			runsFactory.WriteModalResults = true;
+
+			jobContainer.AddRuns(runsFactory);
+
+			//Assert.AreEqual(6, jobContainer.Runs.Count);
+		}
+
+		[TestCase]
+		public void TestFullFeaturedXMEngineering_TorqueConverter()
+		{
+			var reader = File.OpenRead(EngineeringSampleFileFull);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+
+			var tcDataProvider = inputDataProvider.JobInputData.Vehicle.TorqueConverterInputData;
+
+			Assert.AreEqual(1000, tcDataProvider.ReferenceRPM.AsRPM, 1e-6);
+			Assert.AreEqual(1.1, tcDataProvider.Inertia.Value());
+
+			Assert.AreEqual(3, tcDataProvider.TCData.Rows.Count);
+			Assert.AreEqual("300.00", tcDataProvider.TCData.Rows[0][2]);
+			Assert.AreEqual("0.90", tcDataProvider.TCData.Rows[2][1]);
+
+			Assert.IsNotNull(tcDataProvider.ShiftPolygon);
+			Assert.AreEqual("700", tcDataProvider.ShiftPolygon.Rows[0][1]);
+			Assert.AreEqual("800", tcDataProvider.ShiftPolygon.Rows[1][2]);
+
+			Assert.AreEqual(1700, tcDataProvider.MaxInputSpeed.AsRPM, 1e-6);
+		}
+
+		[TestCase]
+		public void TestFullFeaturedXMEngineering_AngleDrive()
+		{
+			var reader = File.OpenRead(EngineeringSampleFileFull);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+
+			var angledriveDataProvider = inputDataProvider.JobInputData.Vehicle.AngledriveInputData;
+
+			Assert.AreEqual(1.2, angledriveDataProvider.Ratio);
+			Assert.AreEqual(6, angledriveDataProvider.LossMap.Rows.Count);
+			Assert.AreEqual("-10000.00", angledriveDataProvider.LossMap.Rows[0][1]);
+			Assert.AreEqual("100.00", angledriveDataProvider.LossMap.Rows[4][2]);
+		}
+
+		[TestCase]
+		public void TestFullFeaturedXMEngineering_DriverModel()
+		{
+			var reader = File.OpenRead(EngineeringSampleFileFull);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+
+			var driverDataProvider = inputDataProvider.DriverInputData;
+
+			var lac = driverDataProvider.Lookahead;
+			Assert.IsTrue(lac.Enabled);
+			Assert.AreEqual(60, lac.MinSpeed.AsKmph, 1e-6);
+			Assert.AreEqual(2, lac.CoastingDecisionFactorTargetSpeedLookup.Rows.Count);
+			Assert.AreEqual("100", lac.CoastingDecisionFactorTargetSpeedLookup.Rows[1][0]);
+			Assert.AreEqual("2", lac.CoastingDecisionFactorTargetSpeedLookup.Rows[1][1]);
+
+			Assert.AreEqual(2, lac.CoastingDecisionFactorVelocityDropLookup.Rows.Count);
+			Assert.AreEqual("100", lac.CoastingDecisionFactorVelocityDropLookup.Rows[1][0]);
+			Assert.AreEqual("1", lac.CoastingDecisionFactorVelocityDropLookup.Rows[1][1]);
+
+			var overspeed = driverDataProvider.OverSpeedEcoRoll;
+			Assert.AreEqual(DriverMode.Overspeed, overspeed.Mode);
+			Assert.AreEqual(50, overspeed.MinSpeed.AsKmph, 1e-6);
+			Assert.AreEqual(5, overspeed.OverSpeed.AsKmph, 1e-6);
+			Assert.AreEqual(5, overspeed.UnderSpeed.AsKmph, 1e-6);
+
+			var driverAcc = driverDataProvider.AccelerationCurve;
+			Assert.AreEqual(2, driverAcc.Rows.Count);
+			Assert.AreEqual("100", driverAcc.Rows[1][0]);
+			Assert.AreEqual("1", driverAcc.Rows[1][1]);
+			Assert.AreEqual("-1", driverAcc.Rows[1][2]);
+
+			var shiftStrategy = inputDataProvider.JobInputData.Vehicle.GearboxInputData;
+
+			Assert.AreEqual(0.133, shiftStrategy.UpshiftMinAcceleration.Value(), 1e-6);
+			Assert.AreEqual(12, shiftStrategy.DownshiftAfterUpshiftDelay.Value(), 1e-6);
+			Assert.AreEqual(13, shiftStrategy.UpshiftAfterDownshiftDelay.Value(), 1e-6);
+
+			Assert.AreEqual(0.213, shiftStrategy.TorqueReserve, 1e-6);
+			Assert.AreEqual(2.33, shiftStrategy.MinTimeBetweenGearshift.Value(), 1e-6);
+			Assert.AreEqual(2.11, shiftStrategy.StartSpeed.Value(), 1e-6);
+			Assert.AreEqual(0.211, shiftStrategy.StartAcceleration.Value(), 1e-6);
+			Assert.AreEqual(0.212, shiftStrategy.StartTorqueReserve, 1e-6);
+
+			Assert.AreEqual(0.811, shiftStrategy.PowershiftShiftTime.Value(), 1e-6);
+
+			var tcShiftStrategy = inputDataProvider.JobInputData.Vehicle.GearboxInputData.TorqueConverter;
+
+			Assert.AreEqual(0.134, tcShiftStrategy.CCUpshiftMinAcceleration.Value(), 1e-6);
+			Assert.AreEqual(0.133, tcShiftStrategy.CLUpshiftMinAcceleration.Value(), 1e-6);
+		}
+
+		[TestCase]
+		public void TestFullFeaturedXMEngineering_CrosswindCorrection()
+		{
+			var reader = File.OpenRead(EngineeringSampleFileFull);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+
+			var airdragData = inputDataProvider.JobInputData.Vehicle.AirdragInputData;
+			Assert.AreEqual(CrossWindCorrectionMode.SpeedDependentCorrectionFactor, airdragData.CrossWindCorrectionMode);
+			Assert.AreEqual(2, airdragData.CrosswindCorrectionMap.Rows.Count);
+			Assert.AreEqual("100", airdragData.CrosswindCorrectionMap.Rows[1][0]);
+			Assert.AreEqual("1.8", airdragData.CrosswindCorrectionMap.Rows[1][1]);
+		}
+
+		[TestCase]
+		public void TestFullFeaturedXMEngineering_PTO()
+		{
+			var reader = File.OpenRead(EngineeringSampleFileFull);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+
+			var ptoData = inputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData;
+
+			Assert.AreEqual("only the drive shaft of the PTO - multi-disc clutch", ptoData.PTOTransmissionType);
+			Assert.AreEqual(2, ptoData.PTOLossMap.Rows.Count);
+			Assert.AreEqual("2800.00", ptoData.PTOLossMap.Rows[1][0]);
+			Assert.AreEqual("100.00", ptoData.PTOLossMap.Rows[1][1]);
+
+			Assert.AreEqual(4, ptoData.PTOCycle.Rows.Count);
+			Assert.AreEqual("3", ptoData.PTOCycle.Rows[3][0]);
+			Assert.AreEqual("1200.00", ptoData.PTOCycle.Rows[3][1]);
+			Assert.AreEqual("100.00", ptoData.PTOCycle.Rows[3][2]);
+		}
+
+
+		[TestCase]
+		public void TestXMLInputAngledriveGSingleFile()
+		{
+			var reader = File.OpenRead(EngineeringSampleFileFull);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var angledriveInputData = inputDataProvider.JobInputData.Vehicle.AngledriveInputData;
+
+			Assert.AreEqual("Generic Angledrive", angledriveInputData.Model);
+
+			var lossMapData = angledriveInputData.LossMap;
+			Assert.AreEqual(1.2, angledriveInputData.Ratio);
+			Assert.AreEqual("0.00", lossMapData.Rows[0][0]);
+			Assert.AreEqual("-10000.00", lossMapData.Rows[0][1]);
+			Assert.AreEqual("100.00", lossMapData.Rows[0][2]);
+
+			var lossMap = TransmissionLossMapReader.Create(lossMapData, angledriveInputData.Ratio, "Angledrive");
+		}
+
+		[TestCase]
+		public void TestXMLInputAngledriveSingleFileEfficiency()
+		{
+			var reader = XmlReader.Create(EngineeringSampleFileFull);
+
+			var doc = new XmlDocument();
+			doc.Load(reader);
+			var nav = doc.CreateNavigator();
+			var manager = new XmlNamespaceManager(nav.NameTable);
+			var helper = new XPathHelper(ExecutionMode.Engineering);
+			helper.AddNamespaces(manager);
+
+
+			var angledrivelosses = nav.SelectSingleNode(helper.QueryAbs(
+				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Angledrive,
+				XMLNames.ComponentDataWrapper, XMLNames.AngleDrive_TorqueLossMap), manager);
+			//accData.DeleteSelf();
+			angledrivelosses.ReplaceSelf(
+				new XElement(XMLNames.AngleDrive_TorqueLossMap, new XElement(XMLNames.AngleDrive_Efficiency, "0.9124")).ToString());
+
+			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
+			var stream = new MemoryStream();
+			var writer = new StreamWriter(stream);
+			writer.Write(nav.OuterXml);
+			writer.Flush();
+			stream.Seek(0, SeekOrigin.Begin);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
+
+			var angledrive = inputDataProvider.JobInputData.Vehicle.AngledriveInputData;
+			Assert.AreEqual(0.9124, angledrive.Efficiency);
+		}
+
+		[TestCase]
+		public void TestXMLInputConstantAuxSingleFile()
+		{
+			var reader = XmlReader.Create(EngineeringSampleFileFull);
+
+			var doc = new XmlDocument();
+			doc.Load(reader);
+			var nav = doc.CreateNavigator();
+			var manager = new XmlNamespaceManager(nav.NameTable);
+			var helper = new XPathHelper(ExecutionMode.Engineering);
+			helper.AddNamespaces(manager);
+
+
+			var aux = nav.SelectSingleNode(helper.QueryAbs(
+				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Auxiliaries,
+				XMLNames.ComponentDataWrapper), manager);
+			//accData.DeleteSelf();
+			//angledrivelosses.ReplaceSelf(new XElement(XMLNames.AngleDrive_Efficiency, "0.9124").ToString());
+			aux.InnerXml =
+				new XElement(XMLNames.Auxiliaries_Auxiliary, new XAttribute(XMLNames.Auxiliaries_Auxiliary_ID_Attr, "const"),
+					new XElement(XMLNames.Auxiliaries_Auxiliary_ConstantAuxLoad, "5000")).ToString();
+
+			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
+			var stream = new MemoryStream();
+			var writer = new StreamWriter(stream);
+			writer.Write(nav.OuterXml);
+			writer.Flush();
+			stream.Seek(0, SeekOrigin.Begin);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
+
+			var auxInput = inputDataProvider.JobInputData.Vehicle.AuxiliaryInputData().Auxiliaries;
+
+			Assert.AreEqual(1, auxInput.Count);
+			Assert.AreEqual(AuxiliaryDemandType.Constant, auxInput[0].AuxiliaryType);
+			Assert.AreEqual(5000, auxInput[0].ConstantPowerDemand.Value(), 1e-6);
+		}
+
+		[TestCase]
+		public void TestRetarderTypeNone()
+		{
+			var reader = XmlReader.Create(EngineeringSampleFile);
+
+			var doc = new XmlDocument();
+			doc.Load(reader);
+			var nav = doc.CreateNavigator();
+			var manager = new XmlNamespaceManager(nav.NameTable);
+			var helper = new XPathHelper(ExecutionMode.Engineering);
+			helper.AddNamespaces(manager);
+
+			var retarderType = nav.SelectSingleNode(helper.QueryAbs(
+				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+				XMLNames.Component_Vehicle,
+				XMLNames.Vehicle_RetarderType), manager);
+			retarderType.SetValue("None");
+
+			var retarder = nav.SelectSingleNode(helper.QueryAbs(
+				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+				XMLNames.Component_Vehicle,
+				XMLNames.Vehicle_Components,
+				XMLNames.Component_Retarder), manager);
+			retarder.DeleteSelf();
+
+			//modify cycle & remove AUX to make simulation valid
+			var cycle = nav.SelectSingleNode(helper.QueryAbs(
+				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+				XMLNames.VectoJob_MissionCycles), manager);
+			cycle.InnerXml =
+				new XElement(XMLNames.Missions_Cycle,
+					new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV),
+					new XAttribute(XMLNames.ExtResource_File_Attr, "LongHaul")).ToString();
+			var aux = nav.SelectSingleNode(helper.QueryAbs(
+				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Auxiliaries,
+				XMLNames.ComponentDataWrapper), manager);
+			aux.InnerXml = "";
+
+			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
+			var stream = new MemoryStream();
+			var writer = new StreamWriter(stream);
+			writer.Write(nav.OuterXml);
+			writer.Flush();
+			stream.Seek(0, SeekOrigin.Begin);
+
+			var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
+
+			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputDataProvider, new FileOutputWriter("dummy"));
+			var jobContainer = new JobContainer(null);
+			jobContainer.AddRuns(factory);
+			jobContainer.Execute();
+		}
+
+		[TestCase]
+		public void TestXMLInputInvalidXML()
+		{
+			var reader = XmlReader.Create(EngineeringSampleFileFull);
+
+			var doc = new XmlDocument();
+			doc.Load(reader);
+			var nav = doc.CreateNavigator();
+			var manager = new XmlNamespaceManager(nav.NameTable);
+			var helper = new XPathHelper(ExecutionMode.Engineering);
+			helper.AddNamespaces(manager);
+
+
+			var engine = nav.SelectSingleNode(helper.QueryAbs(
+				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Engine), manager);
+			//accData.DeleteSelf();
+			engine.DeleteSelf();
+
+			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
+			var stream = new MemoryStream();
+			var writer = new StreamWriter(stream);
+			writer.Write(nav.OuterXml);
+			writer.Flush();
+			stream.Seek(0, SeekOrigin.Begin);
+
+			AssertHelper.Exception<VectoException>(
+				() => { var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); });
+		}
+
+
+		[TestCase]
+		public void TestXMLInputInvalidCycle()
+		{
+			var reader = XmlReader.Create(EngineeringSampleFileFull);
+
+			var doc = new XmlDocument();
+			doc.Load(reader);
+			var nav = doc.CreateNavigator();
+			var manager = new XmlNamespaceManager(nav.NameTable);
+			var helper = new XPathHelper(ExecutionMode.Engineering);
+			helper.AddNamespaces(manager);
+
+
+			var cycles = nav.SelectSingleNode(helper.QueryAbs(
+				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+				XMLNames.VectoJob_MissionCycles), manager);
+			//accData.DeleteSelf();
+			cycles.InnerXml =
+				new XElement(XMLNames.Missions_Cycle,
+					new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV),
+					new XAttribute(XMLNames.ExtResource_File_Attr, "invalid_cycle.vdri")).ToString();
+
+			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
+			var stream = new MemoryStream();
+			var writer = new StreamWriter(stream);
+			writer.Write(nav.OuterXml);
+			writer.Flush();
+			stream.Seek(0, SeekOrigin.Begin);
+
+			AssertHelper.Exception<VectoException>(
+				() => {
+					var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
+					var cyclesList = inputDataProvider.JobInputData.Cycles;
+				});
+		}
+
+		[TestCase]
+		public void TestXMLInputInvalidDriverAcceleration()
+		{
+			var reader = XmlReader.Create(EngineeringSampleFileFull);
+
+			var doc = new XmlDocument();
+			doc.Load(reader);
+			var nav = doc.CreateNavigator();
+			var manager = new XmlNamespaceManager(nav.NameTable);
+			var helper = new XPathHelper(ExecutionMode.Engineering);
+			helper.AddNamespaces(manager);
+
+
+			var driverAcceleration = nav.SelectSingleNode(helper.QueryAbs(
+				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+				XMLNames.Component_DriverModel, XMLNames.DriverModel_DriverAccelerationCurve), manager);
+			//accData.DeleteSelf();
+			driverAcceleration.InnerXml =
+				new XElement(XMLNames.ExternalResource,
+					new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV),
+					new XAttribute(XMLNames.ExtResource_File_Attr, "invalid_acceleration.vacc")).ToString();
+
+			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
+			var stream = new MemoryStream();
+			var writer = new StreamWriter(stream);
+			writer.Write(nav.OuterXml);
+			writer.Flush();
+			stream.Seek(0, SeekOrigin.Begin);
+
+			AssertHelper.Exception<VectoException>(
+				() => {
+					var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
+					var cyclesList = inputDataProvider.DriverInputData.AccelerationCurve;
+				});
+		}
+
+		[TestCase]
+		public void TestXMLInputExtResourceMissingTag()
+		{
+			var reader = XmlReader.Create(EngineeringSampleFileFull);
+
+			var doc = new XmlDocument();
+			doc.Load(reader);
+			var nav = doc.CreateNavigator();
+			var manager = new XmlNamespaceManager(nav.NameTable);
+			var helper = new XPathHelper(ExecutionMode.Engineering);
+			helper.AddNamespaces(manager);
+
+
+			var axlegearLossMap = nav.SelectSingleNode(helper.QueryAbs(
+				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Axlegear,
+				XMLNames.ComponentDataWrapper, XMLNames.Axlegear_TorqueLossMap), manager);
+			//accData.DeleteSelf();
+			axlegearLossMap.InnerXml = "";
+			//InnerXml =
+			//new XElement(XMLNames.ExternalResource,
+			//	new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV),
+			//	new XAttribute(XMLNames.ExtResource_File_Attr, "invalid_acceleration.vacc")).ToString();
+
+			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
+			var stream = new MemoryStream();
+			var writer = new StreamWriter(stream);
+			writer.Write(nav.OuterXml);
+			writer.Flush();
+			stream.Seek(0, SeekOrigin.Begin);
+
+			AssertHelper.Exception<VectoException>(
+				() => {
+					var inputDataProvider = new XMLEngineeringInputDataProvider(stream, false);
+					var lossmap = inputDataProvider.JobInputData.Vehicle.AxleGearInputData.LossMap;
+				}, "Failed to read TorqueLossMap resource");
+		}
+	}
+}
diff --git a/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs b/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs
index 402bebd9a09aa76ef10abd7cc18385d99a150113..cc55997cb1b769b5eeff7a3fc4f7d4333193df30 100644
--- a/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs
@@ -55,6 +55,12 @@ namespace TUGraz.VectoCore.Tests.XML
 			@"TestData\XML\XMLWriter\DeclarationJob\Class5_Tractor_4x2\Class5_Tractor_DECL-FULL.vecto";
 
 
+		[OneTimeSetUp]
+		public void RunBeforeAnyTests()
+		{
+			Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
+		}
+
 		[TestCase]
 		public void TestWriteEngineOnlySingleFile()
 		{
@@ -73,7 +79,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var xml = new XMLEngineeringInputDataProvider(outFile, true);
 
 			Assert.IsNotNull(xml);
-			Assert.AreEqual("175kW 6.8l Engine", xml.JobInputData().JobName);
+			Assert.AreEqual("175kW 6.8l Engine", xml.JobInputData.JobName);
 		}
 
 		[TestCase]
@@ -89,7 +95,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var xml = new XMLEngineeringInputDataProvider(outFile, true);
 
 			Assert.IsNotNull(xml);
-			Assert.AreEqual("VEH-N.A.", xml.JobInputData().JobName);
+			Assert.AreEqual("VEH-N.A.", xml.JobInputData.JobName);
 		}
 
 		[TestCase]
@@ -105,7 +111,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var xml = new XMLEngineeringInputDataProvider(outFile, true);
 
 			Assert.IsNotNull(xml);
-			Assert.AreEqual("VEH-N.A.", xml.JobInputData().JobName);
+			Assert.AreEqual("VEH-N.A.", xml.JobInputData.JobName);
 		}
 
 		[TestCase]
@@ -123,7 +129,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var xml = new XMLEngineeringInputDataProvider(Path.Combine(outDir, outFile), true);
 
 			Assert.IsNotNull(xml);
-			Assert.AreEqual("VEH-N.A.", xml.JobInputData().JobName);
+			Assert.AreEqual("VEH-N.A.", xml.JobInputData.JobName);
 		}
 
 		[TestCase]
@@ -161,7 +167,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var xml = new XMLDeclarationInputDataProvider(reader, true);
 
 			Assert.IsNotNull(xml);
-			Assert.AreEqual("VEH-N.A.", xml.JobInputData().JobName);
+			Assert.AreEqual("VEH-N.A.", xml.JobInputData.JobName);
 		}
 
 		[TestCase]
@@ -183,7 +189,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var xml = new XMLDeclarationInputDataProvider(reader, true);
 
 			Assert.IsNotNull(xml);
-			Assert.AreEqual("VEH-N.A.", xml.JobInputData().JobName);
+			Assert.AreEqual("VEH-N.A.", xml.JobInputData.JobName);
 		}
 	}
-}
\ No newline at end of file
+}