From 87b6b8e0fb5ccfb24fbbdf8fc1f402f277a84e2b Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Mon, 19 Sep 2016 10:55:03 +0200
Subject: [PATCH] removed class csvfile (VECTO Project), replaced by VectoCSV;
 added validation to engine, added engineering WHTC

---
 VECTO/GUI/EngineForm.Designer.vb | 451 +++++++++++++++++--------------
 VECTO/GUI/EngineForm.vb          |  19 +-
 VECTO/Input Files/Engine.vb      | 181 ++++++++++++-
 VECTO/Input Files/Gearbox.vb     |   6 -
 VECTO/VECTO.vbproj               |   1 -
 5 files changed, 433 insertions(+), 225 deletions(-)

diff --git a/VECTO/GUI/EngineForm.Designer.vb b/VECTO/GUI/EngineForm.Designer.vb
index c8374d87ab..663766c1c3 100644
--- a/VECTO/GUI/EngineForm.Designer.vb
+++ b/VECTO/GUI/EngineForm.Designer.vb
@@ -35,220 +35,226 @@ Partial Class EngineForm
 	'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
 	<DebuggerStepThrough()> _
 	Private Sub InitializeComponent()
-		Me.components = New Container()
-		Dim resources As ComponentResourceManager = New ComponentResourceManager(GetType(EngineForm))
-		Me.TbNleerl = New TextBox()
-		Me.Label11 = New Label()
-		Me.TbInertia = New TextBox()
-		Me.Label41 = New Label()
-		Me.Label40 = New Label()
-		Me.Label5 = New Label()
-		Me.ButCancel = New Button()
-		Me.ButOK = New Button()
-		Me.ToolStrip1 = New ToolStrip()
-		Me.ToolStripBtNew = New ToolStripButton()
-		Me.ToolStripBtOpen = New ToolStripButton()
-		Me.ToolStripBtSave = New ToolStripButton()
-		Me.ToolStripBtSaveAs = New ToolStripButton()
-		Me.ToolStripSeparator3 = New ToolStripSeparator()
-		Me.ToolStripBtSendTo = New ToolStripButton()
-		Me.ToolStripSeparator1 = New ToolStripSeparator()
-		Me.ToolStripButton1 = New ToolStripButton()
-		Me.StatusStrip1 = New StatusStrip()
-		Me.LbStatus = New ToolStripStatusLabel()
-		Me.Label1 = New Label()
-		Me.Label2 = New Label()
-		Me.TbDispl = New TextBox()
-		Me.TbName = New TextBox()
-		Me.Label3 = New Label()
-		Me.TbMAP = New TextBox()
-		Me.Label6 = New Label()
-		Me.BtMAP = New Button()
-		Me.PictureBox1 = New PictureBox()
-		Me.CmOpenFile = New ContextMenuStrip(Me.components)
-		Me.OpenWithToolStripMenuItem = New ToolStripMenuItem()
-		Me.ShowInFolderToolStripMenuItem = New ToolStripMenuItem()
-		Me.BtMAPopen = New Button()
-		Me.PnInertia = New Panel()
-		Me.GrWHTC = New GroupBox()
-		Me.BtWHTCimport = New Button()
-		Me.Label13 = New Label()
-		Me.TbWHTCmw = New TextBox()
-		Me.TbWHTCrural = New TextBox()
-		Me.TbWHTCurban = New TextBox()
-		Me.Label8 = New Label()
-		Me.Label7 = New Label()
-		Me.Label4 = New Label()
-		Me.PicBox = New PictureBox()
-		Me.TbFLD = New TextBox()
-		Me.Label14 = New Label()
-		Me.BtFLD = New Button()
-		Me.BtFLDopen = New Button()
+		Me.components = New System.ComponentModel.Container()
+		Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(EngineForm))
+		Me.TbNleerl = New System.Windows.Forms.TextBox()
+		Me.Label11 = New System.Windows.Forms.Label()
+		Me.TbInertia = New System.Windows.Forms.TextBox()
+		Me.Label41 = New System.Windows.Forms.Label()
+		Me.Label40 = New System.Windows.Forms.Label()
+		Me.Label5 = New System.Windows.Forms.Label()
+		Me.ButCancel = New System.Windows.Forms.Button()
+		Me.ButOK = New System.Windows.Forms.Button()
+		Me.ToolStrip1 = New System.Windows.Forms.ToolStrip()
+		Me.ToolStripBtNew = New System.Windows.Forms.ToolStripButton()
+		Me.ToolStripBtOpen = New System.Windows.Forms.ToolStripButton()
+		Me.ToolStripBtSave = New System.Windows.Forms.ToolStripButton()
+		Me.ToolStripBtSaveAs = New System.Windows.Forms.ToolStripButton()
+		Me.ToolStripSeparator3 = New System.Windows.Forms.ToolStripSeparator()
+		Me.ToolStripBtSendTo = New System.Windows.Forms.ToolStripButton()
+		Me.ToolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator()
+		Me.ToolStripButton1 = New System.Windows.Forms.ToolStripButton()
+		Me.StatusStrip1 = New System.Windows.Forms.StatusStrip()
+		Me.LbStatus = New System.Windows.Forms.ToolStripStatusLabel()
+		Me.Label1 = New System.Windows.Forms.Label()
+		Me.Label2 = New System.Windows.Forms.Label()
+		Me.TbDispl = New System.Windows.Forms.TextBox()
+		Me.TbName = New System.Windows.Forms.TextBox()
+		Me.Label3 = New System.Windows.Forms.Label()
+		Me.TbMAP = New System.Windows.Forms.TextBox()
+		Me.Label6 = New System.Windows.Forms.Label()
+		Me.BtMAP = New System.Windows.Forms.Button()
+		Me.PictureBox1 = New System.Windows.Forms.PictureBox()
+		Me.CmOpenFile = New System.Windows.Forms.ContextMenuStrip(Me.components)
+		Me.OpenWithToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
+		Me.ShowInFolderToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
+		Me.BtMAPopen = New System.Windows.Forms.Button()
+		Me.PnInertia = New System.Windows.Forms.Panel()
+		Me.GrWHTC = New System.Windows.Forms.GroupBox()
+		Me.PnWhtcDeclaration = New System.Windows.Forms.Panel()
+		Me.BtWHTCimport = New System.Windows.Forms.Button()
+		Me.Label4 = New System.Windows.Forms.Label()
+		Me.Label7 = New System.Windows.Forms.Label()
+		Me.Label13 = New System.Windows.Forms.Label()
+		Me.Label8 = New System.Windows.Forms.Label()
+		Me.TbWHTCmw = New System.Windows.Forms.TextBox()
+		Me.TbWHTCurban = New System.Windows.Forms.TextBox()
+		Me.TbWHTCrural = New System.Windows.Forms.TextBox()
+		Me.PnWhtcEngineering = New System.Windows.Forms.Panel()
+		Me.TbWHTCEngineering = New System.Windows.Forms.TextBox()
+		Me.lblWhtcEngineering = New System.Windows.Forms.Label()
+		Me.PicBox = New System.Windows.Forms.PictureBox()
+		Me.TbFLD = New System.Windows.Forms.TextBox()
+		Me.Label14 = New System.Windows.Forms.Label()
+		Me.BtFLD = New System.Windows.Forms.Button()
+		Me.BtFLDopen = New System.Windows.Forms.Button()
 		Me.ToolStrip1.SuspendLayout()
 		Me.StatusStrip1.SuspendLayout()
-		CType(Me.PictureBox1, ISupportInitialize).BeginInit()
+		CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit()
 		Me.CmOpenFile.SuspendLayout()
 		Me.PnInertia.SuspendLayout()
 		Me.GrWHTC.SuspendLayout()
-		CType(Me.PicBox, ISupportInitialize).BeginInit()
+		Me.PnWhtcDeclaration.SuspendLayout()
+		Me.PnWhtcEngineering.SuspendLayout()
+		CType(Me.PicBox, System.ComponentModel.ISupportInitialize).BeginInit()
 		Me.SuspendLayout()
 		'
 		'TbNleerl
 		'
-		Me.TbNleerl.Location = New Point(123, 108)
+		Me.TbNleerl.Location = New System.Drawing.Point(123, 108)
 		Me.TbNleerl.Name = "TbNleerl"
-		Me.TbNleerl.Size = New Size(57, 20)
+		Me.TbNleerl.Size = New System.Drawing.Size(57, 20)
 		Me.TbNleerl.TabIndex = 1
 		'
 		'Label11
 		'
 		Me.Label11.AutoSize = True
-		Me.Label11.Location = New Point(15, 111)
+		Me.Label11.Location = New System.Drawing.Point(15, 111)
 		Me.Label11.Name = "Label11"
-		Me.Label11.Size = New Size(102, 13)
+		Me.Label11.Size = New System.Drawing.Size(102, 13)
 		Me.Label11.TabIndex = 15
 		Me.Label11.Text = "Idling Engine Speed"
 		'
 		'TbInertia
 		'
-		Me.TbInertia.Location = New Point(120, 2)
+		Me.TbInertia.Location = New System.Drawing.Point(120, 2)
 		Me.TbInertia.Name = "TbInertia"
-		Me.TbInertia.Size = New Size(57, 20)
+		Me.TbInertia.Size = New System.Drawing.Size(57, 20)
 		Me.TbInertia.TabIndex = 3
 		'
 		'Label41
 		'
 		Me.Label41.AutoSize = True
-		Me.Label41.Location = New Point(183, 5)
+		Me.Label41.Location = New System.Drawing.Point(183, 5)
 		Me.Label41.Name = "Label41"
-		Me.Label41.Size = New Size(36, 13)
+		Me.Label41.Size = New System.Drawing.Size(36, 13)
 		Me.Label41.TabIndex = 24
 		Me.Label41.Text = "[kgm²]"
 		'
 		'Label40
 		'
 		Me.Label40.AutoSize = True
-		Me.Label40.Location = New Point(186, 111)
+		Me.Label40.Location = New System.Drawing.Point(186, 111)
 		Me.Label40.Name = "Label40"
-		Me.Label40.Size = New Size(30, 13)
+		Me.Label40.Size = New System.Drawing.Size(30, 13)
 		Me.Label40.TabIndex = 24
 		Me.Label40.Text = "[rpm]"
 		'
 		'Label5
 		'
 		Me.Label5.AutoSize = True
-		Me.Label5.Location = New Point(12, 5)
+		Me.Label5.Location = New System.Drawing.Point(12, 5)
 		Me.Label5.Name = "Label5"
-		Me.Label5.Size = New Size(102, 13)
+		Me.Label5.Size = New System.Drawing.Size(102, 13)
 		Me.Label5.TabIndex = 0
 		Me.Label5.Text = "Inertia incl. Flywheel"
 		'
 		'ButCancel
 		'
-		Me.ButCancel.Anchor = CType((AnchorStyles.Bottom Or AnchorStyles.Right), AnchorStyles)
-		Me.ButCancel.DialogResult = DialogResult.Cancel
-		Me.ButCancel.Location = New Point(898, 469)
+		Me.ButCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+		Me.ButCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel
+		Me.ButCancel.Location = New System.Drawing.Point(898, 469)
 		Me.ButCancel.Name = "ButCancel"
-		Me.ButCancel.Size = New Size(75, 23)
+		Me.ButCancel.Size = New System.Drawing.Size(75, 23)
 		Me.ButCancel.TabIndex = 13
 		Me.ButCancel.Text = "Cancel"
 		Me.ButCancel.UseVisualStyleBackColor = True
 		'
 		'ButOK
 		'
-		Me.ButOK.Anchor = CType((AnchorStyles.Bottom Or AnchorStyles.Right), AnchorStyles)
-		Me.ButOK.Location = New Point(817, 469)
+		Me.ButOK.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+		Me.ButOK.Location = New System.Drawing.Point(817, 469)
 		Me.ButOK.Name = "ButOK"
-		Me.ButOK.Size = New Size(75, 23)
+		Me.ButOK.Size = New System.Drawing.Size(75, 23)
 		Me.ButOK.TabIndex = 12
 		Me.ButOK.Text = "Save"
 		Me.ButOK.UseVisualStyleBackColor = True
 		'
 		'ToolStrip1
 		'
-		Me.ToolStrip1.GripStyle = ToolStripGripStyle.Hidden
-		Me.ToolStrip1.Items.AddRange(New ToolStripItem() {Me.ToolStripBtNew, Me.ToolStripBtOpen, Me.ToolStripBtSave, Me.ToolStripBtSaveAs, Me.ToolStripSeparator3, Me.ToolStripBtSendTo, Me.ToolStripSeparator1, Me.ToolStripButton1})
-		Me.ToolStrip1.Location = New Point(0, 0)
+		Me.ToolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden
+		Me.ToolStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripBtNew, Me.ToolStripBtOpen, Me.ToolStripBtSave, Me.ToolStripBtSaveAs, Me.ToolStripSeparator3, Me.ToolStripBtSendTo, Me.ToolStripSeparator1, Me.ToolStripButton1})
+		Me.ToolStrip1.Location = New System.Drawing.Point(0, 0)
 		Me.ToolStrip1.Name = "ToolStrip1"
-		Me.ToolStrip1.Size = New Size(985, 25)
+		Me.ToolStrip1.Size = New System.Drawing.Size(985, 25)
 		Me.ToolStrip1.TabIndex = 30
 		Me.ToolStrip1.Text = "ToolStrip1"
 		'
 		'ToolStripBtNew
 		'
-		Me.ToolStripBtNew.DisplayStyle = ToolStripItemDisplayStyle.Image
-		Me.ToolStripBtNew.Image = My.Resources.Resources.blue_document_icon
-		Me.ToolStripBtNew.ImageTransparentColor = Color.Magenta
+		Me.ToolStripBtNew.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image
+		Me.ToolStripBtNew.Image = Global.TUGraz.VECTO.My.Resources.Resources.blue_document_icon
+		Me.ToolStripBtNew.ImageTransparentColor = System.Drawing.Color.Magenta
 		Me.ToolStripBtNew.Name = "ToolStripBtNew"
-		Me.ToolStripBtNew.Size = New Size(23, 22)
+		Me.ToolStripBtNew.Size = New System.Drawing.Size(23, 22)
 		Me.ToolStripBtNew.Text = "ToolStripButton1"
 		Me.ToolStripBtNew.ToolTipText = "New"
 		'
 		'ToolStripBtOpen
 		'
-		Me.ToolStripBtOpen.DisplayStyle = ToolStripItemDisplayStyle.Image
-		Me.ToolStripBtOpen.Image = My.Resources.Resources.Open_icon
-		Me.ToolStripBtOpen.ImageTransparentColor = Color.Magenta
+		Me.ToolStripBtOpen.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image
+		Me.ToolStripBtOpen.Image = Global.TUGraz.VECTO.My.Resources.Resources.Open_icon
+		Me.ToolStripBtOpen.ImageTransparentColor = System.Drawing.Color.Magenta
 		Me.ToolStripBtOpen.Name = "ToolStripBtOpen"
-		Me.ToolStripBtOpen.Size = New Size(23, 22)
+		Me.ToolStripBtOpen.Size = New System.Drawing.Size(23, 22)
 		Me.ToolStripBtOpen.Text = "ToolStripButton1"
 		Me.ToolStripBtOpen.ToolTipText = "Open..."
 		'
 		'ToolStripBtSave
 		'
-		Me.ToolStripBtSave.DisplayStyle = ToolStripItemDisplayStyle.Image
-		Me.ToolStripBtSave.Image = My.Resources.Resources.Actions_document_save_icon
-		Me.ToolStripBtSave.ImageTransparentColor = Color.Magenta
+		Me.ToolStripBtSave.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image
+		Me.ToolStripBtSave.Image = Global.TUGraz.VECTO.My.Resources.Resources.Actions_document_save_icon
+		Me.ToolStripBtSave.ImageTransparentColor = System.Drawing.Color.Magenta
 		Me.ToolStripBtSave.Name = "ToolStripBtSave"
-		Me.ToolStripBtSave.Size = New Size(23, 22)
+		Me.ToolStripBtSave.Size = New System.Drawing.Size(23, 22)
 		Me.ToolStripBtSave.Text = "ToolStripButton1"
 		Me.ToolStripBtSave.ToolTipText = "Save"
 		'
 		'ToolStripBtSaveAs
 		'
-		Me.ToolStripBtSaveAs.DisplayStyle = ToolStripItemDisplayStyle.Image
-		Me.ToolStripBtSaveAs.Image = My.Resources.Resources.Actions_document_save_as_icon
-		Me.ToolStripBtSaveAs.ImageTransparentColor = Color.Magenta
+		Me.ToolStripBtSaveAs.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image
+		Me.ToolStripBtSaveAs.Image = Global.TUGraz.VECTO.My.Resources.Resources.Actions_document_save_as_icon
+		Me.ToolStripBtSaveAs.ImageTransparentColor = System.Drawing.Color.Magenta
 		Me.ToolStripBtSaveAs.Name = "ToolStripBtSaveAs"
-		Me.ToolStripBtSaveAs.Size = New Size(23, 22)
+		Me.ToolStripBtSaveAs.Size = New System.Drawing.Size(23, 22)
 		Me.ToolStripBtSaveAs.Text = "ToolStripButton1"
 		Me.ToolStripBtSaveAs.ToolTipText = "Save As..."
 		'
 		'ToolStripSeparator3
 		'
 		Me.ToolStripSeparator3.Name = "ToolStripSeparator3"
-		Me.ToolStripSeparator3.Size = New Size(6, 25)
+		Me.ToolStripSeparator3.Size = New System.Drawing.Size(6, 25)
 		'
 		'ToolStripBtSendTo
 		'
-		Me.ToolStripBtSendTo.DisplayStyle = ToolStripItemDisplayStyle.Image
-		Me.ToolStripBtSendTo.Image = My.Resources.Resources.export_icon
-		Me.ToolStripBtSendTo.ImageTransparentColor = Color.Magenta
+		Me.ToolStripBtSendTo.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image
+		Me.ToolStripBtSendTo.Image = Global.TUGraz.VECTO.My.Resources.Resources.export_icon
+		Me.ToolStripBtSendTo.ImageTransparentColor = System.Drawing.Color.Magenta
 		Me.ToolStripBtSendTo.Name = "ToolStripBtSendTo"
-		Me.ToolStripBtSendTo.Size = New Size(23, 22)
+		Me.ToolStripBtSendTo.Size = New System.Drawing.Size(23, 22)
 		Me.ToolStripBtSendTo.Text = "Send to Job Editor"
 		Me.ToolStripBtSendTo.ToolTipText = "Send to Job Editor"
 		'
 		'ToolStripSeparator1
 		'
 		Me.ToolStripSeparator1.Name = "ToolStripSeparator1"
-		Me.ToolStripSeparator1.Size = New Size(6, 25)
+		Me.ToolStripSeparator1.Size = New System.Drawing.Size(6, 25)
 		'
 		'ToolStripButton1
 		'
-		Me.ToolStripButton1.DisplayStyle = ToolStripItemDisplayStyle.Image
-		Me.ToolStripButton1.Image = My.Resources.Resources.Help_icon
-		Me.ToolStripButton1.ImageTransparentColor = Color.Magenta
+		Me.ToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image
+		Me.ToolStripButton1.Image = Global.TUGraz.VECTO.My.Resources.Resources.Help_icon
+		Me.ToolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta
 		Me.ToolStripButton1.Name = "ToolStripButton1"
-		Me.ToolStripButton1.Size = New Size(23, 22)
+		Me.ToolStripButton1.Size = New System.Drawing.Size(23, 22)
 		Me.ToolStripButton1.Text = "Help"
 		'
 		'StatusStrip1
 		'
-		Me.StatusStrip1.Items.AddRange(New ToolStripItem() {Me.LbStatus})
-		Me.StatusStrip1.Location = New Point(0, 495)
+		Me.StatusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.LbStatus})
+		Me.StatusStrip1.Location = New System.Drawing.Point(0, 495)
 		Me.StatusStrip1.Name = "StatusStrip1"
-		Me.StatusStrip1.Size = New Size(985, 22)
+		Me.StatusStrip1.Size = New System.Drawing.Size(985, 22)
 		Me.StatusStrip1.SizingGrip = False
 		Me.StatusStrip1.TabIndex = 37
 		Me.StatusStrip1.Text = "StatusStrip1"
@@ -256,110 +262,110 @@ Partial Class EngineForm
 		'LbStatus
 		'
 		Me.LbStatus.Name = "LbStatus"
-		Me.LbStatus.Size = New Size(39, 17)
+		Me.LbStatus.Size = New System.Drawing.Size(39, 17)
 		Me.LbStatus.Text = "Status"
 		'
 		'Label1
 		'
 		Me.Label1.AutoSize = True
-		Me.Label1.Location = New Point(186, 137)
+		Me.Label1.Location = New System.Drawing.Point(186, 137)
 		Me.Label1.Name = "Label1"
-		Me.Label1.Size = New Size(33, 13)
+		Me.Label1.Size = New System.Drawing.Size(33, 13)
 		Me.Label1.TabIndex = 24
 		Me.Label1.Text = "[ccm]"
 		'
 		'Label2
 		'
 		Me.Label2.AutoSize = True
-		Me.Label2.Location = New Point(46, 137)
+		Me.Label2.Location = New System.Drawing.Point(46, 137)
 		Me.Label2.Name = "Label2"
-		Me.Label2.Size = New Size(71, 13)
+		Me.Label2.Size = New System.Drawing.Size(71, 13)
 		Me.Label2.TabIndex = 13
 		Me.Label2.Text = "Displacement"
 		'
 		'TbDispl
 		'
-		Me.TbDispl.Location = New Point(123, 134)
+		Me.TbDispl.Location = New System.Drawing.Point(123, 134)
 		Me.TbDispl.Name = "TbDispl"
-		Me.TbDispl.Size = New Size(57, 20)
+		Me.TbDispl.Size = New System.Drawing.Size(57, 20)
 		Me.TbDispl.TabIndex = 2
 		'
 		'TbName
 		'
-		Me.TbName.Location = New Point(123, 82)
+		Me.TbName.Location = New System.Drawing.Point(123, 82)
 		Me.TbName.Name = "TbName"
-		Me.TbName.Size = New Size(370, 20)
+		Me.TbName.Size = New System.Drawing.Size(370, 20)
 		Me.TbName.TabIndex = 0
 		'
 		'Label3
 		'
 		Me.Label3.AutoSize = True
-		Me.Label3.Location = New Point(30, 85)
+		Me.Label3.Location = New System.Drawing.Point(30, 85)
 		Me.Label3.Name = "Label3"
-		Me.Label3.Size = New Size(87, 13)
+		Me.Label3.Size = New System.Drawing.Size(87, 13)
 		Me.Label3.TabIndex = 11
 		Me.Label3.Text = "Make and Model"
 		'
 		'TbMAP
 		'
-		Me.TbMAP.Location = New Point(12, 259)
+		Me.TbMAP.Location = New System.Drawing.Point(12, 259)
 		Me.TbMAP.Name = "TbMAP"
-		Me.TbMAP.Size = New Size(434, 20)
+		Me.TbMAP.Size = New System.Drawing.Size(434, 20)
 		Me.TbMAP.TabIndex = 5
 		'
 		'Label6
 		'
 		Me.Label6.AutoSize = True
-		Me.Label6.Location = New Point(12, 243)
+		Me.Label6.Location = New System.Drawing.Point(12, 243)
 		Me.Label6.Name = "Label6"
-		Me.Label6.Size = New Size(115, 13)
+		Me.Label6.Size = New System.Drawing.Size(115, 13)
 		Me.Label6.TabIndex = 38
 		Me.Label6.Text = "Fuel Consumption Map"
 		'
 		'BtMAP
 		'
-		Me.BtMAP.Image = My.Resources.Resources.Open_icon
-		Me.BtMAP.Location = New Point(446, 257)
+		Me.BtMAP.Image = Global.TUGraz.VECTO.My.Resources.Resources.Open_icon
+		Me.BtMAP.Location = New System.Drawing.Point(446, 257)
 		Me.BtMAP.Name = "BtMAP"
-		Me.BtMAP.Size = New Size(24, 24)
+		Me.BtMAP.Size = New System.Drawing.Size(24, 24)
 		Me.BtMAP.TabIndex = 6
 		Me.BtMAP.TabStop = False
 		Me.BtMAP.UseVisualStyleBackColor = True
 		'
 		'PictureBox1
 		'
-		Me.PictureBox1.BackColor = Color.White
-		Me.PictureBox1.Image = My.Resources.Resources.VECTO_ENG
-		Me.PictureBox1.Location = New Point(12, 28)
+		Me.PictureBox1.BackColor = System.Drawing.Color.White
+		Me.PictureBox1.Image = Global.TUGraz.VECTO.My.Resources.Resources.VECTO_ENG
+		Me.PictureBox1.Location = New System.Drawing.Point(12, 28)
 		Me.PictureBox1.Name = "PictureBox1"
-		Me.PictureBox1.Size = New Size(481, 40)
+		Me.PictureBox1.Size = New System.Drawing.Size(481, 40)
 		Me.PictureBox1.TabIndex = 39
 		Me.PictureBox1.TabStop = False
 		'
 		'CmOpenFile
 		'
-		Me.CmOpenFile.Items.AddRange(New ToolStripItem() {Me.OpenWithToolStripMenuItem, Me.ShowInFolderToolStripMenuItem})
+		Me.CmOpenFile.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.OpenWithToolStripMenuItem, Me.ShowInFolderToolStripMenuItem})
 		Me.CmOpenFile.Name = "CmOpenFile"
-		Me.CmOpenFile.Size = New Size(153, 48)
+		Me.CmOpenFile.Size = New System.Drawing.Size(153, 48)
 		'
 		'OpenWithToolStripMenuItem
 		'
 		Me.OpenWithToolStripMenuItem.Name = "OpenWithToolStripMenuItem"
-		Me.OpenWithToolStripMenuItem.Size = New Size(152, 22)
+		Me.OpenWithToolStripMenuItem.Size = New System.Drawing.Size(152, 22)
 		Me.OpenWithToolStripMenuItem.Text = "Open with ..."
 		'
 		'ShowInFolderToolStripMenuItem
 		'
 		Me.ShowInFolderToolStripMenuItem.Name = "ShowInFolderToolStripMenuItem"
-		Me.ShowInFolderToolStripMenuItem.Size = New Size(152, 22)
+		Me.ShowInFolderToolStripMenuItem.Size = New System.Drawing.Size(152, 22)
 		Me.ShowInFolderToolStripMenuItem.Text = "Show in Folder"
 		'
 		'BtMAPopen
 		'
-		Me.BtMAPopen.Image = My.Resources.Resources.application_export_icon_small
-		Me.BtMAPopen.Location = New Point(469, 257)
+		Me.BtMAPopen.Image = Global.TUGraz.VECTO.My.Resources.Resources.application_export_icon_small
+		Me.BtMAPopen.Location = New System.Drawing.Point(469, 257)
 		Me.BtMAPopen.Name = "BtMAPopen"
-		Me.BtMAPopen.Size = New Size(24, 24)
+		Me.BtMAPopen.Size = New System.Drawing.Size(24, 24)
 		Me.BtMAPopen.TabIndex = 7
 		Me.BtMAPopen.TabStop = False
 		Me.BtMAPopen.UseVisualStyleBackColor = True
@@ -369,147 +375,178 @@ Partial Class EngineForm
 		Me.PnInertia.Controls.Add(Me.Label5)
 		Me.PnInertia.Controls.Add(Me.Label41)
 		Me.PnInertia.Controls.Add(Me.TbInertia)
-		Me.PnInertia.Location = New Point(264, 106)
+		Me.PnInertia.Location = New System.Drawing.Point(264, 106)
 		Me.PnInertia.Name = "PnInertia"
-		Me.PnInertia.Size = New Size(229, 32)
+		Me.PnInertia.Size = New System.Drawing.Size(229, 32)
 		Me.PnInertia.TabIndex = 3
 		'
 		'GrWHTC
 		'
-		Me.GrWHTC.Controls.Add(Me.BtWHTCimport)
-		Me.GrWHTC.Controls.Add(Me.Label13)
-		Me.GrWHTC.Controls.Add(Me.TbWHTCmw)
-		Me.GrWHTC.Controls.Add(Me.TbWHTCrural)
-		Me.GrWHTC.Controls.Add(Me.TbWHTCurban)
-		Me.GrWHTC.Controls.Add(Me.Label8)
-		Me.GrWHTC.Controls.Add(Me.Label7)
-		Me.GrWHTC.Controls.Add(Me.Label4)
-		Me.GrWHTC.Enabled = False
-		Me.GrWHTC.Location = New Point(12, 300)
+		Me.GrWHTC.Controls.Add(Me.PnWhtcDeclaration)
+		Me.GrWHTC.Controls.Add(Me.PnWhtcEngineering)
+		Me.GrWHTC.Location = New System.Drawing.Point(12, 300)
 		Me.GrWHTC.Name = "GrWHTC"
-		Me.GrWHTC.Size = New Size(481, 91)
+		Me.GrWHTC.Size = New System.Drawing.Size(481, 120)
 		Me.GrWHTC.TabIndex = 9
 		Me.GrWHTC.TabStop = False
 		Me.GrWHTC.Text = "WHTC Correction"
 		'
+		'PnWhtcDeclaration
+		'
+		Me.PnWhtcDeclaration.Controls.Add(Me.BtWHTCimport)
+		Me.PnWhtcDeclaration.Controls.Add(Me.Label4)
+		Me.PnWhtcDeclaration.Controls.Add(Me.Label7)
+		Me.PnWhtcDeclaration.Controls.Add(Me.Label13)
+		Me.PnWhtcDeclaration.Controls.Add(Me.Label8)
+		Me.PnWhtcDeclaration.Controls.Add(Me.TbWHTCmw)
+		Me.PnWhtcDeclaration.Controls.Add(Me.TbWHTCurban)
+		Me.PnWhtcDeclaration.Controls.Add(Me.TbWHTCrural)
+		Me.PnWhtcDeclaration.Location = New System.Drawing.Point(3, 19)
+		Me.PnWhtcDeclaration.Name = "PnWhtcDeclaration"
+		Me.PnWhtcDeclaration.Size = New System.Drawing.Size(472, 60)
+		Me.PnWhtcDeclaration.TabIndex = 8
+		'
 		'BtWHTCimport
 		'
-		Me.BtWHTCimport.Location = New Point(305, 19)
+		Me.BtWHTCimport.Location = New System.Drawing.Point(299, 3)
 		Me.BtWHTCimport.Name = "BtWHTCimport"
-		Me.BtWHTCimport.Size = New Size(170, 28)
+		Me.BtWHTCimport.Size = New System.Drawing.Size(170, 28)
 		Me.BtWHTCimport.TabIndex = 4
 		Me.BtWHTCimport.Text = "Import from VECTO-Engine"
 		Me.BtWHTCimport.UseVisualStyleBackColor = True
 		'
+		'Label4
+		'
+		Me.Label4.AutoSize = True
+		Me.Label4.Location = New System.Drawing.Point(1, 37)
+		Me.Label4.Name = "Label4"
+		Me.Label4.Size = New System.Drawing.Size(36, 13)
+		Me.Label4.TabIndex = 0
+		Me.Label4.Text = "Urban"
+		'
+		'Label7
+		'
+		Me.Label7.AutoSize = True
+		Me.Label7.Location = New System.Drawing.Point(149, 37)
+		Me.Label7.Name = "Label7"
+		Me.Label7.Size = New System.Drawing.Size(32, 13)
+		Me.Label7.TabIndex = 0
+		Me.Label7.Text = "Rural"
+		'
 		'Label13
 		'
 		Me.Label13.AutoSize = True
-		Me.Label13.Location = New Point(6, 27)
+		Me.Label13.Location = New System.Drawing.Point(1, 5)
 		Me.Label13.Name = "Label13"
-		Me.Label13.Size = New Size(242, 13)
+		Me.Label13.Size = New System.Drawing.Size(242, 13)
 		Me.Label13.TabIndex = 3
 		Me.Label13.Text = "Correction Factors calculated with VECTO-Engine"
 		'
+		'Label8
+		'
+		Me.Label8.AutoSize = True
+		Me.Label8.Location = New System.Drawing.Point(284, 37)
+		Me.Label8.Name = "Label8"
+		Me.Label8.Size = New System.Drawing.Size(53, 13)
+		Me.Label8.TabIndex = 0
+		Me.Label8.Text = "Motorway"
+		'
 		'TbWHTCmw
 		'
-		Me.TbWHTCmw.Location = New Point(348, 56)
+		Me.TbWHTCmw.Location = New System.Drawing.Point(343, 34)
 		Me.TbWHTCmw.Name = "TbWHTCmw"
-		Me.TbWHTCmw.Size = New Size(57, 20)
+		Me.TbWHTCmw.Size = New System.Drawing.Size(57, 20)
 		Me.TbWHTCmw.TabIndex = 2
 		'
-		'TbWHTCrural
-		'
-		Me.TbWHTCrural.Location = New Point(192, 56)
-		Me.TbWHTCrural.Name = "TbWHTCrural"
-		Me.TbWHTCrural.Size = New Size(57, 20)
-		Me.TbWHTCrural.TabIndex = 1
-		'
 		'TbWHTCurban
 		'
-		Me.TbWHTCurban.Location = New Point(48, 56)
+		Me.TbWHTCurban.Location = New System.Drawing.Point(43, 34)
 		Me.TbWHTCurban.Name = "TbWHTCurban"
-		Me.TbWHTCurban.Size = New Size(57, 20)
+		Me.TbWHTCurban.Size = New System.Drawing.Size(57, 20)
 		Me.TbWHTCurban.TabIndex = 0
 		'
-		'Label8
+		'TbWHTCrural
 		'
-		Me.Label8.AutoSize = True
-		Me.Label8.Location = New Point(289, 59)
-		Me.Label8.Name = "Label8"
-		Me.Label8.Size = New Size(53, 13)
-		Me.Label8.TabIndex = 0
-		Me.Label8.Text = "Motorway"
+		Me.TbWHTCrural.Location = New System.Drawing.Point(187, 34)
+		Me.TbWHTCrural.Name = "TbWHTCrural"
+		Me.TbWHTCrural.Size = New System.Drawing.Size(57, 20)
+		Me.TbWHTCrural.TabIndex = 1
 		'
-		'Label7
+		'PnWhtcEngineering
 		'
-		Me.Label7.AutoSize = True
-		Me.Label7.Location = New Point(154, 59)
-		Me.Label7.Name = "Label7"
-		Me.Label7.Size = New Size(32, 13)
-		Me.Label7.TabIndex = 0
-		Me.Label7.Text = "Rural"
+		Me.PnWhtcEngineering.Controls.Add(Me.TbWHTCEngineering)
+		Me.PnWhtcEngineering.Controls.Add(Me.lblWhtcEngineering)
+		Me.PnWhtcEngineering.Location = New System.Drawing.Point(3, 85)
+		Me.PnWhtcEngineering.Name = "PnWhtcEngineering"
+		Me.PnWhtcEngineering.Size = New System.Drawing.Size(472, 30)
+		Me.PnWhtcEngineering.TabIndex = 7
 		'
-		'Label4
+		'TbWHTCEngineering
 		'
-		Me.Label4.AutoSize = True
-		Me.Label4.Location = New Point(6, 59)
-		Me.Label4.Name = "Label4"
-		Me.Label4.Size = New Size(36, 13)
-		Me.Label4.TabIndex = 0
-		Me.Label4.Text = "Urban"
+		Me.TbWHTCEngineering.Location = New System.Drawing.Point(187, 3)
+		Me.TbWHTCEngineering.Name = "TbWHTCEngineering"
+		Me.TbWHTCEngineering.Size = New System.Drawing.Size(57, 20)
+		Me.TbWHTCEngineering.TabIndex = 5
+		'
+		'lblWhtcEngineering
+		'
+		Me.lblWhtcEngineering.AutoSize = True
+		Me.lblWhtcEngineering.Location = New System.Drawing.Point(118, 6)
+		Me.lblWhtcEngineering.Name = "lblWhtcEngineering"
+		Me.lblWhtcEngineering.Size = New System.Drawing.Size(63, 13)
+		Me.lblWhtcEngineering.TabIndex = 6
+		Me.lblWhtcEngineering.Text = "Engineering"
 		'
 		'PicBox
 		'
-		Me.PicBox.BackColor = Color.LightGray
-		Me.PicBox.Location = New Point(499, 28)
+		Me.PicBox.BackColor = System.Drawing.Color.LightGray
+		Me.PicBox.Location = New System.Drawing.Point(499, 28)
 		Me.PicBox.Name = "PicBox"
-		Me.PicBox.Size = New Size(474, 425)
+		Me.PicBox.Size = New System.Drawing.Size(474, 425)
 		Me.PicBox.TabIndex = 40
 		Me.PicBox.TabStop = False
 		'
 		'TbFLD
 		'
-		Me.TbFLD.Location = New Point(12, 202)
+		Me.TbFLD.Location = New System.Drawing.Point(12, 202)
 		Me.TbFLD.Name = "TbFLD"
-		Me.TbFLD.Size = New Size(434, 20)
+		Me.TbFLD.Size = New System.Drawing.Size(434, 20)
 		Me.TbFLD.TabIndex = 5
 		'
 		'Label14
 		'
 		Me.Label14.AutoSize = True
-		Me.Label14.Location = New Point(12, 186)
+		Me.Label14.Location = New System.Drawing.Point(12, 186)
 		Me.Label14.Name = "Label14"
-		Me.Label14.Size = New Size(128, 13)
+		Me.Label14.Size = New System.Drawing.Size(128, 13)
 		Me.Label14.TabIndex = 38
 		Me.Label14.Text = "Full Load and Drag Curve"
 		'
 		'BtFLD
 		'
-		Me.BtFLD.Image = My.Resources.Resources.Open_icon
-		Me.BtFLD.Location = New Point(446, 200)
+		Me.BtFLD.Image = Global.TUGraz.VECTO.My.Resources.Resources.Open_icon
+		Me.BtFLD.Location = New System.Drawing.Point(446, 200)
 		Me.BtFLD.Name = "BtFLD"
-		Me.BtFLD.Size = New Size(24, 24)
+		Me.BtFLD.Size = New System.Drawing.Size(24, 24)
 		Me.BtFLD.TabIndex = 6
 		Me.BtFLD.TabStop = False
 		Me.BtFLD.UseVisualStyleBackColor = True
 		'
 		'BtFLDopen
 		'
-		Me.BtFLDopen.Image = My.Resources.Resources.application_export_icon_small
-		Me.BtFLDopen.Location = New Point(469, 200)
+		Me.BtFLDopen.Image = Global.TUGraz.VECTO.My.Resources.Resources.application_export_icon_small
+		Me.BtFLDopen.Location = New System.Drawing.Point(469, 200)
 		Me.BtFLDopen.Name = "BtFLDopen"
-		Me.BtFLDopen.Size = New Size(24, 24)
+		Me.BtFLDopen.Size = New System.Drawing.Size(24, 24)
 		Me.BtFLDopen.TabIndex = 7
 		Me.BtFLDopen.TabStop = False
 		Me.BtFLDopen.UseVisualStyleBackColor = True
 		'
-		'F_ENG
+		'EngineForm
 		'
 		Me.AcceptButton = Me.ButOK
-		Me.AutoScaleDimensions = New SizeF(6.0!, 13.0!)
-		Me.AutoScaleMode = AutoScaleMode.Font
 		Me.CancelButton = Me.ButCancel
-		Me.ClientSize = New Size(985, 517)
+		Me.ClientSize = New System.Drawing.Size(985, 517)
 		Me.Controls.Add(Me.PicBox)
 		Me.Controls.Add(Me.GrWHTC)
 		Me.Controls.Add(Me.PnInertia)
@@ -534,23 +571,25 @@ Partial Class EngineForm
 		Me.Controls.Add(Me.Label40)
 		Me.Controls.Add(Me.Label1)
 		Me.Controls.Add(Me.TbName)
-		Me.FormBorderStyle = FormBorderStyle.FixedSingle
-		Me.Icon = CType(resources.GetObject("$this.Icon"), Icon)
+		Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
 		Me.MaximizeBox = False
 		Me.Name = "EngineForm"
-		Me.StartPosition = FormStartPosition.CenterParent
+		Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
 		Me.Text = "F_ENG"
 		Me.ToolStrip1.ResumeLayout(False)
 		Me.ToolStrip1.PerformLayout()
 		Me.StatusStrip1.ResumeLayout(False)
 		Me.StatusStrip1.PerformLayout()
-		CType(Me.PictureBox1, ISupportInitialize).EndInit()
+		CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit()
 		Me.CmOpenFile.ResumeLayout(False)
 		Me.PnInertia.ResumeLayout(False)
 		Me.PnInertia.PerformLayout()
 		Me.GrWHTC.ResumeLayout(False)
-		Me.GrWHTC.PerformLayout()
-		CType(Me.PicBox, ISupportInitialize).EndInit()
+		Me.PnWhtcDeclaration.ResumeLayout(False)
+		Me.PnWhtcDeclaration.PerformLayout()
+		Me.PnWhtcEngineering.ResumeLayout(False)
+		Me.PnWhtcEngineering.PerformLayout()
+		CType(Me.PicBox, System.ComponentModel.ISupportInitialize).EndInit()
 		Me.ResumeLayout(False)
 		Me.PerformLayout()
 
@@ -602,4 +641,8 @@ Partial Class EngineForm
 	Friend WithEvents BtFLD As Button
 	Friend WithEvents BtFLDopen As Button
 	Friend WithEvents BtWHTCimport As Button
+	Friend WithEvents TbWHTCEngineering As System.Windows.Forms.TextBox
+	Friend WithEvents lblWhtcEngineering As System.Windows.Forms.Label
+	Friend WithEvents PnWhtcDeclaration As System.Windows.Forms.Panel
+	Friend WithEvents PnWhtcEngineering As System.Windows.Forms.Panel
 End Class
diff --git a/VECTO/GUI/EngineForm.vb b/VECTO/GUI/EngineForm.vb
index 84327c92f8..473c333d48 100644
--- a/VECTO/GUI/EngineForm.vb
+++ b/VECTO/GUI/EngineForm.vb
@@ -46,8 +46,8 @@ Public Class EngineForm
 	Private Sub EngineFormLoad(sender As Object, e As EventArgs) Handles Me.Load
 
 		PnInertia.Enabled = Not Cfg.DeclMode
-		GrWHTC.Enabled = Cfg.DeclMode
-
+		PnWhtcDeclaration.Enabled = Cfg.DeclMode
+		PnWhtcEngineering.Enabled = Not Cfg.DeclMode
 
 		_changed = False
 		NewEngine()
@@ -181,6 +181,7 @@ Public Class EngineForm
 		TbWHTCurban.Text = engine.WHTCUrban.ToGUIFormat()
 		TbWHTCrural.Text = engine.WHTCRural.ToGUIFormat()
 		TbWHTCmw.Text = engine.WHTCMotorway.ToGUIFormat()
+		TbWHTCEngineering.Text = engine.WHTCEngineering.ToGUIFormat()
 
 		DeclInit()
 
@@ -222,9 +223,9 @@ Public Class EngineForm
 		engine.PathMAP = TbMAP.Text
 
 
-		engine.WHTCurban = TbWHTCurban.Text.ToDouble()
-		engine.WHTCrural = TbWHTCrural.Text.ToDouble()
-		engine.WHTCmw = TbWHTCmw.Text.ToDouble()
+		engine.WHTCurbanInput = TbWHTCurban.Text.ToDouble()
+		engine.WHTCruralInput = TbWHTCrural.Text.ToDouble()
+		engine.WHTCmotorwayInput = TbWHTCmw.Text.ToDouble()
 
 
 		If Not engine.SaveFile Then
@@ -523,4 +524,12 @@ Public Class EngineForm
 			MsgBox("Failed to load file! " & ex.Message, MsgBoxStyle.Critical)
 		End Try
 	End Sub
+
+	Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TbWHTCEngineering.TextChanged
+
+	End Sub
+
+	Private Sub Label9_Click(sender As Object, e As EventArgs) Handles lblWhtcEngineering.Click
+
+	End Sub
 End Class
diff --git a/VECTO/Input Files/Engine.vb b/VECTO/Input Files/Engine.vb
index 4a948d7e72..090b168b99 100644
--- a/VECTO/Input Files/Engine.vb	
+++ b/VECTO/Input Files/Engine.vb	
@@ -9,16 +9,28 @@
 '
 ' See the LICENSE.txt for the specific language governing permissions and limitations.
 Imports System.Collections.Generic
+Imports System.ComponentModel.DataAnnotations
 Imports System.IO
+Imports System.Linq
 Imports Newtonsoft.Json.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.Reader.DataObjectAdapter
+Imports TUGraz.VectoCore.Models.Declaration
+Imports TUGraz.VectoCore.Models.SimulationComponent.Data
+Imports TUGraz.VectoCore.Utils
 
 ''' <summary>
 ''' Engine input file
 ''' </summary>
 ''' <remarks></remarks>
+<CustomValidation(GetType(Engine), "ValidateEngine")>
 Public Class Engine
+	Implements IEngineEngineeringInputData, IEngineDeclarationInputData
+
 	''' <summary>
 	''' Current format version
 	''' </summary>
@@ -84,19 +96,21 @@ Public Class Engine
 	''' WHTC Urban test results. Saved in input file. 
 	''' </summary>
 	''' <remarks></remarks>
-	Public WHTCurban As Double
+	Public WHTCurbanInput As Double
 
 	''' <summary>
 	''' WHTC Rural test results. Saved in input file. 
 	''' </summary>
 	''' <remarks></remarks>
-	Public WHTCrural As Double
+	Public WHTCruralInput As Double
 
 	''' <summary>
 	''' WHTC Motorway test results. Saved in input file. 
 	''' </summary>
 	''' <remarks></remarks>
-	Public WHTCmw As Double
+	Public WHTCmotorwayInput As Double
+
+	Public WHTCEngineeringInput As Double
 
 
 	Public SavedInDeclMode As Boolean
@@ -128,9 +142,9 @@ Public Class Engine
 		_fuelConsumptionMapPath.Clear()
 		_fullLoadCurvePath.Clear()
 
-		WHTCurban = 0
-		WHTCrural = 0
-		WHTCmw = 0
+		WHTCurbanInput = 0
+		WHTCruralInput = 0
+		WHTCmotorwayInput = 0
 
 		SavedInDeclMode = False
 	End Sub
@@ -141,6 +155,18 @@ Public Class Engine
 	''' <returns>True if successful.</returns>
 	''' <remarks></remarks>
 	Public Function SaveFile() As Boolean
+
+		Dim validationResults As IList(Of ValidationResult) =
+				Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering))
+
+		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("; ", messages), MsgBoxStyle.OkOnly,
+					"Failed to save gearbox")
+			Return False
+		End If
+
 		Dim json As New JSONParser
 
 		'Header
@@ -166,9 +192,9 @@ Public Class Engine
 
 		body.Add("FuelMap", _fuelConsumptionMapPath.PathOrDummy)
 
-		body.Add("WHTC-Urban", WHTCurban)
-		body.Add("WHTC-Rural", WHTCrural)
-		body.Add("WHTC-Motorway", WHTCmw)
+		body.Add("WHTC-Urban", WHTCurbanInput)
+		body.Add("WHTC-Rural", WHTCruralInput)
+		body.Add("WHTC-Motorway", WHTCmotorwayInput)
 
 		json.Content = JToken.FromObject(New Dictionary(Of String, Object) From {{"Header", header}, {"Body", body}})
 
@@ -229,6 +255,143 @@ Public Class Engine
 			_fuelConsumptionMapPath.Init(_myPath, value)
 		End Set
 	End Property
+
+
+	' ReSharper disable once UnusedMember.Global  -- used for Validation
+	Public Shared Function ValidateEngine(engine As Engine, validationContext As ValidationContext) As ValidationResult
+		Dim engineData As CombustionEngineData
+		Dim modeService As ExecutionModeServiceContainer = TryCast(validationContext.GetService(GetType(ExecutionMode)), 
+																	ExecutionModeServiceContainer)
+		Dim mode As ExecutionMode = If(modeService Is Nothing, ExecutionMode.Declaration, modeService.Mode)
+
+		Try
+			If mode = ExecutionMode.Declaration Then
+				Dim doa As DeclarationDataAdapter = New DeclarationDataAdapter()
+
+				engineData = doa.CreateEngineData(engine, GearboxType.AMT)
+			Else
+				Dim doa As EngineeringDataAdapter = New EngineeringDataAdapter()
+				engineData = doa.CreateEngineData(engine, Nothing)
+			End If
+
+			Dim result As IList(Of ValidationResult) =
+					engineData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering))
+
+			If Not result.Any() Then Return ValidationResult.Success
+
+			Return New ValidationResult("Engine Configuration is invalid. ", result.Select(Function(r) r.ErrorMessage).ToList())
+		Catch ex As Exception
+			Return New ValidationResult(ex.Message)
+		End Try
+	End Function
+
+#Region "IInputData"
+
+	Public ReadOnly Property SavedInDeclarationMode As Boolean Implements IComponentInputData.SavedInDeclarationMode
+		Get
+			Return Cfg.DeclMode
+		End Get
+	End Property
+
+	Public ReadOnly Property Vendor As String Implements IComponentInputData.Vendor
+		Get
+			Return "N.A." ' TODO: MQ 20160919
+		End Get
+	End Property
+
+	Public ReadOnly Property Creator As String Implements IComponentInputData.Creator
+		Get
+			Return Lic.LicString
+		End Get
+	End Property
+
+	Public ReadOnly Property [Date] As String Implements IComponentInputData.[Date]
+		Get
+			Return Now.ToUniversalTime().ToString("o")
+		End Get
+	End Property
+
+	Public ReadOnly Property TypeId As String Implements IComponentInputData.TypeId
+		Get
+			Return "N.A." ' Todo: MQ 20160919
+		End Get
+	End Property
+
+	Public ReadOnly Property DigestValue As String Implements IComponentInputData.DigestValue
+		Get
+			Return ""
+		End Get
+	End Property
+
+	Public ReadOnly Property IntegrityStatus As IntegrityStatus Implements IComponentInputData.IntegrityStatus
+		Get
+			Return IntegrityStatus.NotChecked
+		End Get
+	End Property
+
+	Public ReadOnly Property IComponentInputData_ModelName As String Implements IComponentInputData.ModelName
+		Get
+			Return ModelName
+		End Get
+	End Property
+
+	Public ReadOnly Property IEngineDeclarationInputData_Displacement As CubicMeter _
+		Implements IEngineDeclarationInputData.Displacement
+		Get
+			Return (Displacement / 1000.0 / 1000.0).SI(Of CubicMeter)()
+		End Get
+	End Property
+
+	Public ReadOnly Property IEngineDeclarationInputData_IdleSpeed As PerSecond _
+		Implements IEngineDeclarationInputData.IdleSpeed
+		Get
+			Return IdleSpeed.RPMtoRad()
+		End Get
+	End Property
+
+	Public ReadOnly Property WHTCMotorway As Double Implements IEngineDeclarationInputData.WHTCMotorway
+		Get
+			Return WHTCmotorwayInput
+		End Get
+	End Property
+
+	Public ReadOnly Property WHTCRural As Double Implements IEngineDeclarationInputData.WHTCRural
+		Get
+			Return WHTCruralInput
+		End Get
+	End Property
+
+	Public ReadOnly Property WHTCUrban As Double Implements IEngineDeclarationInputData.WHTCUrban
+		Get
+			Return WHTCurbanInput
+		End Get
+	End Property
+
+	Public ReadOnly Property FuelConsumptionMap As TableData Implements IEngineDeclarationInputData.FuelConsumptionMap
+		Get
+			Return VectoCSVFile.Read(_fuelConsumptionMapPath.OriginalPath)
+		End Get
+	End Property
+
+	Public ReadOnly Property FullLoadCurve As TableData Implements IEngineDeclarationInputData.FullLoadCurve
+		Get
+			Return VectoCSVFile.Read(_fullLoadCurvePath.OriginalPath)
+		End Get
+	End Property
+
+	Public ReadOnly Property Inertia As KilogramSquareMeter Implements IEngineEngineeringInputData.Inertia
+		Get
+			Return EngineInertia.SI(Of KilogramSquareMeter)()
+		End Get
+	End Property
+
+	Public ReadOnly Property WHTCEngineering As Double Implements IEngineEngineeringInputData.WHTCEngineering
+		Get
+			Return WHTCEngineeringInput
+		End Get
+	End Property
+
+#End Region
 End Class
 
 
diff --git a/VECTO/Input Files/Gearbox.vb b/VECTO/Input Files/Gearbox.vb
index 09900af9d8..a90115f9a9 100644
--- a/VECTO/Input Files/Gearbox.vb	
+++ b/VECTO/Input Files/Gearbox.vb	
@@ -67,7 +67,6 @@ Public Class Gearbox
 	Public TorqueConverterShiftPolygonFile As String
 
 
-	Public SavedInDeclMode As Boolean
 	Public UpshiftMinAcceleration As Double
 	Public DownshiftAfterUpshift As Double
 	Public UpshiftAfterDownshift As Double
@@ -105,14 +104,10 @@ Public Class Gearbox
 		_torqueConverterFile.Clear()
 
 		TorqueConverterInertia = 0
-
-		SavedInDeclMode = False
 	End Sub
 
 	Public Function SaveFile() As Boolean
 
-		SavedInDeclMode = Cfg.DeclMode
-
 		Dim validationResults As IList(Of ValidationResult) =
 				Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering))
 
@@ -139,7 +134,6 @@ Public Class Gearbox
 		Dim body As Dictionary(Of String, Object) = New Dictionary(Of String, Object)
 
 		body.Add("SavedInDeclMode", Cfg.DeclMode)
-		SavedInDeclMode = Cfg.DeclMode
 
 		body.Add("ModelName", ModelName)
 
diff --git a/VECTO/VECTO.vbproj b/VECTO/VECTO.vbproj
index bf3eebf583..4dd9d6f18e 100644
--- a/VECTO/VECTO.vbproj
+++ b/VECTO/VECTO.vbproj
@@ -256,7 +256,6 @@
     <Compile Include="GUI\VectoJobForm.vb">
       <SubType>Form</SubType>
     </Compile>
-    <Compile Include="CsvFile.vb" />
     <Compile Include="VECTO_Global.vb" />
     <Compile Include="VECTO_Types.vb" />
     <Compile Include="GUI\GUI_Subs.vb" />
-- 
GitLab